From 8e053c6747164c19a4d17a0863e1b12782b507bf Mon Sep 17 00:00:00 2001 From: Billy Lynch <1844673+wlynch@users.noreply.github.com> Date: Thu, 11 Jan 2024 13:36:09 -0500 Subject: [PATCH 01/41] Export f64ce7e6d3b76a94461057a23401451ea34dace0 Export: f64ce7e6d3b76a94461057a23401451ea34dace0 --- .chainguard/source.yaml | 17 - .github/chainguard/mono-readonly.sts.yaml | 10 - .github/chainguard/mono.sts.yaml | 12 - .github/workflows/test.yaml | 41 - .github/workflows/verify.yaml | 79 - .gitignore | 29 - .golangci.yml | 35 - CODEOWNERS | 1 + LICENSE | 201 - README.md | 52 +- auth/aws/e2e_test.go | 160 - auth/aws/generate.go | 62 - auth/aws/verify.go | 119 - auth/aws/verify_options.go | 83 - auth/context.go | 47 - auth/file.go | 62 - auth/login/html.go | 71 - auth/login/login.go | 89 - auth/login/login_test.go | 46 - auth/login/options.go | 181 - auth/login/options_test.go | 114 - auth/login/orgcheck.go | 43 - auth/login/orgcheck_test.go | 75 - auth/login/server.go | 110 - auth/login/server_test.go | 49 - auth/oidc.go | 159 - auth/token.go | 31 - auth/token/token.go | 181 - auth/token/token_test.go | 515 -- civil/civil.go | 332 -- civil/civil_test.go | 547 --- events/extensions.go | 43 - events/generator/generator.go | 32 - events/occurrence.go | 41 - events/receiver/receiver.go | 66 - events/registry/registry.go | 97 - events/webhook.go | 14 - go.mod | 76 - go.sum | 308 -- hack/tools.go | 17 - hack/update-codegen.sh | 19 - hack/update-deps.sh | 14 - hack/verify-golangci-lint.sh | 50 - proto/annotations/auth.pb.go | 342 -- proto/annotations/auth.proto | 49 - proto/annotations/doc.go | 11 - proto/annotations/events.pb.go | 258 - proto/annotations/events.proto | 29 - proto/capabilities/capabilities.go | 189 - proto/capabilities/capabilities.pb.go | 669 --- proto/capabilities/capabilities.proto | 139 - proto/capabilities/capabilities_test.go | 139 - proto/capabilities/doc.go | 9 - proto/capabilities/roles.go | 162 - proto/google/api/annotations.proto | 31 - proto/google/api/field_behavior.proto | 90 - proto/google/api/http.proto | 375 -- proto/google/api/httpbody.proto | 81 - proto/google/api/resource.proto | 239 - .../advisory/v1/advisory.platform.pb.go | 1936 -------- .../advisory/v1/advisory.platform.pb.gw.go | 251 - .../advisory/v1/advisory.platform.proto | 233 - .../advisory/v1/advisory.platform_grpc.pb.go | 146 - proto/platform/advisory/v1/clients.go | 81 - proto/platform/advisory/v1/doc.go | 10 - proto/platform/advisory/v1/test/advisory.go | 70 - proto/platform/auth/v1/auth.platform.event.go | 21 - proto/platform/auth/v1/auth.platform.pb.go | 505 -- proto/platform/auth/v1/auth.platform.pb.gw.go | 232 - proto/platform/auth/v1/auth.platform.proto | 114 - .../platform/auth/v1/auth.platform_grpc.pb.go | 147 - proto/platform/auth/v1/doc.go | 10 - proto/platform/auth/v1/test/mock_auth.go | 75 - proto/platform/clients.go | 195 - proto/platform/common/v1/doc.go | 9 - proto/platform/common/v1/uidp.platform.pb.go | 184 - proto/platform/common/v1/uidp.platform.proto | 19 - proto/platform/events/v1/doc.go | 12 - .../events/v1/identities.platform.event.go | 16 - .../events/v1/identities.platform.pb.go | 416 -- .../events/v1/identities.platform.pb.gw.go | 247 - .../events/v1/identities.platform.proto | 97 - .../events/v1/identities.platform_grpc.pb.go | 146 - .../events/v1/subscriptions.platform.event.go | 45 - .../events/v1/subscriptions.platform.pb.go | 510 -- .../events/v1/subscriptions.platform.pb.gw.go | 384 -- .../events/v1/subscriptions.platform.proto | 92 - .../v1/subscriptions.platform_grpc.pb.go | 184 - .../v1/account_associations.platform.event.go | 41 - .../v1/account_associations.platform.pb.go | 1120 ----- .../v1/account_associations.platform.pb.gw.go | 618 --- .../v1/account_associations.platform.proto | 192 - .../account_associations.platform_grpc.pb.go | 259 - proto/platform/iam/v1/clients.go | 156 - proto/platform/iam/v1/doc.go | 17 - proto/platform/iam/v1/group.platform.event.go | 38 - proto/platform/iam/v1/group.platform.pb.go | 570 --- proto/platform/iam/v1/group.platform.pb.gw.go | 501 -- proto/platform/iam/v1/group.platform.proto | 127 - .../platform/iam/v1/group.platform_grpc.pb.go | 221 - .../iam/v1/group_invites.platform.event.go | 48 - .../iam/v1/group_invites.platform.pb.go | 981 ---- .../iam/v1/group_invites.platform.pb.gw.go | 467 -- .../iam/v1/group_invites.platform.proto | 174 - .../iam/v1/group_invites.platform_grpc.pb.go | 231 - .../iam/v1/identity.platform.event.go | 40 - proto/platform/iam/v1/identity.platform.pb.go | 1357 ------ .../iam/v1/identity.platform.pb.gw.go | 586 --- proto/platform/iam/v1/identity.platform.proto | 251 - .../iam/v1/identity.platform_grpc.pb.go | 258 - .../v1/identity_providers.platform.event.go | 68 - .../iam/v1/identity_providers.platform.pb.go | 693 --- .../v1/identity_providers.platform.pb.gw.go | 501 -- .../iam/v1/identity_providers.platform.proto | 149 - .../v1/identity_providers.platform_grpc.pb.go | 221 - proto/platform/iam/v1/role.platform.event.go | 23 - proto/platform/iam/v1/role.platform.pb.go | 540 --- proto/platform/iam/v1/role.platform.pb.gw.go | 501 -- proto/platform/iam/v1/role.platform.proto | 100 - .../platform/iam/v1/role.platform_grpc.pb.go | 221 - .../iam/v1/role_binding.platform.event.go | 38 - .../iam/v1/role_binding.platform.pb.go | 705 --- .../iam/v1/role_binding.platform.pb.gw.go | 501 -- .../iam/v1/role_binding.platform.proto | 134 - .../iam/v1/role_binding.platform_grpc.pb.go | 221 - .../iam/v1/test/mock_account_accociations.go | 103 - proto/platform/iam/v1/test/mock_client.go | 67 - .../iam/v1/test/mock_deprecatedidentities.go | 42 - proto/platform/iam/v1/test/mock_groups.go | 105 - proto/platform/iam/v1/test/mock_identities.go | 102 - .../iam/v1/test/mock_identity_providers.go | 86 - proto/platform/iam/v1/test/mock_invites.go | 86 - .../iam/v1/test/mock_role_bindings.go | 86 - proto/platform/iam/v1/test/mock_roles.go | 86 - .../iam/v1/test/mock_subscriptions.go | 86 - proto/platform/oidc/v1/clients.go | 101 - proto/platform/oidc/v1/doc.go | 10 - proto/platform/oidc/v1/oidc.platform.pb.go | 459 -- proto/platform/oidc/v1/oidc.platform.pb.gw.go | 336 -- proto/platform/oidc/v1/oidc.platform.proto | 64 - .../platform/oidc/v1/oidc.platform_grpc.pb.go | 146 - proto/platform/oidc/v1/test/mock_client.go | 26 - proto/platform/oidc/v1/test/mock_sts.go | 53 - proto/platform/ping/v1/clients.go | 80 - proto/platform/ping/v1/doc.go | 10 - proto/platform/ping/v1/ping.platform.pb.go | 216 - proto/platform/ping/v1/ping.platform.pb.gw.go | 148 - proto/platform/ping/v1/ping.platform.proto | 29 - .../platform/ping/v1/ping.platform_grpc.pb.go | 109 - proto/platform/ping/v1/test/ping.go | 52 - proto/platform/registry/v1/clients.go | 81 - proto/platform/registry/v1/doc.go | 10 - .../registry/v1/registry.platform.event.go | 21 - .../registry/v1/registry.platform.pb.go | 4240 ----------------- .../registry/v1/registry.platform.pb.gw.go | 1659 ------- .../registry/v1/registry.platform.proto | 572 --- .../registry/v1/registry.platform_grpc.pb.go | 592 --- proto/platform/registry/v1/test/registry.go | 263 - .../tenant/v1/attestation.platform.pb.go | 389 -- .../tenant/v1/attestation.platform.pb.gw.go | 164 - .../tenant/v1/attestation.platform.proto | 63 - .../tenant/v1/attestation.platform_grpc.pb.go | 109 - proto/platform/tenant/v1/clients.go | 97 - proto/platform/tenant/v1/doc.go | 13 - proto/platform/tenant/v1/sbom.platform.pb.go | 1058 ---- .../platform/tenant/v1/sbom.platform.pb.gw.go | 164 - proto/platform/tenant/v1/sbom.platform.proto | 131 - .../tenant/v1/sbom.platform_grpc.pb.go | 109 - .../tenant/v1/signature.platform.pb.go | 731 --- .../tenant/v1/signature.platform.proto | 110 - .../tenant/v1/signature.platform_grpc.pb.go | 109 - .../tenant/v1/test/mock_attestations.go | 38 - proto/platform/tenant/v1/test/mock_client.go | 41 - proto/platform/tenant/v1/test/mock_sboms.go | 38 - .../tenant/v1/test/mock_signatures.go | 38 - proto/platform/tenant/v1/test/mock_vuln.go | 38 - proto/platform/tenant/v1/vuln.platform.pb.go | 1138 ----- .../platform/tenant/v1/vuln.platform.pb.gw.go | 166 - proto/platform/tenant/v1/vuln.platform.proto | 162 - .../tenant/v1/vuln.platform_grpc.pb.go | 109 - proto/platform/test/mock_clients.go | 86 - proto/platform/test/mock_server.go | 45 - sts/sts.go | 314 -- sts/sts_test.go | 424 -- sts/tokensource.go | 44 - uidp/ancestry.go | 75 - uidp/ancestry_test.go | 177 - uidp/doc.go | 8 - uidp/uid.go | 65 - uidp/uid_test.go | 20 - validation/aws_account.go | 30 - validation/aws_account_test.go | 32 - validation/bundles.go | 30 - validation/bundles_test.go | 37 - validation/name.go | 28 - validation/name_test.go | 34 - validation/readme.go | 66 - validation/readme_test.go | 75 - validation/tag.go | 29 - validation/tag_test.go | 40 - 200 files changed, 21 insertions(+), 43177 deletions(-) delete mode 100644 .chainguard/source.yaml delete mode 100644 .github/chainguard/mono-readonly.sts.yaml delete mode 100644 .github/chainguard/mono.sts.yaml delete mode 100644 .github/workflows/test.yaml delete mode 100644 .github/workflows/verify.yaml delete mode 100644 .gitignore delete mode 100644 .golangci.yml create mode 100644 CODEOWNERS delete mode 100644 LICENSE delete mode 100644 auth/aws/e2e_test.go delete mode 100644 auth/aws/generate.go delete mode 100644 auth/aws/verify.go delete mode 100644 auth/aws/verify_options.go delete mode 100644 auth/context.go delete mode 100644 auth/file.go delete mode 100644 auth/login/html.go delete mode 100644 auth/login/login.go delete mode 100644 auth/login/login_test.go delete mode 100644 auth/login/options.go delete mode 100644 auth/login/options_test.go delete mode 100644 auth/login/orgcheck.go delete mode 100644 auth/login/orgcheck_test.go delete mode 100644 auth/login/server.go delete mode 100644 auth/login/server_test.go delete mode 100644 auth/oidc.go delete mode 100644 auth/token.go delete mode 100644 auth/token/token.go delete mode 100644 auth/token/token_test.go delete mode 100644 civil/civil.go delete mode 100644 civil/civil_test.go delete mode 100644 events/extensions.go delete mode 100644 events/generator/generator.go delete mode 100644 events/occurrence.go delete mode 100644 events/receiver/receiver.go delete mode 100644 events/registry/registry.go delete mode 100644 events/webhook.go delete mode 100644 go.mod delete mode 100644 go.sum delete mode 100644 hack/tools.go delete mode 100755 hack/update-codegen.sh delete mode 100755 hack/update-deps.sh delete mode 100755 hack/verify-golangci-lint.sh delete mode 100644 proto/annotations/auth.pb.go delete mode 100644 proto/annotations/auth.proto delete mode 100644 proto/annotations/doc.go delete mode 100644 proto/annotations/events.pb.go delete mode 100644 proto/annotations/events.proto delete mode 100644 proto/capabilities/capabilities.go delete mode 100644 proto/capabilities/capabilities.pb.go delete mode 100644 proto/capabilities/capabilities.proto delete mode 100644 proto/capabilities/capabilities_test.go delete mode 100644 proto/capabilities/doc.go delete mode 100644 proto/capabilities/roles.go delete mode 100644 proto/google/api/annotations.proto delete mode 100644 proto/google/api/field_behavior.proto delete mode 100644 proto/google/api/http.proto delete mode 100644 proto/google/api/httpbody.proto delete mode 100644 proto/google/api/resource.proto delete mode 100644 proto/platform/advisory/v1/advisory.platform.pb.go delete mode 100644 proto/platform/advisory/v1/advisory.platform.pb.gw.go delete mode 100644 proto/platform/advisory/v1/advisory.platform.proto delete mode 100644 proto/platform/advisory/v1/advisory.platform_grpc.pb.go delete mode 100644 proto/platform/advisory/v1/clients.go delete mode 100644 proto/platform/advisory/v1/doc.go delete mode 100644 proto/platform/advisory/v1/test/advisory.go delete mode 100644 proto/platform/auth/v1/auth.platform.event.go delete mode 100644 proto/platform/auth/v1/auth.platform.pb.go delete mode 100644 proto/platform/auth/v1/auth.platform.pb.gw.go delete mode 100644 proto/platform/auth/v1/auth.platform.proto delete mode 100644 proto/platform/auth/v1/auth.platform_grpc.pb.go delete mode 100644 proto/platform/auth/v1/doc.go delete mode 100644 proto/platform/auth/v1/test/mock_auth.go delete mode 100644 proto/platform/clients.go delete mode 100644 proto/platform/common/v1/doc.go delete mode 100644 proto/platform/common/v1/uidp.platform.pb.go delete mode 100644 proto/platform/common/v1/uidp.platform.proto delete mode 100644 proto/platform/events/v1/doc.go delete mode 100644 proto/platform/events/v1/identities.platform.event.go delete mode 100644 proto/platform/events/v1/identities.platform.pb.go delete mode 100644 proto/platform/events/v1/identities.platform.pb.gw.go delete mode 100644 proto/platform/events/v1/identities.platform.proto delete mode 100644 proto/platform/events/v1/identities.platform_grpc.pb.go delete mode 100644 proto/platform/events/v1/subscriptions.platform.event.go delete mode 100644 proto/platform/events/v1/subscriptions.platform.pb.go delete mode 100644 proto/platform/events/v1/subscriptions.platform.pb.gw.go delete mode 100644 proto/platform/events/v1/subscriptions.platform.proto delete mode 100644 proto/platform/events/v1/subscriptions.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/account_associations.platform.event.go delete mode 100644 proto/platform/iam/v1/account_associations.platform.pb.go delete mode 100644 proto/platform/iam/v1/account_associations.platform.pb.gw.go delete mode 100644 proto/platform/iam/v1/account_associations.platform.proto delete mode 100644 proto/platform/iam/v1/account_associations.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/clients.go delete mode 100644 proto/platform/iam/v1/doc.go delete mode 100644 proto/platform/iam/v1/group.platform.event.go delete mode 100644 proto/platform/iam/v1/group.platform.pb.go delete mode 100644 proto/platform/iam/v1/group.platform.pb.gw.go delete mode 100644 proto/platform/iam/v1/group.platform.proto delete mode 100644 proto/platform/iam/v1/group.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/group_invites.platform.event.go delete mode 100644 proto/platform/iam/v1/group_invites.platform.pb.go delete mode 100644 proto/platform/iam/v1/group_invites.platform.pb.gw.go delete mode 100644 proto/platform/iam/v1/group_invites.platform.proto delete mode 100644 proto/platform/iam/v1/group_invites.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/identity.platform.event.go delete mode 100644 proto/platform/iam/v1/identity.platform.pb.go delete mode 100644 proto/platform/iam/v1/identity.platform.pb.gw.go delete mode 100644 proto/platform/iam/v1/identity.platform.proto delete mode 100644 proto/platform/iam/v1/identity.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/identity_providers.platform.event.go delete mode 100644 proto/platform/iam/v1/identity_providers.platform.pb.go delete mode 100644 proto/platform/iam/v1/identity_providers.platform.pb.gw.go delete mode 100644 proto/platform/iam/v1/identity_providers.platform.proto delete mode 100644 proto/platform/iam/v1/identity_providers.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/role.platform.event.go delete mode 100644 proto/platform/iam/v1/role.platform.pb.go delete mode 100644 proto/platform/iam/v1/role.platform.pb.gw.go delete mode 100644 proto/platform/iam/v1/role.platform.proto delete mode 100644 proto/platform/iam/v1/role.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/role_binding.platform.event.go delete mode 100644 proto/platform/iam/v1/role_binding.platform.pb.go delete mode 100644 proto/platform/iam/v1/role_binding.platform.pb.gw.go delete mode 100644 proto/platform/iam/v1/role_binding.platform.proto delete mode 100644 proto/platform/iam/v1/role_binding.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/test/mock_account_accociations.go delete mode 100644 proto/platform/iam/v1/test/mock_client.go delete mode 100644 proto/platform/iam/v1/test/mock_deprecatedidentities.go delete mode 100644 proto/platform/iam/v1/test/mock_groups.go delete mode 100644 proto/platform/iam/v1/test/mock_identities.go delete mode 100644 proto/platform/iam/v1/test/mock_identity_providers.go delete mode 100644 proto/platform/iam/v1/test/mock_invites.go delete mode 100644 proto/platform/iam/v1/test/mock_role_bindings.go delete mode 100644 proto/platform/iam/v1/test/mock_roles.go delete mode 100644 proto/platform/iam/v1/test/mock_subscriptions.go delete mode 100644 proto/platform/oidc/v1/clients.go delete mode 100644 proto/platform/oidc/v1/doc.go delete mode 100644 proto/platform/oidc/v1/oidc.platform.pb.go delete mode 100644 proto/platform/oidc/v1/oidc.platform.pb.gw.go delete mode 100644 proto/platform/oidc/v1/oidc.platform.proto delete mode 100644 proto/platform/oidc/v1/oidc.platform_grpc.pb.go delete mode 100644 proto/platform/oidc/v1/test/mock_client.go delete mode 100644 proto/platform/oidc/v1/test/mock_sts.go delete mode 100644 proto/platform/ping/v1/clients.go delete mode 100644 proto/platform/ping/v1/doc.go delete mode 100644 proto/platform/ping/v1/ping.platform.pb.go delete mode 100644 proto/platform/ping/v1/ping.platform.pb.gw.go delete mode 100644 proto/platform/ping/v1/ping.platform.proto delete mode 100644 proto/platform/ping/v1/ping.platform_grpc.pb.go delete mode 100644 proto/platform/ping/v1/test/ping.go delete mode 100644 proto/platform/registry/v1/clients.go delete mode 100644 proto/platform/registry/v1/doc.go delete mode 100644 proto/platform/registry/v1/registry.platform.event.go delete mode 100644 proto/platform/registry/v1/registry.platform.pb.go delete mode 100644 proto/platform/registry/v1/registry.platform.pb.gw.go delete mode 100644 proto/platform/registry/v1/registry.platform.proto delete mode 100644 proto/platform/registry/v1/registry.platform_grpc.pb.go delete mode 100644 proto/platform/registry/v1/test/registry.go delete mode 100644 proto/platform/tenant/v1/attestation.platform.pb.go delete mode 100644 proto/platform/tenant/v1/attestation.platform.pb.gw.go delete mode 100644 proto/platform/tenant/v1/attestation.platform.proto delete mode 100644 proto/platform/tenant/v1/attestation.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/clients.go delete mode 100644 proto/platform/tenant/v1/doc.go delete mode 100644 proto/platform/tenant/v1/sbom.platform.pb.go delete mode 100644 proto/platform/tenant/v1/sbom.platform.pb.gw.go delete mode 100644 proto/platform/tenant/v1/sbom.platform.proto delete mode 100644 proto/platform/tenant/v1/sbom.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/signature.platform.pb.go delete mode 100644 proto/platform/tenant/v1/signature.platform.proto delete mode 100644 proto/platform/tenant/v1/signature.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/test/mock_attestations.go delete mode 100644 proto/platform/tenant/v1/test/mock_client.go delete mode 100644 proto/platform/tenant/v1/test/mock_sboms.go delete mode 100644 proto/platform/tenant/v1/test/mock_signatures.go delete mode 100644 proto/platform/tenant/v1/test/mock_vuln.go delete mode 100644 proto/platform/tenant/v1/vuln.platform.pb.go delete mode 100644 proto/platform/tenant/v1/vuln.platform.pb.gw.go delete mode 100644 proto/platform/tenant/v1/vuln.platform.proto delete mode 100644 proto/platform/tenant/v1/vuln.platform_grpc.pb.go delete mode 100644 proto/platform/test/mock_clients.go delete mode 100644 proto/platform/test/mock_server.go delete mode 100644 sts/sts.go delete mode 100644 sts/sts_test.go delete mode 100644 sts/tokensource.go delete mode 100644 uidp/ancestry.go delete mode 100644 uidp/ancestry_test.go delete mode 100644 uidp/doc.go delete mode 100644 uidp/uid.go delete mode 100644 uidp/uid_test.go delete mode 100644 validation/aws_account.go delete mode 100644 validation/aws_account_test.go delete mode 100644 validation/bundles.go delete mode 100644 validation/bundles_test.go delete mode 100644 validation/name.go delete mode 100644 validation/name_test.go delete mode 100644 validation/readme.go delete mode 100644 validation/readme_test.go delete mode 100644 validation/tag.go delete mode 100644 validation/tag_test.go diff --git a/.chainguard/source.yaml b/.chainguard/source.yaml deleted file mode 100644 index 8a710d38..00000000 --- a/.chainguard/source.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright 2023 Chainguard, Inc. -# SPDX-License-Identifier: Apache-2.0 - -spec: - authorities: - - keyless: - url: https://fulcio.sigstore.dev - identities: - - subjectRegExp: .+@chainguard.dev$ - issuer: https://accounts.google.com - - subject: https://github.com/chainguard-dev/mono/.github/workflows/export-sdk.yaml@refs/heads/main - issuer: https://token.actions.githubusercontent.com - ctlog: - url: https://rekor.sigstore.dev - - key: - # Allow commits signed by Github (merge commits) - kms: https://github.com/web-flow.gpg diff --git a/.github/chainguard/mono-readonly.sts.yaml b/.github/chainguard/mono-readonly.sts.yaml deleted file mode 100644 index e3702ffb..00000000 --- a/.github/chainguard/mono-readonly.sts.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright 2024 Chainguard, Inc. -# SPDX-License-Identifier: Apache-2.0 - -issuer: https://token.actions.githubusercontent.com -subject_pattern: repo:chainguard-dev/mono:pull_request -claim_pattern: - job_workflow_ref: chainguard-dev/mono/.github/workflows/export-sdk.yaml@.* - -permissions: - contents: read diff --git a/.github/chainguard/mono.sts.yaml b/.github/chainguard/mono.sts.yaml deleted file mode 100644 index a2efdb5a..00000000 --- a/.github/chainguard/mono.sts.yaml +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright 2024 Chainguard, Inc. -# SPDX-License-Identifier: Apache-2.0 - -issuer: https://token.actions.githubusercontent.com -subject_pattern: repo:chainguard-dev/mono:ref:refs/heads/main -claim_pattern: - job_workflow_ref: chainguard-dev/mono/.github/workflows/(export|publish)-sdk.yaml@refs/heads/main - -permissions: - contents: write - pull_requests: write - workflows: write diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml deleted file mode 100644 index 115918e2..00000000 --- a/.github/workflows/test.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2023 Chainguard, Inc. -# SPDX-License-Identifier: Apache-2.0 - -name: Test - -on: - pull_request: - branches: [ 'main', 'release-*' ] - push: - branches: [ 'main', 'release-*' ] - -jobs: - - test: - runs-on: ubuntu-latest - steps: - - name: Check out code onto GOPATH - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - - # https://github.com/mvdan/github-actions-golang#how-do-i-set-up-caching-between-builds - - uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 - with: - # In order: - # * Module download cache - # * Build cache (Linux) - path: | - ~/go/pkg/mod - ~/.cache/go-build - key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go- - - - name: Set up Go - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 - with: - go-version-file: './go.mod' - check-latest: true - - - run: | - # Exclude running unit tests against third_party repos. - go test -race $(go list ./... | grep -v third_party/) diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml deleted file mode 100644 index 33939348..00000000 --- a/.github/workflows/verify.yaml +++ /dev/null @@ -1,79 +0,0 @@ -# Copyright 2023 Chainguard, Inc. -# SPDX-License-Identifier: Apache-2.0 - -name: Verify - -on: - pull_request: - branches: [ 'main', 'release-*' ] - push: - branches: [ 'main', 'release-*' ] - -jobs: - - verify: - name: Verify Codegen - runs-on: ubuntu-latest - - env: - GOPATH: ${{ github.workspace }} - - steps: - - name: Check out code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - with: - path: ./src/github.com/${{ github.repository }} - fetch-depth: 0 - - - name: Set up Go - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 - with: - go-version-file: './src/github.com/${{ github.repository }}/go.mod' - check-latest: true - - # https://github.com/mvdan/github-actions-golang#how-do-i-set-up-caching-between-builds - - uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 - with: - # In order: - # * Module download cache - # * Build cache (Linux) - path: | - ~/go/pkg/mod - ~/.cache/go-build - key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go- - - #- name: Install protoc - # uses: arduino/setup-protoc@v1.1.2 - # arduino/setup-protoc@v1.1.2 can't install latest releases of protoc due - # to protoc changing their version naming scheme: - # https://github.com/arduino/setup-protoc/issues/33 - - name: Install Protoc - run: | - cd "$(mktemp -d)" - wget -O protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v26.1/protoc-26.1-linux-x86_64.zip - unzip protoc.zip -d . - chmod +x ./bin/protoc - echo "$(pwd)/bin" >> "$GITHUB_PATH" - - - name: Install Dependencies - run: | - cd $(mktemp -d) - go install github.com/google/go-licenses@ceb292363ec84358c9a276ef23aa0de893e59b84 - go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.33.0 - go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 - go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.10.0 - go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.10.0 - - - name: Update Codegen - shell: bash - working-directory: ./src/github.com/${{ github.repository }} - run: | - ./hack/update-codegen.sh - - - name: Verify - uses: chainguard-dev/actions/nodiff@main - with: - path: ./src/github.com/${{ github.repository }} - fixup-command: "./hack/update-codegen.sh" diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1590cdc0..00000000 --- a/.gitignore +++ /dev/null @@ -1,29 +0,0 @@ -# Vim swap files -*.swp - -**/third_party/VENDOR-LICENSE/LICENSE -**/third_party/VENDOR-LICENSE/vendor/golang.org/x/ -**/third_party/VENDOR-LICENSE/golang.org/x/ - -**/.idea/ - -**/.vscode/ - -**/.DS_Store - -# Generated by CI -/**/gha-creds*.json - -# Generated openapi schemas -/proto/**/*.swagger.json -/proto/**/*.swagger.yaml - -# SQLite -*.db - -# Local dev -**/.ko.yaml.orig -**/.ko.yaml.tmp - -# Ignore generated credentials from google-github-actions/auth -gha-creds-*.json diff --git a/.golangci.yml b/.golangci.yml deleted file mode 100644 index 41279d73..00000000 --- a/.golangci.yml +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright 2023 Chainguard, Inc. -# SPDX-License-Identifier: Apache-2.0 - -linters: - enable: - - asciicheck - - unused - - errcheck - - errorlint - - gofmt - - goimports - - gosec - - gocritic - - importas - - prealloc - - revive - - misspell - - stylecheck - - tparallel - - unconvert - - unparam - - whitespace -output: - uniq-by-line: false -issues: - exclude-rules: - - path: _test\.go - linters: - - errcheck - - gosec - max-issues-per-linter: 0 - max-same-issues: 0 -run: - issues-exit-code: 1 - timeout: 10m diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 00000000..4066d21e --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1 @@ +@cmdpdx diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 261eeb9e..00000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/README.md b/README.md index e650c9b0..fe1318c4 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,22 @@ # SDK -This repository contains the public [gRPC](https://grpc.io/) protos supporting -our services and packages to ease integration with the Chainguard platform. - -## Updating `*.proto` files - -After updating a `*.proto` you'll need to update the corresponding generated go -code. - -```shell -./hack/update-codegen.sh -``` - -### Prerequisites - -Install `protoc`: https://grpc.io/docs/protoc-installation/ - -Example for MacOS: - -```shell -brew install protobuf -``` - -We currently require `protoc` v5.26.1. - -Install `protoc` codegen dependencies: - -```shell -go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.33.0 -go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 -go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.10.0 -go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.10.0 -``` +### The SDK has moved to a public repo at [github.com/chainguard-dev/sdk](https://github.com/chainguard-dev/sdk)! + +For guidance working with the SDK, post questions to +[#eng-squad-experience](https://chainguard-dev.slack.com/archives/C03JLFATBST) in Slack. + +## Recommended workflow for making SDK changes + +The workflow will be different since changes to SDK are not immediately available in `mono`. This recommended workflow +is still a work in progress and subject to change as we discover new pain points in the process. + +1. Determine if your change is appropriate for `chainguard.dev/sdk` (i.e. is it okay to be public), or would +`mono/api-internal` be a better fit? +2. Make changes to your local copy of `chainguard.dev/sdk`. If you are developing something in `mono` that relies +on those changes, it may be helpful to add a temporary `replace chainguard.dev/sdk => [path to your local SDK repo]` +in the relevant `go.mod` for faster iteration. +3. Push `chainguard.dev/sdk` changes and open a PR in [github.com/chainguard-dev/sdk](https://github.com/chainguard-dev/sdk) +and post in [#eng-squad-experience](https://chainguard-dev.slack.com/archives/C03JLFATBST). +or tag relevant reviewers. +4. Cut a new release, update necessary `go.mod` of dependencies. The release cadence for SDK is still TBD, at the moment +ad hoc releases as necessary are fine. If you're unsure, ask in [#eng-squad-experience](https://chainguard-dev.slack.com/archives/C03JLFATBST). diff --git a/auth/aws/e2e_test.go b/auth/aws/e2e_test.go deleted file mode 100644 index 98482b01..00000000 --- a/auth/aws/e2e_test.go +++ /dev/null @@ -1,160 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package aws - -import ( - "context" - "fmt" - "net/http" - "net/http/httptest" - "testing" - "time" - - "github.com/aws/aws-sdk-go-v2/aws" - "github.com/google/go-cmp/cmp" - "k8s.io/apimachinery/pkg/util/sets" -) - -func epochTime() time.Time { - return time.Unix(0, 0) -} - -func TestGenerateToken(t *testing.T) { - timeNow = epochTime - - var creds = aws.Credentials{AccessKeyID: "AKID", SecretAccessKey: "SECRET", SessionToken: "SESSION"} - validToken, err := GenerateToken(context.Background(), creds, "aud", "identity") - if err != nil { - t.Fatal(err) - } - - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - switch r.URL.Path { - case "/good": - fmt.Fprintf(w, `{ - "GetCallerIdentityResponse": { - "GetCallerIdentityResult": { - "UserId": "userid", - "Account": "123456789012", - "Arn": "arn" - } - } - }`) - case "/reject": - w.WriteHeader(http.StatusBadRequest) - fmt.Fprintf(w, "go away") - } - })) - - tests := map[string]struct { - audience string - identity string - timestamp time.Time - stsURL string - token string - wantErr error - }{ - "happy path": { - audience: "aud", - identity: "identity", - stsURL: ts.URL + "/good", - timestamp: time.Unix(0, 0), - token: validToken, - wantErr: nil, - }, - "audience mismatch": { - audience: "bad audience", - identity: "identity", - stsURL: ts.URL + "/good", - timestamp: time.Unix(0, 0), - token: validToken, - wantErr: ErrInvalidAudience, - }, - "identity mismatch": { - audience: "aud", - identity: "identity is wrong", - stsURL: ts.URL + "/good", - timestamp: time.Unix(0, 0), - token: validToken, - wantErr: ErrInvalidIdentity, - }, - "expired token": { - audience: "aud", - identity: "identity", - stsURL: ts.URL + "/good", - timestamp: time.Unix(0, 0).Add(16 * time.Minute), - token: validToken, - wantErr: ErrTokenExpired, - }, - "no identity set": { - audience: "aud", - identity: "", - stsURL: ts.URL + "/good", - timestamp: time.Unix(0, 0), - token: validToken, - wantErr: ErrInvalidVerificationConfiguration, - }, - "bad token encoding": { - audience: "aud", - identity: "identity", - stsURL: ts.URL + "/good", - timestamp: time.Unix(0, 0), - token: "no-base64-encoded", - wantErr: ErrInvalidEncoding, - }, - "base64 encoded but not even an http request": { - audience: "aud", - identity: "identity", - stsURL: ts.URL + "/good", - timestamp: time.Unix(0, 0), - token: "bm90IGFuIGh0dHAgcmVxdWVzdA==", // echo -n "not an http request" | base64 - wantErr: ErrInvalidEncoding, - }, - "bad sts URL": { - audience: "aud", - identity: "identity", - timestamp: time.Unix(0, 0), - token: validToken, - stsURL: "\t\n", - wantErr: ErrInvalidVerificationConfiguration, - }, - "rejected token": { - audience: "aud", - identity: "identity", - timestamp: time.Unix(0, 0), - token: validToken, - stsURL: ts.URL + "/reject", - wantErr: ErrTokenRejected, - }, - } - - for name, test := range tests { - t.Run(name, func(t *testing.T) { - gotClaims, err := VerifyToken( - context.Background(), - test.token, - WithAudience(sets.New(test.audience)), - WithIdentity(test.identity), - withSTSURL(test.stsURL), - withTimestamp(test.timestamp)) - if err != test.wantErr { //nolint:errorlint - t.Errorf("received error %T and wanted %T", err, test.wantErr) - } - if err != nil { - return - } - - expectedClaims := &VerifiedClaims{ - UserID: "userid", - Account: "123456789012", - Arn: "arn", - } - if diff := cmp.Diff(gotClaims, expectedClaims); diff != "" { - t.Errorf("got different claims than expected diff = %s", diff) - } - }) - } -} diff --git a/auth/aws/generate.go b/auth/aws/generate.go deleted file mode 100644 index 5bfcef03..00000000 --- a/auth/aws/generate.go +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package aws - -import ( - "bytes" - "context" - "encoding/base64" - "fmt" - "net/http" - "time" - - "github.com/aws/aws-sdk-go-v2/aws" - v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4" -) - -var timeNow = time.Now - -const ( - audHeader = `Chainguard-Audience` - idHeader = `Chainguard-Identity` -) - -// GenerateToken creates token using the supplied AWS credentials that can prove the user's AWS identity. Audience and identity are -// the Chainguard STS url (e.g https://issuer.enforce.dev) and the UID of the Chainguard assumable identity to assume via STS. -func GenerateToken(ctx context.Context, creds aws.Credentials, audience, identity string) (string, error) { - req, err := http.NewRequest("POST", "https://sts.amazonaws.com", nil) - if err != nil { - return "", fmt.Errorf("failed to create new HTTP request: %w", err) - } - - req.URL.Path = "/" - req.URL.RawQuery = "Action=GetCallerIdentity&Version=2011-06-15" - req.Header.Add("Accept", "application/json") - req.Header.Add(audHeader, audience) - req.Header.Add(idHeader, identity) - - const ( - // hashInit is the sha256 hash of an empty buffer, hex encoded. - hashInit = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855` //nolint:gosec - - // STS service details for signing - svc = `sts` - region = `us-east-1` - ) - - err = v4.NewSigner().SignHTTP(ctx, creds, req, hashInit, svc, region, timeNow()) - if err != nil { - return "", fmt.Errorf("failed to sign GetCallerIdentity request with AWS credentials: %w", err) - } - - var b bytes.Buffer - err = req.Write(&b) - if err != nil { - return "", fmt.Errorf("failed to serialize GetCallerIdentity HTTP request to buffer: %w", err) - } - - return base64.URLEncoding.EncodeToString(b.Bytes()), nil -} diff --git a/auth/aws/verify.go b/auth/aws/verify.go deleted file mode 100644 index 2abca3ee..00000000 --- a/auth/aws/verify.go +++ /dev/null @@ -1,119 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package aws - -import ( - "bufio" - "bytes" - "context" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "io" - "net/http" - "net/url" - "time" - - "github.com/chainguard-dev/clog" -) - -var ( - ErrTokenRejected = errors.New("token rejected by AWS STS endpoint") - ErrTokenExpired = errors.New("token expired") - ErrInvalidAudience = errors.New("audience header in token does not match expected audience") - ErrInvalidIdentity = errors.New("identity header in token does not match expected identity") - ErrInvalidEncoding = errors.New("invalid token encoding") - ErrInvalidVerificationConfiguration = errors.New("verifcation was incorrectly configured") -) - -type VerifiedClaims struct { - UserID string `json:"UserId"` - Arn string `json:"Arn"` - Account string `json:"Account"` -} - -func VerifyToken(ctx context.Context, token string, opts ...VerifyOption) (*VerifiedClaims, error) { - conf, err := newConfigFromOptions(opts...) - if err != nil { - clog.FromContext(ctx).Errorf("invalid verification configuration: %v", err) - return nil, ErrInvalidVerificationConfiguration - } - - var req *http.Request - { - decoded, err := base64.URLEncoding.DecodeString(token) - if err != nil { - return nil, ErrInvalidEncoding - } - r := bufio.NewReader(bytes.NewReader(decoded)) - req, err = http.ReadRequest(r) - if err != nil { - return nil, ErrInvalidEncoding - } - - // NB: If RequestURI is set on an outbound http.Request the client will error. This field - // is set because of how we serial and then parse the request so we need to unset it here. - req.RequestURI = "" - req.URL, err = url.Parse(conf.stsURL) - if err != nil { - clog.FromContext(ctx).With("sts_url", conf.stsURL).Errorf("invalid verification configuration. invalid sts url: %v", err) - return nil, ErrInvalidVerificationConfiguration - } - } - - if got := req.Header.Get(audHeader); !conf.allowedAudiences.Has(got) { - clog.FromContext(ctx).With("received", got).Warn("verification failed with audience mismatch") - return nil, ErrInvalidAudience - } - if got := req.Header.Get(idHeader); got != conf.identity { - clog.FromContext(ctx).With("wanted", conf.identity, "received", got).Warn("verification failed with identity mismatch") - return nil, ErrInvalidIdentity - } - - timestamp, err := time.Parse("20060102T150405Z", req.Header.Get("X-Amz-Date")) - if err != nil { - clog.FromContext(ctx).Warnf("verification failed because of a poorly formatted x-amz-date header format: %v", err) - return nil, ErrInvalidEncoding - } - expiry, now := timestamp.Add(15*time.Minute), conf.time() - if expiry.Before(now) { - // According to AWS docs - // > The signed portions (using AWS Signatures) of requests are valid within 15 minutes of the timestamp in the request. - // If the signature timestamp is already older than 15 minutes the token is expired and we reject it. - // c.f https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html - clog.FromContext(ctx).Error("verification failed because of expired token") - return nil, ErrTokenExpired - } - - resp, err := http.DefaultClient.Do(req.WithContext(ctx)) - if err != nil { - clog.FromContext(ctx).Errorf("verification failed because of failure to make AWS STS request: %v", err) - return nil, fmt.Errorf("failed to reach AWS STS endpoint: %w", err) - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - body, err := io.ReadAll(resp.Body) - if err != nil { - return nil, fmt.Errorf("failed to read response body from AWS STS endpoint: %w", err) - } - clog.FromContext(ctx).With("response_code", resp.StatusCode, "response", string(body)).Error("verification failed because it was rejected by AWS STS endpoint") - return nil, ErrTokenRejected - } - - var response struct { - GetCallerIdentityResponse struct { - GetCallerIdentityResult VerifiedClaims - } - } - if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { - clog.FromContext(ctx).Errorf("verification failed because json parsing err in response: %v", err) - return nil, fmt.Errorf("failed to parse json from AWS STS response %w", err) - } - - return &response.GetCallerIdentityResponse.GetCallerIdentityResult, nil -} diff --git a/auth/aws/verify_options.go b/auth/aws/verify_options.go deleted file mode 100644 index 2646bafd..00000000 --- a/auth/aws/verify_options.go +++ /dev/null @@ -1,83 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package aws - -import ( - "errors" - "time" - - "k8s.io/apimachinery/pkg/util/sets" -) - -type verifyConf struct { - allowedAudiences sets.Set[string] - identity string - - time func() time.Time - stsURL string -} - -func newDefaultConfig() *verifyConf { - return &verifyConf{ - allowedAudiences: sets.New("https://issuer.enforce.dev"), - stsURL: "https://sts.amazonaws.com/?Action=GetCallerIdentity&Version=2011-06-15", - time: time.Now, - } -} - -func newConfigFromOptions(opts ...VerifyOption) (*verifyConf, error) { - conf := newDefaultConfig() - for _, o := range opts { - o(conf) - } - if err := conf.valid(); err != nil { - return nil, err - } - return conf, nil -} - -func (c *verifyConf) valid() error { - if c.identity == "" { - return errors.New("must specify assume identity to verify") - } - if c.allowedAudiences.Len() == 0 { - return errors.New("must specify audience to verify") - } - if c.stsURL == "" { - return errors.New("must specify AWS STS endpoint url") - } - return nil -} - -type VerifyOption func(*verifyConf) - -func WithAudience(aud sets.Set[string]) VerifyOption { - return func(c *verifyConf) { - c.allowedAudiences = aud - } -} - -func WithIdentity(id string) VerifyOption { - return func(c *verifyConf) { - c.identity = id - } -} - -// Unexported testing options - -func withSTSURL(url string) VerifyOption { - return func(c *verifyConf) { - c.stsURL = url - } -} - -func withTimestamp(t time.Time) VerifyOption { - return func(c *verifyConf) { - c.time = func() time.Time { - return t - } - } -} diff --git a/auth/context.go b/auth/context.go deleted file mode 100644 index c5d909ee..00000000 --- a/auth/context.go +++ /dev/null @@ -1,47 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package auth - -import ( - "context" - - "google.golang.org/grpc/credentials" -) - -type contextAuth struct { - secure bool -} - -// The key to associate token with context. -type tokenKey struct{} - -var _ credentials.PerRPCCredentials = (*contextAuth)(nil) - -// GetRequestMetadata implements credentials.PerRPCCredentials -func (ta *contextAuth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { //nolint: revive - return map[string]string{ - "Authorization": GetToken(ctx), - }, nil -} - -// RequireTransportSecurity implements credentials.PerRPCCredentials -func (ta *contextAuth) RequireTransportSecurity() bool { - return ta.secure -} - -// WithToken associates the token with the returned context. -func WithToken(ctx context.Context, authz string) context.Context { - return context.WithValue(ctx, tokenKey{}, authz) -} - -// GetToken fetches the token from the context. -func GetToken(ctx context.Context) string { - v := ctx.Value(tokenKey{}) - if v == nil { - return "" - } - return v.(string) -} diff --git a/auth/file.go b/auth/file.go deleted file mode 100644 index bfa848dc..00000000 --- a/auth/file.go +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package auth - -import ( - "context" - "os" - "sync" - "time" - - "github.com/chainguard-dev/clog" - "google.golang.org/grpc/credentials" -) - -type fileAuth struct { - file string - secure bool - - m sync.Mutex - lastUpdated time.Time - cache []byte -} - -var _ credentials.PerRPCCredentials = (*fileAuth)(nil) - -// GetRequestMetadata implements credentials.PerRPCCredentials -func (fa *fileAuth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { //nolint: revive - fa.m.Lock() - defer fa.m.Unlock() - - // According to https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ - // The kubelet proactively rotates the token if it is older than 80% of - // its total TTL, or if the token is older than 24 hours. - // We use the minimum lifetime (10m) so the nearest a token should get to - // expiration before it is refreshed is 2 minutes. Use 1 minute to give - // us wiggle room, but we should have 2 minutes to validate the token. - if time.Since(fa.lastUpdated) < time.Minute { - clog.FromContext(ctx).Infof("Using cached token, last refreshed %v", fa.lastUpdated) - return map[string]string{ - "Authorization": string(fa.cache), - }, nil - } - - b, err := os.ReadFile(fa.file) - if err != nil { - return nil, err - } - fa.cache = b - fa.lastUpdated = time.Now() - clog.FromContext(ctx).Info("Using fresh token.") - return map[string]string{ - "Authorization": string(b), - }, nil -} - -// RequireTransportSecurity implements credentials.PerRPCCredentials -func (fa *fileAuth) RequireTransportSecurity() bool { - return fa.secure -} diff --git a/auth/login/html.go b/auth/login/html.go deleted file mode 100644 index 0659f5dc..00000000 --- a/auth/login/html.go +++ /dev/null @@ -1,71 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package login - -var ( - HTMLAuthSuccessful = ` - - - Chainguard Authentication - - - - - - - - - - -
-
- - authentication successful! -
-
- You may now close - this page or visit: - this page. -
- -
- - -` -) diff --git a/auth/login/login.go b/auth/login/login.go deleted file mode 100644 index 67411409..00000000 --- a/auth/login/login.go +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package login implements client login functionality shared between various -// clients -package login - -import ( - "context" - "fmt" - "net/url" - "os" - "strings" - - "github.com/pkg/browser" -) - -// OpenBrowserError wraps the error returned from browser.OpenURL, -// since this can take a few different forms depending on the OS. -type OpenBrowserError struct { - err error -} - -func (e *OpenBrowserError) Error() string { return "failed to open browser: " + e.err.Error() } -func (e *OpenBrowserError) Unwrap() error { return e.err } - -func Login(ctx context.Context, opts ...Option) (token string, refreshToken string, err error) { - conf, err := newConfigFromOptions(opts...) - if err != nil { - return "", "", err - } - - // Start new token server on a random available localhost port - s, err := newServer(ctx) - if err != nil { - return "", "", err - } - defer s.Close() - - params := make(url.Values) - params.Set("exit", "redirect") - params.Set("redirect", s.URL()) - if conf.IDP != "" { - params.Set("idp_id", conf.IDP) - } - if conf.OrgName != "" { - // NB: we reuse the idp_id query param for verified organization SSO - params.Set("idp_id", conf.OrgName) - } - if conf.InviteCode != "" { - params.Set("invite", conf.InviteCode) - } - if conf.ClientID != "" { - params.Set("client_id", conf.ClientID) - } - if conf.Auth0Connection != "" { - params.Set("connection", conf.Auth0Connection) - } - if conf.SkipRegistration { - params.Set("skip_registration", "true") - } - if conf.Identity != "" { - params.Set("identity", conf.Identity) - } - if len(conf.Audience) > 0 { - params.Set("audience", strings.Join(conf.Audience, ",")) - } - if conf.IncludeUpstreamToken { - params.Set("include_upstream_token", "true") - } - if conf.CreateRefreshToken { - params.Set("create_refresh_token", "true") - } - u := fmt.Sprintf("%s/oauth?%s", conf.Issuer, params.Encode()) - fmt.Fprintf(os.Stderr, "Opening browser to %s\n", u) - err = browser.OpenURL(u) - if err != nil { - return "", "", &OpenBrowserError{err} - } - - token, err = s.Token() - if err != nil { - return "", "", err - } - refreshToken = s.RefreshToken() - return token, refreshToken, nil -} diff --git a/auth/login/login_test.go b/auth/login/login_test.go deleted file mode 100644 index 2a4b92f3..00000000 --- a/auth/login/login_test.go +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 2024 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package login - -import ( - "errors" - "testing" -) - -func TestOpenBrowserErrorAs(t *testing.T) { - tests := map[string]struct { - err error - want bool - }{ - "nil": { - err: nil, - want: false, - }, - "success": { - err: &OpenBrowserError{ - errors.New("unit test"), - }, - want: true, - }, - "failure": { - err: errors.New("unit test"), - want: false, - }, - } - - for name, test := range tests { - t.Run(name, func(t *testing.T) { - var want *OpenBrowserError - got := errors.As(test.err, &want) - if got != test.want { - t.Errorf("As() expected %t, got %t", test.want, got) - } - if got { - t.Log(want.Error()) - } - }) - } -} diff --git a/auth/login/options.go b/auth/login/options.go deleted file mode 100644 index 843e96df..00000000 --- a/auth/login/options.go +++ /dev/null @@ -1,181 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package login - -import ( - "errors" - "fmt" - - "chainguard.dev/sdk/uidp" -) - -type config struct { - // Audience is the intended audience for the token, if different than what is - // configured for the oauth handler. - Audience []string - - // URL of Chainguard Enforce OIDC Issuer. Defaults to https://issuer.enforce.dev - Issuer string - - // Identity is the exact UIDP of an assumable identity to authenticate as. - Identity string - - // UIDP of specific customer identity provider to log in with - IDP string - - // OrgName is the name of an organization with custom identity provider configured to use for authentication - OrgName string - - // Optional invite code to consume on login - InviteCode string - - // ClientID is the ID of the oauth2 provider - ClientID string - - // Auth0Connection is the connection parameter sent to Auth0 - // to preselect the social connection. - // - // See docs for details: https://auth0.com/docs/api/authentication#social - Auth0Connection string - - // SkipRegistration tells the issuer not to attempt to register - // if the account is not found. - SkipRegistration bool - - // IncludeUpstreamToken tells the issuer to include the encrypted upstream token - // in the Chainguard token - IncludeUpstreamToken bool - - // CreateRefreshToken tells the issuer to create a refresh token - CreateRefreshToken bool -} - -const defaultIssuer = `https://issuer.enforce.dev` - -func newDefaultConfig() *config { - return &config{ - Issuer: defaultIssuer, - } -} - -func newConfigFromOptions(opts ...Option) (*config, error) { - conf := newDefaultConfig() - for _, o := range opts { - o(conf) - } - if err := conf.valid(); err != nil { - return nil, err - } - return conf, nil -} - -func (c *config) valid() error { - if c.ClientID != "" && (c.IDP != "" || c.OrgName != "") { - return errors.New("must specify one of client id or custom identity provider") - } - if c.IDP != "" && c.OrgName != "" { - return errors.New("must specify one of identity provider id or organization name") - } - if c.ClientID == "" && c.IDP == "" && c.OrgName == "" { - return errors.New("must select one of client id, custom identity provider and organization name") - } - - switch { - case c.IDP != "": - if !uidp.Valid(c.IDP) { - return errors.New("invalid ID for identity provider") - } - if c.Auth0Connection != "" { - return errors.New("identity provider ID and Auth0 connection are mutually exclusive") - } - return nil - - case c.OrgName != "": - if c.Auth0Connection != "" { - return errors.New("organization name and Auth0 connection are mutually exclusive") - } - - verified, err := orgCheck(c.OrgName, c.Issuer) - if err != nil { - return fmt.Errorf("error checking if organization is verified: %w", err) - } - if !verified { - return errors.New("organization is not verified must use identity provider ID to log in") - } - - return nil - - default: - return nil - } -} - -type Option func(opt *config) - -func WithAudience(aud []string) Option { - return func(c *config) { - c.Audience = aud - } -} - -func WithClientID(id string) Option { - return func(c *config) { - c.ClientID = id - } -} -func WithIssuer(issuer string) Option { - return func(c *config) { - c.Issuer = issuer - } -} - -func WithIdentity(identity string) Option { - return func(c *config) { - c.Identity = identity - } -} - -func WithIdentityProvider(idp string) Option { - return func(c *config) { - c.IDP = idp - } -} - -func WithOrgName(org string) Option { - return func(c *config) { - c.OrgName = org - } -} - -func WithInviteCode(inviteCode string) Option { - return func(c *config) { - c.InviteCode = inviteCode - } -} - -func WithAuth0Connection(conn string) Option { - return func(c *config) { - c.Auth0Connection = conn - } -} - -func WithSkipRegistration() Option { - return func(c *config) { - c.SkipRegistration = true - } -} - -func WithIncludeUpstreamToken() Option { - return func(c *config) { - c.IncludeUpstreamToken = true - } -} - -func WithCreateRefreshToken() Option { - return func(c *config) { - c.CreateRefreshToken = true - } -} diff --git a/auth/login/options_test.go b/auth/login/options_test.go deleted file mode 100644 index 63c4671c..00000000 --- a/auth/login/options_test.go +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package login - -import ( - "net/http/httptest" - "testing" - - "chainguard.dev/sdk/uidp" - "github.com/google/go-cmp/cmp" -) - -func TestConfFromOptions(t *testing.T) { - id := uidp.NewUID().String() - - testIssuer := httptest.NewServer(expectedBehavior("chainguard.dev")) - - tests := map[string]struct { - Options []Option - WantConfig *config - WantErr bool - }{ - "Happy path": { - Options: []Option{ - WithIssuer("https://example.com"), - WithIdentityProvider(id), - WithInviteCode("foo"), - }, - WantConfig: &config{ - Issuer: "https://example.com", - IDP: id, - InviteCode: "foo", - }, - }, - "Bad IDP ID": { - Options: []Option{ - WithIssuer("https://example.com"), - WithIdentityProvider("imnotanidp"), - }, - WantErr: true, - }, - "Org name": { - Options: []Option{ - WithIssuer(testIssuer.URL), - WithOrgName("chainguard.dev"), - }, - WantConfig: &config{ - Issuer: testIssuer.URL, - OrgName: "chainguard.dev", - }, - }, - "Cannot specify both identity provider and org name": { - Options: []Option{ - WithOrgName("chainguard.dev"), - WithIdentityProvider("foo"), - }, - WantErr: true, - }, - "Cannot specify both client id and org name": { - Options: []Option{ - WithOrgName("chainguard.dev"), - WithClientID("auth0"), - }, - WantErr: true, - }, - "No issuer defaults to prod issuer": { - Options: []Option{ - WithIdentityProvider(id), - }, - WantConfig: &config{ - Issuer: defaultIssuer, - IDP: id, - }, - }, - "No idp ID or client ID set errors": { - Options: nil, - WantErr: true, - }, - "IDP and ClientID both set errors": { - Options: []Option{ - WithIdentityProvider(id), - WithClientID("client_id"), - }, - WantErr: true, - }, - "IDP and Auth0Connection both set errors": { - Options: []Option{ - WithIdentityProvider(id), - WithAuth0Connection("github"), - }, - WantErr: true, - }, - } - - for test, data := range tests { - t.Run(test, func(t *testing.T) { - gotConfig, err := newConfigFromOptions(data.Options...) - if err != nil && !data.WantErr { - t.Errorf("got unexpected error %#v", err) - return - } else if err == nil && data.WantErr { - t.Error("expected error and got none") - return - } - - if diff := cmp.Diff(gotConfig, data.WantConfig); diff != "" { - t.Errorf("diff in expected config = %s", diff) - } - }) - } -} diff --git a/auth/login/orgcheck.go b/auth/login/orgcheck.go deleted file mode 100644 index 86f67286..00000000 --- a/auth/login/orgcheck.go +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package login - -import ( - "encoding/json" - "net/http" - "net/url" -) - -func orgCheck(name string, issuer string) (verified bool, err error) { - var endpoint string - { - u, err := url.Parse(issuer) - if err != nil { - return false, err - } - u.Path = `/orgcheck` - - query := make(url.Values, 1) - query.Add("name", name) - u.RawQuery = query.Encode() - - endpoint = u.String() - } - - //#nosec G107 HTTP request with variable input not a risk here. The result - // is from a public endpoint and only used as a convenience to fail early on - // misconfigured organizations - resp, err := http.Get(endpoint) - if err != nil { - return false, err - } - - err = json.NewDecoder(resp.Body).Decode(&verified) - if err != nil { - return false, err - } - return verified, nil -} diff --git a/auth/login/orgcheck_test.go b/auth/login/orgcheck_test.go deleted file mode 100644 index e56e684a..00000000 --- a/auth/login/orgcheck_test.go +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package login - -import ( - "fmt" - "net/http" - "net/http/httptest" - "testing" -) - -func expectedBehavior(verifiedOrg string) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - if r.URL.Path != "/orgcheck" { - w.WriteHeader(http.StatusNotFound) - return - } - - name := r.URL.Query().Get("name") - if name == "" { - w.WriteHeader(http.StatusBadRequest) - fmt.Fprintf(w, "name query param required") - return - } - fmt.Fprint(w, name == verifiedOrg) - } -} - -func brokenIssuer(w http.ResponseWriter, _ *http.Request) { - w.WriteHeader(http.StatusInternalServerError) -} - -func TestOrgCheck(t *testing.T) { - tests := map[string]struct { - org string - handler http.HandlerFunc - want bool - wantErr bool - }{ - "verified": { - org: "example.com", - handler: expectedBehavior("example.com"), - want: true, - }, - "not verified": { - org: "not.example.com", - handler: expectedBehavior("example.com"), - want: false, - }, - "broken issuer should error": { - org: "example.com", - handler: brokenIssuer, - wantErr: true, - }, - } - - for name, test := range tests { - t.Run(name, func(t *testing.T) { - s := httptest.NewServer(test.handler) - defer s.Close() - - got, err := orgCheck(test.org, s.URL) - if (err != nil) != test.wantErr { - t.Errorf("err == %s and wantErr = %v", err, test.wantErr) - return - } - if got != test.want { - t.Errorf("got = %v and want = %v", got, test.want) - } - }) - } -} diff --git a/auth/login/server.go b/auth/login/server.go deleted file mode 100644 index d3c3e939..00000000 --- a/auth/login/server.go +++ /dev/null @@ -1,110 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package login implements client login functionality shared between various -// clients -package login - -import ( - "context" - "errors" - "fmt" - "net" - "net/http" -) - -type server struct { - ctx context.Context - - callbackURL string - rootURL string - - token chan string - - refreshToken string - - l net.Listener -} - -func newServer(ctx context.Context) (*server, error) { - s := new(server) - - { - // NB: port 0 here means select a random port - listener, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - return nil, err - } - port := listener.Addr().(*net.TCPAddr).Port - - s.token = make(chan string, 1) - - s.callbackURL = fmt.Sprintf("http://localhost:%d/callback?token=true", port) - s.rootURL = fmt.Sprintf("http://localhost:%d/", port) - s.l = listener - s.ctx = ctx - } - - // nolint:all - go http.Serve(s.l, s) - - return s, nil -} - -func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - switch r.URL.Path { - case "/": - fmt.Fprint(w, HTMLAuthSuccessful) - close(s.token) - return - - case "/callback": - token := r.URL.Query().Get("token") - if token == "" { - fmt.Fprint(w, "Account not found, registration required.") - close(s.token) - return - } - s.refreshToken = r.URL.Query().Get("refresh_token") - s.token <- token - // We redirect to `/` to print a "successful auth" message and strip - // the token out of the URI - http.Redirect(w, r, s.rootURL, http.StatusPermanentRedirect) - - default: - http.NotFound(w, r) - } -} - -func (s *server) URL() string { - return s.callbackURL -} - -// Token blocks until a token has been received -func (s *server) Token() (string, error) { - select { - case <-s.ctx.Done(): - return "", s.ctx.Err() - case t, ok := <-s.token: - if !ok { - // Didn't receive token from redirect to callback - return "", errors.New("login failed") - } - - // We've received a token, but need to block until the success page has been written to - // the browser - <-s.token - return t, nil - } -} - -// RefreshToken is called after Token(), so we don't need any blocking here. -func (s *server) RefreshToken() string { - return s.refreshToken -} - -func (s *server) Close() error { - return s.l.Close() -} diff --git a/auth/login/server_test.go b/auth/login/server_test.go deleted file mode 100644 index 20b8e454..00000000 --- a/auth/login/server_test.go +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package login - -import ( - "context" - "errors" - "net/http" - "strings" - "testing" - "time" -) - -func TestServerTimeout(t *testing.T) { - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) - defer cancel() - s, err := newServer(ctx) - if err != nil { - t.Fatal(err) - } - - _, err = s.Token() - if !errors.Is(err, context.DeadlineExceeded) { - t.Errorf("expect timeout error getting token") - } -} - -func TestServerHappyPath(t *testing.T) { - s, err := newServer(context.Background()) - if err != nil { - t.Fatal(err) - } - - callback := strings.ReplaceAll(s.URL(), "token=true", "token=foo") - http.Get(callback) - - token, err := s.Token() - if err != nil { - t.Errorf("expected no error, got %#v", err) - } - if token != "foo" { - t.Errorf("expected token == foo, but got token == %q", token) - } - - s.Close() -} diff --git a/auth/oidc.go b/auth/oidc.go deleted file mode 100644 index 295e1dc6..00000000 --- a/auth/oidc.go +++ /dev/null @@ -1,159 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package auth - -import ( - "context" - "encoding/base64" - "encoding/json" - "fmt" - "os" - "strings" - "time" - - "github.com/chainguard-dev/clog" - "google.golang.org/grpc/credentials" -) - -// NewFromFile attempts to create a new credentials.PerRPCCredentials based on the provided file. -// Returns nil if not found. -func NewFromFile(ctx context.Context, path string, requireTransportSecurity bool) credentials.PerRPCCredentials { - if _, err := os.Stat(path); !os.IsNotExist(err) { - clog.FromContext(ctx).Infof("Using OIDC token from %s to authenticate requests.", path) - return &fileAuth{ - file: path, - secure: requireTransportSecurity, - } - } - return nil -} - -// NewFromToken attempts to create a new credentials.PerRPCCredentials based on provided OIDC token. -func NewFromToken(_ context.Context, token string, requireTransportSecurity bool) credentials.PerRPCCredentials { - return &tokenAuth{ - token: token, - secure: requireTransportSecurity, - } -} - -// NewFromContext creates a new credentials.PerRPCCredentials based on a token stored in context. -// This allows callers to provide a token for each RPC. -func NewFromContext(_ context.Context, requireTransportSecurity bool) credentials.PerRPCCredentials { - return &contextAuth{ - secure: requireTransportSecurity, - } -} - -// NormalizeIssuer massages an issuer string into a canonical form, such as -// attaching a scheme when certain "special" vendors omit them. -func NormalizeIssuer(issuer string) string { - // Similar to go-oidc, allow Google accounts to be missing scheme: - // https://github.com/coreos/go-oidc/blob/26c5037/oidc/verify.go#L231 - if issuer == "accounts.google.com" { - issuer = "https://accounts.google.com" - } - return issuer -} - -type Actor struct { - Audience string `json:"aud"` - Issuer string `json:"iss"` - Subject string `json:"sub"` -} - -func decodeToken(token string) ([]byte, error) { - parts := strings.Split(token, ".") - if len(parts) < 2 { - return nil, fmt.Errorf("oidc: malformed jwt, expected 3 parts got %d", len(parts)) - } - raw, err := base64.RawURLEncoding.DecodeString(parts[1]) - if err != nil { - return nil, fmt.Errorf("oidc: malformed jwt payload: %w", err) - } - return raw, nil -} - -func ExtractActor(token string) (*Actor, error) { - raw, err := decodeToken(token) - if err != nil { - return nil, err - } - - var payload struct { - Actor Actor `json:"act"` - } - if err := json.Unmarshal(raw, &payload); err != nil { - return nil, fmt.Errorf("oidc: failed to unmarshal actor: %w", err) - } - return &payload.Actor, nil -} - -func ExtractEmail(token string) (email string, verified bool, err error) { - raw, err := decodeToken(token) - if err != nil { - return "", false, err - } - - var payload struct { - Email string `json:"email"` - EmailVerified bool `json:"email_verified"` - } - if err := json.Unmarshal(raw, &payload); err != nil { - return "", false, fmt.Errorf("oidc: failed to unmarshal claims: %w", err) - } - - return payload.Email, payload.EmailVerified, nil -} - -func ExtractIssuer(token string) (string, error) { - iss, _, err := ExtractIssuerAndSubject(token) - return iss, err -} - -func ExtractIssuerAndSubject(token string) (string, string, error) { - raw, err := decodeToken(token) - if err != nil { - return "", "", err - } - - var payload struct { - Issuer string `json:"iss"` - Subject string `json:"sub"` - } - - if err := json.Unmarshal(raw, &payload); err != nil { - return "", "", fmt.Errorf("oidc: failed to unmarshal claims: %w", err) - } - return NormalizeIssuer(payload.Issuer), payload.Subject, nil -} - -func extractExpiry(rawToken []byte) (time.Time, error) { - var payload struct { - Expiry int64 `json:"exp"` - } - - if err := json.Unmarshal(rawToken, &payload); err != nil { - return time.Time{}, fmt.Errorf("oidc: failed to unmarshal claims: %w", err) - } - - return time.Unix(payload.Expiry, 0), nil -} - -func ExtractExpiry(token string) (time.Time, error) { - raw, err := decodeToken(token) - if err != nil { - return time.Time{}, err - } - return extractExpiry(raw) -} - -func ExtractRefreshExpiry(token string) (time.Time, error) { - raw, err := base64.StdEncoding.DecodeString(token) - if err != nil { - return time.Time{}, fmt.Errorf("refresh: malformed jwt payload: %w", err) - } - return extractExpiry(raw) -} diff --git a/auth/token.go b/auth/token.go deleted file mode 100644 index b5593ea9..00000000 --- a/auth/token.go +++ /dev/null @@ -1,31 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package auth - -import ( - "context" - - "google.golang.org/grpc/credentials" -) - -type tokenAuth struct { - token string - secure bool -} - -var _ credentials.PerRPCCredentials = (*tokenAuth)(nil) - -// GetRequestMetadata implements credentials.PerRPCCredentials -func (ta *tokenAuth) GetRequestMetadata(_ context.Context, uri ...string) (map[string]string, error) { //nolint: revive - return map[string]string{ - "Authorization": ta.token, - }, nil -} - -// RequireTransportSecurity implements credentials.PerRPCCredentials -func (ta *tokenAuth) RequireTransportSecurity() bool { - return ta.secure -} diff --git a/auth/token/token.go b/auth/token/token.go deleted file mode 100644 index d1991926..00000000 --- a/auth/token/token.go +++ /dev/null @@ -1,181 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package token - -import ( - "errors" - "fmt" - "io/fs" - "os" - "path/filepath" - "runtime" - "strings" - "time" - - "chainguard.dev/sdk/auth" -) - -type Kind string - -const ( - KindAccess Kind = "oidc-token" - KindRefresh Kind = "refresh-token" -) - -var ( - AllKinds = []Kind{KindAccess, KindRefresh} -) - -var ( - parentDir = "chainguard" -) - -// Save saves the given token to cache/audience -func Save(token []byte, kind Kind, audience string) error { - path, err := Path(kind, audience) - if err != nil { - return err - } - - if err := os.WriteFile(path, token, 0600); err != nil { - return fmt.Errorf("writing token file: %w", err) - } - return nil -} - -// Load returns the token for the given audience if it exists, -// or an error if it doesn't. -func Load(kind Kind, audience string) ([]byte, error) { - path, err := Path(kind, audience) - if err != nil { - return nil, err - } - - bs, err := os.ReadFile(path) - if err != nil { - return nil, fmt.Errorf("reading token file: %w", err) - } - return bs, nil -} - -// Delete removes the token for the given audience, if it exists. -// No error is returned if the token doesn't exist. -func Delete(kind Kind, audience string) error { - path, err := Path(kind, audience) - if err != nil { - return err - } - err = os.Remove(path) - if err != nil && !errors.Is(err, fs.ErrNotExist) { - return fmt.Errorf("failed to remove token (%s): %w", path, err) - } - return nil -} - -// DeleteAll removes all Chainguard tokens and empty audience directories. -func DeleteAll() error { - base, err := cacheFilePath("") - if err != nil { - return fmt.Errorf("error locating Chainguard token dir: %w", err) - } - files, err := os.ReadDir(base) - if err != nil { - return fmt.Errorf("error reading Chainguard token dir: %w", err) - } - // Token directory is expected to be structured as group of audience-specific - // directories, with a single file containing the token - // - // $ tree ~/Library/Caches/chainguard - // /Users/foo/Library/Caches/chainguard - // ├── https:--console-api.enforce.dev - // │ └── oidc-token - // ├── https:--cgr.dev - // └── oidc-token - for _, file := range files { - if !file.IsDir() { - // Encountered a file in the directory. Skip. - continue - } - for _, kind := range AllKinds { - // Try to remove a token, ignore file not exist errors - tokenFile := filepath.Join(base, file.Name(), string(kind)) - if err := os.Remove(tokenFile); err != nil && !errors.Is(err, fs.ErrNotExist) { - return fmt.Errorf("failed to remove %s: %w", tokenFile, err) - } - } - // Remove the (hopefully empty) audience directory. - // Ignore failures since other tools may have stored files in this cache. - dir := filepath.Join(base, file.Name()) - _ = os.Remove(dir) - } - return nil -} - -// Path is the filepath of the token for the given audience. -func Path(kind Kind, audience string) (string, error) { - a := strings.ReplaceAll(audience, "/", "-") - // Windows does not allow : as a valid character for directory names. - // For backwards compatibility, keep : in directory names for non-Windows systems. - // Ref: https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file - if runtime.GOOS == "windows" { - a = strings.ReplaceAll(a, ":", "-") - } - fp := filepath.Join(a, string(kind)) - return cacheFilePath(fp) -} - -// RemainingLife returns the amount of time remaining before the token for -// the given audience expires. Returns 0 for expired and non-existent tokens. -func RemainingLife(kind Kind, audience string, less time.Duration) time.Duration { - tok, err := Load(kind, audience) - if err != nil { - // Not a big deal, life is zero. - return 0 - } - var expiry time.Time - switch kind { - case KindRefresh: - expiry, err = auth.ExtractRefreshExpiry(string(tok)) - default: - expiry, err = auth.ExtractExpiry(string(tok)) - } - if err != nil { - fmt.Printf("failed to extract expiry: %v\n", err) - // Not a big deal, life is zero. - return 0 - } - return subtractOrZero(expiry, less) -} - -// For testing. -var timeUntil = time.Until - -// Safe calculation for duration remaining from a given time, less the given duration. -func subtractOrZero(expiry time.Time, less time.Duration) time.Duration { - life := timeUntil(expiry.Add(less * -1)) - if life < 0 { - return 0 - } - return life -} - -func cacheFilePath(file string) (string, error) { - path, err := os.UserCacheDir() - if err != nil { - return "", fmt.Errorf("failed to get user cache dir: %w", err) - } - - // Create the cache directories if needed - path = filepath.Join(path, parentDir, file) - _, err = os.Stat(filepath.Dir(path)) - if errors.Is(err, os.ErrNotExist) { - err = nil // Clear err, we're dealing with it. - if err := os.MkdirAll(filepath.Dir(path), os.ModePerm); err != nil { - return "", fmt.Errorf("failed to create %s: %w", path, err) - } - } - return path, err // err could be non-nil, if err != os.ErrNotExist -} diff --git a/auth/token/token_test.go b/auth/token/token_test.go deleted file mode 100644 index 6a078fea..00000000 --- a/auth/token/token_test.go +++ /dev/null @@ -1,515 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package token - -import ( - "encoding/base64" - "encoding/json" - "os" - "path/filepath" - "strings" - "testing" - "time" - - "github.com/go-jose/go-jose/v3/jwt" - "github.com/google/go-cmp/cmp" - - "chainguard.dev/go-oidctest/pkg/oidctest" -) - -func testToken(t *testing.T, audience, subject string, issuedAt time.Time, validDur time.Duration) string { - t.Helper() - - signer, iss := oidctest.NewIssuer(t) - - tok, err := jwt.Signed(signer).Claims(jwt.Claims{ - Issuer: iss, - IssuedAt: jwt.NewNumericDate(issuedAt), - Expiry: jwt.NewNumericDate(issuedAt.Add(validDur)), - Subject: subject, - Audience: jwt.Audience{audience}, - }).CompactSerialize() - if err != nil { - t.Fatalf("CompactSerialize() = %v", err) - } - - return tok -} - -func testRefreshToken(t *testing.T, issuer, audience, subject string, issuedAt time.Time, validDur time.Duration) string { - t.Helper() - - msg := jwt.Claims{ - Issuer: issuer, - Subject: subject, - Audience: jwt.Audience{audience}, - IssuedAt: jwt.NewNumericDate(issuedAt), - Expiry: jwt.NewNumericDate(issuedAt.Add(validDur)), - } - - bs, _ := json.Marshal(msg) - code := base64.StdEncoding.EncodeToString(bs) - - return code -} - -func TestSave(t *testing.T) { - t.Setenv("HOME", t.TempDir()) - cacheDir, err := os.UserCacheDir() - if err != nil { - t.Fatal(err) - } - - tests := []struct { - name string - kind Kind - audience string - wantPath string - }{{ - name: "sans audience", - kind: KindAccess, - audience: "", // Intentionally blank. - wantPath: filepath.Join(cacheDir, parentDir, string(KindAccess)), - }, { - name: "with audience (sans replacement)", - kind: KindAccess, - audience: "audience", - wantPath: filepath.Join(cacheDir, parentDir, "audience", string(KindAccess)), - }, { - name: "with audience (with replacement)", - kind: KindRefresh, - audience: "https://audience.unit.test", - wantPath: filepath.Join(cacheDir, parentDir, "https:--audience.unit.test", string(KindRefresh)), - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - // Save a token - tokenContents := []byte("mytoken") - if err := Save(tokenContents, test.kind, test.audience); err != nil { - t.Fatalf("Save() unexpected error=%v", err) - } - - // Manually check the expected file location - _, err := os.Stat(test.wantPath) - if err != nil { - t.Fatalf("Expected token path returned error: %v", err) - } - - gotContents, err := os.ReadFile(test.wantPath) - if err != nil { - t.Fatalf("Unexpected error reading token filepath=%s, err=%v", test.wantPath, err) - } - - if diff := cmp.Diff(tokenContents, gotContents); diff != "" { - t.Errorf("Reading %s returned unexpected results (-want, +got): %s", test.wantPath, diff) - } - }) - } -} - -func TestLoad(t *testing.T) { - t.Setenv("HOME", t.TempDir()) - cacheDir, err := os.UserCacheDir() - if err != nil { - t.Fatal(err) - } - - tests := []struct { - name string - kind Kind - audience string - }{{ - name: "sans audience", - kind: KindAccess, - audience: "", // Intentionally blank. - }, { - name: "with audience (sans replacement)", - kind: KindAccess, - audience: "audience", - }, { - name: "with audience (with replacement)", - kind: KindRefresh, - audience: "https://audience.unit.test", - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - // Manually save a token - tokenContents := []byte("mytoken") - mutatedAud := strings.ReplaceAll(test.audience, "/", "-") - path := filepath.Join(cacheDir, parentDir, mutatedAud) - if err := os.MkdirAll(path, 0777); err != nil { - t.Fatalf("Unexpected error creating temp dir: %v", err) - } - if err := os.WriteFile(filepath.Join(path, string(test.kind)), tokenContents, 0600); err != nil { - t.Fatalf("Unexpected error writing test token: %v", err) - } - - // Load the token, check its contents - got, err := Load(test.kind, test.audience) - if err != nil { - t.Fatalf("Load() unexpected error=%v", err) - } - if string(tokenContents) != string(got) { - t.Errorf("Load() return mismatch, want=%s, got=%s", tokenContents, got) - } - }) - } -} - -func TestDelete(t *testing.T) { - t.Setenv("HOME", t.TempDir()) - cacheDir, err := os.UserCacheDir() - if err != nil { - t.Fatal(err) - } - - tests := []struct { - name string - audience string - kind Kind - exists bool - wantErr bool - }{{ - name: "no audience ", - audience: "", // Intentionally blank. - kind: KindRefresh, - wantErr: false, - }, { - name: "token doesn't exist", - audience: "audience", - exists: false, - kind: KindAccess, - wantErr: false, - }, { - name: "token does exist", - audience: "audience", - exists: true, - kind: KindAccess, - wantErr: false, - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - // Manually save a token if it should exist - if test.exists { - tokenContents := []byte("mytoken") - path := filepath.Join(cacheDir, parentDir, test.audience) - if err := os.MkdirAll(path, 0777); err != nil { - t.Fatalf("Unexpected error creating temp dir: %v", err) - } - if err := os.WriteFile(filepath.Join(path, string(test.kind)), tokenContents, 0600); err != nil { - t.Fatalf("Unexpected error writing test token: %v", err) - } - } - - // Attempt to delete the token. - err := Delete(test.kind, test.audience) - if (err != nil) != test.wantErr { - t.Fatalf("Delete() error return mismatch, want=%t got=%v", test.wantErr, err) - } - }) - } -} - -func TestDeleteAll(t *testing.T) { - tests := []struct { - name string - auds []string // Create sub-dirs for each of these in cacheDir - audsWithTokens []string // Dirs from above that should also have a token (subset of auds) - extraFiles []string // Any extra files outside of audience dirs to include (in root of cacheDir) - wantErr bool - }{{ - name: "no tokens, no extra files/dirs", - auds: nil, - audsWithTokens: nil, - extraFiles: nil, - wantErr: false, - }, { - name: "all aud dirs have token, no extra files", - auds: []string{"audience1", "audience2"}, - audsWithTokens: []string{"audience1", "audience2"}, - extraFiles: nil, - wantErr: false, - }, { - name: "some empty aud dirs, no extra files", - auds: []string{"audience1", "audience2", "audience3", "audience4"}, - audsWithTokens: []string{"audience1", "audience2"}, - extraFiles: nil, - wantErr: false, - }, { - name: "all empty aud dirs, no extra files", - auds: []string{"audience1", "audience2", "audience3", "audience4"}, - audsWithTokens: []string{}, - extraFiles: nil, - wantErr: false, - }, { - name: "all aud dirs have token, extra files in root", - auds: []string{"audience1", "audience2"}, - audsWithTokens: []string{"audience1", "audience2"}, - extraFiles: []string{"extra1", "extra2"}, - wantErr: false, - }, { - name: "all aud dirs have token, extra files in dirs", - auds: []string{"audience1", "audience2"}, - audsWithTokens: []string{"audience1", "audience2"}, - extraFiles: []string{filepath.Join("audience1", "extra1"), filepath.Join("some-dir", "extra2")}, - wantErr: false, - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - // Make sure parent cache directory exists - t.Setenv("HOME", t.TempDir()) - cacheDir, err := os.UserCacheDir() - if err != nil { - t.Fatal(err) - } - cacheDir = filepath.Join(cacheDir, parentDir) - - if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil { - t.Fatalf("failed to create parent dir %s: %s", cacheDir, err.Error()) - } - // Create audience directories - for _, aud := range test.auds { - dir := filepath.Join(cacheDir, aud) - if err := os.MkdirAll(dir, os.ModePerm); err != nil { - t.Fatalf("failed to create dir %s: %s", dir, err.Error()) - } - } - // Populate "token" files - for _, aud := range test.audsWithTokens { - for _, kind := range AllKinds { - tok := filepath.Join(cacheDir, aud, string(kind)) - if _, err := os.Create(tok); err != nil { - t.Fatalf("failed to create fake token %s: %s", tok, err.Error()) - } - } - } - // Create extra files - for _, extra := range test.extraFiles { - p := filepath.Join(cacheDir, extra) - if err := os.MkdirAll(filepath.Dir(p), os.ModePerm); err != nil { - t.Fatalf("failed to create dir %s: %s", filepath.Dir(p), err.Error()) - } - if _, err := os.Create(p); err != nil { - t.Fatalf("failed to create extra file %s: %s", p, err.Error()) - } - } - - // Then burn it to the ground. - err = DeleteAll() - - // Sift through the ashes. - if (err != nil) != test.wantErr { - t.Errorf("DeleteAll() error return mismatch, want=%t, got=%v", test.wantErr, err) - } - files, err := os.ReadDir(cacheDir) - if err != nil { - t.Fatalf("failed to list files in temp cache dir: %v", err) - } - // Only expect test.extraFiles to remain, all other files/dirs should have been removed. - // TODO: make this more robust and count subfiles within dirs in `files` - // This will currently fail to catch situation where one dir has >1 extra file - if len(files) != len(test.extraFiles) { - t.Errorf("Remaining files mismatch, want=%d, got=%d", len(test.extraFiles), len(files)) - } - }) - } -} - -func TestSaveLoadToken(t *testing.T) { - t.Setenv("HOME", t.TempDir()) - - tests := []struct { - description string - audience string - }{ - { - description: "default audience", - audience: "http://api.api-system.svc", - }, { - description: "default audience with audience", - audience: "http://api.api-system.svc", - }, { - description: "custom audience", - audience: "https://abc-sigstore.enforce.dev", - }, - } - - for _, test := range tests { - t.Run(test.description, func(t *testing.T) { - for _, kind := range AllKinds { - tokenContents := []byte("mytoken") - if err := Save(tokenContents, kind, test.audience); err != nil { - t.Fatal(err) - } - contents, err := Load(kind, test.audience) - if err != nil { - t.Fatal(err) - } - if string(contents) != string(tokenContents) { - t.Fatalf("expected %s got %s", string(tokenContents), string(contents)) - } - } - }) - } -} - -func TestRemainingLife(t *testing.T) { - t.Setenv("HOME", t.TempDir()) - - now := time.Unix(0, 0) - timeUntil = func(t time.Time) time.Duration { - return t.Sub(now) - } - - type ts struct { - audience string - subject string - duration time.Duration - } - - tests := []struct { - name string - token ts - kind Kind - audience string - less time.Duration - want time.Duration - }{{ - name: "exists, 0 less, 30m remain", - token: ts{ - audience: "audience", - subject: "subject", - duration: 30 * time.Minute, - }, - kind: KindAccess, - audience: "audience", - less: 0, - want: 30 * time.Minute, - }, { - name: "exists, less 10m, 20m remain", - token: ts{ - audience: "audience", - subject: "subject", - duration: 30 * time.Minute, - }, - kind: KindRefresh, - audience: "audience", - less: 10 * time.Minute, - want: 20 * time.Minute, - }, { - name: "exists less 30m, 0s remain", - token: ts{ - audience: "audience", - subject: "subject", - duration: 30 * time.Minute, - }, - kind: KindAccess, - audience: "audience", - less: 30 * time.Minute, - want: 0, - }, { - name: "exists less 30m, 0s remain (refresh)", - token: ts{ - audience: "audience", - subject: "subject", - duration: 30 * time.Minute, - }, - kind: KindRefresh, - audience: "audience", - less: 30 * time.Minute, - want: 0, - }, { - name: "exists less 40m, 0s remain", - token: ts{ - audience: "audience", - subject: "subject", - duration: 30 * time.Minute, - }, - kind: KindAccess, - audience: "audience", - less: 40 * time.Minute, - want: 0, - }, { - name: "doesn't exist, 0s returned", - token: ts{ - audience: "audience", - subject: "subject", - duration: 30 * time.Minute, - }, - kind: KindAccess, - audience: "different", - less: 0, - want: 0, - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - var tok string - if test.kind == KindAccess { - tok = testToken(t, test.token.audience, test.token.subject, now, test.token.duration) - } else { - tok = testRefreshToken(t, "https://issuer.unit-test.com", test.token.audience, test.token.subject, now, test.token.duration) - } - if err := Save([]byte(tok), test.kind, test.token.audience); err != nil { - t.Fatalf("Save() unexpected error=%v", err) - } - - got := RemainingLife(test.kind, test.audience, test.less) - - if got != test.want { - t.Fatalf("RemainingLife() mismatch, want=%v, got=%v", test.want, got) - } - }) - } -} - -func TestPath(t *testing.T) { - t.Setenv("HOME", t.TempDir()) - - cacheDir, err := os.UserCacheDir() - if err != nil { - t.Fatal(err) - } - - tests := map[string]struct { - kind Kind - audience string - expectedPath string - }{ - "no audience": { - audience: "", - kind: KindAccess, - expectedPath: filepath.Join(cacheDir, parentDir, string(KindAccess)), - }, - "audience sans replacement": { - audience: "console.example.com", - kind: KindAccess, - expectedPath: filepath.Join(cacheDir, parentDir, "console.example.com", string(KindAccess)), - }, - "audience with replacement": { - audience: "https://console.example.com", - kind: KindRefresh, - expectedPath: filepath.Join(cacheDir, parentDir, "https:--console.example.com", string(KindRefresh)), - }, - } - - for name, test := range tests { - t.Run(name, func(t *testing.T) { - got, err := Path(test.kind, test.audience) - if err != nil { - t.Fatal(err) - } - - if diff := cmp.Diff(test.expectedPath, got); diff != "" { - t.Fatal("Path() mismatch (-want, +got):", diff) - } - }) - } -} diff --git a/civil/civil.go b/civil/civil.go deleted file mode 100644 index 936e99ae..00000000 --- a/civil/civil.go +++ /dev/null @@ -1,332 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// This is a fork of the cloud.google.com/go package of the same name, which -// carries the patch from: https://github.com/googleapis/google-cloud-go/pull/6410 - -// Copyright 2016 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package civil implements types for civil time, a time-zone-independent -// representation of time that follows the rules of the proleptic -// Gregorian calendar with exactly 24-hour days, 60-minute hours, and 60-second -// minutes. -// -// Because they lack location information, these types do not represent unique -// moments or intervals of time. Use time.Time for that purpose. -package civil - -import ( - "fmt" - "time" -) - -// A Date represents a date (year, month, day). -// -// This type does not include location information, and therefore does not -// describe a unique 24-hour timespan. -type Date struct { - Year int // Year (e.g., 2014). - Month time.Month // Month of the year (January = 1, ...). - Day int // Day of the month, starting at 1. -} - -// DateOf returns the Date in which a time occurs in that time's location. -func DateOf(t time.Time) Date { - var d Date - d.Year, d.Month, d.Day = t.Date() - return d -} - -// ParseDate parses a string in RFC3339 full-date format and returns the date value it represents. -func ParseDate(s string) (Date, error) { - t, err := time.Parse("2006-01-02", s) - if err != nil { - return Date{}, err - } - return DateOf(t), nil -} - -// String returns the date in RFC3339 full-date format. -func (d Date) String() string { - return fmt.Sprintf("%04d-%02d-%02d", d.Year, d.Month, d.Day) -} - -// IsValid reports whether the date is valid. -func (d Date) IsValid() bool { - return DateOf(d.In(time.UTC)) == d -} - -// In returns the time corresponding to time 00:00:00 of the date in the location. -// -// In is always consistent with time.Date, even when time.Date returns a time -// on a different day. For example, if loc is America/Indiana/Vincennes, then both -// -// time.Date(1955, time.May, 1, 0, 0, 0, 0, loc) -// -// and -// -// civil.Date{Year: 1955, Month: time.May, Day: 1}.In(loc) -// -// return 23:00:00 on April 30, 1955. -// -// In panics if loc is nil. -func (d Date) In(loc *time.Location) time.Time { - return time.Date(d.Year, d.Month, d.Day, 0, 0, 0, 0, loc) -} - -// AddDays returns the date that is n days in the future. -// n can also be negative to go into the past. -func (d Date) AddDays(n int) Date { - return DateOf(d.In(time.UTC).AddDate(0, 0, n)) -} - -// DaysSince returns the signed number of days between the date and s, not including the end day. -// This is the inverse operation to AddDays. -func (d Date) DaysSince(s Date) (days int) { - // We convert to Unix time so we do not have to worry about leap seconds: - // Unix time increases by exactly 86400 seconds per day. - deltaUnix := d.In(time.UTC).Unix() - s.In(time.UTC).Unix() - return int(deltaUnix / 86400) -} - -// Before reports whether d occurs before d2. -func (d Date) Before(d2 Date) bool { - if d.Year != d2.Year { - return d.Year < d2.Year - } - if d.Month != d2.Month { - return d.Month < d2.Month - } - return d.Day < d2.Day -} - -// After reports whether d occurs after d2. -func (d Date) After(d2 Date) bool { - return d2.Before(d) -} - -// IsZero reports whether date fields are set to their default value. -func (d Date) IsZero() bool { - return (d.Year == 0) && (int(d.Month) == 0) && (d.Day == 0) -} - -// MarshalText implements the encoding.TextMarshaler interface. -// The output is the result of d.String(). -func (d Date) MarshalText() ([]byte, error) { - return []byte(d.String()), nil -} - -// UnmarshalText implements the encoding.TextUnmarshaler interface. -// The date is expected to be a string in a format accepted by ParseDate. -func (d *Date) UnmarshalText(data []byte) error { - var err error - *d, err = ParseDate(string(data)) - return err -} - -// A Time represents a time with nanosecond precision. -// -// This type does not include location information, and therefore does not -// describe a unique moment in time. -// -// This type exists to represent the TIME type in storage-based APIs like BigQuery. -// Most operations on Times are unlikely to be meaningful. Prefer the DateTime type. -type Time struct { - Hour int // The hour of the day in 24-hour format; range [0-23] - Minute int // The minute of the hour; range [0-59] - Second int // The second of the minute; range [0-59] - Nanosecond int // The nanosecond of the second; range [0-999999999] -} - -// TimeOf returns the Time representing the time of day in which a time occurs -// in that time's location. It ignores the date. -func TimeOf(t time.Time) Time { - var tm Time - tm.Hour, tm.Minute, tm.Second = t.Clock() - tm.Nanosecond = t.Nanosecond() - return tm -} - -// ParseTime parses a string and returns the time value it represents. -// ParseTime accepts an extended form of the RFC3339 partial-time format. After -// the HH:MM:SS part of the string, an optional fractional part may appear, -// consisting of a decimal point followed by one to nine decimal digits. -// (RFC3339 admits only one digit after the decimal point). -func ParseTime(s string) (Time, error) { - t, err := time.Parse("15:04:05.999999999", s) - if err != nil { - return Time{}, err - } - return TimeOf(t), nil -} - -// String returns the date in the format described in ParseTime. If Nanoseconds -// is zero, no fractional part will be generated. Otherwise, the result will -// end with a fractional part consisting of a decimal point and six digits. -// The fractional part is limited to six digits because that is the precision -// limit for BigQuery DATETIME columns. -func (t Time) String() string { - s := fmt.Sprintf("%02d:%02d:%02d", t.Hour, t.Minute, t.Second) - if t.Nanosecond == 0 { - return s - } - return s + fmt.Sprintf(".%06d", t.Nanosecond/1000) -} - -// IsValid reports whether the time is valid. -func (t Time) IsValid() bool { - // Construct a non-zero time. - tm := time.Date(2, 2, 2, t.Hour, t.Minute, t.Second, t.Nanosecond, time.UTC) - return TimeOf(tm) == t -} - -// IsZero reports whether time fields are set to their default value. -func (t Time) IsZero() bool { - return (t.Hour == 0) && (t.Minute == 0) && (t.Second == 0) && (t.Nanosecond == 0) -} - -// Before reports whether t occurs before t2. -func (t Time) Before(t2 Time) bool { - if t.Hour != t2.Hour { - return t.Hour < t2.Hour - } - if t.Minute != t2.Minute { - return t.Minute < t2.Minute - } - if t.Second != t2.Second { - return t.Second < t2.Second - } - - return t.Nanosecond < t2.Nanosecond -} - -// After reports whether t occurs after t2. -func (t Time) After(t2 Time) bool { - return t2.Before(t) -} - -// MarshalText implements the encoding.TextMarshaler interface. -// The output is the result of t.String(). -func (t Time) MarshalText() ([]byte, error) { - return []byte(t.String()), nil -} - -// UnmarshalText implements the encoding.TextUnmarshaler interface. -// The time is expected to be a string in a format accepted by ParseTime. -func (t *Time) UnmarshalText(data []byte) error { - var err error - *t, err = ParseTime(string(data)) - return err -} - -// A DateTime represents a date and time. -// -// This type does not include location information, and therefore does not -// describe a unique moment in time. -type DateTime struct { - Date Date - Time Time -} - -// Note: We deliberately do not embed Date into DateTime, to avoid promoting AddDays and Sub. - -// DateTimeOf returns the DateTime in which a time occurs in that time's location. -func DateTimeOf(t time.Time) DateTime { - return DateTime{ - Date: DateOf(t), - Time: TimeOf(t), - } -} - -// ParseDateTime parses a string and returns the DateTime it represents. -// ParseDateTime accepts a variant of the RFC3339 date-time format that omits -// the time offset but includes an optional fractional time, as described in -// ParseTime. Informally, the accepted format is -// -// YYYY-MM-DDTHH:MM:SS[.FFFFFFFFF] -// -// where the 'T' may be a lower-case 't'. -func ParseDateTime(s string) (DateTime, error) { - t, err := time.Parse("2006-01-02T15:04:05.999999999", s) - if err != nil { - t, err = time.Parse("2006-01-02t15:04:05.999999999", s) - if err != nil { - return DateTime{}, err - } - } - return DateTimeOf(t), nil -} - -// String returns the date in the format described in ParseDate. -func (dt DateTime) String() string { - return dt.Date.String() + "T" + dt.Time.String() -} - -// IsValid reports whether the datetime is valid. -func (dt DateTime) IsValid() bool { - return dt.Date.IsValid() && dt.Time.IsValid() -} - -// In returns the time corresponding to the DateTime in the given location. -// -// If the time is missing or ambigous at the location, In returns the same -// result as time.Date. For example, if loc is America/Indiana/Vincennes, then -// both -// -// time.Date(1955, time.May, 1, 0, 30, 0, 0, loc) -// -// and -// -// civil.DateTime{ -// civil.Date{Year: 1955, Month: time.May, Day: 1}}, -// civil.Time{Minute: 30}}.In(loc) -// -// return 23:30:00 on April 30, 1955. -// -// In panics if loc is nil. -func (dt DateTime) In(loc *time.Location) time.Time { - return time.Date(dt.Date.Year, dt.Date.Month, dt.Date.Day, dt.Time.Hour, dt.Time.Minute, dt.Time.Second, dt.Time.Nanosecond, loc) -} - -// Before reports whether dt occurs before dt2. -func (dt DateTime) Before(dt2 DateTime) bool { - return dt.In(time.UTC).Before(dt2.In(time.UTC)) -} - -// After reports whether dt occurs after dt2. -func (dt DateTime) After(dt2 DateTime) bool { - return dt2.Before(dt) -} - -// IsZero reports whether datetime fields are set to their default value. -func (dt DateTime) IsZero() bool { - return dt.Date.IsZero() && dt.Time.IsZero() -} - -// MarshalText implements the encoding.TextMarshaler interface. -// The output is the result of dt.String(). -func (dt DateTime) MarshalText() ([]byte, error) { - return []byte(dt.String()), nil -} - -// UnmarshalText implements the encoding.TextUnmarshaler interface. -// The datetime is expected to be a string in a format accepted by ParseDateTime -func (dt *DateTime) UnmarshalText(data []byte) error { - var err error - *dt, err = ParseDateTime(string(data)) - return err -} diff --git a/civil/civil_test.go b/civil/civil_test.go deleted file mode 100644 index d1de7c73..00000000 --- a/civil/civil_test.go +++ /dev/null @@ -1,547 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// This is a fork of the cloud.google.com/go package of the same name, which -// carries the patch from: https://github.com/googleapis/google-cloud-go/pull/6410 - -// Copyright 2016 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package civil - -import ( - "encoding/json" - "testing" - "time" - - "github.com/google/go-cmp/cmp" -) - -func TestDates(t *testing.T) { - for _, test := range []struct { - date Date - loc *time.Location - wantStr string - wantTime time.Time - }{ - { - date: Date{2014, 7, 29}, - loc: time.Local, - wantStr: "2014-07-29", - wantTime: time.Date(2014, time.July, 29, 0, 0, 0, 0, time.Local), - }, - { - date: DateOf(time.Date(2014, 8, 20, 15, 8, 43, 1, time.Local)), - loc: time.UTC, - wantStr: "2014-08-20", - wantTime: time.Date(2014, 8, 20, 0, 0, 0, 0, time.UTC), - }, - { - date: DateOf(time.Date(999, time.January, 26, 0, 0, 0, 0, time.Local)), - loc: time.UTC, - wantStr: "0999-01-26", - wantTime: time.Date(999, 1, 26, 0, 0, 0, 0, time.UTC), - }, - } { - if got := test.date.String(); got != test.wantStr { - t.Errorf("%#v.String() = %q, want %q", test.date, got, test.wantStr) - } - if got := test.date.In(test.loc); !got.Equal(test.wantTime) { - t.Errorf("%#v.In(%v) = %v, want %v", test.date, test.loc, got, test.wantTime) - } - } -} - -func TestDateIsValid(t *testing.T) { - for _, test := range []struct { - date Date - want bool - }{ - {Date{2014, 7, 29}, true}, - {Date{2000, 2, 29}, true}, - {Date{10000, 12, 31}, true}, - {Date{1, 1, 1}, true}, - {Date{0, 1, 1}, true}, // year zero is OK - {Date{-1, 1, 1}, true}, // negative year is OK - {Date{1, 0, 1}, false}, - {Date{1, 1, 0}, false}, - {Date{2016, 1, 32}, false}, - {Date{2016, 13, 1}, false}, - {Date{1, -1, 1}, false}, - {Date{1, 1, -1}, false}, - } { - got := test.date.IsValid() - if got != test.want { - t.Errorf("%#v: got %t, want %t", test.date, got, test.want) - } - } -} - -func TestParseDate(t *testing.T) { - for _, test := range []struct { - str string - want Date // if empty, expect an error - }{ - {"2016-01-02", Date{2016, 1, 2}}, - {"2016-12-31", Date{2016, 12, 31}}, - {"0003-02-04", Date{3, 2, 4}}, - {"999-01-26", Date{}}, - {"", Date{}}, - {"2016-01-02x", Date{}}, - } { - got, err := ParseDate(test.str) - if got != test.want { - t.Errorf("ParseDate(%q) = %+v, want %+v", test.str, got, test.want) - } - if err != nil && test.want != (Date{}) { - t.Errorf("Unexpected error %v from ParseDate(%q)", err, test.str) - } - } -} - -func TestDateArithmetic(t *testing.T) { - for _, test := range []struct { - desc string - start Date - end Date - days int - }{ - { - desc: "zero days noop", - start: Date{2014, 5, 9}, - end: Date{2014, 5, 9}, - days: 0, - }, - { - desc: "crossing a year boundary", - start: Date{2014, 12, 31}, - end: Date{2015, 1, 1}, - days: 1, - }, - { - desc: "negative number of days", - start: Date{2015, 1, 1}, - end: Date{2014, 12, 31}, - days: -1, - }, - { - desc: "full leap year", - start: Date{2004, 1, 1}, - end: Date{2005, 1, 1}, - days: 366, - }, - { - desc: "full non-leap year", - start: Date{2001, 1, 1}, - end: Date{2002, 1, 1}, - days: 365, - }, - { - desc: "crossing a leap second", - start: Date{1972, 6, 30}, - end: Date{1972, 7, 1}, - days: 1, - }, - { - desc: "dates before the unix epoch", - start: Date{101, 1, 1}, - end: Date{102, 1, 1}, - days: 365, - }, - } { - if got := test.start.AddDays(test.days); got != test.end { - t.Errorf("[%s] %#v.AddDays(%v) = %#v, want %#v", test.desc, test.start, test.days, got, test.end) - } - if got := test.end.DaysSince(test.start); got != test.days { - t.Errorf("[%s] %#v.Sub(%#v) = %v, want %v", test.desc, test.end, test.start, got, test.days) - } - } -} - -func TestDateBefore(t *testing.T) { - for _, test := range []struct { - d1, d2 Date - want bool - }{ - {Date{2016, 12, 31}, Date{2017, 1, 1}, true}, - {Date{2016, 1, 1}, Date{2016, 1, 1}, false}, - {Date{2016, 12, 30}, Date{2016, 12, 31}, true}, - } { - if got := test.d1.Before(test.d2); got != test.want { - t.Errorf("%v.Before(%v): got %t, want %t", test.d1, test.d2, got, test.want) - } - } -} - -func TestDateAfter(t *testing.T) { - for _, test := range []struct { - d1, d2 Date - want bool - }{ - {Date{2016, 12, 31}, Date{2017, 1, 1}, false}, - {Date{2016, 1, 1}, Date{2016, 1, 1}, false}, - {Date{2016, 12, 30}, Date{2016, 12, 31}, false}, - } { - if got := test.d1.After(test.d2); got != test.want { - t.Errorf("%v.After(%v): got %t, want %t", test.d1, test.d2, got, test.want) - } - } -} - -func TestDateIsZero(t *testing.T) { - for _, test := range []struct { - date Date - want bool - }{ - {Date{2000, 2, 29}, false}, - {Date{10000, 12, 31}, false}, - {Date{-1, 0, 0}, false}, - {Date{0, 0, 0}, true}, - {Date{}, true}, - } { - got := test.date.IsZero() - if got != test.want { - t.Errorf("%#v: got %t, want %t", test.date, got, test.want) - } - } -} - -func TestTimeToString(t *testing.T) { - for _, test := range []struct { - str string - time Time - roundTrip bool // ParseTime(str).String() == str? - }{ - {"13:26:33", Time{13, 26, 33, 0}, true}, - {"01:02:03.000023", Time{1, 2, 3, 23000}, true}, - {"00:00:00.000001", Time{0, 0, 0, 1000}, true}, - {"13:26:03.1", Time{13, 26, 3, 100000000}, false}, - {"13:26:33.0000003", Time{13, 26, 33, 300}, false}, - } { - t.Run(test.str, func(t *testing.T) { - gotTime, err := ParseTime(test.str) - if err != nil { - t.Errorf("ParseTime(%q): got error: %v", test.str, err) - return - } - if gotTime != test.time { - t.Errorf("ParseTime(%q) = %+v, want %+v", test.str, gotTime, test.time) - } - if test.roundTrip { - gotStr := test.time.String() - if gotStr != test.str { - t.Errorf("%#v.String() = %q, want %q", test.time, gotStr, test.str) - } - } - }) - } -} - -func TestTimeOf(t *testing.T) { - for _, test := range []struct { - time time.Time - want Time - }{ - {time.Date(2014, 8, 20, 15, 8, 43, 1, time.Local), Time{15, 8, 43, 1}}, - {time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC), Time{0, 0, 0, 0}}, - } { - if got := TimeOf(test.time); got != test.want { - t.Errorf("TimeOf(%v) = %+v, want %+v", test.time, got, test.want) - } - } -} - -func TestTimeIsValid(t *testing.T) { - for _, test := range []struct { - time Time - want bool - }{ - {Time{0, 0, 0, 0}, true}, - {Time{23, 0, 0, 0}, true}, - {Time{23, 59, 59, 999999999}, true}, - {Time{24, 59, 59, 999999999}, false}, - {Time{23, 60, 59, 999999999}, false}, - {Time{23, 59, 60, 999999999}, false}, - {Time{23, 59, 59, 1000000000}, false}, - {Time{-1, 0, 0, 0}, false}, - {Time{0, -1, 0, 0}, false}, - {Time{0, 0, -1, 0}, false}, - {Time{0, 0, 0, -1}, false}, - } { - got := test.time.IsValid() - if got != test.want { - t.Errorf("%#v: got %t, want %t", test.time, got, test.want) - } - } -} - -func TestTimeIsZero(t *testing.T) { - for _, test := range []struct { - time Time - want bool - }{ - {Time{0, 0, 0, 0}, true}, - {Time{}, true}, - {Time{0, 0, 0, 1}, false}, - {Time{-1, 0, 0, 0}, false}, - {Time{0, -1, 0, 0}, false}, - } { - got := test.time.IsZero() - if got != test.want { - t.Errorf("%#v: got %t, want %t", test.time, got, test.want) - } - } -} - -func TestTimeBefore(t *testing.T) { - for _, test := range []struct { - t1, t2 Time - want bool - }{ - {Time{12, 0, 0, 0}, Time{14, 0, 0, 0}, true}, - {Time{12, 20, 0, 0}, Time{12, 30, 0, 0}, true}, - {Time{12, 20, 10, 0}, Time{12, 20, 20, 0}, true}, - {Time{12, 20, 10, 5}, Time{12, 20, 10, 10}, true}, - {Time{12, 20, 10, 5}, Time{12, 20, 10, 5}, false}, - } { - if got := test.t1.Before(test.t2); got != test.want { - t.Errorf("%v.Before(%v): got %t, want %t", test.t1, test.t2, got, test.want) - } - } -} - -func TestTimeAfter(t *testing.T) { - for _, test := range []struct { - t1, t2 Time - want bool - }{ - {Time{12, 0, 0, 0}, Time{14, 0, 0, 0}, false}, - {Time{12, 20, 0, 0}, Time{12, 30, 0, 0}, false}, - {Time{12, 20, 10, 0}, Time{12, 20, 20, 0}, false}, - {Time{12, 20, 10, 5}, Time{12, 20, 10, 10}, false}, - {Time{12, 20, 10, 5}, Time{12, 20, 10, 5}, false}, - } { - if got := test.t1.After(test.t2); got != test.want { - t.Errorf("%v.After(%v): got %t, want %t", test.t1, test.t2, got, test.want) - } - } -} - -func TestDateTimeToString(t *testing.T) { - for _, test := range []struct { - str string - dateTime DateTime - roundTrip bool // ParseDateTime(str).String() == str? - }{ - {"2016-03-22T13:26:33", DateTime{Date{2016, 03, 22}, Time{13, 26, 33, 0}}, true}, - {"2016-03-22T13:26:33.000000600", DateTime{Date{2016, 03, 22}, Time{13, 26, 33, 600}}, false}, - {"2016-03-22T13:26:33.000006", DateTime{Date{2016, 03, 22}, Time{13, 26, 33, 6000}}, true}, - {"2016-03-22t13:26:33", DateTime{Date{2016, 03, 22}, Time{13, 26, 33, 0}}, false}, - } { - t.Run(test.str, func(t *testing.T) { - gotDateTime, err := ParseDateTime(test.str) - if err != nil { - t.Errorf("ParseDateTime(%q): got error: %v", test.str, err) - return - } - if gotDateTime != test.dateTime { - t.Errorf("ParseDateTime(%q) = %+v, want %+v", test.str, gotDateTime, test.dateTime) - } - if test.roundTrip { - gotStr := test.dateTime.String() - if gotStr != test.str { - t.Errorf("%#v.String() = %q, want %q", test.dateTime, gotStr, test.str) - } - } - }) - } -} - -func TestParseDateTimeErrors(t *testing.T) { - for _, str := range []string{ - "", - "2016-03-22", // just a date - "13:26:33", // just a time - "2016-03-22 13:26:33", // wrong separating character - "2016-03-22T13:26:33x", // extra at end - } { - if _, err := ParseDateTime(str); err == nil { - t.Errorf("ParseDateTime(%q) succeeded, want error", str) - } - } -} - -func TestDateTimeOf(t *testing.T) { - for _, test := range []struct { - time time.Time - want DateTime - }{ - {time.Date(2014, 8, 20, 15, 8, 43, 1, time.Local), - DateTime{Date{2014, 8, 20}, Time{15, 8, 43, 1}}}, - {time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC), - DateTime{Date{1, 1, 1}, Time{0, 0, 0, 0}}}, - } { - if got := DateTimeOf(test.time); got != test.want { - t.Errorf("DateTimeOf(%v) = %+v, want %+v", test.time, got, test.want) - } - } -} - -func TestDateTimeIsValid(t *testing.T) { - // No need to be exhaustive here; it's just Date.IsValid && Time.IsValid. - for _, test := range []struct { - dt DateTime - want bool - }{ - {DateTime{Date{2016, 3, 20}, Time{0, 0, 0, 0}}, true}, - {DateTime{Date{2016, -3, 20}, Time{0, 0, 0, 0}}, false}, - {DateTime{Date{2016, 3, 20}, Time{24, 0, 0, 0}}, false}, - } { - got := test.dt.IsValid() - if got != test.want { - t.Errorf("%#v: got %t, want %t", test.dt, got, test.want) - } - } -} - -func TestDateTimeIn(t *testing.T) { - dt := DateTime{Date{2016, 1, 2}, Time{3, 4, 5, 6}} - got := dt.In(time.UTC) - want := time.Date(2016, 1, 2, 3, 4, 5, 6, time.UTC) - if !got.Equal(want) { - t.Errorf("got %v, want %v", got, want) - } -} - -func TestDateTimeBefore(t *testing.T) { - d1 := Date{2016, 12, 31} - d2 := Date{2017, 1, 1} - t1 := Time{5, 6, 7, 8} - t2 := Time{5, 6, 7, 9} - for _, test := range []struct { - dt1, dt2 DateTime - want bool - }{ - {DateTime{d1, t1}, DateTime{d2, t1}, true}, - {DateTime{d1, t1}, DateTime{d1, t2}, true}, - {DateTime{d2, t1}, DateTime{d1, t1}, false}, - {DateTime{d2, t1}, DateTime{d2, t1}, false}, - } { - if got := test.dt1.Before(test.dt2); got != test.want { - t.Errorf("%v.Before(%v): got %t, want %t", test.dt1, test.dt2, got, test.want) - } - } -} - -func TestDateTimeAfter(t *testing.T) { - d1 := Date{2016, 12, 31} - d2 := Date{2017, 1, 1} - t1 := Time{5, 6, 7, 8} - t2 := Time{5, 6, 7, 9} - for _, test := range []struct { - dt1, dt2 DateTime - want bool - }{ - {DateTime{d1, t1}, DateTime{d2, t1}, false}, - {DateTime{d1, t1}, DateTime{d1, t2}, false}, - {DateTime{d2, t1}, DateTime{d1, t1}, true}, - {DateTime{d2, t1}, DateTime{d2, t1}, false}, - } { - if got := test.dt1.After(test.dt2); got != test.want { - t.Errorf("%v.After(%v): got %t, want %t", test.dt1, test.dt2, got, test.want) - } - } -} - -func TestDateTimeIsZero(t *testing.T) { - for _, test := range []struct { - dt DateTime - want bool - }{ - {DateTime{Date{2016, 3, 20}, Time{0, 0, 0, 0}}, false}, - {DateTime{Date{}, Time{5, 44, 20, 0}}, false}, - {DateTime{Date{2016, 3, 20}, Time{}}, false}, - {DateTime{Date{0, 0, 0}, Time{5, 16, 47, 2}}, false}, - {DateTime{Date{2021, 9, 5}, Time{9, 30, 51, 6}}, false}, - {DateTime{Date{}, Time{}}, true}, - {DateTime{Date{0, 0, 0}, Time{0, 0, 0, 0}}, true}, - {DateTime{Date{}, Time{0, 0, 0, 0}}, true}, - {DateTime{Date{0, 0, 0}, Time{}}, true}, - } { - got := test.dt.IsZero() - if got != test.want { - t.Errorf("%#v: got %t, want %t", test.dt, got, test.want) - } - } -} - -func TestMarshalJSON(t *testing.T) { - for _, test := range []struct { - value interface{} - want string - }{ - {Date{1987, 4, 15}, `"1987-04-15"`}, - {Time{18, 54, 2, 0}, `"18:54:02"`}, - {DateTime{Date{1987, 4, 15}, Time{18, 54, 2, 0}}, `"1987-04-15T18:54:02"`}, - } { - bgot, err := json.Marshal(test.value) - if err != nil { - t.Fatal(err) - } - if got := string(bgot); got != test.want { - t.Errorf("%#v: got %s, want %s", test.value, got, test.want) - } - } -} - -func TestUnmarshalJSON(t *testing.T) { - var d Date - var tm Time - var dt DateTime - for _, test := range []struct { - data string - ptr interface{} - want interface{} - }{ - {`"1987-04-15"`, &d, &Date{1987, 4, 15}}, - {`"1987-04-\u0031\u0035"`, &d, &Date{1987, 4, 15}}, - {`"18:54:02"`, &tm, &Time{18, 54, 2, 0}}, - {`"1987-04-15T18:54:02"`, &dt, &DateTime{Date{1987, 4, 15}, Time{18, 54, 2, 0}}}, - } { - if err := json.Unmarshal([]byte(test.data), test.ptr); err != nil { - t.Fatalf("%s: %v", test.data, err) - } - if !cmp.Equal(test.ptr, test.want) { - t.Errorf("%s: got %#v, want %#v", test.data, test.ptr, test.want) - } - } - - for _, bad := range []string{"", `""`, `"bad"`, `"1987-04-15x"`, - `19870415`, // a JSON number - `11987-04-15x`, // not a JSON string - - } { - if json.Unmarshal([]byte(bad), &d) == nil { - t.Errorf("%q, Date: got nil, want error", bad) - } - if json.Unmarshal([]byte(bad), &tm) == nil { - t.Errorf("%q, Time: got nil, want error", bad) - } - if json.Unmarshal([]byte(bad), &dt) == nil { - t.Errorf("%q, DateTime: got nil, want error", bad) - } - } -} diff --git a/events/extensions.go b/events/extensions.go deleted file mode 100644 index 0a4e9520..00000000 --- a/events/extensions.go +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package events - -const ( - // DeliveryTypeKey is the CloudEvents extension name to filter on for kinds - // of deliveries. - DeliveryTypeKey = "chainguarddev1delivery" - // DeliveryTypeWebhook defines webhook delivery type. - DeliveryTypeWebhook = "webhook" - - // DeliveryWebhookTargetKey is the CloudEvents extension name to store the - // target url for webhooks. - DeliveryWebhookTargetKey = "chainguarddev1webhook" - - // DeliverySubscriptionKey is the CloudEvents extension name to store the - // subscription id that caused the event. - DeliverySubscriptionKey = "chainguarddev1subscription" - - // GroupKey is the CloudEvents extension name to store the group associated - // to the event. - GroupKey = "group" - // ClusterKey is the CloudEvents extension name to store the cluster associated - // to the event. - ClusterKey = "cluster" - // ImageKey is the CloudEvents extension name to store the image associated - // to the event. - ImageKey = "image" - - // AudienceKey labels an event for its intended audience ["internal", "customer"]. - AudienceKey = "audience" - // AudienceInternal are events intended for the internal platform. - AudienceInternal = "internal" - // AudienceCustomer are events targeting outside the platform. - AudienceCustomer = "customer" - - // ArrivalTimeKey is the CloudEvents extension name to store the Knative - // arrival timestamp - ArrivalTimeKey = "knativearrivaltime" -) diff --git a/events/generator/generator.go b/events/generator/generator.go deleted file mode 100644 index 70bad22d..00000000 --- a/events/generator/generator.go +++ /dev/null @@ -1,32 +0,0 @@ -/* -Copyright 2024 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package generator - -import ( - "chainguard.dev/sdk/civil" - "google.golang.org/grpc/status" -) - -const GenerateVulnReportEventType = "dev.chainguard.vulnreport.generate.v1" - -// GenerateVulnReportEvent is an event used to trigger the generation of scan reports on-demand -type GenerateVulnReportEvent struct { - // RepoID identifies the UIDP of the repository used to generate the report - RepoID string `json:"repo_id"` - - // Digest holds the digest being used to generate the report. - // Digest will hold the sha256 content. - Digest string `json:"digest"` - - // Type determines whether the report being generated is a refresh. - Type string `json:"type"` - - // When holds when the generation of the report occurred. - When civil.DateTime `json:"when"` - - // Status to represent the problem - Status *status.Status `json:"status,omitempty"` -} diff --git a/events/occurrence.go b/events/occurrence.go deleted file mode 100644 index d77dcd7c..00000000 --- a/events/occurrence.go +++ /dev/null @@ -1,41 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package events - -// Occurrence is the CloudEvent payload for events. -type Occurrence struct { - Actor *Actor `json:"actor,omitempty"` - - // Body is the resource that was created. - Body interface{} `json:"body,omitempty"` -} - -// Actor is the event payload form of which identity was responsible for the -// event. -type Actor struct { - // Subject is the identity that triggered this event. - Subject string `json:"subject"` - - // Actor contains the name/value pairs for each of the claims that were - // validated to assume the identity whose UIDP appears in Subject above. - Actor map[string]string `json:"act,omitempty"` -} - -// Eventable allows us to define a set of methods that allow event metadata to -// be collected. -type Eventable interface { - // CloudEventsSubject returns the subject to use for the cloudevent. - CloudEventsSubject() string -} - -// Extendable allows us to define a generic method to return extensions based on name. -type Extendable interface { - CloudEventsExtension(key string) (string, bool) -} - -type Redactable interface { - CloudEventsRedact() interface{} -} diff --git a/events/receiver/receiver.go b/events/receiver/receiver.go deleted file mode 100644 index 565f5008..00000000 --- a/events/receiver/receiver.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package receiver - -import ( - "context" - "crypto/sha256" - "fmt" - "net/http" - "strings" - - "chainguard.dev/sdk/events" - cloudevents "github.com/cloudevents/sdk-go/v2" - cehttp "github.com/cloudevents/sdk-go/v2/protocol/http" - "github.com/coreos/go-oidc/v3/oidc" -) - -// Handler is a function that handles a CloudEvent. -type Handler func(ctx context.Context, event cloudevents.Event) error - -// New returns a new Handler that verifies the Event was sent by Chainguard, -// intended for the specified Group, then invokes the provided Handler. -// -// TODO(jason): Accept options for configuring the issuer and accepted event types. -func New(ctx context.Context, issuer, group string, fn Handler) (Handler, error) { - // Construct a verifier that ensures tokens are issued by the Chainguard - // issuer we expect and are intended for a customer webhook. - provider, err := oidc.NewProvider(ctx, issuer) - if err != nil { - return nil, fmt.Errorf("failed to create provider: %w", err) - } - verifier := provider.Verifier(&oidc.Config{ClientID: "customer"}) - - return func(ctx context.Context, event cloudevents.Event) error { - // We expect Chainguard webhooks to pass an Authorization header. - auth := strings.TrimPrefix(cehttp.RequestDataFromContext(ctx).Header.Get("Authorization"), "Bearer ") - if auth == "" { - return cloudevents.NewHTTPResult(http.StatusUnauthorized, "Unauthorized") - } - - claims := events.WebhookCustomClaims{} - - // Verify that the token is well-formed, and in fact intended for us! - if tok, err := verifier.Verify(ctx, auth); err != nil { - return cloudevents.NewHTTPResult(http.StatusForbidden, "unable to verify token: %w", err) - } else if !strings.HasPrefix(tok.Subject, "webhook:") { - return cloudevents.NewHTTPResult(http.StatusForbidden, "subject should be from the Chainguard webhook component, got: %s", tok.Subject) - } else if got := strings.TrimPrefix(tok.Subject, "webhook:"); got != group { - return cloudevents.NewHTTPResult(http.StatusForbidden, "this token is intended for %s, wanted one for %s", got, group) - } else if err := tok.Claims(&claims); err != nil { - return cloudevents.NewHTTPResult(http.StatusForbidden, "this token does not contain the Chainguard custom webhook claims: %v", err) - } - - h := sha256.New() - h.Write(event.Data()) - bs := h.Sum(nil) - if got, want := fmt.Sprintf("sha256:%x", bs), claims.Webhook.Digest; got != want { - return cloudevents.NewHTTPResult(http.StatusForbidden, "this token is intended for a message with digest %s, got message with digest %s", want, got) - } - - return fn(ctx, event) - }, nil -} diff --git a/events/registry/registry.go b/events/registry/registry.go deleted file mode 100644 index ff4519f5..00000000 --- a/events/registry/registry.go +++ /dev/null @@ -1,97 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package registry - -import "chainguard.dev/sdk/civil" - -const ( - // PulledEventType is the cloudevents event type for registry pulls - PulledEventType = "dev.chainguard.registry.pull.v1" - - // PushedEventType is the cloudevents event type for registry pushes - PushedEventType = "dev.chainguard.registry.push.v1" - - // RepoCreatedEventType is the cloudevents event type for registry repo created - RepoCreatedEventType = "dev.chainguard.api.platform.registry.repo.created.v1" - - // RepoUpdatedEventType is the cloudevents event type for registry repo updated - RepoUpdatedEventType = "dev.chainguard.api.platform.registry.repo.updated.v1" -) - -// PullEvent describes an item being pulled from the registry. -type PullEvent struct { - // Repository identifies the repository being pulled - Repository string `json:"repository"` - - // RepoID identifies the UIDP of the repository being pulled - RepoID string `json:"repo_id"` - - // Tag holds the tag being pulled, if there is one. - Tag string `json:"tag,omitempty"` - - // Digest holds the digest being pulled. - // Digest will hold the sha256 of the content being fetched, whether that is - // a blob or a manifest. - Digest string `json:"digest"` - - // Method holds the HTTP method of the request. For pulls, this should be - // one of HEAD (digest resolution or existence check), or GET to actually - // fetch the content. - Method string `json:"method"` - - // Type determines whether the object being fetched is a manifest or blob. - Type string `json:"type"` - - // When holds when the pull occurred. - When civil.DateTime `json:"when"` - - // Location holds the detected approximate location of the client who pulled. - // For example, "ColumbusOHUS" or "Minato City13JP". - Location string `json:"location"` - - // UserAgent holds the user-agent of the client who pulled. - UserAgent string `json:"user_agent"` - - Error *Error `json:"error,omitempty"` -} - -// PushEvent describes an item being pushed to the registry. -type PushEvent struct { - // Repository identifies the repository being pushed - Repository string `json:"repository"` - - // RepoID identifies the UIDP of the repository being pushed - RepoID string `json:"repo_id"` - - // Tag holds the tag being pushed, if there is one. - Tag string `json:"tag,omitempty"` - - // Digest holds the digest being pushed. - // Digest will hold the sha256 of the content being pushed, whether that is - // a blob or a manifest. - Digest string `json:"digest"` - - // Type determines whether the object being pushed is a manifest or blob. - Type string `json:"type"` - - // When holds when the push occurred. - When civil.DateTime `json:"when"` - - // Location holds the detected approximate location of the client who pushed. - // For example, "ColumbusOHUS" or "Minato City13JP". - Location string `json:"location"` - - // UserAgent holds the user-agent of the client who pushed. - UserAgent string `json:"user_agent"` - - Error *Error `json:"error,omitempty"` -} - -type Error struct { - Status int `json:"status"` - Code string `json:"code"` - Message string `json:"message"` -} diff --git a/events/webhook.go b/events/webhook.go deleted file mode 100644 index 56a17013..00000000 --- a/events/webhook.go +++ /dev/null @@ -1,14 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package events - -// WebhookCustomClaims holds the custom claims embedded in the webhook's -// OIDC authorization token. -type WebhookCustomClaims struct { - Webhook struct { - Digest string `json:"digest"` - } `json:"webhook"` -} diff --git a/go.mod b/go.mod deleted file mode 100644 index 01999ae3..00000000 --- a/go.mod +++ /dev/null @@ -1,76 +0,0 @@ -module chainguard.dev/sdk - -go 1.22.2 - -require ( - chainguard.dev/go-grpc-kit v0.17.2 - chainguard.dev/go-oidctest v0.3.1 - github.com/aws/aws-sdk-go-v2 v1.26.0 - github.com/bits-and-blooms/bitset v1.13.0 - github.com/chainguard-dev/clog v1.3.1 - github.com/cloudevents/sdk-go/v2 v2.15.2 - github.com/coreos/go-oidc/v3 v3.10.0 - github.com/go-jose/go-jose/v3 v3.0.3 - github.com/google/go-cmp v0.6.0 - github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 - github.com/microcosm-cc/bluemonday v1.0.26 - github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c - github.com/russross/blackfriday/v2 v2.1.0 - go.uber.org/zap v1.27.0 - golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb - golang.org/x/oauth2 v0.19.0 - google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c - google.golang.org/grpc v1.63.2 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.33.0 - k8s.io/apimachinery v0.29.1 -) - -require ( - github.com/aws/smithy-go v1.20.1 // indirect - github.com/aymerick/douceur v0.2.0 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/blendle/zapdriver v1.3.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/go-jose/go-jose/v4 v4.0.1 // indirect - github.com/go-logr/logr v1.4.1 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/css v1.0.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect - github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/kelseyhightower/envconfig v1.4.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.19.0 // indirect - github.com/prometheus/client_model v0.6.0 // indirect - github.com/prometheus/common v0.51.1 // indirect - github.com/prometheus/procfs v0.12.0 // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect - go.opentelemetry.io/otel v1.26.0 // indirect - go.opentelemetry.io/otel/metric v1.26.0 // indirect - go.opentelemetry.io/otel/trace v1.26.0 // indirect - go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.22.0 // indirect - golang.org/x/net v0.24.0 // indirect - golang.org/x/sys v0.19.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.19.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect - gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.29.1 // indirect - k8s.io/klog/v2 v2.120.1 // indirect - k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect - knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845 // indirect - sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect -) diff --git a/go.sum b/go.sum deleted file mode 100644 index 3d01b98d..00000000 --- a/go.sum +++ /dev/null @@ -1,308 +0,0 @@ -chainguard.dev/go-grpc-kit v0.17.2 h1:WVYmCjDncj1MkEiU4qq7nIgzyqlCU+qyk0lJvTJ09bs= -chainguard.dev/go-grpc-kit v0.17.2/go.mod h1:uZTFtFzAGyVFHhJexiHbna4N5rHQU7aUXPwytlGhqz4= -chainguard.dev/go-oidctest v0.3.1 h1:Q1OvIVIcl+i0hqgmrXZLeDhSjtDjbnLEBASoTbhyuBY= -chainguard.dev/go-oidctest v0.3.1/go.mod h1:TDN6MPJ6BEzWtorS9/dHzzGiaBpPRnRONv2SE0mqitU= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aws/aws-sdk-go-v2 v1.26.0 h1:/Ce4OCiM3EkpW7Y+xUnfAFpchU78K7/Ug01sZni9PgA= -github.com/aws/aws-sdk-go-v2 v1.26.0/go.mod h1:35hUlJVYd+M++iLI3ALmVwMOyRYMmRqUXpTtRGW+K9I= -github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= -github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= -github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= -github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= -github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= -github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chainguard-dev/clog v1.3.1 h1:CDNCty5WKQhJzoOPubk0GdXt+bPQyargmfClqebrpaQ= -github.com/chainguard-dev/clog v1.3.1/go.mod h1:cV516KZWqYc/phZsCNwF36u/KMGS+Gj5Uqeb8Hlp95Y= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudevents/sdk-go/v2 v2.15.2 h1:54+I5xQEnI73RBhWHxbI1XJcqOFOVJN85vb41+8mHUc= -github.com/cloudevents/sdk-go/v2 v2.15.2/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/go-oidc/v3 v3.10.0 h1:tDnXHnLyiTVyT/2zLDGj09pFPkhND8Gl8lnTRhoEaJU= -github.com/coreos/go-oidc/v3 v3.10.0/go.mod h1:5j11xcw0D3+SGxn6Z/WFADsgcWVMyNAlSQupk0KK3ac= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= -github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= -github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U= -github.com/go-jose/go-jose/v4 v4.0.1/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 h1:JYghRBlGCZyCF2wNUJ8W0cwaQdtpcssJ4CgC406g+WU= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= -github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58= -github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= -github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= -github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= -github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= -github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.51.1 h1:eIjN50Bwglz6a/c3hAgSMcofL3nD+nFQkV6Dd4DsQCw= -github.com/prometheus/common v0.51.1/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= -github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= -go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= -go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= -go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= -go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= -go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= -go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= -go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= -golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= -golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= -golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= -golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= -golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= -golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= -golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c h1:kaI7oewGK5YnVwj+Y+EJBO/YN1ht8iTL9XkFHtVZLsc= -google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.29.1 h1:DAjwWX/9YT7NQD4INu49ROJuZAAAP/Ijki48GUPzxqw= -k8s.io/api v0.29.1/go.mod h1:7Kl10vBRUXhnQQI8YR/R327zXC8eJ7887/+Ybta+RoQ= -k8s.io/apimachinery v0.29.1 h1:KY4/E6km/wLBguvCZv8cKTeOwwOBqFNjwJIdMkMbbRc= -k8s.io/apimachinery v0.29.1/go.mod h1:6HVkd1FwxIagpYrHSwJlQqZI3G9LfYWRPAkUvLnXTKU= -k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= -k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845 h1:NJm46LR4AeO03E0H7B+TYTkelTSnsswktpIAaK1pkTg= -knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845/go.mod h1:9UXGl+Sue7Am1/mbvLimpPZwQlOkbjAMMIenH60pVJ4= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= -sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/hack/tools.go b/hack/tools.go deleted file mode 100644 index eea6e0ce..00000000 --- a/hack/tools.go +++ /dev/null @@ -1,17 +0,0 @@ -//go:build tools -// +build tools - -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package tools - -import ( - // Proto dependencies. - _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway" - _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2" - _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc" - _ "google.golang.org/protobuf/cmd/protoc-gen-go" -) diff --git a/hack/update-codegen.sh b/hack/update-codegen.sh deleted file mode 100755 index a557bd13..00000000 --- a/hack/update-codegen.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -# Copyright 2022 Chainguard, Inc. -# SPDX-License-Identifier: Apache-2.0 - -set -o errexit -set -o nounset -set -o pipefail - -REPO_ROOT_DIR=$PWD/$(dirname "$0")/.. - -echo === Tidying up for Golang -go mod tidy - -echo === Generating for Golang -go generate ./... - -# Make sure our dependencies are up-to-date -${REPO_ROOT_DIR}/hack/update-deps.sh diff --git a/hack/update-deps.sh b/hack/update-deps.sh deleted file mode 100755 index 19e9873e..00000000 --- a/hack/update-deps.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -# Copyright 2022 Chainguard, Inc. -# SPDX-License-Identifier: Apache-2.0 - -set -o errexit -set -o nounset -set -o pipefail - -REPO_ROOT_DIR=$(dirname "$0")/.. -pushd ${REPO_ROOT_DIR} - -echo === Update Deps for Golang -go mod tidy diff --git a/hack/verify-golangci-lint.sh b/hack/verify-golangci-lint.sh deleted file mode 100755 index ec8c6ef0..00000000 --- a/hack/verify-golangci-lint.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash - -# Copyright 2023 Chainguard, Inc. -# SPDX-License-Identifier: Apache-2.0 - -set -o errexit -set -o nounset -set -o pipefail - -VERSION=v1.54.2 -URL_BASE=https://raw.githubusercontent.com/golangci/golangci-lint -URL=$URL_BASE/$VERSION/install.sh -# If you update the version above you might need to update the checksum -# if it does not match. We say might because in the past the install script -# has been unchanged even if there is a new verion of golangci-lint. -# To obtain the checksum, download the install script and run the following -# command: -# > sha256sum -INSTALL_CHECKSUM=060f1f3deb31b3d3b9515d691d9a776354cd63c7fcb5e036f18f0444cf2c934b - -if [[ ! -f .golangci.yml ]]; then - echo 'ERROR: missing .golangci.yml in repo root' >&2 - exit 1 -fi - -if ! command -v golangci-lint; then - INSTALL_SCRIPT=$(mktemp -d)/install.sh - curl -sfL $URL >$INSTALL_SCRIPT - if echo "${INSTALL_CHECKSUM} $INSTALL_SCRIPT" | sha256sum --check; then - chmod 755 $INSTALL_SCRIPT - $INSTALL_SCRIPT -b /tmp $VERSION - export PATH=$PATH:/tmp - pwd - else - echo 'ERROR: install script sha256 checksum invalid' >&2 - exit 1 - fi -fi - -golangci-lint version - -error=0 -while read -r i; do - echo "Checking golangci-lint for $i" - pushd "$i" - golangci-lint run ./... || error=1 - popd -done <<< "$(find . -name go.mod -exec dirname {} \;)" - -exit $error diff --git a/proto/annotations/auth.pb.go b/proto/annotations/auth.pb.go deleted file mode 100644 index b41797d0..00000000 --- a/proto/annotations/auth.pb.go +++ /dev/null @@ -1,342 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: auth.proto - -package annotations - -import ( - capabilities "chainguard.dev/sdk/proto/capabilities" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - emptypb "google.golang.org/protobuf/types/known/emptypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type IAM struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Mode: - // - // *IAM_Disabled - // *IAM_Enabled - Mode isIAM_Mode `protobuf_oneof:"mode"` -} - -func (x *IAM) Reset() { - *x = IAM{} - if protoimpl.UnsafeEnabled { - mi := &file_auth_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IAM) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IAM) ProtoMessage() {} - -func (x *IAM) ProtoReflect() protoreflect.Message { - mi := &file_auth_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IAM.ProtoReflect.Descriptor instead. -func (*IAM) Descriptor() ([]byte, []int) { - return file_auth_proto_rawDescGZIP(), []int{0} -} - -func (m *IAM) GetMode() isIAM_Mode { - if m != nil { - return m.Mode - } - return nil -} - -func (x *IAM) GetDisabled() *emptypb.Empty { - if x, ok := x.GetMode().(*IAM_Disabled); ok { - return x.Disabled - } - return nil -} - -func (x *IAM) GetEnabled() *IAM_Rules { - if x, ok := x.GetMode().(*IAM_Enabled); ok { - return x.Enabled - } - return nil -} - -type isIAM_Mode interface { - isIAM_Mode() -} - -type IAM_Disabled struct { - Disabled *emptypb.Empty `protobuf:"bytes,1,opt,name=disabled,proto3,oneof"` -} - -type IAM_Enabled struct { - Enabled *IAM_Rules `protobuf:"bytes,2,opt,name=enabled,proto3,oneof"` -} - -func (*IAM_Disabled) isIAM_Mode() {} - -func (*IAM_Enabled) isIAM_Mode() {} - -type IAM_Rules struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of capabilities required by a particular API. - // This field is either scoped or unscoped, as determined - // by the field below. - // - When it is "scoped", this field is combined with the - // field designated by "(iam_scope) = true" (see below) - // on the request message to indicate what capabilities - // the caller needs at what scope in order to authorize - // the action they are performing. - // - When is it "unscoped", this field is used to determine - // the set of scopes the caller has the appropriate access - // to so that the RPC itself can scope down the results - // it returns. - Capabilities []capabilities.Capability `protobuf:"varint,1,rep,packed,name=capabilities,proto3,enum=chainguard.capabilities.Capability" json:"capabilities,omitempty"` - // Unscoped is set on APIs where the request itself doesn't - // carry a field with "iam_scope", and instead scopes itself - // to the set of groups to which the caller has access - // according to their OIDC token. - Unscoped bool `protobuf:"varint,2,opt,name=unscoped,proto3" json:"unscoped,omitempty"` -} - -func (x *IAM_Rules) Reset() { - *x = IAM_Rules{} - if protoimpl.UnsafeEnabled { - mi := &file_auth_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IAM_Rules) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IAM_Rules) ProtoMessage() {} - -func (x *IAM_Rules) ProtoReflect() protoreflect.Message { - mi := &file_auth_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IAM_Rules.ProtoReflect.Descriptor instead. -func (*IAM_Rules) Descriptor() ([]byte, []int) { - return file_auth_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *IAM_Rules) GetCapabilities() []capabilities.Capability { - if x != nil { - return x.Capabilities - } - return nil -} - -func (x *IAM_Rules) GetUnscoped() bool { - if x != nil { - return x.Unscoped - } - return false -} - -var file_auth_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: (*IAM)(nil), - Field: 189350641, - Name: "chainguard.annotations.iam", - Tag: "bytes,189350641,opt,name=iam", - Filename: "auth.proto", - }, - { - ExtendedType: (*descriptorpb.FieldOptions)(nil), - ExtensionType: (*bool)(nil), - Field: 189350642, - Name: "chainguard.annotations.iam_scope", - Tag: "varint,189350642,opt,name=iam_scope", - Filename: "auth.proto", - }, -} - -// Extension fields to descriptorpb.MethodOptions. -var ( - // optional chainguard.annotations.IAM iam = 189350641; - E_Iam = &file_auth_proto_extTypes[0] // randomly chosen -) - -// Extension fields to descriptorpb.FieldOptions. -var ( - // optional bool iam_scope = 189350642; - E_IamScope = &file_auth_proto_extTypes[1] // one more than above -) - -var File_auth_proto protoreflect.FileDescriptor - -var file_auth_proto_rawDesc = []byte{ - 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x2f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf0, 0x01, 0x0a, 0x03, 0x49, 0x41, 0x4d, 0x12, 0x34, 0x0a, 0x08, - 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x41, 0x4d, - 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x1a, 0x6c, 0x0a, 0x05, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x63, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x6e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x75, 0x6e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x42, - 0x06, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x3a, 0x50, 0x0a, 0x03, 0x69, 0x61, 0x6d, 0x12, 0x1e, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf1, - 0x85, 0xa5, 0x5a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x49, 0x41, 0x4d, 0x52, 0x03, 0x69, 0x61, 0x6d, 0x3a, 0x3d, 0x0a, 0x09, 0x69, 0x61, 0x6d, - 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf2, 0x85, 0xa5, 0x5a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x69, 0x61, 0x6d, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x5a, 0x0a, 0x1e, 0x64, 0x65, 0x76, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x24, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, - 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_auth_proto_rawDescOnce sync.Once - file_auth_proto_rawDescData = file_auth_proto_rawDesc -) - -func file_auth_proto_rawDescGZIP() []byte { - file_auth_proto_rawDescOnce.Do(func() { - file_auth_proto_rawDescData = protoimpl.X.CompressGZIP(file_auth_proto_rawDescData) - }) - return file_auth_proto_rawDescData -} - -var file_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_auth_proto_goTypes = []interface{}{ - (*IAM)(nil), // 0: chainguard.annotations.IAM - (*IAM_Rules)(nil), // 1: chainguard.annotations.IAM.Rules - (*emptypb.Empty)(nil), // 2: google.protobuf.Empty - (capabilities.Capability)(0), // 3: chainguard.capabilities.Capability - (*descriptorpb.MethodOptions)(nil), // 4: google.protobuf.MethodOptions - (*descriptorpb.FieldOptions)(nil), // 5: google.protobuf.FieldOptions -} -var file_auth_proto_depIdxs = []int32{ - 2, // 0: chainguard.annotations.IAM.disabled:type_name -> google.protobuf.Empty - 1, // 1: chainguard.annotations.IAM.enabled:type_name -> chainguard.annotations.IAM.Rules - 3, // 2: chainguard.annotations.IAM.Rules.capabilities:type_name -> chainguard.capabilities.Capability - 4, // 3: chainguard.annotations.iam:extendee -> google.protobuf.MethodOptions - 5, // 4: chainguard.annotations.iam_scope:extendee -> google.protobuf.FieldOptions - 0, // 5: chainguard.annotations.iam:type_name -> chainguard.annotations.IAM - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 5, // [5:6] is the sub-list for extension type_name - 3, // [3:5] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_auth_proto_init() } -func file_auth_proto_init() { - if File_auth_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_auth_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IAM); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_auth_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IAM_Rules); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_auth_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*IAM_Disabled)(nil), - (*IAM_Enabled)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_auth_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 2, - NumServices: 0, - }, - GoTypes: file_auth_proto_goTypes, - DependencyIndexes: file_auth_proto_depIdxs, - MessageInfos: file_auth_proto_msgTypes, - ExtensionInfos: file_auth_proto_extTypes, - }.Build() - File_auth_proto = out.File - file_auth_proto_rawDesc = nil - file_auth_proto_goTypes = nil - file_auth_proto_depIdxs = nil -} diff --git a/proto/annotations/auth.proto b/proto/annotations/auth.proto deleted file mode 100644 index 99f29d9e..00000000 --- a/proto/annotations/auth.proto +++ /dev/null @@ -1,49 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/annotations"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.annotations"; -option java_outer_classname = "AnnotationsProto"; - -package chainguard.annotations; - -import "google/protobuf/descriptor.proto"; -import "google/protobuf/empty.proto"; -import "capabilities/capabilities.proto"; - -extend google.protobuf.MethodOptions { - IAM iam = 189350641; // randomly chosen -} - -message IAM { - oneof mode { - google.protobuf.Empty disabled = 1; - Rules enabled = 2; - } - - message Rules { - // A list of capabilities required by a particular API. - // This field is either scoped or unscoped, as determined - // by the field below. - // * When it is "scoped", this field is combined with the - // field designated by "(iam_scope) = true" (see below) - // on the request message to indicate what capabilities - // the caller needs at what scope in order to authorize - // the action they are performing. - // * When is it "unscoped", this field is used to determine - // the set of scopes the caller has the appropriate access - // to so that the RPC itself can scope down the results - // it returns. - repeated chainguard.capabilities.Capability capabilities = 1; - - // Unscoped is set on APIs where the request itself doesn't - // carry a field with "iam_scope", and instead scopes itself - // to the set of groups to which the caller has access - // according to their OIDC token. - bool unscoped = 2; - } -} - -extend google.protobuf.FieldOptions { - bool iam_scope = 189350642; // one more than above -} diff --git a/proto/annotations/doc.go b/proto/annotations/doc.go deleted file mode 100644 index 705d5049..00000000 --- a/proto/annotations/doc.go +++ /dev/null @@ -1,11 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package accounts contains the GRPC client and server definitions -// for implementing Auth interactions for the Console. -// -//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. auth.proto -//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. events.proto -package annotations diff --git a/proto/annotations/events.pb.go b/proto/annotations/events.pb.go deleted file mode 100644 index 0b371f7d..00000000 --- a/proto/annotations/events.pb.go +++ /dev/null @@ -1,258 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: events.proto - -package annotations - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type EventAttributes_Audience int32 - -const ( - // intended for inside the bounds of the platform. - EventAttributes_INTERNAL EventAttributes_Audience = 0 - // allowed to be sent outside the platform. - EventAttributes_CUSTOMER EventAttributes_Audience = 1 -) - -// Enum value maps for EventAttributes_Audience. -var ( - EventAttributes_Audience_name = map[int32]string{ - 0: "INTERNAL", - 1: "CUSTOMER", - } - EventAttributes_Audience_value = map[string]int32{ - "INTERNAL": 0, - "CUSTOMER": 1, - } -) - -func (x EventAttributes_Audience) Enum() *EventAttributes_Audience { - p := new(EventAttributes_Audience) - *p = x - return p -} - -func (x EventAttributes_Audience) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (EventAttributes_Audience) Descriptor() protoreflect.EnumDescriptor { - return file_events_proto_enumTypes[0].Descriptor() -} - -func (EventAttributes_Audience) Type() protoreflect.EnumType { - return &file_events_proto_enumTypes[0] -} - -func (x EventAttributes_Audience) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use EventAttributes_Audience.Descriptor instead. -func (EventAttributes_Audience) EnumDescriptor() ([]byte, []int) { - return file_events_proto_rawDescGZIP(), []int{0, 0} -} - -type EventAttributes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // type is the cloudevent type to use for the outbound event. - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - // extensions lists which extensions - Extensions []string `protobuf:"bytes,2,rep,name=extensions,proto3" json:"extensions,omitempty"` - // audience is the intended audience for the event. - Audience EventAttributes_Audience `protobuf:"varint,3,opt,name=audience,proto3,enum=chainguard.annotations.EventAttributes_Audience" json:"audience,omitempty"` -} - -func (x *EventAttributes) Reset() { - *x = EventAttributes{} - if protoimpl.UnsafeEnabled { - mi := &file_events_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EventAttributes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EventAttributes) ProtoMessage() {} - -func (x *EventAttributes) ProtoReflect() protoreflect.Message { - mi := &file_events_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EventAttributes.ProtoReflect.Descriptor instead. -func (*EventAttributes) Descriptor() ([]byte, []int) { - return file_events_proto_rawDescGZIP(), []int{0} -} - -func (x *EventAttributes) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *EventAttributes) GetExtensions() []string { - if x != nil { - return x.Extensions - } - return nil -} - -func (x *EventAttributes) GetAudience() EventAttributes_Audience { - if x != nil { - return x.Audience - } - return EventAttributes_INTERNAL -} - -var file_events_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: (*EventAttributes)(nil), - Field: 401635080, - Name: "chainguard.annotations.events", - Tag: "bytes,401635080,opt,name=events", - Filename: "events.proto", - }, -} - -// Extension fields to descriptorpb.MethodOptions. -var ( - // optional chainguard.annotations.EventAttributes events = 401635080; - E_Events = &file_events_proto_extTypes[0] // randomly chosen -) - -var File_events_proto protoreflect.FileDescriptor - -var file_events_proto_rawDesc = []byte{ - 0x0a, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x01, 0x0a, 0x0f, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x4c, 0x0a, 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x64, 0x69, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x26, - 0x0a, 0x08, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, - 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x55, 0x53, 0x54, - 0x4f, 0x4d, 0x45, 0x52, 0x10, 0x01, 0x3a, 0x63, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x88, 0xee, 0xc1, 0xbf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x5a, 0x0a, 0x1e, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, - 0x6b, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x24, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, - 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_events_proto_rawDescOnce sync.Once - file_events_proto_rawDescData = file_events_proto_rawDesc -) - -func file_events_proto_rawDescGZIP() []byte { - file_events_proto_rawDescOnce.Do(func() { - file_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_events_proto_rawDescData) - }) - return file_events_proto_rawDescData -} - -var file_events_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_events_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_events_proto_goTypes = []interface{}{ - (EventAttributes_Audience)(0), // 0: chainguard.annotations.EventAttributes.Audience - (*EventAttributes)(nil), // 1: chainguard.annotations.EventAttributes - (*descriptorpb.MethodOptions)(nil), // 2: google.protobuf.MethodOptions -} -var file_events_proto_depIdxs = []int32{ - 0, // 0: chainguard.annotations.EventAttributes.audience:type_name -> chainguard.annotations.EventAttributes.Audience - 2, // 1: chainguard.annotations.events:extendee -> google.protobuf.MethodOptions - 1, // 2: chainguard.annotations.events:type_name -> chainguard.annotations.EventAttributes - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 2, // [2:3] is the sub-list for extension type_name - 1, // [1:2] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_events_proto_init() } -func file_events_proto_init() { - if File_events_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EventAttributes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_events_proto_rawDesc, - NumEnums: 1, - NumMessages: 1, - NumExtensions: 1, - NumServices: 0, - }, - GoTypes: file_events_proto_goTypes, - DependencyIndexes: file_events_proto_depIdxs, - EnumInfos: file_events_proto_enumTypes, - MessageInfos: file_events_proto_msgTypes, - ExtensionInfos: file_events_proto_extTypes, - }.Build() - File_events_proto = out.File - file_events_proto_rawDesc = nil - file_events_proto_goTypes = nil - file_events_proto_depIdxs = nil -} diff --git a/proto/annotations/events.proto b/proto/annotations/events.proto deleted file mode 100644 index f2d0839f..00000000 --- a/proto/annotations/events.proto +++ /dev/null @@ -1,29 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/annotations"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.annotations"; -option java_outer_classname = "AnnotationsProto"; - -package chainguard.annotations; - -import "google/protobuf/descriptor.proto"; - -extend google.protobuf.MethodOptions { - EventAttributes events = 401635080; // randomly chosen -} - -message EventAttributes { - // type is the cloudevent type to use for the outbound event. - string type = 1; - // extensions lists which extensions - repeated string extensions = 2; - enum Audience { - // intended for inside the bounds of the platform. - INTERNAL = 0; - // allowed to be sent outside the platform. - CUSTOMER = 1; - } - // audience is the intended audience for the event. - Audience audience = 3; -} diff --git a/proto/capabilities/capabilities.go b/proto/capabilities/capabilities.go deleted file mode 100644 index 71e89e01..00000000 --- a/proto/capabilities/capabilities.go +++ /dev/null @@ -1,189 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package capabilities - -import ( - "context" - "encoding/json" - "fmt" - "io" - "sort" - "strings" - "sync" - - "github.com/bits-and-blooms/bitset" - "github.com/chainguard-dev/clog" - "go.uber.org/zap" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" - "google.golang.org/protobuf/types/descriptorpb" -) - -var ( - // Map of stringified name to capability. Initialized with initNameCapabilityMap() - nameCapabilityMap = make(map[string]Capability, len(Capability_value)) - ponce sync.Once - perror error -) - -// Names returns a slice of all capabilities Stringify'd, sans UNKNOWN. -func Names() []string { - all := make([]string, 0, len(Capability_name)-1) // One less, we don't want UNKNOWN - for n := range Capability_name { - if Capability(n) == Capability_UNKNOWN { - continue - } - sc, err := Stringify(Capability(n)) - if err != nil { - // This should never happen! - continue - } - all = append(all, sc) - } - return all -} - -func Stringify(cap Capability) (string, error) { - evd := cap.Descriptor().Values().ByNumber(cap.Number()) - if evd == nil { - return "", status.Errorf(codes.Internal, "capability has no descriptor: %v", cap) - } - opt := evd.Options() - if opt == nil { - return "", status.Errorf(codes.Internal, "capability has no options: %v", cap) - } - evo := opt.(*descriptorpb.EnumValueOptions) - name := proto.GetExtension(evo, E_Name) - if name == nil { - return "", status.Errorf(codes.Internal, "capability is missing the name option: %v", cap) - } - return name.(string), nil -} - -func StringifyAll(caps []Capability) ([]string, error) { - scs := make([]string, 0, len(caps)) - for _, cap := range caps { - sc, err := Stringify(cap) - if err != nil { - return nil, err - } - scs = append(scs, sc) - } - return scs, nil -} - -func Parse(name string) (Capability, error) { - ponce.Do(func() { - // Populate nameCapabilityMap - for cap := range Capability_name { - scap, perror := Stringify(Capability(cap)) - if perror == nil { - nameCapabilityMap[scap] = Capability(cap) - } else { - clog.FromContext(context.Background()).Errorf("Failed to stringify capability %d, error: %v", - cap, zap.Error(perror)) - } - } - }) - - if perror != nil { - return Capability_UNKNOWN, perror - } - return nameCapabilityMap[name], nil -} - -func Bitify(cap Capability) (uint32, error) { - evd := cap.Descriptor().Values().ByNumber(cap.Number()) - if evd == nil { - return 0, status.Errorf(codes.Internal, "capability has no descriptor: %v", cap) - } - opt := evd.Options() - if opt == nil { - return 0, status.Errorf(codes.Internal, "capability has no options: %v", cap) - } - evo := opt.(*descriptorpb.EnumValueOptions) - name := proto.GetExtension(evo, E_Bit) - if name == nil { - return 0, status.Errorf(codes.Internal, "capability is missing the bit option: %v", cap) - } - return name.(uint32), nil -} - -// Set performs efficient encoding of a list of capabilities. -type Set []Capability - -func (s Set) String() string { - caps := make([]string, 0, len(s)) - for _, c := range s { - st, err := Stringify(c) - if err != nil { - st = fmt.Sprintf("[ERROR(cap=%d)", c) - } - caps = append(caps, st) - } - sort.Strings(caps) - return strings.Join(caps, ",") -} - -// MarshalJSON implements json.Marshaler -func (s Set) MarshalJSON() ([]byte, error) { - bs := bitset.New(50) - for _, cap := range s { - b, err := Bitify(cap) - if err != nil { - return nil, err - } - bs.Set(uint(b)) - } - return bs.MarshalJSON() -} - -// UnmarshalJSON implements json.Unmarshaler -func (s *Set) UnmarshalJSON(b []byte) error { - switch { - case len(b) == 0: - return io.EOF - - case b[0] == '[': - // Legacy decoding! - var caps []Capability - if err := json.Unmarshal(b, &caps); err != nil { - return err - } - for _, cap := range caps { - *s = append(*s, cap) - } - return nil - - default: - // Compact encoding - var bs bitset.BitSet - if err := json.Unmarshal(b, &bs); err != nil { - return err - } - for i := range Capability_name { - cap := Capability(i) //nolint: revive - if cap == Capability_UNKNOWN { - continue - } - bit, err := Bitify(cap) - if err != nil { - return err - } - if bs.Test(uint(bit)) { - *s = append(*s, cap) - // This ensures that our unit testing checks that no two - // enumeration values are assigned the same bit. - bs.Clear(uint(bit)) - } - } - sort.Slice(*s, func(i int, j int) bool { - return (*s)[i] < (*s)[j] - }) - return nil - } -} diff --git a/proto/capabilities/capabilities.pb.go b/proto/capabilities/capabilities.pb.go deleted file mode 100644 index 69e77d49..00000000 --- a/proto/capabilities/capabilities.pb.go +++ /dev/null @@ -1,669 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: capabilities.proto - -package capabilities - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Capability is an enumeration of the Chainguard IAM capabilities. -type Capability int32 - -const ( - Capability_UNKNOWN Capability = 0 - Capability_CAP_IAM_GROUPS_CREATE Capability = 101 - Capability_CAP_IAM_GROUPS_UPDATE Capability = 102 - Capability_CAP_IAM_GROUPS_LIST Capability = 103 - Capability_CAP_IAM_GROUPS_DELETE Capability = 104 - Capability_CAP_IAM_GROUP_INVITES_CREATE Capability = 201 - Capability_CAP_IAM_GROUP_INVITES_LIST Capability = 203 - Capability_CAP_IAM_GROUP_INVITES_DELETE Capability = 204 - Capability_CAP_IAM_ROLES_CREATE Capability = 301 - Capability_CAP_IAM_ROLES_UPDATE Capability = 302 - Capability_CAP_IAM_ROLES_LIST Capability = 303 - Capability_CAP_IAM_ROLES_DELETE Capability = 304 - Capability_CAP_IAM_ROLE_BINDINGS_CREATE Capability = 401 - Capability_CAP_IAM_ROLE_BINDINGS_UPDATE Capability = 402 - Capability_CAP_IAM_ROLE_BINDINGS_LIST Capability = 403 - Capability_CAP_IAM_ROLE_BINDINGS_DELETE Capability = 404 - Capability_CAP_TENANT_CLUSTERS_CREATE Capability = 501 - Capability_CAP_TENANT_CLUSTERS_UPDATE Capability = 502 - Capability_CAP_TENANT_CLUSTERS_LIST Capability = 503 - Capability_CAP_TENANT_CLUSTERS_DELETE Capability = 504 - Capability_CAP_TENANT_CLUSTERS_DISCOVER Capability = 505 - Capability_CAP_TENANT_RECORDS_LIST Capability = 603 - Capability_CAP_TENANT_RECORD_CONTEXTS_LIST Capability = 613 - Capability_CAP_TENANT_RECORD_SIGNATURES_LIST Capability = 623 - Capability_CAP_TENANT_RECORD_POLICY_RESULTS_LIST Capability = 633 - Capability_CAP_TENANT_RISKS_LIST Capability = 640 - Capability_CAP_TENANT_SBOMS_LIST Capability = 650 - Capability_CAP_TENANT_VULN_REPORTS_LIST Capability = 660 - Capability_CAP_TENANT_ATTESTATIONS_LIST Capability = 670 - Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE Capability = 701 - Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE Capability = 702 - Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST Capability = 703 - Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE Capability = 704 - Capability_CAP_IAM_POLICY_CREATE Capability = 801 - Capability_CAP_IAM_POLICY_UPDATE Capability = 802 - Capability_CAP_IAM_POLICY_LIST Capability = 803 - Capability_CAP_IAM_POLICY_DELETE Capability = 804 - Capability_CAP_IAM_IDENTITY_CREATE Capability = 901 - Capability_CAP_IAM_IDENTITY_UPDATE Capability = 902 - Capability_CAP_IAM_IDENTITY_LIST Capability = 903 - Capability_CAP_IAM_IDENTITY_DELETE Capability = 904 - Capability_CAP_TENANT_NODES_LIST Capability = 1003 - Capability_CAP_TENANT_NAMESPACES_LIST Capability = 1103 - Capability_CAP_TENANT_WORKLOADS_LIST Capability = 1203 - Capability_CAP_IAM_IDENTITY_PROVIDERS_CREATE Capability = 1301 - Capability_CAP_IAM_IDENTITY_PROVIDERS_UPDATE Capability = 1302 - Capability_CAP_IAM_IDENTITY_PROVIDERS_LIST Capability = 1303 - Capability_CAP_IAM_IDENTITY_PROVIDERS_DELETE Capability = 1304 - Capability_CAP_EVENTS_SUBSCRIPTION_CREATE Capability = 1501 - Capability_CAP_EVENTS_SUBSCRIPTION_UPDATE Capability = 1502 - Capability_CAP_EVENTS_SUBSCRIPTION_LIST Capability = 1503 - Capability_CAP_EVENTS_SUBSCRIPTION_DELETE Capability = 1504 - // TODO(jason): Remove these coarse-grained capabilities after they're removed from the roles. - Capability_CAP_REGISTRY_PULL Capability = 1601 // Can read tags, blobs, manifests. - Capability_CAP_REGISTRY_PUSH Capability = 1602 // Can create and update tags, blobs, manifests. - Capability_CAP_REPO_CREATE Capability = 1603 - Capability_CAP_REPO_UPDATE Capability = 1604 - Capability_CAP_REPO_LIST Capability = 1605 - Capability_CAP_REPO_DELETE Capability = 1606 - Capability_CAP_MANIFEST_CREATE Capability = 1607 - Capability_CAP_MANIFEST_UPDATE Capability = 1608 - Capability_CAP_MANIFEST_LIST Capability = 1609 - Capability_CAP_MANIFEST_DELETE Capability = 1610 - Capability_CAP_TAG_CREATE Capability = 1611 - Capability_CAP_TAG_UPDATE Capability = 1612 - Capability_CAP_TAG_LIST Capability = 1613 - Capability_CAP_TAG_DELETE Capability = 1614 - Capability_CAP_MANIFEST_METADATA_LIST Capability = 1615 - Capability_CAP_SIGSTORE_CREATE Capability = 1701 - Capability_CAP_SIGSTORE_UPDATE Capability = 1702 - Capability_CAP_SIGSTORE_LIST Capability = 1703 - Capability_CAP_SIGSTORE_DELETE Capability = 1704 - Capability_CAP_SIGSTORE_CERTIFICATE_CREATE Capability = 1705 - // This is orthogonal enough that we should leave - // it somewhat separate, so add new capabilities above. - // TODO(mattmoor): Think about whether we can encode specific - // controller capabilities into our access control here? - // e.g. could each logical controller/webhook be its own - // capability? - Capability_CAP_GULFSTREAM Capability = 10000 -) - -// Enum value maps for Capability. -var ( - Capability_name = map[int32]string{ - 0: "UNKNOWN", - 101: "CAP_IAM_GROUPS_CREATE", - 102: "CAP_IAM_GROUPS_UPDATE", - 103: "CAP_IAM_GROUPS_LIST", - 104: "CAP_IAM_GROUPS_DELETE", - 201: "CAP_IAM_GROUP_INVITES_CREATE", - 203: "CAP_IAM_GROUP_INVITES_LIST", - 204: "CAP_IAM_GROUP_INVITES_DELETE", - 301: "CAP_IAM_ROLES_CREATE", - 302: "CAP_IAM_ROLES_UPDATE", - 303: "CAP_IAM_ROLES_LIST", - 304: "CAP_IAM_ROLES_DELETE", - 401: "CAP_IAM_ROLE_BINDINGS_CREATE", - 402: "CAP_IAM_ROLE_BINDINGS_UPDATE", - 403: "CAP_IAM_ROLE_BINDINGS_LIST", - 404: "CAP_IAM_ROLE_BINDINGS_DELETE", - 501: "CAP_TENANT_CLUSTERS_CREATE", - 502: "CAP_TENANT_CLUSTERS_UPDATE", - 503: "CAP_TENANT_CLUSTERS_LIST", - 504: "CAP_TENANT_CLUSTERS_DELETE", - 505: "CAP_TENANT_CLUSTERS_DISCOVER", - 603: "CAP_TENANT_RECORDS_LIST", - 613: "CAP_TENANT_RECORD_CONTEXTS_LIST", - 623: "CAP_TENANT_RECORD_SIGNATURES_LIST", - 633: "CAP_TENANT_RECORD_POLICY_RESULTS_LIST", - 640: "CAP_TENANT_RISKS_LIST", - 650: "CAP_TENANT_SBOMS_LIST", - 660: "CAP_TENANT_VULN_REPORTS_LIST", - 670: "CAP_TENANT_ATTESTATIONS_LIST", - 701: "CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE", - 702: "CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE", - 703: "CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST", - 704: "CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE", - 801: "CAP_IAM_POLICY_CREATE", - 802: "CAP_IAM_POLICY_UPDATE", - 803: "CAP_IAM_POLICY_LIST", - 804: "CAP_IAM_POLICY_DELETE", - 901: "CAP_IAM_IDENTITY_CREATE", - 902: "CAP_IAM_IDENTITY_UPDATE", - 903: "CAP_IAM_IDENTITY_LIST", - 904: "CAP_IAM_IDENTITY_DELETE", - 1003: "CAP_TENANT_NODES_LIST", - 1103: "CAP_TENANT_NAMESPACES_LIST", - 1203: "CAP_TENANT_WORKLOADS_LIST", - 1301: "CAP_IAM_IDENTITY_PROVIDERS_CREATE", - 1302: "CAP_IAM_IDENTITY_PROVIDERS_UPDATE", - 1303: "CAP_IAM_IDENTITY_PROVIDERS_LIST", - 1304: "CAP_IAM_IDENTITY_PROVIDERS_DELETE", - 1501: "CAP_EVENTS_SUBSCRIPTION_CREATE", - 1502: "CAP_EVENTS_SUBSCRIPTION_UPDATE", - 1503: "CAP_EVENTS_SUBSCRIPTION_LIST", - 1504: "CAP_EVENTS_SUBSCRIPTION_DELETE", - 1601: "CAP_REGISTRY_PULL", - 1602: "CAP_REGISTRY_PUSH", - 1603: "CAP_REPO_CREATE", - 1604: "CAP_REPO_UPDATE", - 1605: "CAP_REPO_LIST", - 1606: "CAP_REPO_DELETE", - 1607: "CAP_MANIFEST_CREATE", - 1608: "CAP_MANIFEST_UPDATE", - 1609: "CAP_MANIFEST_LIST", - 1610: "CAP_MANIFEST_DELETE", - 1611: "CAP_TAG_CREATE", - 1612: "CAP_TAG_UPDATE", - 1613: "CAP_TAG_LIST", - 1614: "CAP_TAG_DELETE", - 1615: "CAP_MANIFEST_METADATA_LIST", - 1701: "CAP_SIGSTORE_CREATE", - 1702: "CAP_SIGSTORE_UPDATE", - 1703: "CAP_SIGSTORE_LIST", - 1704: "CAP_SIGSTORE_DELETE", - 1705: "CAP_SIGSTORE_CERTIFICATE_CREATE", - 10000: "CAP_GULFSTREAM", - } - Capability_value = map[string]int32{ - "UNKNOWN": 0, - "CAP_IAM_GROUPS_CREATE": 101, - "CAP_IAM_GROUPS_UPDATE": 102, - "CAP_IAM_GROUPS_LIST": 103, - "CAP_IAM_GROUPS_DELETE": 104, - "CAP_IAM_GROUP_INVITES_CREATE": 201, - "CAP_IAM_GROUP_INVITES_LIST": 203, - "CAP_IAM_GROUP_INVITES_DELETE": 204, - "CAP_IAM_ROLES_CREATE": 301, - "CAP_IAM_ROLES_UPDATE": 302, - "CAP_IAM_ROLES_LIST": 303, - "CAP_IAM_ROLES_DELETE": 304, - "CAP_IAM_ROLE_BINDINGS_CREATE": 401, - "CAP_IAM_ROLE_BINDINGS_UPDATE": 402, - "CAP_IAM_ROLE_BINDINGS_LIST": 403, - "CAP_IAM_ROLE_BINDINGS_DELETE": 404, - "CAP_TENANT_CLUSTERS_CREATE": 501, - "CAP_TENANT_CLUSTERS_UPDATE": 502, - "CAP_TENANT_CLUSTERS_LIST": 503, - "CAP_TENANT_CLUSTERS_DELETE": 504, - "CAP_TENANT_CLUSTERS_DISCOVER": 505, - "CAP_TENANT_RECORDS_LIST": 603, - "CAP_TENANT_RECORD_CONTEXTS_LIST": 613, - "CAP_TENANT_RECORD_SIGNATURES_LIST": 623, - "CAP_TENANT_RECORD_POLICY_RESULTS_LIST": 633, - "CAP_TENANT_RISKS_LIST": 640, - "CAP_TENANT_SBOMS_LIST": 650, - "CAP_TENANT_VULN_REPORTS_LIST": 660, - "CAP_TENANT_ATTESTATIONS_LIST": 670, - "CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE": 701, - "CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE": 702, - "CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST": 703, - "CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE": 704, - "CAP_IAM_POLICY_CREATE": 801, - "CAP_IAM_POLICY_UPDATE": 802, - "CAP_IAM_POLICY_LIST": 803, - "CAP_IAM_POLICY_DELETE": 804, - "CAP_IAM_IDENTITY_CREATE": 901, - "CAP_IAM_IDENTITY_UPDATE": 902, - "CAP_IAM_IDENTITY_LIST": 903, - "CAP_IAM_IDENTITY_DELETE": 904, - "CAP_TENANT_NODES_LIST": 1003, - "CAP_TENANT_NAMESPACES_LIST": 1103, - "CAP_TENANT_WORKLOADS_LIST": 1203, - "CAP_IAM_IDENTITY_PROVIDERS_CREATE": 1301, - "CAP_IAM_IDENTITY_PROVIDERS_UPDATE": 1302, - "CAP_IAM_IDENTITY_PROVIDERS_LIST": 1303, - "CAP_IAM_IDENTITY_PROVIDERS_DELETE": 1304, - "CAP_EVENTS_SUBSCRIPTION_CREATE": 1501, - "CAP_EVENTS_SUBSCRIPTION_UPDATE": 1502, - "CAP_EVENTS_SUBSCRIPTION_LIST": 1503, - "CAP_EVENTS_SUBSCRIPTION_DELETE": 1504, - "CAP_REGISTRY_PULL": 1601, - "CAP_REGISTRY_PUSH": 1602, - "CAP_REPO_CREATE": 1603, - "CAP_REPO_UPDATE": 1604, - "CAP_REPO_LIST": 1605, - "CAP_REPO_DELETE": 1606, - "CAP_MANIFEST_CREATE": 1607, - "CAP_MANIFEST_UPDATE": 1608, - "CAP_MANIFEST_LIST": 1609, - "CAP_MANIFEST_DELETE": 1610, - "CAP_TAG_CREATE": 1611, - "CAP_TAG_UPDATE": 1612, - "CAP_TAG_LIST": 1613, - "CAP_TAG_DELETE": 1614, - "CAP_MANIFEST_METADATA_LIST": 1615, - "CAP_SIGSTORE_CREATE": 1701, - "CAP_SIGSTORE_UPDATE": 1702, - "CAP_SIGSTORE_LIST": 1703, - "CAP_SIGSTORE_DELETE": 1704, - "CAP_SIGSTORE_CERTIFICATE_CREATE": 1705, - "CAP_GULFSTREAM": 10000, - } -) - -func (x Capability) Enum() *Capability { - p := new(Capability) - *p = x - return p -} - -func (x Capability) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Capability) Descriptor() protoreflect.EnumDescriptor { - return file_capabilities_proto_enumTypes[0].Descriptor() -} - -func (Capability) Type() protoreflect.EnumType { - return &file_capabilities_proto_enumTypes[0] -} - -func (x Capability) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Capability.Descriptor instead. -func (Capability) EnumDescriptor() ([]byte, []int) { - return file_capabilities_proto_rawDescGZIP(), []int{0} -} - -var file_capabilities_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.EnumValueOptions)(nil), - ExtensionType: (*string)(nil), - Field: 189350643, - Name: "chainguard.capabilities.name", - Tag: "bytes,189350643,opt,name=name", - Filename: "capabilities.proto", - }, - { - ExtendedType: (*descriptorpb.EnumValueOptions)(nil), - ExtensionType: (*uint32)(nil), - Field: 20221109, - Name: "chainguard.capabilities.bit", - Tag: "varint,20221109,opt,name=bit", - Filename: "capabilities.proto", - }, -} - -// Extension fields to descriptorpb.EnumValueOptions. -var ( - // This decorates our capability enumeration values with - // the friendly name to show to humans. - // - // optional string name = 189350643; - E_Name = &file_capabilities_proto_extTypes[0] - // This decorates our capability enumeration values with - // a bit index enabling compacted encodings. - // - // optional uint32 bit = 20221109; - E_Bit = &file_capabilities_proto_extTypes[1] -) - -var File_capabilities_proto protoreflect.FileDescriptor - -var file_capabilities_proto_rawDesc = []byte{ - 0x0a, 0x12, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x20, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, - 0xd7, 0x21, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x33, 0x0a, 0x15, 0x43, - 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x45, 0x10, 0x65, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x01, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x12, 0x33, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, - 0x50, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x66, 0x1a, 0x18, 0xa8, 0xcb, 0x91, - 0x4d, 0x02, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, - 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x67, 0x1a, 0x16, - 0xa8, 0xcb, 0x91, 0x4d, 0x03, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, - 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, - 0x68, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x04, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x43, - 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x49, 0x4e, 0x56, - 0x49, 0x54, 0x45, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc9, 0x01, 0x1a, 0x1f, - 0xa8, 0xcb, 0x91, 0x4d, 0x05, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x3e, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, - 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcb, 0x01, - 0x1a, 0x1d, 0xa8, 0xcb, 0x91, 0x4d, 0x06, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x12, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, - 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, - 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, - 0xcc, 0x01, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x07, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, - 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xad, 0x02, 0x1a, 0x17, - 0xa8, 0xcb, 0x91, 0x4d, 0x08, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x73, - 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x41, 0x50, 0x5f, 0x49, - 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, - 0xae, 0x02, 0x1a, 0x17, 0xa8, 0xcb, 0x91, 0x4d, 0x09, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, - 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x43, - 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0xaf, 0x02, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x0a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, - 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x43, - 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x44, 0x45, 0x4c, - 0x45, 0x54, 0x45, 0x10, 0xb0, 0x02, 0x1a, 0x17, 0xa8, 0xcb, 0x91, 0x4d, 0x0b, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, - 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, - 0x91, 0x03, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x0c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, - 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, - 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0x92, 0x03, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x0d, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x14, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x49, - 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x93, 0x03, 0x1a, 0x1d, 0xa8, 0xcb, 0x91, 0x4d, 0x0e, 0x9a, - 0xaf, 0xa8, 0xd2, 0x05, 0x12, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, - 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, - 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x94, 0x03, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, - 0x0f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x43, - 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, - 0x52, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xf5, 0x03, 0x1a, 0x1a, 0xa8, 0xcb, - 0x91, 0x4d, 0x10, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, - 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, - 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xf6, 0x03, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x11, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, - 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0xf7, 0x03, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x12, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, - 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x3b, - 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, - 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xf8, 0x03, 0x1a, - 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x13, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x43, - 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, - 0x52, 0x53, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x10, 0xf9, 0x03, 0x1a, 0x1c, - 0xa8, 0xcb, 0x91, 0x4d, 0x33, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x17, - 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, - 0x44, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x04, 0x1a, 0x17, 0xa8, 0xcb, 0x91, 0x4d, - 0x14, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x6c, - 0x69, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, - 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, - 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe5, 0x04, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x30, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x21, 0x43, 0x41, - 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, - 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, - 0xef, 0x04, 0x1a, 0x21, 0xa8, 0xcb, 0x91, 0x4d, 0x31, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x16, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x25, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, - 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, - 0x59, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf9, - 0x04, 0x1a, 0x25, 0xa8, 0xcb, 0x91, 0x4d, 0x32, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1a, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, - 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x49, 0x53, 0x4b, 0x53, 0x5f, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0x80, 0x05, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x44, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, - 0x0a, 0x72, 0x69, 0x73, 0x6b, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x43, - 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x42, 0x4f, 0x4d, 0x53, 0x5f, - 0x4c, 0x49, 0x53, 0x54, 0x10, 0x8a, 0x05, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x45, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x0a, 0x73, 0x62, 0x6f, 0x6d, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x3f, - 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x56, 0x55, 0x4c, - 0x4e, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x94, - 0x05, 0x1a, 0x1c, 0xa8, 0xcb, 0x91, 0x4d, 0x46, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x76, 0x75, - 0x6c, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, - 0x3f, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x41, 0x54, - 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, - 0x9e, 0x05, 0x1a, 0x1c, 0xa8, 0xcb, 0x91, 0x4d, 0x47, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x61, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, - 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, 0x43, 0x4f, - 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, - 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xbd, 0x05, 0x1a, 0x26, 0xa8, 0xcb, 0x91, 0x4d, - 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, - 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, - 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xbe, 0x05, 0x1a, 0x26, 0xa8, 0xcb, - 0x91, 0x4d, 0x16, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, - 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xbf, 0x05, 0x1a, 0x24, 0xa8, 0xcb, - 0x91, 0x4d, 0x17, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, - 0x73, 0x74, 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, - 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xc0, 0x05, 0x1a, 0x26, 0xa8, 0xcb, - 0x91, 0x4d, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, - 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xa1, 0x06, - 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x19, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, - 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0xa2, 0x06, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x1a, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x30, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, 0x4c, 0x49, - 0x43, 0x59, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa3, 0x06, 0x1a, 0x16, 0xa8, 0xcb, 0x91, 0x4d, - 0x1b, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6c, 0x69, - 0x73, 0x74, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, - 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xa4, 0x06, 0x1a, 0x18, - 0xa8, 0xcb, 0x91, 0x4d, 0x1c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, - 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x10, 0x85, 0x07, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x1d, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, - 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x86, 0x07, - 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x1e, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x15, - 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x87, 0x07, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x1f, 0x9a, - 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x6c, 0x69, - 0x73, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, - 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x88, 0x07, - 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x20, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x15, - 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x53, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xeb, 0x07, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x21, 0x9a, - 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, - 0x3b, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x4e, 0x41, - 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcf, 0x08, - 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x22, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x19, - 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x4c, - 0x4f, 0x41, 0x44, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xb3, 0x09, 0x1a, 0x19, 0xa8, 0xcb, - 0x91, 0x4d, 0x23, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, - 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, - 0x49, 0x44, 0x45, 0x52, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x95, 0x0a, 0x1a, - 0x24, 0xa8, 0xcb, 0x91, 0x4d, 0x34, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, - 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, - 0x45, 0x52, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x96, 0x0a, 0x1a, 0x24, 0xa8, - 0xcb, 0x91, 0x4d, 0x35, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, - 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, - 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x97, 0x0a, 0x1a, 0x22, 0xa8, 0xcb, 0x91, 0x4d, 0x36, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x17, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, - 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, - 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, - 0x54, 0x45, 0x10, 0x98, 0x0a, 0x1a, 0x24, 0xa8, 0xcb, 0x91, 0x4d, 0x37, 0x9a, 0xaf, 0xa8, 0xd2, - 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x44, 0x0a, 0x1e, 0x43, - 0x41, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, - 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xdd, 0x0b, - 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x24, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x44, 0x0a, 0x1e, 0x43, 0x41, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, - 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x25, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdf, 0x0b, 0x1a, 0x1d, 0xa8, 0xcb, 0x91, 0x4d, - 0x26, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x12, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x1e, 0x43, 0x41, 0x50, - 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xe0, 0x0b, 0x1a, 0x1f, - 0xa8, 0xcb, 0x91, 0x4d, 0x27, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x59, 0x5f, - 0x50, 0x55, 0x4c, 0x4c, 0x10, 0xc1, 0x0c, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x28, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x0d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x75, 0x6c, - 0x6c, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, - 0x59, 0x5f, 0x50, 0x55, 0x53, 0x48, 0x10, 0xc2, 0x0c, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x29, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, - 0x75, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc3, 0x0c, 0x1a, 0x16, 0xa8, 0xcb, 0x91, 0x4d, 0x38, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x10, 0xc4, 0x0c, 0x1a, 0x16, 0xa8, 0xcb, 0x91, 0x4d, 0x39, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x28, 0x0a, 0x0d, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x4c, 0x49, 0x53, 0x54, - 0x10, 0xc5, 0x0c, 0x1a, 0x14, 0xa8, 0xcb, 0x91, 0x4d, 0x3a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x09, - 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, - 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xc6, 0x0c, 0x1a, - 0x16, 0xa8, 0xcb, 0x91, 0x4d, 0x3b, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x72, 0x65, 0x70, 0x6f, - 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, - 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc7, - 0x0c, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x3c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, - 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x10, 0xc8, 0x0c, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x3d, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, - 0x45, 0x53, 0x54, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc9, 0x0c, 0x1a, 0x18, 0xa8, 0xcb, 0x91, - 0x4d, 0x3e, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, - 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xca, 0x0c, 0x1a, - 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x3f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x0e, 0x43, - 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xcb, 0x0c, - 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x40, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, - 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x54, - 0x41, 0x47, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xcc, 0x0c, 0x1a, 0x15, 0xa8, 0xcb, - 0x91, 0x4d, 0x41, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, 0x2e, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x4c, - 0x49, 0x53, 0x54, 0x10, 0xcd, 0x0c, 0x1a, 0x13, 0xa8, 0xcb, 0x91, 0x4d, 0x42, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x08, 0x74, 0x61, 0x67, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x43, - 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xce, 0x0c, - 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x43, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, - 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x4d, - 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcf, 0x0c, 0x1a, 0x21, 0xa8, 0xcb, 0x91, 0x4d, 0x48, 0x9a, - 0xaf, 0xa8, 0xd2, 0x05, 0x16, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x13, 0x43, - 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x45, 0x10, 0xa5, 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2a, 0x9a, 0xaf, 0xa8, 0xd2, - 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, - 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xa6, 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, - 0x4d, 0x2b, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x53, - 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, 0x0d, 0x1a, - 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x2c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x73, 0x69, 0x67, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, - 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, - 0x10, 0xa8, 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2d, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, - 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x4c, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, - 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x45, 0x10, 0xa9, 0x0d, 0x1a, 0x26, 0xa8, 0xcb, 0x91, 0x4d, 0x2e, 0x9a, 0xaf, 0xa8, 0xd2, - 0x05, 0x1b, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, - 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x47, 0x55, 0x4c, 0x46, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, - 0x90, 0x4e, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x2f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x67, - 0x75, 0x6c, 0x66, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x38, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf3, 0x85, 0xa5, 0x5a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x3a, 0x36, 0x0a, 0x03, 0x62, 0x69, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, - 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb5, 0x99, - 0xd2, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x62, 0x69, 0x74, 0x42, 0x5d, 0x0a, 0x1f, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, - 0x6b, 0x2e, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0x11, - 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x25, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_capabilities_proto_rawDescOnce sync.Once - file_capabilities_proto_rawDescData = file_capabilities_proto_rawDesc -) - -func file_capabilities_proto_rawDescGZIP() []byte { - file_capabilities_proto_rawDescOnce.Do(func() { - file_capabilities_proto_rawDescData = protoimpl.X.CompressGZIP(file_capabilities_proto_rawDescData) - }) - return file_capabilities_proto_rawDescData -} - -var file_capabilities_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_capabilities_proto_goTypes = []interface{}{ - (Capability)(0), // 0: chainguard.capabilities.Capability - (*descriptorpb.EnumValueOptions)(nil), // 1: google.protobuf.EnumValueOptions -} -var file_capabilities_proto_depIdxs = []int32{ - 1, // 0: chainguard.capabilities.name:extendee -> google.protobuf.EnumValueOptions - 1, // 1: chainguard.capabilities.bit:extendee -> google.protobuf.EnumValueOptions - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 0, // [0:2] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_capabilities_proto_init() } -func file_capabilities_proto_init() { - if File_capabilities_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_capabilities_proto_rawDesc, - NumEnums: 1, - NumMessages: 0, - NumExtensions: 2, - NumServices: 0, - }, - GoTypes: file_capabilities_proto_goTypes, - DependencyIndexes: file_capabilities_proto_depIdxs, - EnumInfos: file_capabilities_proto_enumTypes, - ExtensionInfos: file_capabilities_proto_extTypes, - }.Build() - File_capabilities_proto = out.File - file_capabilities_proto_rawDesc = nil - file_capabilities_proto_goTypes = nil - file_capabilities_proto_depIdxs = nil -} diff --git a/proto/capabilities/capabilities.proto b/proto/capabilities/capabilities.proto deleted file mode 100644 index 40ad9cb9..00000000 --- a/proto/capabilities/capabilities.proto +++ /dev/null @@ -1,139 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/capabilities"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.capabilities"; -option java_outer_classname = "CapabilitiesProto"; - -package chainguard.capabilities; - -import "google/protobuf/descriptor.proto"; - -extend google.protobuf.EnumValueOptions { - // This decorates our capability enumeration values with - // the friendly name to show to humans. - string name = 189350643; - - // This decorates our capability enumeration values with - // a bit index enabling compacted encodings. - uint32 bit = 20221109; -} - -// Capability is an enumeration of the Chainguard IAM capabilities. -enum Capability { - UNKNOWN = 0; - - CAP_IAM_GROUPS_CREATE = 101 [(name) = "groups.create", (bit) = 1]; - CAP_IAM_GROUPS_UPDATE = 102 [(name) = "groups.update", (bit) = 2]; - CAP_IAM_GROUPS_LIST = 103 [(name) = "groups.list", (bit) = 3]; - CAP_IAM_GROUPS_DELETE = 104 [(name) = "groups.delete", (bit) = 4]; - - CAP_IAM_GROUP_INVITES_CREATE = 201 [(name) = "group_invites.create", (bit) = 5]; - CAP_IAM_GROUP_INVITES_LIST = 203 [(name) = "group_invites.list", (bit) = 6]; - CAP_IAM_GROUP_INVITES_DELETE = 204 [(name) = "group_invites.delete", (bit) = 7]; - - CAP_IAM_ROLES_CREATE = 301 [(name) = "roles.create", (bit) = 8]; - CAP_IAM_ROLES_UPDATE = 302 [(name) = "roles.update", (bit) = 9]; - CAP_IAM_ROLES_LIST = 303 [(name) = "roles.list", (bit) = 10]; - CAP_IAM_ROLES_DELETE = 304 [(name) = "roles.delete", (bit) = 11]; - - CAP_IAM_ROLE_BINDINGS_CREATE = 401 [(name) = "role_bindings.create", (bit) = 12]; - CAP_IAM_ROLE_BINDINGS_UPDATE = 402 [(name) = "role_bindings.update", (bit) = 13]; - CAP_IAM_ROLE_BINDINGS_LIST = 403 [(name) = "role_bindings.list", (bit) = 14]; - CAP_IAM_ROLE_BINDINGS_DELETE = 404 [(name) = "role_bindings.delete", (bit) = 15]; - - CAP_TENANT_CLUSTERS_CREATE = 501 [(name) = "clusters.create", (bit) = 16]; - CAP_TENANT_CLUSTERS_UPDATE = 502 [(name) = "clusters.update", (bit) = 17]; - CAP_TENANT_CLUSTERS_LIST = 503 [(name) = "clusters.list", (bit) = 18]; - CAP_TENANT_CLUSTERS_DELETE = 504 [(name) = "clusters.delete", (bit) = 19]; - CAP_TENANT_CLUSTERS_DISCOVER = 505 [(name) = "clusters.discover", (bit) = 51]; - - CAP_TENANT_RECORDS_LIST = 603 [(name) = "records.list", (bit) = 20]; - CAP_TENANT_RECORD_CONTEXTS_LIST = 613 [(name) = "record_contexts.list", (bit) = 48]; - CAP_TENANT_RECORD_SIGNATURES_LIST = 623 [(name) = "record_signatures.list", (bit) = 49]; - CAP_TENANT_RECORD_POLICY_RESULTS_LIST = 633 [(name) = "record_policy_results.list", (bit) = 50]; - - CAP_TENANT_RISKS_LIST = 640 [(name) = "risks.list", (bit) = 68]; - - CAP_TENANT_SBOMS_LIST = 650 [(name) = "sboms.list", (bit) = 69]; - - CAP_TENANT_VULN_REPORTS_LIST = 660 [(name) = "vuln_reports.list", (bit) = 70]; - - CAP_TENANT_ATTESTATIONS_LIST = 670 [(name) = "attestations.list", (bit) = 71]; - - CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE = 701 [(name) = "account_associations.create", (bit) = 21]; - CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE = 702 [(name) = "account_associations.update", (bit) = 22]; - CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST = 703 [(name) = "account_associations.list", (bit) = 23]; - CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE = 704 [(name) = "account_associations.delete", (bit) = 24]; - - CAP_IAM_POLICY_CREATE = 801 [(name) = "policy.create", (bit) = 25]; - CAP_IAM_POLICY_UPDATE = 802 [(name) = "policy.update", (bit) = 26]; - CAP_IAM_POLICY_LIST = 803 [(name) = "policy.list", (bit) = 27]; - CAP_IAM_POLICY_DELETE = 804 [(name) = "policy.delete", (bit) = 28]; - - CAP_IAM_IDENTITY_CREATE = 901 [(name) = "identity.create", (bit) = 29]; - CAP_IAM_IDENTITY_UPDATE = 902 [(name) = "identity.update", (bit) = 30]; - CAP_IAM_IDENTITY_LIST = 903 [(name) = "identity.list", (bit) = 31]; - CAP_IAM_IDENTITY_DELETE = 904 [(name) = "identity.delete", (bit) = 32]; - - CAP_TENANT_NODES_LIST = 1003 [(name) = "nodes.list", (bit) = 33]; - - CAP_TENANT_NAMESPACES_LIST = 1103 [(name) = "namespaces.list", (bit) = 34]; - - CAP_TENANT_WORKLOADS_LIST = 1203 [(name) = "workloads.list", (bit) = 35]; - - - CAP_IAM_IDENTITY_PROVIDERS_CREATE = 1301 [(name) = "identity_providers.create", (bit) = 52]; - CAP_IAM_IDENTITY_PROVIDERS_UPDATE = 1302 [(name) = "identity_providers.update", (bit) = 53]; - CAP_IAM_IDENTITY_PROVIDERS_LIST = 1303 [(name) = "identity_providers.list", (bit) = 54]; - CAP_IAM_IDENTITY_PROVIDERS_DELETE = 1304 [(name) = "identity_providers.delete", (bit) = 55]; - - // Events - - CAP_EVENTS_SUBSCRIPTION_CREATE = 1501 [(name) = "subscriptions.create", (bit) = 36]; - CAP_EVENTS_SUBSCRIPTION_UPDATE = 1502 [(name) = "subscriptions.update", (bit) = 37]; - CAP_EVENTS_SUBSCRIPTION_LIST = 1503 [(name) = "subscriptions.list", (bit) = 38]; - CAP_EVENTS_SUBSCRIPTION_DELETE = 1504 [(name) = "subscriptions.delete", (bit) = 39]; - - // Registry - - // TODO(jason): Remove these coarse-grained capabilities after they're removed from the roles. - CAP_REGISTRY_PULL = 1601 [(name) = "registry.pull", (bit) = 40]; // Can read tags, blobs, manifests. - CAP_REGISTRY_PUSH = 1602 [(name) = "registry.push", (bit) = 41]; // Can create and update tags, blobs, manifests. - - CAP_REPO_CREATE = 1603 [(name) = "repo.create", (bit) = 56]; - CAP_REPO_UPDATE = 1604 [(name) = "repo.update", (bit) = 57]; - CAP_REPO_LIST = 1605 [(name) = "repo.list", (bit) = 58]; - CAP_REPO_DELETE = 1606 [(name) = "repo.delete", (bit) = 59]; - - CAP_MANIFEST_CREATE = 1607 [(name) = "manifest.create", (bit) = 60]; - CAP_MANIFEST_UPDATE = 1608 [(name) = "manifest.update", (bit) = 61]; - CAP_MANIFEST_LIST = 1609 [(name) = "manifest.list", (bit) = 62]; - CAP_MANIFEST_DELETE = 1610 [(name) = "manifest.delete", (bit) = 63]; - - CAP_TAG_CREATE = 1611 [(name) = "tag.create", (bit) = 64]; - CAP_TAG_UPDATE = 1612 [(name) = "tag.update", (bit) = 65]; - CAP_TAG_LIST = 1613 [(name) = "tag.list", (bit) = 66]; - CAP_TAG_DELETE = 1614 [(name) = "tag.delete", (bit) = 67]; - - CAP_MANIFEST_METADATA_LIST = 1615 [(name) = "manifest.metadata.list", (bit) = 72]; - - // Sigstore-aas - - CAP_SIGSTORE_CREATE = 1701 [(name) = "sigstore.create", (bit) = 42]; - CAP_SIGSTORE_UPDATE = 1702 [(name) = "sigstore.update", (bit) = 43]; - CAP_SIGSTORE_LIST = 1703 [(name) = "sigstore.list", (bit) = 44]; - CAP_SIGSTORE_DELETE = 1704 [(name) = "sigstore.delete", (bit) = 45]; - - CAP_SIGSTORE_CERTIFICATE_CREATE = 1705 [(name) = "sigstore.certificate.create", (bit) = 46]; - - // This is orthogonal enough that we should leave - // it somewhat separate, so add new capabilities above. - // TODO(mattmoor): Think about whether we can encode specific - // controller capabilities into our access control here? - // e.g. could each logical controller/webhook be its own - // capability? - CAP_GULFSTREAM = 10000 [(name) = "gulfstream", (bit) = 47]; - - // next bit: 72 -} diff --git a/proto/capabilities/capabilities_test.go b/proto/capabilities/capabilities_test.go deleted file mode 100644 index 8d230dcb..00000000 --- a/proto/capabilities/capabilities_test.go +++ /dev/null @@ -1,139 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package capabilities - -import ( - "encoding/json" - "testing" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func TestStringify(t *testing.T) { - tests := []struct { - name string - capability Capability - want string - wantErr error - }{{ - name: "no requirements", - }, { - name: "simple", - capability: Capability_CAP_EVENTS_SUBSCRIPTION_DELETE, - want: "subscriptions.delete", - }, { - name: "unknown", - capability: 0, - want: "", - }, { - name: "invalid", - capability: 1, - wantErr: status.Error(codes.Internal, `capability has no descriptor: 1`), - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - got, gotErr := Stringify(test.capability) - - switch { - case (gotErr != nil) != (test.wantErr != nil): - t.Fatalf("Stringify() = %v, %v, wanted %v, %v", got, gotErr, test.want, test.wantErr) - case gotErr != nil && gotErr.Error() != test.wantErr.Error(): - t.Fatalf("Stringify() = %v, wanted %v", gotErr, test.wantErr) - case gotErr == nil && got != test.want: - t.Fatalf("Stringify() = %v, wanted %v", got, test.want) - } - }) - } -} - -func TestRoundTrip(t *testing.T) { - for cap := range Capability_name { - scap, _ := Stringify(Capability(cap)) - got, _ := Parse(scap) - if Capability(cap) != got { - t.Fatalf("Parse(Stringify()) = %v, wanted %v", got, Capability(cap)) - } - } -} - -func TestEncoding(t *testing.T) { - all := make(Set, 0, len(Capability_name)) - for cap := range Capability_name { - if cap == int32(Capability_UNKNOWN) { - continue - } - all = append(all, Capability(cap)) - } - all = sortCaps(all) - - tests := []struct { - name string - caps Set - }{{ - name: "owner", - caps: OwnerCaps, - }, { - name: "editor", - caps: EditorCaps, - }, { - name: "viewer", - caps: ViewerCaps, - }, { - name: "gulfstream", - caps: Set{Capability_CAP_GULFSTREAM}, - }, { - name: "all", - caps: all, - }, { - // sortCaps removes duplicates. - name: "duplicates", - caps: sortCaps(Set{Capability_CAP_GULFSTREAM, Capability_CAP_GULFSTREAM, Capability_CAP_GULFSTREAM}), - }} - - for _, test := range tests { - t.Run(test.name+"-standard", func(t *testing.T) { - raw, err := json.Marshal(test.caps) - if err != nil { - t.Fatalf("json.Marshal() = %v", err) - } - - t.Logf("ENCODED: %s", raw) - - // Confirm that we decode it and get what we expect. - got := make(Set, 0, len(test.caps)) - if err := json.Unmarshal(raw, &got); err != nil { - t.Fatalf("json.Unmarshal() = %v", err) - } - if diff := cmp.Diff(got, test.caps); diff != "" { - t.Errorf("(-got +want) = %s", diff) - } - }) - - t.Run(test.name+"-legacy", func(t *testing.T) { - // Remove our type alias, so that we use the legacy encoding. - legacy := []Capability(test.caps) - raw, err := json.Marshal(legacy) - if err != nil { - t.Fatalf("json.Marshal() = %v", err) - } - - t.Logf("ENCODED: %s", raw) - - // Confirm that we decode it and get what we expect when coming from - // the legacy encoding. - got := make(Set, 0, len(test.caps)) - if err := json.Unmarshal(raw, &got); err != nil { - t.Fatalf("json.Unmarshal() = %v", err) - } - if diff := cmp.Diff(got, test.caps); diff != "" { - t.Errorf("(-got +want) = %s", diff) - } - }) - } -} diff --git a/proto/capabilities/doc.go b/proto/capabilities/doc.go deleted file mode 100644 index ef8a1f50..00000000 --- a/proto/capabilities/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package capabilities contains the proto enum with our IAM capabilities. -// -//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. capabilities.proto -package capabilities diff --git a/proto/capabilities/roles.go b/proto/capabilities/roles.go deleted file mode 100644 index 12eb7f5d..00000000 --- a/proto/capabilities/roles.go +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package capabilities - -import ( - "golang.org/x/exp/maps" - "golang.org/x/exp/slices" -) - -var ( - // viewerCaps are read-only capabilities that do not affect state. - ViewerCaps = sortCaps(append([]Capability{ - Capability_CAP_EVENTS_SUBSCRIPTION_LIST, - - Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST, - Capability_CAP_IAM_GROUP_INVITES_LIST, - Capability_CAP_IAM_GROUPS_LIST, - Capability_CAP_IAM_ROLE_BINDINGS_LIST, - Capability_CAP_IAM_ROLES_LIST, - Capability_CAP_IAM_POLICY_LIST, - Capability_CAP_IAM_IDENTITY_LIST, - Capability_CAP_IAM_IDENTITY_PROVIDERS_LIST, - - Capability_CAP_TENANT_CLUSTERS_DISCOVER, - Capability_CAP_TENANT_CLUSTERS_LIST, - Capability_CAP_TENANT_NAMESPACES_LIST, - Capability_CAP_TENANT_NODES_LIST, - Capability_CAP_TENANT_RECORDS_LIST, - Capability_CAP_TENANT_RECORD_CONTEXTS_LIST, - Capability_CAP_TENANT_RECORD_SIGNATURES_LIST, - Capability_CAP_TENANT_RECORD_POLICY_RESULTS_LIST, - Capability_CAP_TENANT_RISKS_LIST, - Capability_CAP_TENANT_SBOMS_LIST, - Capability_CAP_TENANT_VULN_REPORTS_LIST, - Capability_CAP_TENANT_WORKLOADS_LIST, - - Capability_CAP_SIGSTORE_LIST, - }, - // Viewers can also list repos and tags, and pull images. - RegistryPullCaps...)) - - // editorCaps can modify state, but not grant roles/permissions. - EditorCaps = sortCaps(append([]Capability{ - Capability_CAP_EVENTS_SUBSCRIPTION_CREATE, - Capability_CAP_EVENTS_SUBSCRIPTION_DELETE, - Capability_CAP_EVENTS_SUBSCRIPTION_UPDATE, - - Capability_CAP_TENANT_CLUSTERS_CREATE, - Capability_CAP_TENANT_CLUSTERS_UPDATE, - Capability_CAP_TENANT_CLUSTERS_DELETE, - - Capability_CAP_SIGSTORE_CERTIFICATE_CREATE, - Capability_CAP_SIGSTORE_CREATE, - Capability_CAP_SIGSTORE_DELETE, - Capability_CAP_SIGSTORE_UPDATE, - }, ViewerCaps...)) - - // ownerCaps includes all capabilities possible by a user. - OwnerCaps = sortCaps(append([]Capability{ - Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE, - Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE, - Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE, - - Capability_CAP_IAM_GROUP_INVITES_CREATE, - Capability_CAP_IAM_GROUP_INVITES_DELETE, - - Capability_CAP_IAM_GROUPS_CREATE, - Capability_CAP_IAM_GROUPS_DELETE, - Capability_CAP_IAM_GROUPS_UPDATE, - - Capability_CAP_IAM_POLICY_CREATE, - Capability_CAP_IAM_POLICY_UPDATE, - Capability_CAP_IAM_POLICY_DELETE, - - Capability_CAP_IAM_IDENTITY_CREATE, - Capability_CAP_IAM_IDENTITY_DELETE, - Capability_CAP_IAM_IDENTITY_UPDATE, - - Capability_CAP_IAM_IDENTITY_PROVIDERS_CREATE, - Capability_CAP_IAM_IDENTITY_PROVIDERS_DELETE, - Capability_CAP_IAM_IDENTITY_PROVIDERS_UPDATE, - - Capability_CAP_IAM_ROLE_BINDINGS_CREATE, - Capability_CAP_IAM_ROLE_BINDINGS_DELETE, - Capability_CAP_IAM_ROLE_BINDINGS_UPDATE, - - Capability_CAP_IAM_ROLES_CREATE, - Capability_CAP_IAM_ROLES_DELETE, - Capability_CAP_IAM_ROLES_UPDATE, - - // Add gulfstream capability to owner so owners can rolebind - // identities to the gulfstream role. - Capability_CAP_GULFSTREAM, - }, append(EditorCaps, - // Owners can also push and delete images, subject to the identity allowlist. - RegistryPushCaps...)...)) - - RegistryPullCaps = sortCaps([]Capability{ - Capability_CAP_IAM_GROUPS_LIST, - - Capability_CAP_REPO_LIST, - Capability_CAP_MANIFEST_LIST, - Capability_CAP_TAG_LIST, - Capability_CAP_MANIFEST_METADATA_LIST, - - Capability_CAP_TENANT_RECORD_SIGNATURES_LIST, - Capability_CAP_TENANT_SBOMS_LIST, - Capability_CAP_TENANT_VULN_REPORTS_LIST, - }) - - RegistryPushCaps = sortCaps(append([]Capability{ - Capability_CAP_REPO_CREATE, - Capability_CAP_REPO_UPDATE, - Capability_CAP_REPO_DELETE, - - Capability_CAP_MANIFEST_CREATE, - Capability_CAP_MANIFEST_UPDATE, - Capability_CAP_MANIFEST_DELETE, - - Capability_CAP_TAG_CREATE, - Capability_CAP_TAG_UPDATE, - Capability_CAP_TAG_DELETE, - - // To create nested groups as needed on push. - Capability_CAP_IAM_GROUPS_CREATE, - }, RegistryPullCaps...)) - - RegistryPullTokenCreatorCaps = sortCaps(append([]Capability{ - // Minimal set of capabilities to create a registry pull token. - Capability_CAP_IAM_ROLE_BINDINGS_CREATE, - Capability_CAP_IAM_IDENTITY_CREATE, - - Capability_CAP_IAM_ROLES_LIST, - }, RegistryPullCaps...)) - - SigningViewerCaps = sortCaps([]Capability{ - Capability_CAP_SIGSTORE_LIST, - }) - - SigningCertRequesterCaps = sortCaps(append([]Capability{ - Capability_CAP_SIGSTORE_CERTIFICATE_CREATE, - }, SigningViewerCaps...)) - - SigningEditorCaps = sortCaps(append([]Capability{ - Capability_CAP_SIGSTORE_CREATE, - Capability_CAP_SIGSTORE_DELETE, - Capability_CAP_SIGSTORE_UPDATE, - }, SigningCertRequesterCaps...)) -) - -func sortCaps(caps []Capability) []Capability { - uniq := map[Capability]struct{}{} - for _, c := range caps { - uniq[c] = struct{}{} - } - out := maps.Keys(uniq) - slices.Sort(out) - return out -} diff --git a/proto/google/api/annotations.proto b/proto/google/api/annotations.proto deleted file mode 100644 index efdab3db..00000000 --- a/proto/google/api/annotations.proto +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/api/http.proto"; -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "AnnotationsProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.MethodOptions { - // See `HttpRule`. - HttpRule http = 72295728; -} diff --git a/proto/google/api/field_behavior.proto b/proto/google/api/field_behavior.proto deleted file mode 100644 index c4abe3b6..00000000 --- a/proto/google/api/field_behavior.proto +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "FieldBehaviorProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.FieldOptions { - // A designation of a specific field behavior (required, output only, etc.) - // in protobuf messages. - // - // Examples: - // - // string name = 1 [(google.api.field_behavior) = REQUIRED]; - // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // google.protobuf.Duration ttl = 1 - // [(google.api.field_behavior) = INPUT_ONLY]; - // google.protobuf.Timestamp expire_time = 1 - // [(google.api.field_behavior) = OUTPUT_ONLY, - // (google.api.field_behavior) = IMMUTABLE]; - repeated google.api.FieldBehavior field_behavior = 1052; -} - -// An indicator of the behavior of a given field (for example, that a field -// is required in requests, or given as output but ignored as input). -// This **does not** change the behavior in protocol buffers itself; it only -// denotes the behavior and may affect how API tooling handles the field. -// -// Note: This enum **may** receive new values in the future. -enum FieldBehavior { - // Conventional default for enums. Do not use this. - FIELD_BEHAVIOR_UNSPECIFIED = 0; - - // Specifically denotes a field as optional. - // While all fields in protocol buffers are optional, this may be specified - // for emphasis if appropriate. - OPTIONAL = 1; - - // Denotes a field as required. - // This indicates that the field **must** be provided as part of the request, - // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). - REQUIRED = 2; - - // Denotes a field as output only. - // This indicates that the field is provided in responses, but including the - // field in a request does nothing (the server *must* ignore it and - // *must not* throw an error as a result of the field's presence). - OUTPUT_ONLY = 3; - - // Denotes a field as input only. - // This indicates that the field is provided in requests, and the - // corresponding field is not included in output. - INPUT_ONLY = 4; - - // Denotes a field as immutable. - // This indicates that the field may be set once in a request to create a - // resource, but may not be changed thereafter. - IMMUTABLE = 5; - - // Denotes that a (repeated) field is an unordered list. - // This indicates that the service may provide the elements of the list - // in any arbitrary order, rather than the order the user originally - // provided. Additionally, the list's order may or may not be stable. - UNORDERED_LIST = 6; - - // Denotes that this field returns a non-empty default value if not set. - // This indicates that if the user provides the empty value in a request, - // a non-empty value will be returned. The user will not be aware of what - // non-empty value to expect. - NON_EMPTY_DEFAULT = 7; -} diff --git a/proto/google/api/http.proto b/proto/google/api/http.proto deleted file mode 100644 index 113fa936..00000000 --- a/proto/google/api/http.proto +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "HttpProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -// Defines the HTTP configuration for an API service. It contains a list of -// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method -// to one or more HTTP REST API methods. -message Http { - // A list of HTTP configuration rules that apply to individual API methods. - // - // **NOTE:** All service configuration rules follow "last one wins" order. - repeated HttpRule rules = 1; - - // When set to true, URL path parameters will be fully URI-decoded except in - // cases of single segment matches in reserved expansion, where "%2F" will be - // left encoded. - // - // The default behavior is to not decode RFC 6570 reserved characters in multi - // segment matches. - bool fully_decode_reserved_expansion = 2; -} - -// # gRPC Transcoding -// -// gRPC Transcoding is a feature for mapping between a gRPC method and one or -// more HTTP REST endpoints. It allows developers to build a single API service -// that supports both gRPC APIs and REST APIs. Many systems, including [Google -// APIs](https://github.com/googleapis/googleapis), -// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC -// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), -// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature -// and use it for large scale production services. -// -// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies -// how different portions of the gRPC request message are mapped to the URL -// path, URL query parameters, and HTTP request body. It also controls how the -// gRPC response message is mapped to the HTTP response body. `HttpRule` is -// typically specified as an `google.api.http` annotation on the gRPC method. -// -// Each mapping specifies a URL path template and an HTTP method. The path -// template may refer to one or more fields in the gRPC request message, as long -// as each field is a non-repeated field with a primitive (non-message) type. -// The path template controls how fields of the request message are mapped to -// the URL path. -// -// Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/{name=messages/*}" -// }; -// } -// } -// message GetMessageRequest { -// string name = 1; // Mapped to URL path. -// } -// message Message { -// string text = 1; // The resource content. -// } -// -// This enables an HTTP REST to gRPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` -// -// Any fields in the request message which are not bound by the path template -// automatically become HTTP query parameters if there is no HTTP request body. -// For example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get:"/v1/messages/{message_id}" -// }; -// } -// } -// message GetMessageRequest { -// message SubMessage { -// string subfield = 1; -// } -// string message_id = 1; // Mapped to URL path. -// int64 revision = 2; // Mapped to URL query parameter `revision`. -// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. -// } -// -// This enables a HTTP JSON to RPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | -// `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: -// "foo"))` -// -// Note that fields which are mapped to URL query parameters must have a -// primitive type or a repeated primitive type or a non-repeated message type. -// In the case of a repeated type, the parameter can be repeated in the URL -// as `...?param=A¶m=B`. In the case of a message type, each field of the -// message is mapped to a separate parameter, such as -// `...?foo.a=A&foo.b=B&foo.c=C`. -// -// For HTTP methods that allow a request body, the `body` field -// specifies the mapping. Consider a REST update method on the -// message resource collection: -// -// service Messaging { -// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "message" -// }; -// } -// } -// message UpdateMessageRequest { -// string message_id = 1; // mapped to the URL -// Message message = 2; // mapped to the body -// } -// -// The following HTTP JSON to RPC mapping is enabled, where the -// representation of the JSON in the request body is determined by -// protos JSON encoding: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" message { text: "Hi!" })` -// -// The special name `*` can be used in the body mapping to define that -// every field not bound by the path template should be mapped to the -// request body. This enables the following alternative definition of -// the update method: -// -// service Messaging { -// rpc UpdateMessage(Message) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "*" -// }; -// } -// } -// message Message { -// string message_id = 1; -// string text = 2; -// } -// -// -// The following HTTP JSON to RPC mapping is enabled: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" text: "Hi!")` -// -// Note that when using `*` in the body mapping, it is not possible to -// have HTTP parameters, as all fields not bound by the path end in -// the body. This makes this option more rarely used in practice when -// defining REST APIs. The common usage of `*` is in custom methods -// which don't use the URL at all for transferring data. -// -// It is possible to define multiple HTTP methods for one RPC by using -// the `additional_bindings` option. Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/messages/{message_id}" -// additional_bindings { -// get: "/v1/users/{user_id}/messages/{message_id}" -// } -// }; -// } -// } -// message GetMessageRequest { -// string message_id = 1; -// string user_id = 2; -// } -// -// This enables the following two alternative HTTP JSON to RPC mappings: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` -// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: -// "123456")` -// -// ## Rules for HTTP mapping -// -// 1. Leaf request fields (recursive expansion nested messages in the request -// message) are classified into three categories: -// - Fields referred by the path template. They are passed via the URL path. -// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP -// request body. -// - All other fields are passed via the URL query parameters, and the -// parameter name is the field path in the request message. A repeated -// field can be represented as multiple query parameters under the same -// name. -// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields -// are passed via URL path and HTTP request body. -// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all -// fields are passed via URL path and URL query parameters. -// -// ### Path template syntax -// -// Template = "/" Segments [ Verb ] ; -// Segments = Segment { "/" Segment } ; -// Segment = "*" | "**" | LITERAL | Variable ; -// Variable = "{" FieldPath [ "=" Segments ] "}" ; -// FieldPath = IDENT { "." IDENT } ; -// Verb = ":" LITERAL ; -// -// The syntax `*` matches a single URL path segment. The syntax `**` matches -// zero or more URL path segments, which must be the last part of the URL path -// except the `Verb`. -// -// The syntax `Variable` matches part of the URL path as specified by its -// template. A variable template must not contain other variables. If a variable -// matches a single path segment, its template may be omitted, e.g. `{var}` -// is equivalent to `{var=*}`. -// -// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` -// contains any reserved character, such characters should be percent-encoded -// before the matching. -// -// If a variable contains exactly one path segment, such as `"{var}"` or -// `"{var=*}"`, when such a variable is expanded into a URL path on the client -// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The -// server side does the reverse decoding. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{var}`. -// -// If a variable contains multiple path segments, such as `"{var=foo/*}"` -// or `"{var=**}"`, when such a variable is expanded into a URL path on the -// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. -// The server side does the reverse decoding, except "%2F" and "%2f" are left -// unchanged. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{+var}`. -// -// ## Using gRPC API Service Configuration -// -// gRPC API Service Configuration (service config) is a configuration language -// for configuring a gRPC service to become a user-facing product. The -// service config is simply the YAML representation of the `google.api.Service` -// proto message. -// -// As an alternative to annotating your proto file, you can configure gRPC -// transcoding in your service config YAML files. You do this by specifying a -// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same -// effect as the proto annotation. This can be particularly useful if you -// have a proto that is reused in multiple services. Note that any transcoding -// specified in the service config will override any matching transcoding -// configuration in the proto. -// -// Example: -// -// http: -// rules: -// # Selects a gRPC method and applies HttpRule to it. -// - selector: example.v1.Messaging.GetMessage -// get: /v1/messages/{message_id}/{sub.subfield} -// -// ## Special notes -// -// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the -// proto to JSON conversion must follow the [proto3 -// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). -// -// While the single segment variable follows the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String -// Expansion, the multi segment variable **does not** follow RFC 6570 Section -// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion -// does not expand special characters like `?` and `#`, which would lead -// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding -// for multi segment variables. -// -// The path variables **must not** refer to any repeated or mapped field, -// because client libraries are not capable of handling such variable expansion. -// -// The path variables **must not** capture the leading "/" character. The reason -// is that the most common use case "{var}" does not capture the leading "/" -// character. For consistency, all path variables must share the same behavior. -// -// Repeated message fields must not be mapped to URL query parameters, because -// no client library can support such complicated mapping. -// -// If an API needs to use a JSON array for request or response body, it can map -// the request or response body to a repeated field. However, some gRPC -// Transcoding implementations may not support this feature. -message HttpRule { - // Selects a method to which this rule applies. - // - // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. - string selector = 1; - - // Determines the URL pattern is matched by this rules. This pattern can be - // used with any of the {get|put|post|delete|patch} methods. A custom method - // can be defined using the 'custom' field. - oneof pattern { - // Maps to HTTP GET. Used for listing and getting information about - // resources. - string get = 2; - - // Maps to HTTP PUT. Used for replacing a resource. - string put = 3; - - // Maps to HTTP POST. Used for creating a resource or performing an action. - string post = 4; - - // Maps to HTTP DELETE. Used for deleting a resource. - string delete = 5; - - // Maps to HTTP PATCH. Used for updating a resource. - string patch = 6; - - // The custom pattern is used for specifying an HTTP method that is not - // included in the `pattern` field, such as HEAD, or "*" to leave the - // HTTP method unspecified for this rule. The wild-card rule is useful - // for services that provide content to Web (HTML) clients. - CustomHttpPattern custom = 8; - } - - // The name of the request field whose value is mapped to the HTTP request - // body, or `*` for mapping all request fields not captured by the path - // pattern to the HTTP body, or omitted for not having any HTTP request body. - // - // NOTE: the referred field must be present at the top-level of the request - // message type. - string body = 7; - - // Optional. The name of the response field whose value is mapped to the HTTP - // response body. When omitted, the entire response message will be used - // as the HTTP response body. - // - // NOTE: The referred field must be present at the top-level of the response - // message type. - string response_body = 12; - - // Additional HTTP bindings for the selector. Nested bindings must - // not contain an `additional_bindings` field themselves (that is, - // the nesting may only be one level deep). - repeated HttpRule additional_bindings = 11; -} - -// A custom pattern is used for defining custom HTTP verb. -message CustomHttpPattern { - // The name of this custom HTTP verb. - string kind = 1; - - // The path matched by this custom verb. - string path = 2; -} diff --git a/proto/google/api/httpbody.proto b/proto/google/api/httpbody.proto deleted file mode 100644 index 00c80aba..00000000 --- a/proto/google/api/httpbody.proto +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/any.proto"; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/httpbody;httpbody"; -option java_multiple_files = true; -option java_outer_classname = "HttpBodyProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -// Message that represents an arbitrary HTTP body. It should only be used for -// payload formats that can't be represented as JSON, such as raw binary or -// an HTML page. -// -// -// This message can be used both in streaming and non-streaming API methods in -// the request as well as the response. -// -// It can be used as a top-level request field, which is convenient if one -// wants to extract parameters from either the URL or HTTP template into the -// request fields and also want access to the raw HTTP body. -// -// Example: -// -// message GetResourceRequest { -// // A unique request id. -// string request_id = 1; -// -// // The raw HTTP body is bound to this field. -// google.api.HttpBody http_body = 2; -// -// } -// -// service ResourceService { -// rpc GetResource(GetResourceRequest) -// returns (google.api.HttpBody); -// rpc UpdateResource(google.api.HttpBody) -// returns (google.protobuf.Empty); -// -// } -// -// Example with streaming methods: -// -// service CaldavService { -// rpc GetCalendar(stream google.api.HttpBody) -// returns (stream google.api.HttpBody); -// rpc UpdateCalendar(stream google.api.HttpBody) -// returns (stream google.api.HttpBody); -// -// } -// -// Use of this type only changes how the request and response bodies are -// handled, all other features will continue to work unchanged. -message HttpBody { - // The HTTP Content-Type header value specifying the content type of the body. - string content_type = 1; - - // The HTTP request/response body as raw binary. - bytes data = 2; - - // Application specific response metadata. Must be set in the first response - // for streaming APIs. - repeated google.protobuf.Any extensions = 3; -} diff --git a/proto/google/api/resource.proto b/proto/google/api/resource.proto deleted file mode 100644 index ab71d2b9..00000000 --- a/proto/google/api/resource.proto +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/descriptor.proto"; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "ResourceProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.FieldOptions { - // An annotation that describes a resource reference, see - // [ResourceReference][]. - google.api.ResourceReference resource_reference = 1055; -} - -extend google.protobuf.FileOptions { - // An annotation that describes a resource definition without a corresponding - // message; see [ResourceDescriptor][]. - repeated google.api.ResourceDescriptor resource_definition = 1053; -} - -extend google.protobuf.MessageOptions { - // An annotation that describes a resource definition, see - // [ResourceDescriptor][]. - google.api.ResourceDescriptor resource = 1053; -} - -// A simple descriptor of a resource type. -// -// ResourceDescriptor annotates a resource message (either by means of a -// protobuf annotation or use in the service config), and associates the -// resource's schema, the resource type, and the pattern of the resource name. -// -// Example: -// -// message Topic { -// // Indicates this message defines a resource schema. -// // Declares the resource type in the format of {service}/{kind}. -// // For Kubernetes resources, the format is {api group}/{kind}. -// option (google.api.resource) = { -// type: "pubsub.googleapis.com/Topic" -// pattern: "projects/{project}/topics/{topic}" -// }; -// } -// -// The ResourceDescriptor Yaml config will look like: -// -// resources: -// - type: "pubsub.googleapis.com/Topic" -// pattern: "projects/{project}/topics/{topic}" -// -// Sometimes, resources have multiple patterns, typically because they can -// live under multiple parents. -// -// Example: -// -// message LogEntry { -// option (google.api.resource) = { -// type: "logging.googleapis.com/LogEntry" -// pattern: "projects/{project}/logs/{log}" -// pattern: "folders/{folder}/logs/{log}" -// pattern: "organizations/{organization}/logs/{log}" -// pattern: "billingAccounts/{billing_account}/logs/{log}" -// }; -// } -// -// The ResourceDescriptor Yaml config will look like: -// -// resources: -// - type: 'logging.googleapis.com/LogEntry' -// pattern: "projects/{project}/logs/{log}" -// pattern: "folders/{folder}/logs/{log}" -// pattern: "organizations/{organization}/logs/{log}" -// pattern: "billingAccounts/{billing_account}/logs/{log}" -message ResourceDescriptor { - // A description of the historical or future-looking state of the - // resource pattern. - enum History { - // The "unset" value. - HISTORY_UNSPECIFIED = 0; - - // The resource originally had one pattern and launched as such, and - // additional patterns were added later. - ORIGINALLY_SINGLE_PATTERN = 1; - - // The resource has one pattern, but the API owner expects to add more - // later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents - // that from being necessary once there are multiple patterns.) - FUTURE_MULTI_PATTERN = 2; - } - - // A flag representing a specific style that a resource claims to conform to. - enum Style { - // The unspecified value. Do not use. - STYLE_UNSPECIFIED = 0; - - // This resource is intended to be "declarative-friendly". - // - // Declarative-friendly resources must be more strictly consistent, and - // setting this to true communicates to tools that this resource should - // adhere to declarative-friendly expectations. - // - // Note: This is used by the API linter (linter.aip.dev) to enable - // additional checks. - DECLARATIVE_FRIENDLY = 1; - } - - // The resource type. It must be in the format of - // {service_name}/{resource_type_kind}. The `resource_type_kind` must be - // singular and must not include version numbers. - // - // Example: `storage.googleapis.com/Bucket` - // - // The value of the resource_type_kind must follow the regular expression - // /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and - // should use PascalCase (UpperCamelCase). The maximum number of - // characters allowed for the `resource_type_kind` is 100. - string type = 1; - - // Optional. The relative resource name pattern associated with this resource - // type. The DNS prefix of the full resource name shouldn't be specified here. - // - // The path pattern must follow the syntax, which aligns with HTTP binding - // syntax: - // - // Template = Segment { "/" Segment } ; - // Segment = LITERAL | Variable ; - // Variable = "{" LITERAL "}" ; - // - // Examples: - // - // - "projects/{project}/topics/{topic}" - // - "projects/{project}/knowledgeBases/{knowledge_base}" - // - // The components in braces correspond to the IDs for each resource in the - // hierarchy. It is expected that, if multiple patterns are provided, - // the same component name (e.g. "project") refers to IDs of the same - // type of resource. - repeated string pattern = 2; - - // Optional. The field on the resource that designates the resource name - // field. If omitted, this is assumed to be "name". - string name_field = 3; - - // Optional. The historical or future-looking state of the resource pattern. - // - // Example: - // - // // The InspectTemplate message originally only supported resource - // // names with organization, and project was added later. - // message InspectTemplate { - // option (google.api.resource) = { - // type: "dlp.googleapis.com/InspectTemplate" - // pattern: - // "organizations/{organization}/inspectTemplates/{inspect_template}" - // pattern: "projects/{project}/inspectTemplates/{inspect_template}" - // history: ORIGINALLY_SINGLE_PATTERN - // }; - // } - History history = 4; - - // The plural name used in the resource name and permission names, such as - // 'projects' for the resource name of 'projects/{project}' and the permission - // name of 'cloudresourcemanager.googleapis.com/projects.get'. It is the same - // concept of the `plural` field in k8s CRD spec - // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ - // - // Note: The plural form is required even for singleton resources. See - // https://aip.dev/156 - string plural = 5; - - // The same concept of the `singular` field in k8s CRD spec - // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ - // Such as "project" for the `resourcemanager.googleapis.com/Project` type. - string singular = 6; - - // Style flag(s) for this resource. - // These indicate that a resource is expected to conform to a given - // style. See the specific style flags for additional information. - repeated Style style = 10; -} - -// Defines a proto annotation that describes a string field that refers to -// an API resource. -message ResourceReference { - // The resource type that the annotated field references. - // - // Example: - // - // message Subscription { - // string topic = 2 [(google.api.resource_reference) = { - // type: "pubsub.googleapis.com/Topic" - // }]; - // } - // - // Occasionally, a field may reference an arbitrary resource. In this case, - // APIs use the special value * in their resource reference. - // - // Example: - // - // message GetIamPolicyRequest { - // string resource = 2 [(google.api.resource_reference) = { - // type: "*" - // }]; - // } - string type = 1; - - // The resource type of a child collection that the annotated field - // references. This is useful for annotating the `parent` field that - // doesn't have a fixed resource type. - // - // Example: - // - // message ListLogEntriesRequest { - // string parent = 1 [(google.api.resource_reference) = { - // child_type: "logging.googleapis.com/LogEntry" - // }; - // } - string child_type = 2; -} - diff --git a/proto/platform/advisory/v1/advisory.platform.pb.go b/proto/platform/advisory/v1/advisory.platform.pb.go deleted file mode 100644 index 889b4650..00000000 --- a/proto/platform/advisory/v1/advisory.platform.pb.go +++ /dev/null @@ -1,1936 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: advisory.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Reference_Type int32 - -const ( - // The "unset" value. - Reference_UNSPECIFIED Reference_Type = 0 - // Published security advisory for the vulnerability. - Reference_ADVISORY Reference_Type = 1 - // Article or blog post describing the vulnerability. - Reference_ARTICLE Reference_Type = 2 - // Scanner or tool that allows detection in prod environments. - Reference_DETECTION Reference_Type = 3 - // Social media discussion about vuln. - Reference_DISCUSSION Reference_Type = 4 - // Report on vuln. - Reference_REPORT Reference_Type = 5 - // Source code browser link to fix. - Reference_FIX Reference_Type = 6 - // Source code browser link to introduction of vuln. - Reference_INTRODUCED Reference_Type = 7 - // Home web page for package. - Reference_PACKAGE Reference_Type = 8 - // Demonstration of validity of vuln claim. - Reference_EVIDENCE Reference_Type = 9 - // Web page of unspecified kind. - Reference_WEB Reference_Type = 10 -) - -// Enum value maps for Reference_Type. -var ( - Reference_Type_name = map[int32]string{ - 0: "UNSPECIFIED", - 1: "ADVISORY", - 2: "ARTICLE", - 3: "DETECTION", - 4: "DISCUSSION", - 5: "REPORT", - 6: "FIX", - 7: "INTRODUCED", - 8: "PACKAGE", - 9: "EVIDENCE", - 10: "WEB", - } - Reference_Type_value = map[string]int32{ - "UNSPECIFIED": 0, - "ADVISORY": 1, - "ARTICLE": 2, - "DETECTION": 3, - "DISCUSSION": 4, - "REPORT": 5, - "FIX": 6, - "INTRODUCED": 7, - "PACKAGE": 8, - "EVIDENCE": 9, - "WEB": 10, - } -) - -func (x Reference_Type) Enum() *Reference_Type { - p := new(Reference_Type) - *p = x - return p -} - -func (x Reference_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Reference_Type) Descriptor() protoreflect.EnumDescriptor { - return file_advisory_platform_proto_enumTypes[0].Descriptor() -} - -func (Reference_Type) Type() protoreflect.EnumType { - return &file_advisory_platform_proto_enumTypes[0] -} - -func (x Reference_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Reference_Type.Descriptor instead. -func (Reference_Type) EnumDescriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{1, 0} -} - -type Severity_Type int32 - -const ( - // The "unset" value. - Severity_UNSPECIFIED Severity_Type = 0 - // CVSS v2 - Severity_CVSS_V2 Severity_Type = 1 - // CVSS >= 3.0 and < 4.0 - Severity_CVSS_V3 Severity_Type = 2 - // CVSS >= 4.0 and < 5.0 - Severity_CVSS_V4 Severity_Type = 3 -) - -// Enum value maps for Severity_Type. -var ( - Severity_Type_name = map[int32]string{ - 0: "UNSPECIFIED", - 1: "CVSS_V2", - 2: "CVSS_V3", - 3: "CVSS_V4", - } - Severity_Type_value = map[string]int32{ - "UNSPECIFIED": 0, - "CVSS_V2": 1, - "CVSS_V3": 2, - "CVSS_V4": 3, - } -) - -func (x Severity_Type) Enum() *Severity_Type { - p := new(Severity_Type) - *p = x - return p -} - -func (x Severity_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Severity_Type) Descriptor() protoreflect.EnumDescriptor { - return file_advisory_platform_proto_enumTypes[1].Descriptor() -} - -func (Severity_Type) Type() protoreflect.EnumType { - return &file_advisory_platform_proto_enumTypes[1] -} - -func (x Severity_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Severity_Type.Descriptor instead. -func (Severity_Type) EnumDescriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{2, 0} -} - -type FalsePositiveDetermination_Type int32 - -const ( - // The "unset" value. - FalsePositiveDetermination_FPT_TYPE_UNSPECIFIED FalsePositiveDetermination_Type = 0 - // VEX: vulnerable_code_not_present. - FalsePositiveDetermination_FPT_TYPE_VULNERABILITY_RECORD_ANALYSIS_CONTESTED FalsePositiveDetermination_Type = 1 - // VEX: component_not_present. - FalsePositiveDetermination_FPT_TYPE_COMPONENT_VULNERABILITY_MISMATCH FalsePositiveDetermination_Type = 2 - // VEX: vulnerable_code_not_present. - FalsePositiveDetermination_FPT_TYPE_VULNERABLE_CODE_VERSION_NOT_USED FalsePositiveDetermination_Type = 3 - // VEX: vulnerable_code_not_present. - FalsePositiveDetermination_FPT_TYPE_VULNERABLE_CODE_NOT_INCLUDED_IN_PACKAGE FalsePositiveDetermination_Type = 4 - // VEX: vulnerable_code_not_in_execute_path. - FalsePositiveDetermination_FPT_TYPE_VULNERABLE_CODE_NOT_IN_EXECUTION_PATH FalsePositiveDetermination_Type = 5 - // VEX: vulnerable_code_cannot_be_controlled_by_adversary. - FalsePositiveDetermination_FPT_TYPE_VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY FalsePositiveDetermination_Type = 6 - // VEX: inline_mitigations_already_exist. - FalsePositiveDetermination_FPT_TYPE_INLINE_MITIGATIONS_EXIST FalsePositiveDetermination_Type = 7 -) - -// Enum value maps for FalsePositiveDetermination_Type. -var ( - FalsePositiveDetermination_Type_name = map[int32]string{ - 0: "FPT_TYPE_UNSPECIFIED", - 1: "FPT_TYPE_VULNERABILITY_RECORD_ANALYSIS_CONTESTED", - 2: "FPT_TYPE_COMPONENT_VULNERABILITY_MISMATCH", - 3: "FPT_TYPE_VULNERABLE_CODE_VERSION_NOT_USED", - 4: "FPT_TYPE_VULNERABLE_CODE_NOT_INCLUDED_IN_PACKAGE", - 5: "FPT_TYPE_VULNERABLE_CODE_NOT_IN_EXECUTION_PATH", - 6: "FPT_TYPE_VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY", - 7: "FPT_TYPE_INLINE_MITIGATIONS_EXIST", - } - FalsePositiveDetermination_Type_value = map[string]int32{ - "FPT_TYPE_UNSPECIFIED": 0, - "FPT_TYPE_VULNERABILITY_RECORD_ANALYSIS_CONTESTED": 1, - "FPT_TYPE_COMPONENT_VULNERABILITY_MISMATCH": 2, - "FPT_TYPE_VULNERABLE_CODE_VERSION_NOT_USED": 3, - "FPT_TYPE_VULNERABLE_CODE_NOT_INCLUDED_IN_PACKAGE": 4, - "FPT_TYPE_VULNERABLE_CODE_NOT_IN_EXECUTION_PATH": 5, - "FPT_TYPE_VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY": 6, - "FPT_TYPE_INLINE_MITIGATIONS_EXIST": 7, - } -) - -func (x FalsePositiveDetermination_Type) Enum() *FalsePositiveDetermination_Type { - p := new(FalsePositiveDetermination_Type) - *p = x - return p -} - -func (x FalsePositiveDetermination_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (FalsePositiveDetermination_Type) Descriptor() protoreflect.EnumDescriptor { - return file_advisory_platform_proto_enumTypes[2].Descriptor() -} - -func (FalsePositiveDetermination_Type) Type() protoreflect.EnumType { - return &file_advisory_platform_proto_enumTypes[2] -} - -func (x FalsePositiveDetermination_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use FalsePositiveDetermination_Type.Descriptor instead. -func (FalsePositiveDetermination_Type) EnumDescriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{7, 0} -} - -type VulnerabilityMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the identifier of this specific vuln. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - Details string `protobuf:"bytes,3,opt,name=details,proto3" json:"details,omitempty"` - References []*Reference `protobuf:"bytes,4,rep,name=references,proto3" json:"references,omitempty"` - Severity []*Severity `protobuf:"bytes,5,rep,name=severity,proto3" json:"severity,omitempty"` -} - -func (x *VulnerabilityMetadata) Reset() { - *x = VulnerabilityMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnerabilityMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnerabilityMetadata) ProtoMessage() {} - -func (x *VulnerabilityMetadata) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnerabilityMetadata.ProtoReflect.Descriptor instead. -func (*VulnerabilityMetadata) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *VulnerabilityMetadata) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *VulnerabilityMetadata) GetSummary() string { - if x != nil { - return x.Summary - } - return "" -} - -func (x *VulnerabilityMetadata) GetDetails() string { - if x != nil { - return x.Details - } - return "" -} - -func (x *VulnerabilityMetadata) GetReferences() []*Reference { - if x != nil { - return x.References - } - return nil -} - -func (x *VulnerabilityMetadata) GetSeverity() []*Severity { - if x != nil { - return x.Severity - } - return nil -} - -type Reference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type Reference_Type `protobuf:"varint,1,opt,name=type,proto3,enum=chainguard.platform.advisory.Reference_Type" json:"type,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` -} - -func (x *Reference) Reset() { - *x = Reference{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Reference) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Reference) ProtoMessage() {} - -func (x *Reference) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Reference.ProtoReflect.Descriptor instead. -func (*Reference) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *Reference) GetType() Reference_Type { - if x != nil { - return x.Type - } - return Reference_UNSPECIFIED -} - -func (x *Reference) GetUrl() string { - if x != nil { - return x.Url - } - return "" -} - -type Severity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // CVSS version standard. - Type Severity_Type `protobuf:"varint,1,opt,name=type,proto3,enum=chainguard.platform.advisory.Severity_Type" json:"type,omitempty"` - // Vector string representing CVSS score based on type. - Score string `protobuf:"bytes,2,opt,name=score,proto3" json:"score,omitempty"` -} - -func (x *Severity) Reset() { - *x = Severity{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Severity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Severity) ProtoMessage() {} - -func (x *Severity) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Severity.ProtoReflect.Descriptor instead. -func (*Severity) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *Severity) GetType() Severity_Type { - if x != nil { - return x.Type - } - return Severity_UNSPECIFIED -} - -func (x *Severity) GetScore() string { - if x != nil { - return x.Score - } - return "" -} - -type Advisory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the identifier of this specific advisory. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Events []*Event `protobuf:"bytes,2,rep,name=events,proto3" json:"events,omitempty"` - Aliases []string `protobuf:"bytes,3,rep,name=aliases,proto3" json:"aliases,omitempty"` -} - -func (x *Advisory) Reset() { - *x = Advisory{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Advisory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Advisory) ProtoMessage() {} - -func (x *Advisory) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_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 Advisory.ProtoReflect.Descriptor instead. -func (*Advisory) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *Advisory) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Advisory) GetEvents() []*Event { - if x != nil { - return x.Events - } - return nil -} - -func (x *Advisory) GetAliases() []string { - if x != nil { - return x.Aliases - } - return nil -} - -type Document struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Advisories []*Advisory `protobuf:"bytes,2,rep,name=advisories,proto3" json:"advisories,omitempty"` -} - -func (x *Document) Reset() { - *x = Document{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Document) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Document) ProtoMessage() {} - -func (x *Document) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Document.ProtoReflect.Descriptor instead. -func (*Document) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *Document) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Document) GetAdvisories() []*Advisory { - if x != nil { - return x.Advisories - } - return nil -} - -type Event struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - // Types that are assignable to Data: - // - // *Event_TruePositiveDetermination - // *Event_FalsePositiveDetermination - // *Event_Fixed - // *Event_Detection - // *Event_AnalysisNotPlanned - // *Event_FixNotPlanned - // *Event_PendingUpstreamFix - Data isEvent_Data `protobuf_oneof:"data"` -} - -func (x *Event) Reset() { - *x = Event{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Event) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Event) ProtoMessage() {} - -func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Event.ProtoReflect.Descriptor instead. -func (*Event) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *Event) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -func (m *Event) GetData() isEvent_Data { - if m != nil { - return m.Data - } - return nil -} - -func (x *Event) GetTruePositiveDetermination() *TruePositiveDetermination { - if x, ok := x.GetData().(*Event_TruePositiveDetermination); ok { - return x.TruePositiveDetermination - } - return nil -} - -func (x *Event) GetFalsePositiveDetermination() *FalsePositiveDetermination { - if x, ok := x.GetData().(*Event_FalsePositiveDetermination); ok { - return x.FalsePositiveDetermination - } - return nil -} - -func (x *Event) GetFixed() *Fixed { - if x, ok := x.GetData().(*Event_Fixed); ok { - return x.Fixed - } - return nil -} - -func (x *Event) GetDetection() *Detection { - if x, ok := x.GetData().(*Event_Detection); ok { - return x.Detection - } - return nil -} - -func (x *Event) GetAnalysisNotPlanned() *AnalysisNotPlanned { - if x, ok := x.GetData().(*Event_AnalysisNotPlanned); ok { - return x.AnalysisNotPlanned - } - return nil -} - -func (x *Event) GetFixNotPlanned() *FixNotPlanned { - if x, ok := x.GetData().(*Event_FixNotPlanned); ok { - return x.FixNotPlanned - } - return nil -} - -func (x *Event) GetPendingUpstreamFix() *PendingUpstreamFix { - if x, ok := x.GetData().(*Event_PendingUpstreamFix); ok { - return x.PendingUpstreamFix - } - return nil -} - -type isEvent_Data interface { - isEvent_Data() -} - -type Event_TruePositiveDetermination struct { - TruePositiveDetermination *TruePositiveDetermination `protobuf:"bytes,10,opt,name=true_positive_determination,json=truePositiveDetermination,proto3,oneof"` -} - -type Event_FalsePositiveDetermination struct { - FalsePositiveDetermination *FalsePositiveDetermination `protobuf:"bytes,11,opt,name=false_positive_determination,json=falsePositiveDetermination,proto3,oneof"` -} - -type Event_Fixed struct { - Fixed *Fixed `protobuf:"bytes,12,opt,name=fixed,proto3,oneof"` -} - -type Event_Detection struct { - Detection *Detection `protobuf:"bytes,13,opt,name=detection,proto3,oneof"` -} - -type Event_AnalysisNotPlanned struct { - AnalysisNotPlanned *AnalysisNotPlanned `protobuf:"bytes,14,opt,name=analysis_not_planned,json=analysisNotPlanned,proto3,oneof"` -} - -type Event_FixNotPlanned struct { - FixNotPlanned *FixNotPlanned `protobuf:"bytes,15,opt,name=fix_not_planned,json=fixNotPlanned,proto3,oneof"` -} - -type Event_PendingUpstreamFix struct { - PendingUpstreamFix *PendingUpstreamFix `protobuf:"bytes,16,opt,name=pending_upstream_fix,json=pendingUpstreamFix,proto3,oneof"` -} - -func (*Event_TruePositiveDetermination) isEvent_Data() {} - -func (*Event_FalsePositiveDetermination) isEvent_Data() {} - -func (*Event_Fixed) isEvent_Data() {} - -func (*Event_Detection) isEvent_Data() {} - -func (*Event_AnalysisNotPlanned) isEvent_Data() {} - -func (*Event_FixNotPlanned) isEvent_Data() {} - -func (*Event_PendingUpstreamFix) isEvent_Data() {} - -type TruePositiveDetermination struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Note string `protobuf:"bytes,1,opt,name=note,proto3" json:"note,omitempty"` -} - -func (x *TruePositiveDetermination) Reset() { - *x = TruePositiveDetermination{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TruePositiveDetermination) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TruePositiveDetermination) ProtoMessage() {} - -func (x *TruePositiveDetermination) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TruePositiveDetermination.ProtoReflect.Descriptor instead. -func (*TruePositiveDetermination) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{6} -} - -func (x *TruePositiveDetermination) GetNote() string { - if x != nil { - return x.Note - } - return "" -} - -type FalsePositiveDetermination struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type FalsePositiveDetermination_Type `protobuf:"varint,1,opt,name=type,proto3,enum=chainguard.platform.advisory.FalsePositiveDetermination_Type" json:"type,omitempty"` - Note string `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` -} - -func (x *FalsePositiveDetermination) Reset() { - *x = FalsePositiveDetermination{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FalsePositiveDetermination) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FalsePositiveDetermination) ProtoMessage() {} - -func (x *FalsePositiveDetermination) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FalsePositiveDetermination.ProtoReflect.Descriptor instead. -func (*FalsePositiveDetermination) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{7} -} - -func (x *FalsePositiveDetermination) GetType() FalsePositiveDetermination_Type { - if x != nil { - return x.Type - } - return FalsePositiveDetermination_FPT_TYPE_UNSPECIFIED -} - -func (x *FalsePositiveDetermination) GetNote() string { - if x != nil { - return x.Note - } - return "" -} - -type Fixed struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FixedVersion string `protobuf:"bytes,1,opt,name=fixed_version,json=fixedVersion,proto3" json:"fixed_version,omitempty"` -} - -func (x *Fixed) Reset() { - *x = Fixed{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Fixed) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Fixed) ProtoMessage() {} - -func (x *Fixed) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Fixed.ProtoReflect.Descriptor instead. -func (*Fixed) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{8} -} - -func (x *Fixed) GetFixedVersion() string { - if x != nil { - return x.FixedVersion - } - return "" -} - -type Detection struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Type: - // - // *Detection_Nvdapi - // *Detection_Manual - Type isDetection_Type `protobuf_oneof:"type"` -} - -func (x *Detection) Reset() { - *x = Detection{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Detection) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Detection) ProtoMessage() {} - -func (x *Detection) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Detection.ProtoReflect.Descriptor instead. -func (*Detection) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{9} -} - -func (m *Detection) GetType() isDetection_Type { - if m != nil { - return m.Type - } - return nil -} - -func (x *Detection) GetNvdapi() *Detection_DetectionTypeNVDAPI { - if x, ok := x.GetType().(*Detection_Nvdapi); ok { - return x.Nvdapi - } - return nil -} - -func (x *Detection) GetManual() *Detection_DetectionTypeManual { - if x, ok := x.GetType().(*Detection_Manual); ok { - return x.Manual - } - return nil -} - -type isDetection_Type interface { - isDetection_Type() -} - -type Detection_Nvdapi struct { - Nvdapi *Detection_DetectionTypeNVDAPI `protobuf:"bytes,1,opt,name=nvdapi,proto3,oneof"` -} - -type Detection_Manual struct { - Manual *Detection_DetectionTypeManual `protobuf:"bytes,2,opt,name=manual,proto3,oneof"` -} - -func (*Detection_Nvdapi) isDetection_Type() {} - -func (*Detection_Manual) isDetection_Type() {} - -type AnalysisNotPlanned struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Note string `protobuf:"bytes,1,opt,name=note,proto3" json:"note,omitempty"` -} - -func (x *AnalysisNotPlanned) Reset() { - *x = AnalysisNotPlanned{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AnalysisNotPlanned) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AnalysisNotPlanned) ProtoMessage() {} - -func (x *AnalysisNotPlanned) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AnalysisNotPlanned.ProtoReflect.Descriptor instead. -func (*AnalysisNotPlanned) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{10} -} - -func (x *AnalysisNotPlanned) GetNote() string { - if x != nil { - return x.Note - } - return "" -} - -type FixNotPlanned struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Note string `protobuf:"bytes,1,opt,name=note,proto3" json:"note,omitempty"` -} - -func (x *FixNotPlanned) Reset() { - *x = FixNotPlanned{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FixNotPlanned) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FixNotPlanned) ProtoMessage() {} - -func (x *FixNotPlanned) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FixNotPlanned.ProtoReflect.Descriptor instead. -func (*FixNotPlanned) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{11} -} - -func (x *FixNotPlanned) GetNote() string { - if x != nil { - return x.Note - } - return "" -} - -type PendingUpstreamFix struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Note string `protobuf:"bytes,1,opt,name=note,proto3" json:"note,omitempty"` -} - -func (x *PendingUpstreamFix) Reset() { - *x = PendingUpstreamFix{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PendingUpstreamFix) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PendingUpstreamFix) ProtoMessage() {} - -func (x *PendingUpstreamFix) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PendingUpstreamFix.ProtoReflect.Descriptor instead. -func (*PendingUpstreamFix) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{12} -} - -func (x *PendingUpstreamFix) GetNote() string { - if x != nil { - return x.Note - } - return "" -} - -type DocumentFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the id of a package. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Cves []string `protobuf:"bytes,2,rep,name=cves,proto3" json:"cves,omitempty"` -} - -func (x *DocumentFilter) Reset() { - *x = DocumentFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DocumentFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DocumentFilter) ProtoMessage() {} - -func (x *DocumentFilter) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DocumentFilter.ProtoReflect.Descriptor instead. -func (*DocumentFilter) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{13} -} - -func (x *DocumentFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *DocumentFilter) GetCves() []string { - if x != nil { - return x.Cves - } - return nil -} - -type DocumentList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Document `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *DocumentList) Reset() { - *x = DocumentList{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DocumentList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DocumentList) ProtoMessage() {} - -func (x *DocumentList) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DocumentList.ProtoReflect.Descriptor instead. -func (*DocumentList) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{14} -} - -func (x *DocumentList) GetItems() []*Document { - if x != nil { - return x.Items - } - return nil -} - -type VulnerabilityMetadataFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the id of a vuln. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *VulnerabilityMetadataFilter) Reset() { - *x = VulnerabilityMetadataFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnerabilityMetadataFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnerabilityMetadataFilter) ProtoMessage() {} - -func (x *VulnerabilityMetadataFilter) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnerabilityMetadataFilter.ProtoReflect.Descriptor instead. -func (*VulnerabilityMetadataFilter) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{15} -} - -func (x *VulnerabilityMetadataFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type VulnerabilityMetadataList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*VulnerabilityMetadata `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *VulnerabilityMetadataList) Reset() { - *x = VulnerabilityMetadataList{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnerabilityMetadataList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnerabilityMetadataList) ProtoMessage() {} - -func (x *VulnerabilityMetadataList) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnerabilityMetadataList.ProtoReflect.Descriptor instead. -func (*VulnerabilityMetadataList) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{16} -} - -func (x *VulnerabilityMetadataList) GetItems() []*VulnerabilityMetadata { - if x != nil { - return x.Items - } - return nil -} - -type Detection_DetectionTypeNVDAPI struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CpeSearched string `protobuf:"bytes,1,opt,name=cpe_searched,json=cpeSearched,proto3" json:"cpe_searched,omitempty"` - CpeFound string `protobuf:"bytes,2,opt,name=cpe_found,json=cpeFound,proto3" json:"cpe_found,omitempty"` -} - -func (x *Detection_DetectionTypeNVDAPI) Reset() { - *x = Detection_DetectionTypeNVDAPI{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Detection_DetectionTypeNVDAPI) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Detection_DetectionTypeNVDAPI) ProtoMessage() {} - -func (x *Detection_DetectionTypeNVDAPI) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Detection_DetectionTypeNVDAPI.ProtoReflect.Descriptor instead. -func (*Detection_DetectionTypeNVDAPI) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{9, 0} -} - -func (x *Detection_DetectionTypeNVDAPI) GetCpeSearched() string { - if x != nil { - return x.CpeSearched - } - return "" -} - -func (x *Detection_DetectionTypeNVDAPI) GetCpeFound() string { - if x != nil { - return x.CpeFound - } - return "" -} - -type Detection_DetectionTypeManual struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *Detection_DetectionTypeManual) Reset() { - *x = Detection_DetectionTypeManual{} - if protoimpl.UnsafeEnabled { - mi := &file_advisory_platform_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Detection_DetectionTypeManual) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Detection_DetectionTypeManual) ProtoMessage() {} - -func (x *Detection_DetectionTypeManual) ProtoReflect() protoreflect.Message { - mi := &file_advisory_platform_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Detection_DetectionTypeManual.ProtoReflect.Descriptor instead. -func (*Detection_DetectionTypeManual) Descriptor() ([]byte, []int) { - return file_advisory_platform_proto_rawDescGZIP(), []int{9, 1} -} - -var File_advisory_platform_proto protoreflect.FileDescriptor - -var file_advisory_platform_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe8, - 0x01, 0x0a, 0x15, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x47, 0x0a, 0x0a, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, - 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, - 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x52, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0xfc, 0x01, 0x0a, 0x09, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, - 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x9a, 0x01, 0x0a, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x44, 0x56, 0x49, 0x53, 0x4f, 0x52, - 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x52, 0x54, 0x49, 0x43, 0x4c, 0x45, 0x10, 0x02, - 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x54, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, - 0x0e, 0x0a, 0x0a, 0x44, 0x49, 0x53, 0x43, 0x55, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, - 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x46, - 0x49, 0x58, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x54, 0x52, 0x4f, 0x44, 0x55, 0x43, - 0x45, 0x44, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x10, - 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x56, 0x49, 0x44, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x09, 0x12, - 0x07, 0x0a, 0x03, 0x57, 0x45, 0x42, 0x10, 0x0a, 0x22, 0xa1, 0x01, 0x0a, 0x08, 0x53, 0x65, 0x76, - 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, - 0x72, 0x79, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x3e, 0x0a, 0x04, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x56, 0x53, 0x53, 0x5f, 0x56, 0x32, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x56, 0x53, 0x53, 0x5f, 0x56, 0x33, 0x10, 0x02, 0x12, - 0x0b, 0x0a, 0x07, 0x43, 0x56, 0x53, 0x53, 0x5f, 0x56, 0x34, 0x10, 0x03, 0x22, 0x71, 0x0a, 0x08, - 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x22, - 0x62, 0x0a, 0x08, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x0a, 0x61, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x41, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, - 0x69, 0x65, 0x73, 0x22, 0xeb, 0x05, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x79, 0x0a, 0x1b, 0x74, 0x72, 0x75, 0x65, 0x5f, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x75, 0x65, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x19, 0x74, 0x72, 0x75, 0x65, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x7c, 0x0a, 0x1c, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x3b, 0x0a, 0x05, 0x66, 0x69, 0x78, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x46, - 0x69, 0x78, 0x65, 0x64, 0x48, 0x00, 0x52, 0x05, 0x66, 0x69, 0x78, 0x65, 0x64, 0x12, 0x47, 0x0a, - 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, - 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x14, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, - 0x69, 0x73, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, - 0x6f, 0x72, 0x79, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4e, 0x6f, 0x74, 0x50, - 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x48, 0x00, 0x52, 0x12, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, - 0x69, 0x73, 0x4e, 0x6f, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x55, 0x0a, 0x0f, - 0x66, 0x69, 0x78, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, - 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x78, 0x4e, 0x6f, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, - 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x66, 0x69, 0x78, 0x4e, 0x6f, 0x74, 0x50, 0x6c, 0x61, 0x6e, - 0x6e, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x14, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x75, - 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x66, 0x69, 0x78, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, - 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x46, 0x69, 0x78, 0x48, 0x00, 0x52, 0x12, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x55, 0x70, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x69, 0x78, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x2f, 0x0a, 0x19, 0x54, 0x72, 0x75, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, - 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, - 0x74, 0x65, 0x22, 0x8b, 0x04, 0x0a, 0x1a, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x51, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x3d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x46, - 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x85, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x34, 0x0a, 0x30, 0x46, - 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x41, 0x4e, 0x41, - 0x4c, 0x59, 0x53, 0x49, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x53, 0x54, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, - 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, - 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x02, - 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x55, 0x4c, - 0x4e, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x56, 0x45, 0x52, - 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x44, 0x10, 0x03, 0x12, - 0x34, 0x0a, 0x30, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x55, 0x4c, 0x4e, - 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x41, 0x43, 0x4b, - 0x41, 0x47, 0x45, 0x10, 0x04, 0x12, 0x32, 0x0a, 0x2e, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, - 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x10, 0x05, 0x12, 0x3e, 0x0a, 0x3a, 0x46, 0x50, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, - 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x5f, 0x42, 0x59, 0x5f, 0x41, 0x44, - 0x56, 0x45, 0x52, 0x53, 0x41, 0x52, 0x59, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, 0x46, 0x50, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x4d, 0x49, 0x54, - 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x07, - 0x22, 0x2c, 0x0a, 0x05, 0x46, 0x69, 0x78, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, - 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xaf, - 0x02, 0x0a, 0x09, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x06, - 0x6e, 0x76, 0x64, 0x61, 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x4e, 0x56, 0x44, 0x41, 0x50, 0x49, 0x48, 0x00, 0x52, 0x06, 0x6e, 0x76, 0x64, - 0x61, 0x70, 0x69, 0x12, 0x55, 0x0a, 0x06, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, - 0x72, 0x79, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, - 0x48, 0x00, 0x52, 0x06, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x1a, 0x55, 0x0a, 0x13, 0x44, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x56, 0x44, 0x41, 0x50, - 0x49, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x70, 0x65, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x70, 0x65, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x65, 0x5f, 0x66, 0x6f, 0x75, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x70, 0x65, 0x46, 0x6f, 0x75, 0x6e, - 0x64, 0x1a, 0x15, 0x0a, 0x13, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x28, 0x0a, 0x12, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4e, 0x6f, 0x74, 0x50, - 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x23, 0x0a, 0x0d, 0x46, 0x69, - 0x78, 0x4e, 0x6f, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, - 0x28, 0x0a, 0x12, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x46, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x34, 0x0a, 0x0e, 0x44, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x76, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x63, 0x76, 0x65, 0x73, 0x22, - 0x4c, 0x0a, 0x0c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x3c, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x44, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x2d, 0x0a, - 0x1b, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x66, 0x0a, 0x19, - 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, - 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x32, 0xdf, 0x02, 0x0a, 0x10, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x4c, 0x69, - 0x73, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, - 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x0a, 0x00, 0x12, 0xb6, 0x01, - 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, - 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, - 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x02, 0x0a, 0x00, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x76, - 0x31, 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x41, 0x64, 0x76, 0x69, 0x73, - 0x6f, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x64, - 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_advisory_platform_proto_rawDescOnce sync.Once - file_advisory_platform_proto_rawDescData = file_advisory_platform_proto_rawDesc -) - -func file_advisory_platform_proto_rawDescGZIP() []byte { - file_advisory_platform_proto_rawDescOnce.Do(func() { - file_advisory_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_advisory_platform_proto_rawDescData) - }) - return file_advisory_platform_proto_rawDescData -} - -var file_advisory_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_advisory_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 19) -var file_advisory_platform_proto_goTypes = []interface{}{ - (Reference_Type)(0), // 0: chainguard.platform.advisory.Reference.Type - (Severity_Type)(0), // 1: chainguard.platform.advisory.Severity.Type - (FalsePositiveDetermination_Type)(0), // 2: chainguard.platform.advisory.FalsePositiveDetermination.Type - (*VulnerabilityMetadata)(nil), // 3: chainguard.platform.advisory.VulnerabilityMetadata - (*Reference)(nil), // 4: chainguard.platform.advisory.Reference - (*Severity)(nil), // 5: chainguard.platform.advisory.Severity - (*Advisory)(nil), // 6: chainguard.platform.advisory.Advisory - (*Document)(nil), // 7: chainguard.platform.advisory.Document - (*Event)(nil), // 8: chainguard.platform.advisory.Event - (*TruePositiveDetermination)(nil), // 9: chainguard.platform.advisory.TruePositiveDetermination - (*FalsePositiveDetermination)(nil), // 10: chainguard.platform.advisory.FalsePositiveDetermination - (*Fixed)(nil), // 11: chainguard.platform.advisory.Fixed - (*Detection)(nil), // 12: chainguard.platform.advisory.Detection - (*AnalysisNotPlanned)(nil), // 13: chainguard.platform.advisory.AnalysisNotPlanned - (*FixNotPlanned)(nil), // 14: chainguard.platform.advisory.FixNotPlanned - (*PendingUpstreamFix)(nil), // 15: chainguard.platform.advisory.PendingUpstreamFix - (*DocumentFilter)(nil), // 16: chainguard.platform.advisory.DocumentFilter - (*DocumentList)(nil), // 17: chainguard.platform.advisory.DocumentList - (*VulnerabilityMetadataFilter)(nil), // 18: chainguard.platform.advisory.VulnerabilityMetadataFilter - (*VulnerabilityMetadataList)(nil), // 19: chainguard.platform.advisory.VulnerabilityMetadataList - (*Detection_DetectionTypeNVDAPI)(nil), // 20: chainguard.platform.advisory.Detection.DetectionTypeNVDAPI - (*Detection_DetectionTypeManual)(nil), // 21: chainguard.platform.advisory.Detection.DetectionTypeManual - (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp -} -var file_advisory_platform_proto_depIdxs = []int32{ - 4, // 0: chainguard.platform.advisory.VulnerabilityMetadata.references:type_name -> chainguard.platform.advisory.Reference - 5, // 1: chainguard.platform.advisory.VulnerabilityMetadata.severity:type_name -> chainguard.platform.advisory.Severity - 0, // 2: chainguard.platform.advisory.Reference.type:type_name -> chainguard.platform.advisory.Reference.Type - 1, // 3: chainguard.platform.advisory.Severity.type:type_name -> chainguard.platform.advisory.Severity.Type - 8, // 4: chainguard.platform.advisory.Advisory.events:type_name -> chainguard.platform.advisory.Event - 6, // 5: chainguard.platform.advisory.Document.advisories:type_name -> chainguard.platform.advisory.Advisory - 22, // 6: chainguard.platform.advisory.Event.timestamp:type_name -> google.protobuf.Timestamp - 9, // 7: chainguard.platform.advisory.Event.true_positive_determination:type_name -> chainguard.platform.advisory.TruePositiveDetermination - 10, // 8: chainguard.platform.advisory.Event.false_positive_determination:type_name -> chainguard.platform.advisory.FalsePositiveDetermination - 11, // 9: chainguard.platform.advisory.Event.fixed:type_name -> chainguard.platform.advisory.Fixed - 12, // 10: chainguard.platform.advisory.Event.detection:type_name -> chainguard.platform.advisory.Detection - 13, // 11: chainguard.platform.advisory.Event.analysis_not_planned:type_name -> chainguard.platform.advisory.AnalysisNotPlanned - 14, // 12: chainguard.platform.advisory.Event.fix_not_planned:type_name -> chainguard.platform.advisory.FixNotPlanned - 15, // 13: chainguard.platform.advisory.Event.pending_upstream_fix:type_name -> chainguard.platform.advisory.PendingUpstreamFix - 2, // 14: chainguard.platform.advisory.FalsePositiveDetermination.type:type_name -> chainguard.platform.advisory.FalsePositiveDetermination.Type - 20, // 15: chainguard.platform.advisory.Detection.nvdapi:type_name -> chainguard.platform.advisory.Detection.DetectionTypeNVDAPI - 21, // 16: chainguard.platform.advisory.Detection.manual:type_name -> chainguard.platform.advisory.Detection.DetectionTypeManual - 7, // 17: chainguard.platform.advisory.DocumentList.items:type_name -> chainguard.platform.advisory.Document - 3, // 18: chainguard.platform.advisory.VulnerabilityMetadataList.items:type_name -> chainguard.platform.advisory.VulnerabilityMetadata - 16, // 19: chainguard.platform.advisory.SecurityAdvisory.ListDocuments:input_type -> chainguard.platform.advisory.DocumentFilter - 18, // 20: chainguard.platform.advisory.SecurityAdvisory.ListVulnerabilityMetadata:input_type -> chainguard.platform.advisory.VulnerabilityMetadataFilter - 17, // 21: chainguard.platform.advisory.SecurityAdvisory.ListDocuments:output_type -> chainguard.platform.advisory.DocumentList - 19, // 22: chainguard.platform.advisory.SecurityAdvisory.ListVulnerabilityMetadata:output_type -> chainguard.platform.advisory.VulnerabilityMetadataList - 21, // [21:23] is the sub-list for method output_type - 19, // [19:21] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name -} - -func init() { file_advisory_platform_proto_init() } -func file_advisory_platform_proto_init() { - if File_advisory_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_advisory_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilityMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Reference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Severity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Advisory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Document); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Event); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TruePositiveDetermination); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FalsePositiveDetermination); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Fixed); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Detection); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AnalysisNotPlanned); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FixNotPlanned); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PendingUpstreamFix); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DocumentFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DocumentList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilityMetadataFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilityMetadataList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Detection_DetectionTypeNVDAPI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_advisory_platform_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Detection_DetectionTypeManual); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_advisory_platform_proto_msgTypes[5].OneofWrappers = []interface{}{ - (*Event_TruePositiveDetermination)(nil), - (*Event_FalsePositiveDetermination)(nil), - (*Event_Fixed)(nil), - (*Event_Detection)(nil), - (*Event_AnalysisNotPlanned)(nil), - (*Event_FixNotPlanned)(nil), - (*Event_PendingUpstreamFix)(nil), - } - file_advisory_platform_proto_msgTypes[9].OneofWrappers = []interface{}{ - (*Detection_Nvdapi)(nil), - (*Detection_Manual)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_advisory_platform_proto_rawDesc, - NumEnums: 3, - NumMessages: 19, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_advisory_platform_proto_goTypes, - DependencyIndexes: file_advisory_platform_proto_depIdxs, - EnumInfos: file_advisory_platform_proto_enumTypes, - MessageInfos: file_advisory_platform_proto_msgTypes, - }.Build() - File_advisory_platform_proto = out.File - file_advisory_platform_proto_rawDesc = nil - file_advisory_platform_proto_goTypes = nil - file_advisory_platform_proto_depIdxs = nil -} diff --git a/proto/platform/advisory/v1/advisory.platform.pb.gw.go b/proto/platform/advisory/v1/advisory.platform.pb.gw.go deleted file mode 100644 index 11cb9e4c..00000000 --- a/proto/platform/advisory/v1/advisory.platform.pb.gw.go +++ /dev/null @@ -1,251 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: advisory.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -var ( - filter_SecurityAdvisory_ListDocuments_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_SecurityAdvisory_ListDocuments_0(ctx context.Context, marshaler runtime.Marshaler, client SecurityAdvisoryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DocumentFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityAdvisory_ListDocuments_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ListDocuments(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SecurityAdvisory_ListDocuments_0(ctx context.Context, marshaler runtime.Marshaler, server SecurityAdvisoryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DocumentFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityAdvisory_ListDocuments_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ListDocuments(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_SecurityAdvisory_ListVulnerabilityMetadata_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client SecurityAdvisoryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq VulnerabilityMetadataFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityAdvisory_ListVulnerabilityMetadata_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ListVulnerabilityMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server SecurityAdvisoryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq VulnerabilityMetadataFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityAdvisory_ListVulnerabilityMetadata_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ListVulnerabilityMetadata(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterSecurityAdvisoryHandlerServer registers the http handlers for service SecurityAdvisory to "mux". -// UnaryRPC :call SecurityAdvisoryServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSecurityAdvisoryHandlerFromEndpoint instead. -func RegisterSecurityAdvisoryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SecurityAdvisoryServer) error { - - mux.Handle("GET", pattern_SecurityAdvisory_ListDocuments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.advisory.SecurityAdvisory/ListDocuments", runtime.WithHTTPPathPattern("/advisory/v1/documents")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SecurityAdvisory_ListDocuments_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityAdvisory_ListDocuments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_SecurityAdvisory_ListVulnerabilityMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.advisory.SecurityAdvisory/ListVulnerabilityMetadata", runtime.WithHTTPPathPattern("/advisory/v1/metadata")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterSecurityAdvisoryHandlerFromEndpoint is same as RegisterSecurityAdvisoryHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterSecurityAdvisoryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterSecurityAdvisoryHandler(ctx, mux, conn) -} - -// RegisterSecurityAdvisoryHandler registers the http handlers for service SecurityAdvisory to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterSecurityAdvisoryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterSecurityAdvisoryHandlerClient(ctx, mux, NewSecurityAdvisoryClient(conn)) -} - -// RegisterSecurityAdvisoryHandlerClient registers the http handlers for service SecurityAdvisory -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SecurityAdvisoryClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SecurityAdvisoryClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "SecurityAdvisoryClient" to call the correct interceptors. -func RegisterSecurityAdvisoryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SecurityAdvisoryClient) error { - - mux.Handle("GET", pattern_SecurityAdvisory_ListDocuments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.advisory.SecurityAdvisory/ListDocuments", runtime.WithHTTPPathPattern("/advisory/v1/documents")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SecurityAdvisory_ListDocuments_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityAdvisory_ListDocuments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_SecurityAdvisory_ListVulnerabilityMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.advisory.SecurityAdvisory/ListVulnerabilityMetadata", runtime.WithHTTPPathPattern("/advisory/v1/metadata")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_SecurityAdvisory_ListDocuments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"advisory", "v1", "documents"}, "")) - - pattern_SecurityAdvisory_ListVulnerabilityMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"advisory", "v1", "metadata"}, "")) -) - -var ( - forward_SecurityAdvisory_ListDocuments_0 = runtime.ForwardResponseMessage - - forward_SecurityAdvisory_ListVulnerabilityMetadata_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/advisory/v1/advisory.platform.proto b/proto/platform/advisory/v1/advisory.platform.proto deleted file mode 100644 index 9c79b371..00000000 --- a/proto/platform/advisory/v1/advisory.platform.proto +++ /dev/null @@ -1,233 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/advisory/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.advisory.v1"; -option java_outer_classname = "PlatformAdvisoryProto"; - -package chainguard.platform.advisory; - -import "google/api/annotations.proto"; -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; - -service SecurityAdvisory { - rpc ListDocuments(DocumentFilter) returns (DocumentList) { - option (google.api.http) = { - get: "/advisory/v1/documents" - }; - option (chainguard.annotations.iam) = { - // This method doesn't require authentication. - disabled: {} - }; - } - - rpc ListVulnerabilityMetadata(VulnerabilityMetadataFilter) returns (VulnerabilityMetadataList) { - option (google.api.http) = { - get: "/advisory/v1/metadata" - }; - option (chainguard.annotations.iam) = { - // This method doesn't require authentication. - disabled: {} - }; - } -} - -message VulnerabilityMetadata { - // id is the identifier of this specific vuln. - string id = 1; - - string summary = 2; - - string details = 3; - - repeated Reference references = 4; - - repeated Severity severity = 5; -} - -message Reference { - Type type = 1; - - string url = 2; - - enum Type { - // The "unset" value. - UNSPECIFIED = 0; - - // Published security advisory for the vulnerability. - ADVISORY = 1; - - // Article or blog post describing the vulnerability. - ARTICLE = 2; - - // Scanner or tool that allows detection in prod environments. - DETECTION = 3; - - // Social media discussion about vuln. - DISCUSSION = 4; - - // Report on vuln. - REPORT = 5; - - // Source code browser link to fix. - FIX = 6; - - // Source code browser link to introduction of vuln. - INTRODUCED = 7; - - // Home web page for package. - PACKAGE = 8; - - // Demonstration of validity of vuln claim. - EVIDENCE = 9; - - // Web page of unspecified kind. - WEB = 10; - } -} - -message Severity { - // CVSS version standard. - Type type = 1; - - // Vector string representing CVSS score based on type. - string score = 2; - - enum Type { - // The "unset" value. - UNSPECIFIED = 0; - - // CVSS v2 - CVSS_V2 = 1; - - // CVSS >= 3.0 and < 4.0 - CVSS_V3 = 2; - - // CVSS >= 4.0 and < 5.0 - CVSS_V4 = 3; - } -} - -message Advisory { - // id is the identifier of this specific advisory. - string id = 1; - - repeated Event events = 2; - - repeated string aliases = 3; -} - -message Document { - string id = 1; - - repeated Advisory advisories = 2; -} - -message Event { - google.protobuf.Timestamp timestamp = 1; - - oneof data { - TruePositiveDetermination true_positive_determination = 10; - - FalsePositiveDetermination false_positive_determination = 11; - - Fixed fixed = 12; - - Detection detection = 13; - - AnalysisNotPlanned analysis_not_planned = 14; - - FixNotPlanned fix_not_planned = 15; - - PendingUpstreamFix pending_upstream_fix = 16; - } -} - -message TruePositiveDetermination { - string note = 1; -} - -message FalsePositiveDetermination { - Type type = 1; - - string note = 2; - - enum Type { - // The "unset" value. - FPT_TYPE_UNSPECIFIED = 0; - - // VEX: vulnerable_code_not_present. - FPT_TYPE_VULNERABILITY_RECORD_ANALYSIS_CONTESTED = 1; - - // VEX: component_not_present. - FPT_TYPE_COMPONENT_VULNERABILITY_MISMATCH = 2; - - // VEX: vulnerable_code_not_present. - FPT_TYPE_VULNERABLE_CODE_VERSION_NOT_USED = 3; - - // VEX: vulnerable_code_not_present. - FPT_TYPE_VULNERABLE_CODE_NOT_INCLUDED_IN_PACKAGE = 4; - - // VEX: vulnerable_code_not_in_execute_path. - FPT_TYPE_VULNERABLE_CODE_NOT_IN_EXECUTION_PATH = 5; - - // VEX: vulnerable_code_cannot_be_controlled_by_adversary. - FPT_TYPE_VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY = 6; - - // VEX: inline_mitigations_already_exist. - FPT_TYPE_INLINE_MITIGATIONS_EXIST = 7; - } -} - -message Fixed { - string fixed_version = 1; -} - -message Detection { - oneof type { - DetectionTypeNVDAPI nvdapi = 1; - - DetectionTypeManual manual = 2; - } - - message DetectionTypeNVDAPI { - string cpe_searched = 1; - - string cpe_found = 2; - } - - message DetectionTypeManual {} -} - -message AnalysisNotPlanned { - string note = 1; -} - -message FixNotPlanned { - string note = 1; -} - -message PendingUpstreamFix { - string note = 1; -} - -message DocumentFilter { - // id is the id of a package. - string id = 1; - - repeated string cves = 2; -} - -message DocumentList { - repeated Document items = 1; -} - -message VulnerabilityMetadataFilter { - // id is the id of a vuln. - string id = 1; -} - -message VulnerabilityMetadataList { - repeated VulnerabilityMetadata items = 1; -} diff --git a/proto/platform/advisory/v1/advisory.platform_grpc.pb.go b/proto/platform/advisory/v1/advisory.platform_grpc.pb.go deleted file mode 100644 index 21682e0a..00000000 --- a/proto/platform/advisory/v1/advisory.platform_grpc.pb.go +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: advisory.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - SecurityAdvisory_ListDocuments_FullMethodName = "/chainguard.platform.advisory.SecurityAdvisory/ListDocuments" - SecurityAdvisory_ListVulnerabilityMetadata_FullMethodName = "/chainguard.platform.advisory.SecurityAdvisory/ListVulnerabilityMetadata" -) - -// SecurityAdvisoryClient is the client API for SecurityAdvisory service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type SecurityAdvisoryClient interface { - ListDocuments(ctx context.Context, in *DocumentFilter, opts ...grpc.CallOption) (*DocumentList, error) - ListVulnerabilityMetadata(ctx context.Context, in *VulnerabilityMetadataFilter, opts ...grpc.CallOption) (*VulnerabilityMetadataList, error) -} - -type securityAdvisoryClient struct { - cc grpc.ClientConnInterface -} - -func NewSecurityAdvisoryClient(cc grpc.ClientConnInterface) SecurityAdvisoryClient { - return &securityAdvisoryClient{cc} -} - -func (c *securityAdvisoryClient) ListDocuments(ctx context.Context, in *DocumentFilter, opts ...grpc.CallOption) (*DocumentList, error) { - out := new(DocumentList) - err := c.cc.Invoke(ctx, SecurityAdvisory_ListDocuments_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *securityAdvisoryClient) ListVulnerabilityMetadata(ctx context.Context, in *VulnerabilityMetadataFilter, opts ...grpc.CallOption) (*VulnerabilityMetadataList, error) { - out := new(VulnerabilityMetadataList) - err := c.cc.Invoke(ctx, SecurityAdvisory_ListVulnerabilityMetadata_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// SecurityAdvisoryServer is the server API for SecurityAdvisory service. -// All implementations must embed UnimplementedSecurityAdvisoryServer -// for forward compatibility -type SecurityAdvisoryServer interface { - ListDocuments(context.Context, *DocumentFilter) (*DocumentList, error) - ListVulnerabilityMetadata(context.Context, *VulnerabilityMetadataFilter) (*VulnerabilityMetadataList, error) - mustEmbedUnimplementedSecurityAdvisoryServer() -} - -// UnimplementedSecurityAdvisoryServer must be embedded to have forward compatible implementations. -type UnimplementedSecurityAdvisoryServer struct { -} - -func (UnimplementedSecurityAdvisoryServer) ListDocuments(context.Context, *DocumentFilter) (*DocumentList, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListDocuments not implemented") -} -func (UnimplementedSecurityAdvisoryServer) ListVulnerabilityMetadata(context.Context, *VulnerabilityMetadataFilter) (*VulnerabilityMetadataList, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListVulnerabilityMetadata not implemented") -} -func (UnimplementedSecurityAdvisoryServer) mustEmbedUnimplementedSecurityAdvisoryServer() {} - -// UnsafeSecurityAdvisoryServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to SecurityAdvisoryServer will -// result in compilation errors. -type UnsafeSecurityAdvisoryServer interface { - mustEmbedUnimplementedSecurityAdvisoryServer() -} - -func RegisterSecurityAdvisoryServer(s grpc.ServiceRegistrar, srv SecurityAdvisoryServer) { - s.RegisterService(&SecurityAdvisory_ServiceDesc, srv) -} - -func _SecurityAdvisory_ListDocuments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DocumentFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SecurityAdvisoryServer).ListDocuments(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SecurityAdvisory_ListDocuments_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SecurityAdvisoryServer).ListDocuments(ctx, req.(*DocumentFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _SecurityAdvisory_ListVulnerabilityMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(VulnerabilityMetadataFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SecurityAdvisoryServer).ListVulnerabilityMetadata(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SecurityAdvisory_ListVulnerabilityMetadata_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SecurityAdvisoryServer).ListVulnerabilityMetadata(ctx, req.(*VulnerabilityMetadataFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// SecurityAdvisory_ServiceDesc is the grpc.ServiceDesc for SecurityAdvisory service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var SecurityAdvisory_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.advisory.SecurityAdvisory", - HandlerType: (*SecurityAdvisoryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "ListDocuments", - Handler: _SecurityAdvisory_ListDocuments_Handler, - }, - { - MethodName: "ListVulnerabilityMetadata", - Handler: _SecurityAdvisory_ListVulnerabilityMetadata_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "advisory.platform.proto", -} diff --git a/proto/platform/advisory/v1/clients.go b/proto/platform/advisory/v1/clients.go deleted file mode 100644 index 124dd007..00000000 --- a/proto/platform/advisory/v1/clients.go +++ /dev/null @@ -1,81 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "context" - "fmt" - "net/url" - "time" - - delegate "chainguard.dev/go-grpc-kit/pkg/options" - "github.com/chainguard-dev/clog" - "google.golang.org/grpc" - - "chainguard.dev/sdk/auth" -) - -type Clients interface { - SecurityAdvisory() SecurityAdvisoryClient - - Close() error -} - -func NewClients(ctx context.Context, addr string, token string) (Clients, error) { - uri, err := url.Parse(addr) - if err != nil { - return nil, fmt.Errorf("failed to parse advisory service address, must be a url: %w", err) - } - - target, opts := delegate.GRPCOptions(*uri) - - // TODO: we may want to require transport security at some future point. - if cred := auth.NewFromToken(ctx, token, false); cred != nil { - opts = append(opts, grpc.WithPerRPCCredentials(cred)) - } else { - clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") - } - - var cancel context.CancelFunc - if _, timeoutSet := ctx.Deadline(); !timeoutSet { - ctx, cancel = context.WithTimeout(ctx, 300*time.Second) - defer cancel() - } - conn, err := grpc.DialContext(ctx, target, opts...) - if err != nil { - return nil, fmt.Errorf("advisory.NewClients: failed to connect to the iam server: %w", err) - } - - return &clients{ - advisory: NewSecurityAdvisoryClient(conn), - - conn: conn, - }, nil -} - -func NewClientsFromConnection(conn *grpc.ClientConn) Clients { - return &clients{ - advisory: NewSecurityAdvisoryClient(conn), - // conn is not set, this client struct does not own closing it. - } -} - -type clients struct { - advisory SecurityAdvisoryClient - - conn *grpc.ClientConn -} - -func (c *clients) SecurityAdvisory() SecurityAdvisoryClient { - return c.advisory -} - -func (c *clients) Close() error { - if c.conn != nil { - return c.conn.Close() - } - return nil -} diff --git a/proto/platform/advisory/v1/doc.go b/proto/platform/advisory/v1/doc.go deleted file mode 100644 index 2692c77e..00000000 --- a/proto/platform/advisory/v1/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package v1 contains the v1 GRPC client and server definitions -// for implementing Advisory interactions. -// -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. advisory.platform.proto -package v1 diff --git a/proto/platform/advisory/v1/test/advisory.go b/proto/platform/advisory/v1/test/advisory.go deleted file mode 100644 index 34cd2f6e..00000000 --- a/proto/platform/advisory/v1/test/advisory.go +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - advisory "chainguard.dev/sdk/proto/platform/advisory/v1" -) - -var _ advisory.Clients = (*MockSecurityAdvisoryClients)(nil) - -type MockSecurityAdvisoryClients struct { - OnClose error - - SecurityAdvisoryClient MockSecurityAdvisoryClient -} - -func (m MockSecurityAdvisoryClients) SecurityAdvisory() advisory.SecurityAdvisoryClient { - return &m.SecurityAdvisoryClient -} - -func (m MockSecurityAdvisoryClients) Close() error { - return m.OnClose -} - -var _ advisory.SecurityAdvisoryClient = (*MockSecurityAdvisoryClient)(nil) - -type MockSecurityAdvisoryClient struct { - OnListDocuments []DocumentsOnList - OnListVulnerabilityMetadata []VulnerabilityMetadataOnList -} - -type DocumentsOnList struct { - Given *advisory.DocumentFilter - List *advisory.DocumentList - Error error -} - -type VulnerabilityMetadataOnList struct { - Given *advisory.VulnerabilityMetadataFilter - List *advisory.VulnerabilityMetadataList - Error error -} - -func (m MockSecurityAdvisoryClient) ListDocuments(_ context.Context, given *advisory.DocumentFilter, _ ...grpc.CallOption) (*advisory.DocumentList, error) { //nolint: revive - for _, o := range m.OnListDocuments { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockSecurityAdvisoryClient) ListVulnerabilityMetadata(_ context.Context, given *advisory.VulnerabilityMetadataFilter, _ ...grpc.CallOption) (*advisory.VulnerabilityMetadataList, error) { //nolint: revive - for _, o := range m.OnListVulnerabilityMetadata { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/auth/v1/auth.platform.event.go b/proto/platform/auth/v1/auth.platform.event.go deleted file mode 100644 index c770ef4b..00000000 --- a/proto/platform/auth/v1/auth.platform.event.go +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *Session) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return x.GetGroup(), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *Session) CloudEventsSubject() string { - return "" -} diff --git a/proto/platform/auth/v1/auth.platform.pb.go b/proto/platform/auth/v1/auth.platform.pb.go deleted file mode 100644 index e458bdf2..00000000 --- a/proto/platform/auth/v1/auth.platform.pb.go +++ /dev/null @@ -1,505 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: auth.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/iam/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type RegistrationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // code is an optional encoded invite code, which allows us to register - // the caller's identity as a member of a particular group as a particular - // role. - // +optional - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` - // identity_id is an optional identity id. If the user already exists, this - // by-passes identity registration and continues on to cluster registration - // (if applicable) - IdentityId string `protobuf:"bytes,3,opt,name=identity_id,json=identityId,proto3" json:"identity_id,omitempty"` -} - -func (x *RegistrationRequest) Reset() { - *x = RegistrationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_auth_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RegistrationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RegistrationRequest) ProtoMessage() {} - -func (x *RegistrationRequest) ProtoReflect() protoreflect.Message { - mi := &file_auth_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RegistrationRequest.ProtoReflect.Descriptor instead. -func (*RegistrationRequest) Descriptor() ([]byte, []int) { - return file_auth_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *RegistrationRequest) GetCode() string { - if x != nil { - return x.Code - } - return "" -} - -func (x *RegistrationRequest) GetIdentityId() string { - if x != nil { - return x.IdentityId - } - return "" -} - -type Session struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // identity, the Chainguard identity id. - Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` - // group, the group this identity has joined by invitation, when an invite - // code was supplied. - Group string `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"` -} - -func (x *Session) Reset() { - *x = Session{} - if protoimpl.UnsafeEnabled { - mi := &file_auth_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Session) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Session) ProtoMessage() {} - -func (x *Session) ProtoReflect() protoreflect.Message { - mi := &file_auth_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Session.ProtoReflect.Descriptor instead. -func (*Session) Descriptor() ([]byte, []int) { - return file_auth_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *Session) GetIdentity() string { - if x != nil { - return x.Identity - } - return "" -} - -func (x *Session) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -type WhoAmI struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Issuer is the issuer of the token. - Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` - // The subject of the token. - Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` - // Audience is who the token is intended for. - Audience []string `protobuf:"bytes,3,rep,name=audience,proto3" json:"audience,omitempty"` - // When the token expires. - Expiry *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expiry,proto3" json:"expiry,omitempty"` - // With the token was issued. - IssuedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=issued_at,json=issuedAt,proto3" json:"issued_at,omitempty"` - // The capabilities referenced in the token. - Capabilities []*WhoAmI_Capability `protobuf:"bytes,101,rep,name=capabilities,proto3" json:"capabilities,omitempty"` - // The upstream email for this token. - Email string `protobuf:"bytes,102,opt,name=email,proto3" json:"email,omitempty"` -} - -func (x *WhoAmI) Reset() { - *x = WhoAmI{} - if protoimpl.UnsafeEnabled { - mi := &file_auth_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WhoAmI) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WhoAmI) ProtoMessage() {} - -func (x *WhoAmI) ProtoReflect() protoreflect.Message { - mi := &file_auth_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WhoAmI.ProtoReflect.Descriptor instead. -func (*WhoAmI) Descriptor() ([]byte, []int) { - return file_auth_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *WhoAmI) GetIssuer() string { - if x != nil { - return x.Issuer - } - return "" -} - -func (x *WhoAmI) GetSubject() string { - if x != nil { - return x.Subject - } - return "" -} - -func (x *WhoAmI) GetAudience() []string { - if x != nil { - return x.Audience - } - return nil -} - -func (x *WhoAmI) GetExpiry() *timestamppb.Timestamp { - if x != nil { - return x.Expiry - } - return nil -} - -func (x *WhoAmI) GetIssuedAt() *timestamppb.Timestamp { - if x != nil { - return x.IssuedAt - } - return nil -} - -func (x *WhoAmI) GetCapabilities() []*WhoAmI_Capability { - if x != nil { - return x.Capabilities - } - return nil -} - -func (x *WhoAmI) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -// --- Upstream fields --- -type WhoAmI_Capability struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // group of the bound role. - Group *v1.Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - // role of the bound identity. - Role *v1.Role `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` -} - -func (x *WhoAmI_Capability) Reset() { - *x = WhoAmI_Capability{} - if protoimpl.UnsafeEnabled { - mi := &file_auth_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WhoAmI_Capability) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WhoAmI_Capability) ProtoMessage() {} - -func (x *WhoAmI_Capability) ProtoReflect() protoreflect.Message { - mi := &file_auth_platform_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 WhoAmI_Capability.ProtoReflect.Descriptor instead. -func (*WhoAmI_Capability) Descriptor() ([]byte, []int) { - return file_auth_platform_proto_rawDescGZIP(), []int{2, 0} -} - -func (x *WhoAmI_Capability) GetGroup() *v1.Group { - if x != nil { - return x.Group - } - return nil -} - -func (x *WhoAmI_Capability) GetRole() *v1.Role { - if x != nil { - return x.Role - } - return nil -} - -var File_auth_platform_proto protoreflect.FileDescriptor - -var file_auth_platform_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x1a, - 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x23, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x62, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, - 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x3b, 0x0a, 0x07, - 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xa1, 0x03, 0x0a, 0x06, 0x57, 0x68, - 0x6f, 0x41, 0x6d, 0x49, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, - 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, - 0x5f, 0x61, 0x74, 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, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x74, 0x12, - 0x4f, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x65, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x66, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x1a, 0x75, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x32, 0xa4, 0x02, - 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x61, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x22, 0x1b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x6f, - 0x6b, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x12, 0x00, 0x12, 0xb8, 0x01, 0x0a, 0x08, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, - 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x0a, 0x00, 0xc2, 0xf0, - 0x8e, 0xfc, 0x0b, 0x30, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x01, 0x42, 0x65, 0x0a, 0x23, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x29, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, - 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_auth_platform_proto_rawDescOnce sync.Once - file_auth_platform_proto_rawDescData = file_auth_platform_proto_rawDesc -) - -func file_auth_platform_proto_rawDescGZIP() []byte { - file_auth_platform_proto_rawDescOnce.Do(func() { - file_auth_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_auth_platform_proto_rawDescData) - }) - return file_auth_platform_proto_rawDescData -} - -var file_auth_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_auth_platform_proto_goTypes = []interface{}{ - (*RegistrationRequest)(nil), // 0: chainguard.platform.auth.RegistrationRequest - (*Session)(nil), // 1: chainguard.platform.auth.Session - (*WhoAmI)(nil), // 2: chainguard.platform.auth.WhoAmI - (*WhoAmI_Capability)(nil), // 3: chainguard.platform.auth.WhoAmI.Capability - (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp - (*v1.Group)(nil), // 5: chainguard.platform.iam.Group - (*v1.Role)(nil), // 6: chainguard.platform.iam.Role - (*emptypb.Empty)(nil), // 7: google.protobuf.Empty -} -var file_auth_platform_proto_depIdxs = []int32{ - 4, // 0: chainguard.platform.auth.WhoAmI.expiry:type_name -> google.protobuf.Timestamp - 4, // 1: chainguard.platform.auth.WhoAmI.issued_at:type_name -> google.protobuf.Timestamp - 3, // 2: chainguard.platform.auth.WhoAmI.capabilities:type_name -> chainguard.platform.auth.WhoAmI.Capability - 5, // 3: chainguard.platform.auth.WhoAmI.Capability.group:type_name -> chainguard.platform.iam.Group - 6, // 4: chainguard.platform.auth.WhoAmI.Capability.role:type_name -> chainguard.platform.iam.Role - 7, // 5: chainguard.platform.auth.Auth.Validate:input_type -> google.protobuf.Empty - 0, // 6: chainguard.platform.auth.Auth.Register:input_type -> chainguard.platform.auth.RegistrationRequest - 2, // 7: chainguard.platform.auth.Auth.Validate:output_type -> chainguard.platform.auth.WhoAmI - 1, // 8: chainguard.platform.auth.Auth.Register:output_type -> chainguard.platform.auth.Session - 7, // [7:9] is the sub-list for method output_type - 5, // [5:7] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name -} - -func init() { file_auth_platform_proto_init() } -func file_auth_platform_proto_init() { - if File_auth_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_auth_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistrationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_auth_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Session); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_auth_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WhoAmI); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_auth_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WhoAmI_Capability); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_auth_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 4, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_auth_platform_proto_goTypes, - DependencyIndexes: file_auth_platform_proto_depIdxs, - MessageInfos: file_auth_platform_proto_msgTypes, - }.Build() - File_auth_platform_proto = out.File - file_auth_platform_proto_rawDesc = nil - file_auth_platform_proto_goTypes = nil - file_auth_platform_proto_depIdxs = nil -} diff --git a/proto/platform/auth/v1/auth.platform.pb.gw.go b/proto/platform/auth/v1/auth.platform.pb.gw.go deleted file mode 100644 index 8aaefdda..00000000 --- a/proto/platform/auth/v1/auth.platform.pb.gw.go +++ /dev/null @@ -1,232 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: auth.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" - "google.golang.org/protobuf/types/known/emptypb" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Auth_Validate_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - msg, err := client.Validate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Auth_Validate_0(ctx context.Context, marshaler runtime.Marshaler, server AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq emptypb.Empty - var metadata runtime.ServerMetadata - - msg, err := server.Validate(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Auth_Register_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RegistrationRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.Register(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Auth_Register_0(ctx context.Context, marshaler runtime.Marshaler, server AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RegistrationRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.Register(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterAuthHandlerServer registers the http handlers for service Auth to "mux". -// UnaryRPC :call AuthServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthHandlerFromEndpoint instead. -func RegisterAuthHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthServer) error { - - mux.Handle("GET", pattern_Auth_Validate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.auth.Auth/Validate", runtime.WithHTTPPathPattern("/auth/v1/ok")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Auth_Validate_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Auth_Validate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Auth_Register_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.auth.Auth/Register", runtime.WithHTTPPathPattern("/auth/v1/register")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Auth_Register_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Auth_Register_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterAuthHandlerFromEndpoint is same as RegisterAuthHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterAuthHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterAuthHandler(ctx, mux, conn) -} - -// RegisterAuthHandler registers the http handlers for service Auth to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterAuthHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterAuthHandlerClient(ctx, mux, NewAuthClient(conn)) -} - -// RegisterAuthHandlerClient registers the http handlers for service Auth -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AuthClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AuthClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "AuthClient" to call the correct interceptors. -func RegisterAuthHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthClient) error { - - mux.Handle("GET", pattern_Auth_Validate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.auth.Auth/Validate", runtime.WithHTTPPathPattern("/auth/v1/ok")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Auth_Validate_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Auth_Validate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Auth_Register_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.auth.Auth/Register", runtime.WithHTTPPathPattern("/auth/v1/register")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Auth_Register_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Auth_Register_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Auth_Validate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"auth", "v1", "ok"}, "")) - - pattern_Auth_Register_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"auth", "v1", "register"}, "")) -) - -var ( - forward_Auth_Validate_0 = runtime.ForwardResponseMessage - - forward_Auth_Register_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/auth/v1/auth.platform.proto b/proto/platform/auth/v1/auth.platform.proto deleted file mode 100644 index f656e83a..00000000 --- a/proto/platform/auth/v1/auth.platform.proto +++ /dev/null @@ -1,114 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/auth/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.auth.v1"; -option java_outer_classname = "PlatformAuthProto"; - -package chainguard.platform.auth; - -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "platform/iam/v1/group.platform.proto"; -import "platform/iam/v1/role.platform.proto"; -import "google/protobuf/timestamp.proto"; - -service Auth { - rpc Validate(google.protobuf.Empty) returns (WhoAmI) { - option (google.api.http) = { - get: "/auth/v1/ok" - }; - option (chainguard.annotations.iam) = { - enabled: { - // This API requires no capabilities, it simply - // validates the token. - } - }; - } - - rpc Register(RegistrationRequest) returns (Session) { - option (google.api.http) = { - post: "/auth/v1/register" - body: "*" - }; - option (chainguard.annotations.iam) = { - // This method accepts non-Chainguard tokens and - // uses them to register a new user so that the - // tokens can be sent through our STS. - disabled: {} - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.auth.registered.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } -} - -message RegistrationRequest { - // code is an optional encoded invite code, which allows us to register - // the caller's identity as a member of a particular group as a particular - // role. - // +optional - string code = 1; - - // DEPRECATED: cluster_id is an optional cluster id, which simultaneously registers - // a Cluster with the Identity. This path must specify an invite code, so - // we know where in the IAM hierarchy to link the cluster. - // string cluster_id = 2; - reserved 2; - - // identity_id is an optional identity id. If the user already exists, this - // by-passes identity registration and continues on to cluster registration - // (if applicable) - string identity_id = 3; - - // DEPRECATED: cluster_name is an optional name to give the cluster when one is - // registered as part of the registration flow. - // string cluster_name = 4; - reserved 4; - - // DEPRECATED: cluster_description is an optional description to give the cluster - // when one is registered as part of the registration flow. - // string cluster_description = 5; - reserved 5; - - // DEPRECATED: enforcer_options defines the enforcer options. - // chainguard.platform.tenant.Cluster.EnforcerOptions enforcer_options = 6; - reserved 6; -} - -message Session { - // identity, the Chainguard identity id. - string identity = 1; - // group, the group this identity has joined by invitation, when an invite - // code was supplied. - string group = 2; -} - -message WhoAmI { - // Issuer is the issuer of the token. - string issuer = 1; - // The subject of the token. - string subject = 2; - // Audience is who the token is intended for. - repeated string audience = 3; - // When the token expires. - google.protobuf.Timestamp expiry = 4; - // With the token was issued. - google.protobuf.Timestamp issued_at = 5; - - // --- Upstream fields --- - message Capability { - // group of the bound role. - chainguard.platform.iam.Group group = 1; - // role of the bound identity. - chainguard.platform.iam.Role role = 2; - } - // The capabilities referenced in the token. - repeated Capability capabilities = 101; - // The upstream email for this token. - string email = 102; -} diff --git a/proto/platform/auth/v1/auth.platform_grpc.pb.go b/proto/platform/auth/v1/auth.platform_grpc.pb.go deleted file mode 100644 index eef4dcd9..00000000 --- a/proto/platform/auth/v1/auth.platform_grpc.pb.go +++ /dev/null @@ -1,147 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: auth.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Auth_Validate_FullMethodName = "/chainguard.platform.auth.Auth/Validate" - Auth_Register_FullMethodName = "/chainguard.platform.auth.Auth/Register" -) - -// AuthClient is the client API for Auth service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type AuthClient interface { - Validate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*WhoAmI, error) - Register(ctx context.Context, in *RegistrationRequest, opts ...grpc.CallOption) (*Session, error) -} - -type authClient struct { - cc grpc.ClientConnInterface -} - -func NewAuthClient(cc grpc.ClientConnInterface) AuthClient { - return &authClient{cc} -} - -func (c *authClient) Validate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*WhoAmI, error) { - out := new(WhoAmI) - err := c.cc.Invoke(ctx, Auth_Validate_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authClient) Register(ctx context.Context, in *RegistrationRequest, opts ...grpc.CallOption) (*Session, error) { - out := new(Session) - err := c.cc.Invoke(ctx, Auth_Register_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// AuthServer is the server API for Auth service. -// All implementations must embed UnimplementedAuthServer -// for forward compatibility -type AuthServer interface { - Validate(context.Context, *emptypb.Empty) (*WhoAmI, error) - Register(context.Context, *RegistrationRequest) (*Session, error) - mustEmbedUnimplementedAuthServer() -} - -// UnimplementedAuthServer must be embedded to have forward compatible implementations. -type UnimplementedAuthServer struct { -} - -func (UnimplementedAuthServer) Validate(context.Context, *emptypb.Empty) (*WhoAmI, error) { - return nil, status.Errorf(codes.Unimplemented, "method Validate not implemented") -} -func (UnimplementedAuthServer) Register(context.Context, *RegistrationRequest) (*Session, error) { - return nil, status.Errorf(codes.Unimplemented, "method Register not implemented") -} -func (UnimplementedAuthServer) mustEmbedUnimplementedAuthServer() {} - -// UnsafeAuthServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to AuthServer will -// result in compilation errors. -type UnsafeAuthServer interface { - mustEmbedUnimplementedAuthServer() -} - -func RegisterAuthServer(s grpc.ServiceRegistrar, srv AuthServer) { - s.RegisterService(&Auth_ServiceDesc, srv) -} - -func _Auth_Validate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(emptypb.Empty) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).Validate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Auth_Validate_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).Validate(ctx, req.(*emptypb.Empty)) - } - return interceptor(ctx, in, info, handler) -} - -func _Auth_Register_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RegistrationRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthServer).Register(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Auth_Register_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthServer).Register(ctx, req.(*RegistrationRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// Auth_ServiceDesc is the grpc.ServiceDesc for Auth service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Auth_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.auth.Auth", - HandlerType: (*AuthServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Validate", - Handler: _Auth_Validate_Handler, - }, - { - MethodName: "Register", - Handler: _Auth_Register_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "auth.platform.proto", -} diff --git a/proto/platform/auth/v1/doc.go b/proto/platform/auth/v1/doc.go deleted file mode 100644 index c7008077..00000000 --- a/proto/platform/auth/v1/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package v1 contains the v1 GRPC client and server definitions -// for implementing Auth interactions for the Console. -// -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. auth.platform.proto -package v1 diff --git a/proto/platform/auth/v1/test/mock_auth.go b/proto/platform/auth/v1/test/mock_auth.go deleted file mode 100644 index a62ebe20..00000000 --- a/proto/platform/auth/v1/test/mock_auth.go +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - auth "chainguard.dev/sdk/proto/platform/auth/v1" -) - -var _ auth.AuthClient = (*MockAuthClient)(nil) - -type MockAuthClient struct { - OnValidate []AuthOnValidate - OnRegister []AuthOnRegister -} - -type FromContextFn func(context.Context) bool - -type AuthOnValidate struct { - Given FromContextFn - Validate *auth.WhoAmI - Error error -} - -type AuthOnRegister struct { - Given *auth.RegistrationRequest - Created *auth.Session - CheckContext FromContextFn - Error error -} - -func (m MockAuthClient) Validate(ctx context.Context, _ *emptypb.Empty, _ ...grpc.CallOption) (*auth.WhoAmI, error) { - for _, o := range m.OnValidate { - if o.Given(ctx) { - return o.Validate, o.Error - } - } - return nil, fmt.Errorf("mock not found for context: %v", ctx) -} - -func (m MockAuthClient) Register(ctx context.Context, given *auth.RegistrationRequest, _ ...grpc.CallOption) (*auth.Session, error) { - for _, o := range m.OnRegister { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - if o.CheckContext == nil || o.CheckContext(ctx) { - return o.Created, o.Error - } - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -// --- Server --- - -type MockAuthServer struct { - auth.UnimplementedAuthServer - Client MockAuthClient -} - -func (m MockAuthServer) Validate(ctx context.Context, empty *emptypb.Empty) (*auth.WhoAmI, error) { - return m.Client.Validate(ctx, empty) -} - -func (m MockAuthServer) Register(ctx context.Context, req *auth.RegistrationRequest) (*auth.Session, error) { - return m.Client.Register(ctx, req) -} diff --git a/proto/platform/clients.go b/proto/platform/clients.go deleted file mode 100644 index ad4f0736..00000000 --- a/proto/platform/clients.go +++ /dev/null @@ -1,195 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package platform - -import ( - "context" - "fmt" - "net/url" - "time" - - delegate "chainguard.dev/go-grpc-kit/pkg/options" - advisory "chainguard.dev/sdk/proto/platform/advisory/v1" - platformauth "chainguard.dev/sdk/proto/platform/auth/v1" - iam "chainguard.dev/sdk/proto/platform/iam/v1" - platformoidc "chainguard.dev/sdk/proto/platform/oidc/v1" - ping "chainguard.dev/sdk/proto/platform/ping/v1" - registry "chainguard.dev/sdk/proto/platform/registry/v1" - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" - "github.com/chainguard-dev/clog" - "google.golang.org/grpc" - "google.golang.org/grpc/credentials" -) - -type userAgentString struct{} - -type Clients interface { - IAM() iam.Clients - Tenant() tenant.Clients - Registry() registry.Clients - Advisory() advisory.Clients - Ping() ping.Clients - - Close() error -} - -func NewPlatformClients(ctx context.Context, apiURL string, cred credentials.PerRPCCredentials, addlOpts ...grpc.DialOption) (Clients, error) { - apiURI, err := url.Parse(apiURL) - if err != nil { - return nil, fmt.Errorf("failed to parse iam service address, must be a url: %w", err) - } - - target, opts := delegate.GRPCOptions(*apiURI) - - // TODO: we may want to require transport security at some future point. - if cred != nil { - opts = append(opts, grpc.WithPerRPCCredentials(cred)) - } else { - clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") - } - if ua := GetUserAgent(ctx); ua != "" { - opts = append(opts, grpc.WithUserAgent(ua)) - } - opts = append(opts, addlOpts...) - - var cancel context.CancelFunc - if _, timeoutSet := ctx.Deadline(); !timeoutSet { - ctx, cancel = context.WithTimeout(ctx, 300*time.Second) - defer cancel() - } - conn, err := grpc.DialContext(ctx, target, opts...) - if err != nil { - return nil, fmt.Errorf("NewPlatformClients: failed to connect to the iam server: %w", err) - } - - return &clients{ - iam: iam.NewClientsFromConnection(conn), - tenant: tenant.NewClientsFromConnection(conn), - registry: registry.NewClientsFromConnection(conn), - advisory: advisory.NewClientsFromConnection(conn), - ping: ping.NewClientsFromConnection(conn), - conn: conn, - }, nil -} - -type clients struct { - iam iam.Clients - tenant tenant.Clients - registry registry.Clients - advisory advisory.Clients - ping ping.Clients - - conn *grpc.ClientConn -} - -func (c *clients) IAM() iam.Clients { - return c.iam -} - -func (c *clients) Tenant() tenant.Clients { - return c.tenant -} - -func (c *clients) Registry() registry.Clients { - return c.registry -} - -func (c *clients) Advisory() advisory.Clients { - return c.advisory -} - -func (c *clients) Ping() ping.Clients { - return c.ping -} - -func (c *clients) Close() error { - return c.conn.Close() -} - -type OIDCClients interface { - Auth() platformauth.AuthClient - OIDC() platformoidc.Clients - OIDCPing() ping.Clients - - Close() error -} - -func NewOIDCClients(ctx context.Context, issuerURL string, cred credentials.PerRPCCredentials) (OIDCClients, error) { - issuerURI, err := url.Parse(issuerURL) - if err != nil { - return nil, fmt.Errorf("failed to parse issuer URL: %w", err) - } - - target, opts := delegate.GRPCOptions(*issuerURI) - - // TODO: we may want to require transport security at some future point. - if cred != nil { - opts = append(opts, grpc.WithPerRPCCredentials(cred)) - } else { - clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") - } - if ua := GetUserAgent(ctx); ua != "" { - opts = append(opts, grpc.WithUserAgent(ua)) - } - - var cancel context.CancelFunc - if _, timeoutSet := ctx.Deadline(); !timeoutSet { - ctx, cancel = context.WithTimeout(ctx, 300*time.Second) - defer cancel() - } - conn, err := grpc.DialContext(ctx, target, opts...) - if err != nil { - return nil, fmt.Errorf("NewOIDCClients: failed to connect to the OIDC issuer: %w", err) - } - - return &oidcClients{ - auth: platformauth.NewAuthClient(conn), - oidc: platformoidc.NewClientsFromConnection(conn), - ping: ping.NewClientsFromConnection(conn), - conn: conn, - }, nil -} - -type oidcClients struct { - auth platformauth.AuthClient - oidc platformoidc.Clients - ping ping.Clients - - conn *grpc.ClientConn -} - -func (c *oidcClients) Auth() platformauth.AuthClient { - return c.auth -} - -func (c *oidcClients) OIDC() platformoidc.Clients { - return c.oidc -} - -func (c *oidcClients) OIDCPing() ping.Clients { - return c.ping -} - -func (c *oidcClients) Close() error { - return c.conn.Close() -} - -// WithUserAgent adds a UserAgent string to the context -// passed to the GRPC client -func WithUserAgent(ctx context.Context, userAgent string) context.Context { - if userAgent == "" { - return ctx - } - return context.WithValue(ctx, userAgentString{}, userAgent) -} - -// GetUserAgent extracts the user agent string from the context -func GetUserAgent(ctx context.Context) string { - if ua := ctx.Value(userAgentString{}); ua != nil { - return ua.(string) - } - return "" -} diff --git a/proto/platform/common/v1/doc.go b/proto/platform/common/v1/doc.go deleted file mode 100644 index 9c741dd3..00000000 --- a/proto/platform/common/v1/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. uidp.platform.proto - -// Package common contains Chainguard shared types exposed to the console. -package v1 diff --git a/proto/platform/common/v1/uidp.platform.pb.go b/proto/platform/common/v1/uidp.platform.pb.go deleted file mode 100644 index 7bc5551c..00000000 --- a/proto/platform/common/v1/uidp.platform.pb.go +++ /dev/null @@ -1,184 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: uidp.platform.proto - -package v1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type UIDPFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ancestors_of are groups reachable by repeated proceeding from child to parent. - AncestorsOf string `protobuf:"bytes,1,opt,name=ancestors_of,json=ancestorsOf,proto3" json:"ancestors_of,omitempty"` - // descendants_of are groups reachable by repeated proceeding from parent to child. - DescendantsOf string `protobuf:"bytes,2,opt,name=descendants_of,json=descendantsOf,proto3" json:"descendants_of,omitempty"` - // children_of are groups reachable by directly proceeding from parent to children. - ChildrenOf string `protobuf:"bytes,3,opt,name=children_of,json=childrenOf,proto3" json:"children_of,omitempty"` - // in_root resticts responses to root level resources (organizations, user identities) - InRoot bool `protobuf:"varint,4,opt,name=in_root,json=inRoot,proto3" json:"in_root,omitempty"` -} - -func (x *UIDPFilter) Reset() { - *x = UIDPFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_uidp_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UIDPFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UIDPFilter) ProtoMessage() {} - -func (x *UIDPFilter) ProtoReflect() protoreflect.Message { - mi := &file_uidp_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UIDPFilter.ProtoReflect.Descriptor instead. -func (*UIDPFilter) Descriptor() ([]byte, []int) { - return file_uidp_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *UIDPFilter) GetAncestorsOf() string { - if x != nil { - return x.AncestorsOf - } - return "" -} - -func (x *UIDPFilter) GetDescendantsOf() string { - if x != nil { - return x.DescendantsOf - } - return "" -} - -func (x *UIDPFilter) GetChildrenOf() string { - if x != nil { - return x.ChildrenOf - } - return "" -} - -func (x *UIDPFilter) GetInRoot() bool { - if x != nil { - return x.InRoot - } - return false -} - -var File_uidp_platform_proto protoreflect.FileDescriptor - -var file_uidp_platform_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x22, 0x90, 0x01, 0x0a, 0x0a, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x73, 0x5f, 0x6f, 0x66, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x73, 0x4f, 0x66, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x61, 0x6e, - 0x74, 0x73, 0x5f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x73, - 0x63, 0x65, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x73, 0x4f, 0x66, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x5f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x4f, 0x66, 0x12, 0x17, 0x0a, 0x07, 0x69, - 0x6e, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x6e, - 0x52, 0x6f, 0x6f, 0x74, 0x42, 0x6f, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x49, 0x44, - 0x50, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_uidp_platform_proto_rawDescOnce sync.Once - file_uidp_platform_proto_rawDescData = file_uidp_platform_proto_rawDesc -) - -func file_uidp_platform_proto_rawDescGZIP() []byte { - file_uidp_platform_proto_rawDescOnce.Do(func() { - file_uidp_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_uidp_platform_proto_rawDescData) - }) - return file_uidp_platform_proto_rawDescData -} - -var file_uidp_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_uidp_platform_proto_goTypes = []interface{}{ - (*UIDPFilter)(nil), // 0: chainguard.platform.common.UIDPFilter -} -var file_uidp_platform_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_uidp_platform_proto_init() } -func file_uidp_platform_proto_init() { - if File_uidp_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_uidp_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UIDPFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_uidp_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_uidp_platform_proto_goTypes, - DependencyIndexes: file_uidp_platform_proto_depIdxs, - MessageInfos: file_uidp_platform_proto_msgTypes, - }.Build() - File_uidp_platform_proto = out.File - file_uidp_platform_proto_rawDesc = nil - file_uidp_platform_proto_goTypes = nil - file_uidp_platform_proto_depIdxs = nil -} diff --git a/proto/platform/common/v1/uidp.platform.proto b/proto/platform/common/v1/uidp.platform.proto deleted file mode 100644 index 54f4539c..00000000 --- a/proto/platform/common/v1/uidp.platform.proto +++ /dev/null @@ -1,19 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/common/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.common.v1"; -option java_outer_classname = "PlatformCommonUIDPProto"; - -package chainguard.platform.common; - -message UIDPFilter { - // ancestors_of are groups reachable by repeated proceeding from child to parent. - string ancestors_of = 1; - // descendants_of are groups reachable by repeated proceeding from parent to child. - string descendants_of = 2; - // children_of are groups reachable by directly proceeding from parent to children. - string children_of = 3; - // in_root resticts responses to root level resources (organizations, user identities) - bool in_root = 4; -} diff --git a/proto/platform/events/v1/doc.go b/proto/platform/events/v1/doc.go deleted file mode 100644 index a8543a27..00000000 --- a/proto/platform/events/v1/doc.go +++ /dev/null @@ -1,12 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Generate the proto definitions -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. subscriptions.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. identities.platform.proto - -// Package events contains the GRPC client and server definitions -// for implementing eventing interactions for the Console. -package v1 diff --git a/proto/platform/events/v1/identities.platform.event.go b/proto/platform/events/v1/identities.platform.event.go deleted file mode 100644 index 3b45f452..00000000 --- a/proto/platform/events/v1/identities.platform.event.go +++ /dev/null @@ -1,16 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *IdentityMetadata) CloudEventsExtension(key string) (string, bool) { //nolint: revive - return "", false -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *IdentityMetadata) CloudEventsSubject() string { - return "" -} diff --git a/proto/platform/events/v1/identities.platform.pb.go b/proto/platform/events/v1/identities.platform.pb.go deleted file mode 100644 index c3e04c0a..00000000 --- a/proto/platform/events/v1/identities.platform.pb.go +++ /dev/null @@ -1,416 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: identities.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Identity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is unique identifier of this specific identity. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // subject of OIDC ID tokens issued for this identity. Matchs the `sub` - // claim. - Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` - // issuer of the OIDC ID tokens issued for this identity. Matches the `iss` - // claim. - Issuer string `protobuf:"bytes,3,opt,name=issuer,proto3" json:"issuer,omitempty"` - // Optional JWKS formatted public keys for the issuer. If supplied - // verification of ID tokens is attempted using these keys instead of the - // normal OIDC discovery path. This enables e.g clusters behing NAT to - // authenticate. - IssuerKeys string `protobuf:"bytes,4,opt,name=issuer_keys,json=issuerKeys,proto3" json:"issuer_keys,omitempty"` - // Expiration of identity / issuer keys. After this date /time the issuer - // keys will not be trusted. Defaults / maximum of 30 days after creation - // time. - Expiration *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=expiration,proto3" json:"expiration,omitempty"` -} - -func (x *Identity) Reset() { - *x = Identity{} - if protoimpl.UnsafeEnabled { - mi := &file_identities_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Identity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Identity) ProtoMessage() {} - -func (x *Identity) ProtoReflect() protoreflect.Message { - mi := &file_identities_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Identity.ProtoReflect.Descriptor instead. -func (*Identity) Descriptor() ([]byte, []int) { - return file_identities_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Identity) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Identity) GetSubject() string { - if x != nil { - return x.Subject - } - return "" -} - -func (x *Identity) GetIssuer() string { - if x != nil { - return x.Issuer - } - return "" -} - -func (x *Identity) GetIssuerKeys() string { - if x != nil { - return x.IssuerKeys - } - return "" -} - -func (x *Identity) GetExpiration() *timestamppb.Timestamp { - if x != nil { - return x.Expiration - } - return nil -} - -type IdentityMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OnboardingQuestions *IdentityMetadata_OnboardingQuestions `protobuf:"bytes,1,opt,name=onboarding_questions,json=onboardingQuestions,proto3" json:"onboarding_questions,omitempty"` - // Output only. This is the name of the user. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // Whether the user has opted to receive updates from Chainguard. - UpdatesOptIn bool `protobuf:"varint,3,opt,name=updatesOptIn,proto3" json:"updatesOptIn,omitempty"` -} - -func (x *IdentityMetadata) Reset() { - *x = IdentityMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_identities_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IdentityMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IdentityMetadata) ProtoMessage() {} - -func (x *IdentityMetadata) ProtoReflect() protoreflect.Message { - mi := &file_identities_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IdentityMetadata.ProtoReflect.Descriptor instead. -func (*IdentityMetadata) Descriptor() ([]byte, []int) { - return file_identities_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *IdentityMetadata) GetOnboardingQuestions() *IdentityMetadata_OnboardingQuestions { - if x != nil { - return x.OnboardingQuestions - } - return nil -} - -func (x *IdentityMetadata) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *IdentityMetadata) GetUpdatesOptIn() bool { - if x != nil { - return x.UpdatesOptIn - } - return false -} - -type IdentityMetadata_OnboardingQuestions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CompanyName string `protobuf:"bytes,1,opt,name=company_name,json=companyName,proto3" json:"company_name,omitempty"` - Providers []string `protobuf:"bytes,2,rep,name=providers,proto3" json:"providers,omitempty"` - Product string `protobuf:"bytes,3,opt,name=product,proto3" json:"product,omitempty"` -} - -func (x *IdentityMetadata_OnboardingQuestions) Reset() { - *x = IdentityMetadata_OnboardingQuestions{} - if protoimpl.UnsafeEnabled { - mi := &file_identities_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IdentityMetadata_OnboardingQuestions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IdentityMetadata_OnboardingQuestions) ProtoMessage() {} - -func (x *IdentityMetadata_OnboardingQuestions) ProtoReflect() protoreflect.Message { - mi := &file_identities_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IdentityMetadata_OnboardingQuestions.ProtoReflect.Descriptor instead. -func (*IdentityMetadata_OnboardingQuestions) Descriptor() ([]byte, []int) { - return file_identities_platform_proto_rawDescGZIP(), []int{1, 0} -} - -func (x *IdentityMetadata_OnboardingQuestions) GetCompanyName() string { - if x != nil { - return x.CompanyName - } - return "" -} - -func (x *IdentityMetadata_OnboardingQuestions) GetProviders() []string { - if x != nil { - return x.Providers - } - return nil -} - -func (x *IdentityMetadata_OnboardingQuestions) GetProduct() string { - if x != nil { - return x.Product - } - return "" -} - -var File_identities_platform_proto protoreflect.FileDescriptor - -var file_identities_platform_proto_rawDesc = []byte{ - 0x0a, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa9, 0x01, 0x0a, 0x08, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x73, 0x75, 0x65, - 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x73, - 0x73, 0x75, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb1, 0x02, 0x0a, 0x10, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x73, 0x0a, 0x14, 0x6f, 0x6e, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x6f, 0x6e, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x4f, 0x70, 0x74, - 0x49, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x73, 0x4f, 0x70, 0x74, 0x49, 0x6e, 0x1a, 0x70, 0x0a, 0x13, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, - 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x32, 0xec, 0x02, 0x0a, 0x0a, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x69, 0x61, 0x6d, 0x2f, - 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x85, 0x07, 0x10, 0x01, 0x12, 0xd9, 0x01, 0x0a, 0x0e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x2c, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x04, 0x12, 0x02, 0x10, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, - 0x0b, 0x35, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x42, 0x75, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, - 0x42, 0x1d, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, - 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_identities_platform_proto_rawDescOnce sync.Once - file_identities_platform_proto_rawDescData = file_identities_platform_proto_rawDesc -) - -func file_identities_platform_proto_rawDescGZIP() []byte { - file_identities_platform_proto_rawDescOnce.Do(func() { - file_identities_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_identities_platform_proto_rawDescData) - }) - return file_identities_platform_proto_rawDescData -} - -var file_identities_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_identities_platform_proto_goTypes = []interface{}{ - (*Identity)(nil), // 0: chainguard.platform.events.Identity - (*IdentityMetadata)(nil), // 1: chainguard.platform.events.IdentityMetadata - (*IdentityMetadata_OnboardingQuestions)(nil), // 2: chainguard.platform.events.IdentityMetadata.OnboardingQuestions - (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp -} -var file_identities_platform_proto_depIdxs = []int32{ - 3, // 0: chainguard.platform.events.Identity.expiration:type_name -> google.protobuf.Timestamp - 2, // 1: chainguard.platform.events.IdentityMetadata.onboarding_questions:type_name -> chainguard.platform.events.IdentityMetadata.OnboardingQuestions - 0, // 2: chainguard.platform.events.Identities.Create:input_type -> chainguard.platform.events.Identity - 1, // 3: chainguard.platform.events.Identities.UpdateMetadata:input_type -> chainguard.platform.events.IdentityMetadata - 0, // 4: chainguard.platform.events.Identities.Create:output_type -> chainguard.platform.events.Identity - 1, // 5: chainguard.platform.events.Identities.UpdateMetadata:output_type -> chainguard.platform.events.IdentityMetadata - 4, // [4:6] is the sub-list for method output_type - 2, // [2:4] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_identities_platform_proto_init() } -func file_identities_platform_proto_init() { - if File_identities_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_identities_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Identity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identities_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdentityMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identities_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdentityMetadata_OnboardingQuestions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_identities_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_identities_platform_proto_goTypes, - DependencyIndexes: file_identities_platform_proto_depIdxs, - MessageInfos: file_identities_platform_proto_msgTypes, - }.Build() - File_identities_platform_proto = out.File - file_identities_platform_proto_rawDesc = nil - file_identities_platform_proto_goTypes = nil - file_identities_platform_proto_depIdxs = nil -} diff --git a/proto/platform/events/v1/identities.platform.pb.gw.go b/proto/platform/events/v1/identities.platform.pb.gw.go deleted file mode 100644 index fde3a8c0..00000000 --- a/proto/platform/events/v1/identities.platform.pb.gw.go +++ /dev/null @@ -1,247 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: identities.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Identities_Create_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Identity - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Identities_Create_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Identity - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Identities_UpdateMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq IdentityMetadata - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.UpdateMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Identities_UpdateMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq IdentityMetadata - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.UpdateMetadata(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterIdentitiesHandlerServer registers the http handlers for service Identities to "mux". -// UnaryRPC :call IdentitiesServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterIdentitiesHandlerFromEndpoint instead. -func RegisterIdentitiesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server IdentitiesServer) error { - - mux.Handle("POST", pattern_Identities_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Identities/Create", runtime.WithHTTPPathPattern("/iam/v1/identities")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Identities_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PATCH", pattern_Identities_UpdateMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Identities/UpdateMetadata", runtime.WithHTTPPathPattern("/iam/v1/identities/metadata")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Identities_UpdateMetadata_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_UpdateMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterIdentitiesHandlerFromEndpoint is same as RegisterIdentitiesHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterIdentitiesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterIdentitiesHandler(ctx, mux, conn) -} - -// RegisterIdentitiesHandler registers the http handlers for service Identities to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterIdentitiesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterIdentitiesHandlerClient(ctx, mux, NewIdentitiesClient(conn)) -} - -// RegisterIdentitiesHandlerClient registers the http handlers for service Identities -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "IdentitiesClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "IdentitiesClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "IdentitiesClient" to call the correct interceptors. -func RegisterIdentitiesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client IdentitiesClient) error { - - mux.Handle("POST", pattern_Identities_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Identities/Create", runtime.WithHTTPPathPattern("/iam/v1/identities")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Identities_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PATCH", pattern_Identities_UpdateMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Identities/UpdateMetadata", runtime.WithHTTPPathPattern("/iam/v1/identities/metadata")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Identities_UpdateMetadata_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_UpdateMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Identities_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "identities"}, "")) - - pattern_Identities_UpdateMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"iam", "v1", "identities", "metadata"}, "")) -) - -var ( - forward_Identities_Create_0 = runtime.ForwardResponseMessage - - forward_Identities_UpdateMetadata_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/events/v1/identities.platform.proto b/proto/platform/events/v1/identities.platform.proto deleted file mode 100644 index de4f96be..00000000 --- a/proto/platform/events/v1/identities.platform.proto +++ /dev/null @@ -1,97 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/events/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.events.v1"; -option java_outer_classname = "PlatformEventsIdentitiesProto"; - -package chainguard.platform.events; - -import "google/protobuf/timestamp.proto"; -import "google/api/annotations.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; - -service Identities { - rpc Create(Identity) returns (Identity) { - option (google.api.http) = { - post: "/iam/v1/identities" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - // TODO(nsmith): The authentications story here is pretty rough. This - // identity creation must be an unscoped permission because they aren't - // nested under IAM groups.... we need a better scoping story here. Is - // there any reason we can't nest these under a group? - capabilities: [CAP_IAM_IDENTITY_CREATE] - unscoped: true - } - }; - } - - rpc UpdateMetadata(IdentityMetadata) returns (IdentityMetadata) { - option (google.api.http) = { - patch: "/iam/v1/identities/metadata" - body: "*" - }; - option (chainguard.annotations.iam) = { - // Authentication will be implicit in the handler - the updated identity - // is the one from the token. - enabled: { - capabilities: [] - unscoped: true - } - }; - option (chainguard.annotations.events) = { - // Emit an internal event to track user onboarding. - type: "dev.chainguard.api.iam.identity.metadata.updated.v1" - audience: INTERNAL - }; - } - - // NB: List, Update and Delete unimplemented here as its unclear how - // permissions would work. Like how do we scope list to the identities a user - // _should_ have access to instead of the global set of all identities - // (insert yikes energy). -} - -message Identity { - // id is unique identifier of this specific identity. - string id = 1; - - // subject of OIDC ID tokens issued for this identity. Matchs the `sub` - // claim. - string subject = 2; - - // issuer of the OIDC ID tokens issued for this identity. Matches the `iss` - // claim. - string issuer = 3; - - // Optional JWKS formatted public keys for the issuer. If supplied - // verification of ID tokens is attempted using these keys instead of the - // normal OIDC discovery path. This enables e.g clusters behing NAT to - // authenticate. - string issuer_keys = 4; - - // Expiration of identity / issuer keys. After this date /time the issuer - // keys will not be trusted. Defaults / maximum of 30 days after creation - // time. - google.protobuf.Timestamp expiration = 5; -} - -message IdentityMetadata { - OnboardingQuestions onboarding_questions = 1; - - // Output only. This is the name of the user. - string name = 2; - - // Whether the user has opted to receive updates from Chainguard. - bool updatesOptIn = 3; - - message OnboardingQuestions { - string company_name = 1; - repeated string providers = 2; - string product = 3; - } -} diff --git a/proto/platform/events/v1/identities.platform_grpc.pb.go b/proto/platform/events/v1/identities.platform_grpc.pb.go deleted file mode 100644 index 7b97ffcd..00000000 --- a/proto/platform/events/v1/identities.platform_grpc.pb.go +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: identities.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Identities_Create_FullMethodName = "/chainguard.platform.events.Identities/Create" - Identities_UpdateMetadata_FullMethodName = "/chainguard.platform.events.Identities/UpdateMetadata" -) - -// IdentitiesClient is the client API for Identities service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type IdentitiesClient interface { - Create(ctx context.Context, in *Identity, opts ...grpc.CallOption) (*Identity, error) - UpdateMetadata(ctx context.Context, in *IdentityMetadata, opts ...grpc.CallOption) (*IdentityMetadata, error) -} - -type identitiesClient struct { - cc grpc.ClientConnInterface -} - -func NewIdentitiesClient(cc grpc.ClientConnInterface) IdentitiesClient { - return &identitiesClient{cc} -} - -func (c *identitiesClient) Create(ctx context.Context, in *Identity, opts ...grpc.CallOption) (*Identity, error) { - out := new(Identity) - err := c.cc.Invoke(ctx, Identities_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *identitiesClient) UpdateMetadata(ctx context.Context, in *IdentityMetadata, opts ...grpc.CallOption) (*IdentityMetadata, error) { - out := new(IdentityMetadata) - err := c.cc.Invoke(ctx, Identities_UpdateMetadata_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// IdentitiesServer is the server API for Identities service. -// All implementations must embed UnimplementedIdentitiesServer -// for forward compatibility -type IdentitiesServer interface { - Create(context.Context, *Identity) (*Identity, error) - UpdateMetadata(context.Context, *IdentityMetadata) (*IdentityMetadata, error) - mustEmbedUnimplementedIdentitiesServer() -} - -// UnimplementedIdentitiesServer must be embedded to have forward compatible implementations. -type UnimplementedIdentitiesServer struct { -} - -func (UnimplementedIdentitiesServer) Create(context.Context, *Identity) (*Identity, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedIdentitiesServer) UpdateMetadata(context.Context, *IdentityMetadata) (*IdentityMetadata, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateMetadata not implemented") -} -func (UnimplementedIdentitiesServer) mustEmbedUnimplementedIdentitiesServer() {} - -// UnsafeIdentitiesServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to IdentitiesServer will -// result in compilation errors. -type UnsafeIdentitiesServer interface { - mustEmbedUnimplementedIdentitiesServer() -} - -func RegisterIdentitiesServer(s grpc.ServiceRegistrar, srv IdentitiesServer) { - s.RegisterService(&Identities_ServiceDesc, srv) -} - -func _Identities_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Identity) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentitiesServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Identities_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentitiesServer).Create(ctx, req.(*Identity)) - } - return interceptor(ctx, in, info, handler) -} - -func _Identities_UpdateMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(IdentityMetadata) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentitiesServer).UpdateMetadata(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Identities_UpdateMetadata_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentitiesServer).UpdateMetadata(ctx, req.(*IdentityMetadata)) - } - return interceptor(ctx, in, info, handler) -} - -// Identities_ServiceDesc is the grpc.ServiceDesc for Identities service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Identities_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.events.Identities", - HandlerType: (*IdentitiesServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _Identities_Create_Handler, - }, - { - MethodName: "UpdateMetadata", - Handler: _Identities_UpdateMetadata_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "identities.platform.proto", -} diff --git a/proto/platform/events/v1/subscriptions.platform.event.go b/proto/platform/events/v1/subscriptions.platform.event.go deleted file mode 100644 index a2eda990..00000000 --- a/proto/platform/events/v1/subscriptions.platform.event.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "chainguard.dev/sdk/uidp" -) - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *Subscription) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *Subscription) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *DeleteSubscriptionRequest) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *DeleteSubscriptionRequest) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.Redact. -func (x *DeleteSubscriptionRequest) CloudEventsRedact() interface{} { - return nil -} diff --git a/proto/platform/events/v1/subscriptions.platform.pb.go b/proto/platform/events/v1/subscriptions.platform.pb.go deleted file mode 100644 index cc923951..00000000 --- a/proto/platform/events/v1/subscriptions.platform.pb.go +++ /dev/null @@ -1,510 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: subscriptions.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type CreateSubscriptionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // parent_id, The Group UIDP path under which the new subscription is associated. - ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - // Subscription is the subscription to create; - Subscription *Subscription `protobuf:"bytes,2,opt,name=subscription,proto3" json:"subscription,omitempty"` -} - -func (x *CreateSubscriptionRequest) Reset() { - *x = CreateSubscriptionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_subscriptions_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateSubscriptionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateSubscriptionRequest) ProtoMessage() {} - -func (x *CreateSubscriptionRequest) ProtoReflect() protoreflect.Message { - mi := &file_subscriptions_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateSubscriptionRequest.ProtoReflect.Descriptor instead. -func (*CreateSubscriptionRequest) Descriptor() ([]byte, []int) { - return file_subscriptions_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *CreateSubscriptionRequest) GetParentId() string { - if x != nil { - return x.ParentId - } - return "" -} - -func (x *CreateSubscriptionRequest) GetSubscription() *Subscription { - if x != nil { - return x.Subscription - } - return nil -} - -type Subscription struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is identifier of this specific subscription. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // sink is the address to which events shall be delivered using the selected protocol. - Sink string `protobuf:"bytes,2,opt,name=sink,proto3" json:"sink,omitempty"` -} - -func (x *Subscription) Reset() { - *x = Subscription{} - if protoimpl.UnsafeEnabled { - mi := &file_subscriptions_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Subscription) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Subscription) ProtoMessage() {} - -func (x *Subscription) ProtoReflect() protoreflect.Message { - mi := &file_subscriptions_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Subscription.ProtoReflect.Descriptor instead. -func (*Subscription) Descriptor() ([]byte, []int) { - return file_subscriptions_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *Subscription) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Subscription) GetSink() string { - if x != nil { - return x.Sink - } - return "" -} - -type SubscriptionList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Subscription `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *SubscriptionList) Reset() { - *x = SubscriptionList{} - if protoimpl.UnsafeEnabled { - mi := &file_subscriptions_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubscriptionList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubscriptionList) ProtoMessage() {} - -func (x *SubscriptionList) ProtoReflect() protoreflect.Message { - mi := &file_subscriptions_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubscriptionList.ProtoReflect.Descriptor instead. -func (*SubscriptionList) Descriptor() ([]byte, []int) { - return file_subscriptions_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *SubscriptionList) GetItems() []*Subscription { - if x != nil { - return x.Items - } - return nil -} - -type SubscriptionFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // uidp filers records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` -} - -func (x *SubscriptionFilter) Reset() { - *x = SubscriptionFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_subscriptions_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubscriptionFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubscriptionFilter) ProtoMessage() {} - -func (x *SubscriptionFilter) ProtoReflect() protoreflect.Message { - mi := &file_subscriptions_platform_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 SubscriptionFilter.ProtoReflect.Descriptor instead. -func (*SubscriptionFilter) Descriptor() ([]byte, []int) { - return file_subscriptions_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *SubscriptionFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *SubscriptionFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -type DeleteSubscriptionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteSubscriptionRequest) Reset() { - *x = DeleteSubscriptionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_subscriptions_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteSubscriptionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteSubscriptionRequest) ProtoMessage() {} - -func (x *DeleteSubscriptionRequest) ProtoReflect() protoreflect.Message { - mi := &file_subscriptions_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteSubscriptionRequest.ProtoReflect.Descriptor instead. -func (*DeleteSubscriptionRequest) Descriptor() ([]byte, []int) { - return file_subscriptions_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *DeleteSubscriptionRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -var File_subscriptions_platform_proto protoreflect.FileDescriptor - -var file_subscriptions_platform_proto_rawDesc = []byte{ - 0x0a, 0x1c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x8e, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, - 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x3a, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, - 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x6e, 0x6b, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x6e, 0x6b, 0x22, 0x52, 0x0a, 0x10, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x60, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, - 0x64, 0x70, 0x22, 0x33, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, 0xf2, 0x04, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xf7, 0x01, 0x0a, 0x06, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x12, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x0c, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, 0x2f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xdd, - 0x0b, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3c, 0x0a, 0x31, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0x94, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xdf, 0x0b, 0x10, 0x01, 0x12, 0xcf, 0x01, 0x0a, 0x06, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x2a, 0x20, 0x2f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xe0, 0x0b, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3c, - 0x0a, 0x31, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x73, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x77, 0x0a, 0x25, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, - 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x76, 0x31, 0x42, 0x1f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_subscriptions_platform_proto_rawDescOnce sync.Once - file_subscriptions_platform_proto_rawDescData = file_subscriptions_platform_proto_rawDesc -) - -func file_subscriptions_platform_proto_rawDescGZIP() []byte { - file_subscriptions_platform_proto_rawDescOnce.Do(func() { - file_subscriptions_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_subscriptions_platform_proto_rawDescData) - }) - return file_subscriptions_platform_proto_rawDescData -} - -var file_subscriptions_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_subscriptions_platform_proto_goTypes = []interface{}{ - (*CreateSubscriptionRequest)(nil), // 0: chainguard.platform.events.CreateSubscriptionRequest - (*Subscription)(nil), // 1: chainguard.platform.events.Subscription - (*SubscriptionList)(nil), // 2: chainguard.platform.events.SubscriptionList - (*SubscriptionFilter)(nil), // 3: chainguard.platform.events.SubscriptionFilter - (*DeleteSubscriptionRequest)(nil), // 4: chainguard.platform.events.DeleteSubscriptionRequest - (*v1.UIDPFilter)(nil), // 5: chainguard.platform.common.UIDPFilter - (*emptypb.Empty)(nil), // 6: google.protobuf.Empty -} -var file_subscriptions_platform_proto_depIdxs = []int32{ - 1, // 0: chainguard.platform.events.CreateSubscriptionRequest.subscription:type_name -> chainguard.platform.events.Subscription - 1, // 1: chainguard.platform.events.SubscriptionList.items:type_name -> chainguard.platform.events.Subscription - 5, // 2: chainguard.platform.events.SubscriptionFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 0, // 3: chainguard.platform.events.Subscriptions.Create:input_type -> chainguard.platform.events.CreateSubscriptionRequest - 3, // 4: chainguard.platform.events.Subscriptions.List:input_type -> chainguard.platform.events.SubscriptionFilter - 4, // 5: chainguard.platform.events.Subscriptions.Delete:input_type -> chainguard.platform.events.DeleteSubscriptionRequest - 1, // 6: chainguard.platform.events.Subscriptions.Create:output_type -> chainguard.platform.events.Subscription - 2, // 7: chainguard.platform.events.Subscriptions.List:output_type -> chainguard.platform.events.SubscriptionList - 6, // 8: chainguard.platform.events.Subscriptions.Delete:output_type -> google.protobuf.Empty - 6, // [6:9] is the sub-list for method output_type - 3, // [3:6] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_subscriptions_platform_proto_init() } -func file_subscriptions_platform_proto_init() { - if File_subscriptions_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_subscriptions_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateSubscriptionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_subscriptions_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Subscription); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_subscriptions_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscriptionList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_subscriptions_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscriptionFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_subscriptions_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteSubscriptionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_subscriptions_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 5, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_subscriptions_platform_proto_goTypes, - DependencyIndexes: file_subscriptions_platform_proto_depIdxs, - MessageInfos: file_subscriptions_platform_proto_msgTypes, - }.Build() - File_subscriptions_platform_proto = out.File - file_subscriptions_platform_proto_rawDesc = nil - file_subscriptions_platform_proto_goTypes = nil - file_subscriptions_platform_proto_depIdxs = nil -} diff --git a/proto/platform/events/v1/subscriptions.platform.pb.gw.go b/proto/platform/events/v1/subscriptions.platform.pb.gw.go deleted file mode 100644 index 5e69dba2..00000000 --- a/proto/platform/events/v1/subscriptions.platform.pb.gw.go +++ /dev/null @@ -1,384 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: subscriptions.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Subscriptions_Create_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateSubscriptionRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Subscription); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Subscriptions_Create_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateSubscriptionRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Subscription); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Subscriptions_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Subscriptions_List_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SubscriptionFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Subscriptions_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Subscriptions_List_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SubscriptionFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Subscriptions_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Subscriptions_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteSubscriptionRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Subscriptions_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteSubscriptionRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterSubscriptionsHandlerServer registers the http handlers for service Subscriptions to "mux". -// UnaryRPC :call SubscriptionsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSubscriptionsHandlerFromEndpoint instead. -func RegisterSubscriptionsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SubscriptionsServer) error { - - mux.Handle("POST", pattern_Subscriptions_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/Create", runtime.WithHTTPPathPattern("/events/v1/subscriptions/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Subscriptions_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Subscriptions_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Subscriptions_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/List", runtime.WithHTTPPathPattern("/events/v1/subscriptions")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Subscriptions_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Subscriptions_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Subscriptions_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/Delete", runtime.WithHTTPPathPattern("/events/v1/subscriptions/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Subscriptions_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Subscriptions_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterSubscriptionsHandlerFromEndpoint is same as RegisterSubscriptionsHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterSubscriptionsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterSubscriptionsHandler(ctx, mux, conn) -} - -// RegisterSubscriptionsHandler registers the http handlers for service Subscriptions to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterSubscriptionsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterSubscriptionsHandlerClient(ctx, mux, NewSubscriptionsClient(conn)) -} - -// RegisterSubscriptionsHandlerClient registers the http handlers for service Subscriptions -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SubscriptionsClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SubscriptionsClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "SubscriptionsClient" to call the correct interceptors. -func RegisterSubscriptionsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SubscriptionsClient) error { - - mux.Handle("POST", pattern_Subscriptions_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/Create", runtime.WithHTTPPathPattern("/events/v1/subscriptions/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Subscriptions_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Subscriptions_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Subscriptions_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/List", runtime.WithHTTPPathPattern("/events/v1/subscriptions")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Subscriptions_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Subscriptions_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Subscriptions_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/Delete", runtime.WithHTTPPathPattern("/events/v1/subscriptions/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Subscriptions_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Subscriptions_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Subscriptions_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"events", "v1", "subscriptions", "parent_id"}, "")) - - pattern_Subscriptions_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"events", "v1", "subscriptions"}, "")) - - pattern_Subscriptions_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"events", "v1", "subscriptions", "id"}, "")) -) - -var ( - forward_Subscriptions_Create_0 = runtime.ForwardResponseMessage - - forward_Subscriptions_List_0 = runtime.ForwardResponseMessage - - forward_Subscriptions_Delete_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/events/v1/subscriptions.platform.proto b/proto/platform/events/v1/subscriptions.platform.proto deleted file mode 100644 index c105890b..00000000 --- a/proto/platform/events/v1/subscriptions.platform.proto +++ /dev/null @@ -1,92 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/events/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.events.v1"; -option java_outer_classname = "PlatformEventsSubscriptionProto"; - -package chainguard.platform.events; - -import "google/protobuf/empty.proto"; -import "google/api/annotations.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Subscriptions { - rpc Create(CreateSubscriptionRequest) returns (Subscription) { - option (google.api.http) = { - post: "/events/v1/subscriptions/{parent_id=**}" - body: "subscription" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_EVENTS_SUBSCRIPTION_CREATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.events.subscription.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc List(SubscriptionFilter) returns (SubscriptionList) { - option (google.api.http) = { - get: "/events/v1/subscriptions" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_EVENTS_SUBSCRIPTION_LIST] - unscoped: true - } - }; - } - - rpc Delete(DeleteSubscriptionRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/events/v1/subscriptions/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_EVENTS_SUBSCRIPTION_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.events.subscription.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } -} - -message CreateSubscriptionRequest { - // parent_id, The Group UIDP path under which the new subscription is associated. - string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; - // Subscription is the subscription to create; - Subscription subscription = 2; -} - -message Subscription { - // id is identifier of this specific subscription. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - // sink is the address to which events shall be delivered using the selected protocol. - string sink = 2; -} - -message SubscriptionList { - repeated Subscription items = 1; -} - -message SubscriptionFilter { - // id is the exact UIDP of the record. - string id = 1; - - // uidp filers records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 2; -} - -message DeleteSubscriptionRequest { - // id is the exact UIDP of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} diff --git a/proto/platform/events/v1/subscriptions.platform_grpc.pb.go b/proto/platform/events/v1/subscriptions.platform_grpc.pb.go deleted file mode 100644 index ce225769..00000000 --- a/proto/platform/events/v1/subscriptions.platform_grpc.pb.go +++ /dev/null @@ -1,184 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: subscriptions.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Subscriptions_Create_FullMethodName = "/chainguard.platform.events.Subscriptions/Create" - Subscriptions_List_FullMethodName = "/chainguard.platform.events.Subscriptions/List" - Subscriptions_Delete_FullMethodName = "/chainguard.platform.events.Subscriptions/Delete" -) - -// SubscriptionsClient is the client API for Subscriptions service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type SubscriptionsClient interface { - Create(ctx context.Context, in *CreateSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) - List(ctx context.Context, in *SubscriptionFilter, opts ...grpc.CallOption) (*SubscriptionList, error) - Delete(ctx context.Context, in *DeleteSubscriptionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) -} - -type subscriptionsClient struct { - cc grpc.ClientConnInterface -} - -func NewSubscriptionsClient(cc grpc.ClientConnInterface) SubscriptionsClient { - return &subscriptionsClient{cc} -} - -func (c *subscriptionsClient) Create(ctx context.Context, in *CreateSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) { - out := new(Subscription) - err := c.cc.Invoke(ctx, Subscriptions_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *subscriptionsClient) List(ctx context.Context, in *SubscriptionFilter, opts ...grpc.CallOption) (*SubscriptionList, error) { - out := new(SubscriptionList) - err := c.cc.Invoke(ctx, Subscriptions_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *subscriptionsClient) Delete(ctx context.Context, in *DeleteSubscriptionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, Subscriptions_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// SubscriptionsServer is the server API for Subscriptions service. -// All implementations must embed UnimplementedSubscriptionsServer -// for forward compatibility -type SubscriptionsServer interface { - Create(context.Context, *CreateSubscriptionRequest) (*Subscription, error) - List(context.Context, *SubscriptionFilter) (*SubscriptionList, error) - Delete(context.Context, *DeleteSubscriptionRequest) (*emptypb.Empty, error) - mustEmbedUnimplementedSubscriptionsServer() -} - -// UnimplementedSubscriptionsServer must be embedded to have forward compatible implementations. -type UnimplementedSubscriptionsServer struct { -} - -func (UnimplementedSubscriptionsServer) Create(context.Context, *CreateSubscriptionRequest) (*Subscription, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedSubscriptionsServer) List(context.Context, *SubscriptionFilter) (*SubscriptionList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedSubscriptionsServer) Delete(context.Context, *DeleteSubscriptionRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedSubscriptionsServer) mustEmbedUnimplementedSubscriptionsServer() {} - -// UnsafeSubscriptionsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to SubscriptionsServer will -// result in compilation errors. -type UnsafeSubscriptionsServer interface { - mustEmbedUnimplementedSubscriptionsServer() -} - -func RegisterSubscriptionsServer(s grpc.ServiceRegistrar, srv SubscriptionsServer) { - s.RegisterService(&Subscriptions_ServiceDesc, srv) -} - -func _Subscriptions_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateSubscriptionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SubscriptionsServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Subscriptions_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SubscriptionsServer).Create(ctx, req.(*CreateSubscriptionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Subscriptions_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SubscriptionFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SubscriptionsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Subscriptions_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SubscriptionsServer).List(ctx, req.(*SubscriptionFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _Subscriptions_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteSubscriptionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SubscriptionsServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Subscriptions_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SubscriptionsServer).Delete(ctx, req.(*DeleteSubscriptionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// Subscriptions_ServiceDesc is the grpc.ServiceDesc for Subscriptions service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Subscriptions_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.events.Subscriptions", - HandlerType: (*SubscriptionsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _Subscriptions_Create_Handler, - }, - { - MethodName: "List", - Handler: _Subscriptions_List_Handler, - }, - { - MethodName: "Delete", - Handler: _Subscriptions_Delete_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "subscriptions.platform.proto", -} diff --git a/proto/platform/iam/v1/account_associations.platform.event.go b/proto/platform/iam/v1/account_associations.platform.event.go deleted file mode 100644 index c336f7e9..00000000 --- a/proto/platform/iam/v1/account_associations.platform.event.go +++ /dev/null @@ -1,41 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *AccountAssociations) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return x.GetGroup(), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *AccountAssociations) CloudEventsSubject() string { - return x.Group -} - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *DeleteAccountAssociationsRequest) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return x.GetGroup(), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *DeleteAccountAssociationsRequest) CloudEventsSubject() string { - return x.Group -} - -// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.Redact. -func (x *DeleteAccountAssociationsRequest) CloudEventsRedact() interface{} { - return nil -} diff --git a/proto/platform/iam/v1/account_associations.platform.pb.go b/proto/platform/iam/v1/account_associations.platform.pb.go deleted file mode 100644 index 2e02c7f7..00000000 --- a/proto/platform/iam/v1/account_associations.platform.pb.go +++ /dev/null @@ -1,1120 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: account_associations.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type AccountAssociationsStatus_State int32 - -const ( - AccountAssociationsStatus_UNKNOWN AccountAssociationsStatus_State = 0 - AccountAssociationsStatus_Ready AccountAssociationsStatus_State = 1 - AccountAssociationsStatus_NotReady AccountAssociationsStatus_State = 2 -) - -// Enum value maps for AccountAssociationsStatus_State. -var ( - AccountAssociationsStatus_State_name = map[int32]string{ - 0: "UNKNOWN", - 1: "Ready", - 2: "NotReady", - } - AccountAssociationsStatus_State_value = map[string]int32{ - "UNKNOWN": 0, - "Ready": 1, - "NotReady": 2, - } -) - -func (x AccountAssociationsStatus_State) Enum() *AccountAssociationsStatus_State { - p := new(AccountAssociationsStatus_State) - *p = x - return p -} - -func (x AccountAssociationsStatus_State) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (AccountAssociationsStatus_State) Descriptor() protoreflect.EnumDescriptor { - return file_account_associations_platform_proto_enumTypes[0].Descriptor() -} - -func (AccountAssociationsStatus_State) Type() protoreflect.EnumType { - return &file_account_associations_platform_proto_enumTypes[0] -} - -func (x AccountAssociationsStatus_State) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use AccountAssociationsStatus_State.Descriptor instead. -func (AccountAssociationsStatus_State) EnumDescriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{4, 0} -} - -type AccountAssociationsCheckRequest_AccountType int32 - -const ( - AccountAssociationsCheckRequest_UNKNOWN AccountAssociationsCheckRequest_AccountType = 0 - AccountAssociationsCheckRequest_GOOGLE AccountAssociationsCheckRequest_AccountType = 1 - AccountAssociationsCheckRequest_AMAZON AccountAssociationsCheckRequest_AccountType = 2 -) - -// Enum value maps for AccountAssociationsCheckRequest_AccountType. -var ( - AccountAssociationsCheckRequest_AccountType_name = map[int32]string{ - 0: "UNKNOWN", - 1: "GOOGLE", - 2: "AMAZON", - } - AccountAssociationsCheckRequest_AccountType_value = map[string]int32{ - "UNKNOWN": 0, - "GOOGLE": 1, - "AMAZON": 2, - } -) - -func (x AccountAssociationsCheckRequest_AccountType) Enum() *AccountAssociationsCheckRequest_AccountType { - p := new(AccountAssociationsCheckRequest_AccountType) - *p = x - return p -} - -func (x AccountAssociationsCheckRequest_AccountType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (AccountAssociationsCheckRequest_AccountType) Descriptor() protoreflect.EnumDescriptor { - return file_account_associations_platform_proto_enumTypes[1].Descriptor() -} - -func (AccountAssociationsCheckRequest_AccountType) Type() protoreflect.EnumType { - return &file_account_associations_platform_proto_enumTypes[1] -} - -func (x AccountAssociationsCheckRequest_AccountType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use AccountAssociationsCheckRequest_AccountType.Descriptor instead. -func (AccountAssociationsCheckRequest_AccountType) EnumDescriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{5, 0} -} - -type AccountAssociations struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // group is the group with which this account information is associated. - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - // amazon holds information associating an Amazon account with the group. - Amazon *AccountAssociations_Amazon `protobuf:"bytes,2,opt,name=amazon,proto3" json:"amazon,omitempty"` - // google holds information associating a Google project with the group. - Google *AccountAssociations_Google `protobuf:"bytes,3,opt,name=google,proto3" json:"google,omitempty"` - // github holds information associating a GitHub installation with the group. - // Note: this AccountAssociation type is EXPERIMENTAL. - Github *AccountAssociations_GitHubInstallation `protobuf:"bytes,6,opt,name=github,proto3" json:"github,omitempty"` - Chainguard *AccountAssociations_Chainguard `protobuf:"bytes,7,opt,name=chainguard,proto3" json:"chainguard,omitempty"` - // name of the association. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // a short description of this association. - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` -} - -func (x *AccountAssociations) Reset() { - *x = AccountAssociations{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AccountAssociations) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AccountAssociations) ProtoMessage() {} - -func (x *AccountAssociations) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AccountAssociations.ProtoReflect.Descriptor instead. -func (*AccountAssociations) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *AccountAssociations) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -func (x *AccountAssociations) GetAmazon() *AccountAssociations_Amazon { - if x != nil { - return x.Amazon - } - return nil -} - -func (x *AccountAssociations) GetGoogle() *AccountAssociations_Google { - if x != nil { - return x.Google - } - return nil -} - -func (x *AccountAssociations) GetGithub() *AccountAssociations_GitHubInstallation { - if x != nil { - return x.Github - } - return nil -} - -func (x *AccountAssociations) GetChainguard() *AccountAssociations_Chainguard { - if x != nil { - return x.Chainguard - } - return nil -} - -func (x *AccountAssociations) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *AccountAssociations) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -type AccountAssociationsList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*AccountAssociations `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *AccountAssociationsList) Reset() { - *x = AccountAssociationsList{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AccountAssociationsList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AccountAssociationsList) ProtoMessage() {} - -func (x *AccountAssociationsList) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AccountAssociationsList.ProtoReflect.Descriptor instead. -func (*AccountAssociationsList) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *AccountAssociationsList) GetItems() []*AccountAssociations { - if x != nil { - return x.Items - } - return nil -} - -type AccountAssociationsFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // group is the exact UIDP of the group whose associations we want to list. - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - // name is the exact name of the association. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *AccountAssociationsFilter) Reset() { - *x = AccountAssociationsFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AccountAssociationsFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AccountAssociationsFilter) ProtoMessage() {} - -func (x *AccountAssociationsFilter) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AccountAssociationsFilter.ProtoReflect.Descriptor instead. -func (*AccountAssociationsFilter) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *AccountAssociationsFilter) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -func (x *AccountAssociationsFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type DeleteAccountAssociationsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // group is the exact UIDP of the group whose associations we want to delete. - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` -} - -func (x *DeleteAccountAssociationsRequest) Reset() { - *x = DeleteAccountAssociationsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteAccountAssociationsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteAccountAssociationsRequest) ProtoMessage() {} - -func (x *DeleteAccountAssociationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_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 DeleteAccountAssociationsRequest.ProtoReflect.Descriptor instead. -func (*DeleteAccountAssociationsRequest) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *DeleteAccountAssociationsRequest) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -type AccountAssociationsStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ready AccountAssociationsStatus_State `protobuf:"varint,1,opt,name=ready,proto3,enum=chainguard.platform.iam.AccountAssociationsStatus_State" json:"ready,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *AccountAssociationsStatus) Reset() { - *x = AccountAssociationsStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AccountAssociationsStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AccountAssociationsStatus) ProtoMessage() {} - -func (x *AccountAssociationsStatus) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AccountAssociationsStatus.ProtoReflect.Descriptor instead. -func (*AccountAssociationsStatus) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *AccountAssociationsStatus) GetReady() AccountAssociationsStatus_State { - if x != nil { - return x.Ready - } - return AccountAssociationsStatus_UNKNOWN -} - -func (x *AccountAssociationsStatus) GetReason() string { - if x != nil { - return x.Reason - } - return "" -} - -func (x *AccountAssociationsStatus) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type AccountAssociationsCheckRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // group is the exact UIDP of the group whose associations we want to check - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - AccountType AccountAssociationsCheckRequest_AccountType `protobuf:"varint,2,opt,name=account_type,json=accountType,proto3,enum=chainguard.platform.iam.AccountAssociationsCheckRequest_AccountType" json:"account_type,omitempty"` -} - -func (x *AccountAssociationsCheckRequest) Reset() { - *x = AccountAssociationsCheckRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AccountAssociationsCheckRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AccountAssociationsCheckRequest) ProtoMessage() {} - -func (x *AccountAssociationsCheckRequest) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AccountAssociationsCheckRequest.ProtoReflect.Descriptor instead. -func (*AccountAssociationsCheckRequest) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *AccountAssociationsCheckRequest) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -func (x *AccountAssociationsCheckRequest) GetAccountType() AccountAssociationsCheckRequest_AccountType { - if x != nil { - return x.AccountType - } - return AccountAssociationsCheckRequest_UNKNOWN -} - -type AccountAssociations_Amazon struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Account string `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` -} - -func (x *AccountAssociations_Amazon) Reset() { - *x = AccountAssociations_Amazon{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AccountAssociations_Amazon) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AccountAssociations_Amazon) ProtoMessage() {} - -func (x *AccountAssociations_Amazon) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AccountAssociations_Amazon.ProtoReflect.Descriptor instead. -func (*AccountAssociations_Amazon) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *AccountAssociations_Amazon) GetAccount() string { - if x != nil { - return x.Account - } - return "" -} - -type AccountAssociations_Google struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` - ProjectNumber string `protobuf:"bytes,2,opt,name=project_number,json=projectNumber,proto3" json:"project_number,omitempty"` -} - -func (x *AccountAssociations_Google) Reset() { - *x = AccountAssociations_Google{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AccountAssociations_Google) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AccountAssociations_Google) ProtoMessage() {} - -func (x *AccountAssociations_Google) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AccountAssociations_Google.ProtoReflect.Descriptor instead. -func (*AccountAssociations_Google) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *AccountAssociations_Google) GetProjectId() string { - if x != nil { - return x.ProjectId - } - return "" -} - -func (x *AccountAssociations_Google) GetProjectNumber() string { - if x != nil { - return x.ProjectNumber - } - return "" -} - -type AccountAssociations_GitHubInstallation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // GitHub hostname app is associated with. Output only. - Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` - // GitHub App ID. Output only. - AppId int64 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - // GitHub App Installation ID. Takes precedence over name. - InstallationId int64 `protobuf:"varint,3,opt,name=installation_id,json=installationId,proto3" json:"installation_id,omitempty"` - // GitHub user/org name the installation is installed on. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *AccountAssociations_GitHubInstallation) Reset() { - *x = AccountAssociations_GitHubInstallation{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AccountAssociations_GitHubInstallation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AccountAssociations_GitHubInstallation) ProtoMessage() {} - -func (x *AccountAssociations_GitHubInstallation) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AccountAssociations_GitHubInstallation.ProtoReflect.Descriptor instead. -func (*AccountAssociations_GitHubInstallation) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{0, 2} -} - -func (x *AccountAssociations_GitHubInstallation) GetHost() string { - if x != nil { - return x.Host - } - return "" -} - -func (x *AccountAssociations_GitHubInstallation) GetAppId() int64 { - if x != nil { - return x.AppId - } - return 0 -} - -func (x *AccountAssociations_GitHubInstallation) GetInstallationId() int64 { - if x != nil { - return x.InstallationId - } - return 0 -} - -func (x *AccountAssociations_GitHubInstallation) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type AccountAssociations_Chainguard struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // service_bindings map from the Chainguard service principal to the - // UIDP of the identity that service should assume. Constraints: - // - The identity must live directly under "group", - // - The identity must be a service_principal, - // - The service_principal of the identity must match the key of this map. - // Note that the key space of this must match the ServicePrincipal enum, - // but the enum type itself cannot be used here because of: - // https://groups.google.com/g/protobuf/c/ikeldBe60eI - ServiceBindings map[string]string `protobuf:"bytes,1,rep,name=service_bindings,json=serviceBindings,proto3" json:"service_bindings,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *AccountAssociations_Chainguard) Reset() { - *x = AccountAssociations_Chainguard{} - if protoimpl.UnsafeEnabled { - mi := &file_account_associations_platform_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AccountAssociations_Chainguard) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AccountAssociations_Chainguard) ProtoMessage() {} - -func (x *AccountAssociations_Chainguard) ProtoReflect() protoreflect.Message { - mi := &file_account_associations_platform_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AccountAssociations_Chainguard.ProtoReflect.Descriptor instead. -func (*AccountAssociations_Chainguard) Descriptor() ([]byte, []int) { - return file_account_associations_platform_proto_rawDescGZIP(), []int{0, 3} -} - -func (x *AccountAssociations_Chainguard) GetServiceBindings() map[string]string { - if x != nil { - return x.ServiceBindings - } - return nil -} - -var File_account_associations_platform_proto protoreflect.FileDescriptor - -var file_account_associations_platform_proto_rawDesc = []byte{ - 0x0a, 0x23, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1b, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x06, 0x0a, 0x13, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x4b, 0x0a, 0x06, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x12, 0x4b, - 0x0a, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x52, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x12, 0x57, 0x0a, 0x06, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, - 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, - 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x12, 0x57, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x1a, 0x22, 0x0a, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x4e, 0x0a, 0x06, 0x47, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, - 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x1a, 0x7c, 0x0a, 0x12, 0x47, 0x69, 0x74, 0x48, 0x75, - 0x62, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, - 0x74, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0xc9, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x12, 0x77, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x42, 0x0a, - 0x14, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x5d, 0x0a, 0x17, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, - 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, - 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x45, 0x0a, 0x19, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, - 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xcc, 0x01, 0x0a, 0x19, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x0a, 0x05, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x52, 0x65, 0x61, 0x64, 0x79, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, - 0x74, 0x52, 0x65, 0x61, 0x64, 0x79, 0x10, 0x02, 0x22, 0xdc, 0x01, 0x0a, 0x1f, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x67, 0x0a, 0x0c, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x44, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x22, 0x32, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, - 0x4d, 0x41, 0x5a, 0x4f, 0x4e, 0x10, 0x02, 0x32, 0xbc, 0x08, 0x0a, 0x18, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xec, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x2c, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, - 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x85, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, - 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xbd, 0x05, 0xc2, 0xf0, 0x8e, 0xfc, - 0x0b, 0x41, 0x0a, 0x36, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0xec, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2c, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x2c, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x85, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x1a, 0x27, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xbe, 0x05, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, - 0x41, 0x0a, 0x36, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x01, 0x12, 0xa0, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, - 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, - 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x69, 0x61, 0x6d, 0x2f, - 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, - 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, - 0x02, 0xbf, 0x05, 0x10, 0x01, 0x12, 0xe0, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x82, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x2a, 0x27, 0x2f, 0x69, - 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc0, - 0x05, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x41, 0x0a, 0x36, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xbb, 0x01, 0x0a, 0x05, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x12, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, - 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, - 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, - 0x12, 0x04, 0x0a, 0x02, 0xbf, 0x05, 0x42, 0x75, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x23, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_account_associations_platform_proto_rawDescOnce sync.Once - file_account_associations_platform_proto_rawDescData = file_account_associations_platform_proto_rawDesc -) - -func file_account_associations_platform_proto_rawDescGZIP() []byte { - file_account_associations_platform_proto_rawDescOnce.Do(func() { - file_account_associations_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_account_associations_platform_proto_rawDescData) - }) - return file_account_associations_platform_proto_rawDescData -} - -var file_account_associations_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_account_associations_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_account_associations_platform_proto_goTypes = []interface{}{ - (AccountAssociationsStatus_State)(0), // 0: chainguard.platform.iam.AccountAssociationsStatus.State - (AccountAssociationsCheckRequest_AccountType)(0), // 1: chainguard.platform.iam.AccountAssociationsCheckRequest.AccountType - (*AccountAssociations)(nil), // 2: chainguard.platform.iam.AccountAssociations - (*AccountAssociationsList)(nil), // 3: chainguard.platform.iam.AccountAssociationsList - (*AccountAssociationsFilter)(nil), // 4: chainguard.platform.iam.AccountAssociationsFilter - (*DeleteAccountAssociationsRequest)(nil), // 5: chainguard.platform.iam.DeleteAccountAssociationsRequest - (*AccountAssociationsStatus)(nil), // 6: chainguard.platform.iam.AccountAssociationsStatus - (*AccountAssociationsCheckRequest)(nil), // 7: chainguard.platform.iam.AccountAssociationsCheckRequest - (*AccountAssociations_Amazon)(nil), // 8: chainguard.platform.iam.AccountAssociations.Amazon - (*AccountAssociations_Google)(nil), // 9: chainguard.platform.iam.AccountAssociations.Google - (*AccountAssociations_GitHubInstallation)(nil), // 10: chainguard.platform.iam.AccountAssociations.GitHubInstallation - (*AccountAssociations_Chainguard)(nil), // 11: chainguard.platform.iam.AccountAssociations.Chainguard - nil, // 12: chainguard.platform.iam.AccountAssociations.Chainguard.ServiceBindingsEntry - (*emptypb.Empty)(nil), // 13: google.protobuf.Empty -} -var file_account_associations_platform_proto_depIdxs = []int32{ - 8, // 0: chainguard.platform.iam.AccountAssociations.amazon:type_name -> chainguard.platform.iam.AccountAssociations.Amazon - 9, // 1: chainguard.platform.iam.AccountAssociations.google:type_name -> chainguard.platform.iam.AccountAssociations.Google - 10, // 2: chainguard.platform.iam.AccountAssociations.github:type_name -> chainguard.platform.iam.AccountAssociations.GitHubInstallation - 11, // 3: chainguard.platform.iam.AccountAssociations.chainguard:type_name -> chainguard.platform.iam.AccountAssociations.Chainguard - 2, // 4: chainguard.platform.iam.AccountAssociationsList.items:type_name -> chainguard.platform.iam.AccountAssociations - 0, // 5: chainguard.platform.iam.AccountAssociationsStatus.ready:type_name -> chainguard.platform.iam.AccountAssociationsStatus.State - 1, // 6: chainguard.platform.iam.AccountAssociationsCheckRequest.account_type:type_name -> chainguard.platform.iam.AccountAssociationsCheckRequest.AccountType - 12, // 7: chainguard.platform.iam.AccountAssociations.Chainguard.service_bindings:type_name -> chainguard.platform.iam.AccountAssociations.Chainguard.ServiceBindingsEntry - 2, // 8: chainguard.platform.iam.GroupAccountAssociations.Create:input_type -> chainguard.platform.iam.AccountAssociations - 2, // 9: chainguard.platform.iam.GroupAccountAssociations.Update:input_type -> chainguard.platform.iam.AccountAssociations - 4, // 10: chainguard.platform.iam.GroupAccountAssociations.List:input_type -> chainguard.platform.iam.AccountAssociationsFilter - 5, // 11: chainguard.platform.iam.GroupAccountAssociations.Delete:input_type -> chainguard.platform.iam.DeleteAccountAssociationsRequest - 7, // 12: chainguard.platform.iam.GroupAccountAssociations.Check:input_type -> chainguard.platform.iam.AccountAssociationsCheckRequest - 2, // 13: chainguard.platform.iam.GroupAccountAssociations.Create:output_type -> chainguard.platform.iam.AccountAssociations - 2, // 14: chainguard.platform.iam.GroupAccountAssociations.Update:output_type -> chainguard.platform.iam.AccountAssociations - 3, // 15: chainguard.platform.iam.GroupAccountAssociations.List:output_type -> chainguard.platform.iam.AccountAssociationsList - 13, // 16: chainguard.platform.iam.GroupAccountAssociations.Delete:output_type -> google.protobuf.Empty - 6, // 17: chainguard.platform.iam.GroupAccountAssociations.Check:output_type -> chainguard.platform.iam.AccountAssociationsStatus - 13, // [13:18] is the sub-list for method output_type - 8, // [8:13] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name -} - -func init() { file_account_associations_platform_proto_init() } -func file_account_associations_platform_proto_init() { - if File_account_associations_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_account_associations_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountAssociations); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_account_associations_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountAssociationsList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_account_associations_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountAssociationsFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_account_associations_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAccountAssociationsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_account_associations_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountAssociationsStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_account_associations_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountAssociationsCheckRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_account_associations_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountAssociations_Amazon); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_account_associations_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountAssociations_Google); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_account_associations_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountAssociations_GitHubInstallation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_account_associations_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccountAssociations_Chainguard); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_account_associations_platform_proto_rawDesc, - NumEnums: 2, - NumMessages: 11, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_account_associations_platform_proto_goTypes, - DependencyIndexes: file_account_associations_platform_proto_depIdxs, - EnumInfos: file_account_associations_platform_proto_enumTypes, - MessageInfos: file_account_associations_platform_proto_msgTypes, - }.Build() - File_account_associations_platform_proto = out.File - file_account_associations_platform_proto_rawDesc = nil - file_account_associations_platform_proto_goTypes = nil - file_account_associations_platform_proto_depIdxs = nil -} diff --git a/proto/platform/iam/v1/account_associations.platform.pb.gw.go b/proto/platform/iam/v1/account_associations.platform.pb.gw.go deleted file mode 100644 index 5f1a7325..00000000 --- a/proto/platform/iam/v1/account_associations.platform.pb.gw.go +++ /dev/null @@ -1,618 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: account_associations.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_GroupAccountAssociations_Create_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AccountAssociations - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_GroupAccountAssociations_Create_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AccountAssociations - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -func request_GroupAccountAssociations_Update_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AccountAssociations - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_GroupAccountAssociations_Update_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AccountAssociations - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := server.Update(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_GroupAccountAssociations_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_GroupAccountAssociations_List_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AccountAssociationsFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GroupAccountAssociations_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_GroupAccountAssociations_List_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AccountAssociationsFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GroupAccountAssociations_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_GroupAccountAssociations_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteAccountAssociationsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_GroupAccountAssociations_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteAccountAssociationsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -func request_GroupAccountAssociations_Check_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AccountAssociationsCheckRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := client.Check(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_GroupAccountAssociations_Check_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AccountAssociationsCheckRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := server.Check(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterGroupAccountAssociationsHandlerServer registers the http handlers for service GroupAccountAssociations to "mux". -// UnaryRPC :call GroupAccountAssociationsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterGroupAccountAssociationsHandlerFromEndpoint instead. -func RegisterGroupAccountAssociationsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GroupAccountAssociationsServer) error { - - mux.Handle("POST", pattern_GroupAccountAssociations_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Create", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_GroupAccountAssociations_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_GroupAccountAssociations_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Update", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_GroupAccountAssociations_Update_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_GroupAccountAssociations_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/List", runtime.WithHTTPPathPattern("/iam/v1/account_associations")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_GroupAccountAssociations_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_GroupAccountAssociations_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Delete", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_GroupAccountAssociations_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_GroupAccountAssociations_Check_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Check", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}:check")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_GroupAccountAssociations_Check_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_Check_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterGroupAccountAssociationsHandlerFromEndpoint is same as RegisterGroupAccountAssociationsHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterGroupAccountAssociationsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterGroupAccountAssociationsHandler(ctx, mux, conn) -} - -// RegisterGroupAccountAssociationsHandler registers the http handlers for service GroupAccountAssociations to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterGroupAccountAssociationsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterGroupAccountAssociationsHandlerClient(ctx, mux, NewGroupAccountAssociationsClient(conn)) -} - -// RegisterGroupAccountAssociationsHandlerClient registers the http handlers for service GroupAccountAssociations -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "GroupAccountAssociationsClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "GroupAccountAssociationsClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "GroupAccountAssociationsClient" to call the correct interceptors. -func RegisterGroupAccountAssociationsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client GroupAccountAssociationsClient) error { - - mux.Handle("POST", pattern_GroupAccountAssociations_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Create", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_GroupAccountAssociations_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_GroupAccountAssociations_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Update", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_GroupAccountAssociations_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_GroupAccountAssociations_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/List", runtime.WithHTTPPathPattern("/iam/v1/account_associations")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_GroupAccountAssociations_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_GroupAccountAssociations_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Delete", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_GroupAccountAssociations_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_GroupAccountAssociations_Check_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Check", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}:check")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_GroupAccountAssociations_Check_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupAccountAssociations_Check_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_GroupAccountAssociations_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "account_associations", "group"}, "")) - - pattern_GroupAccountAssociations_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "account_associations", "group"}, "")) - - pattern_GroupAccountAssociations_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "account_associations"}, "")) - - pattern_GroupAccountAssociations_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "account_associations", "group"}, "")) - - pattern_GroupAccountAssociations_Check_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "account_associations", "group"}, "check")) -) - -var ( - forward_GroupAccountAssociations_Create_0 = runtime.ForwardResponseMessage - - forward_GroupAccountAssociations_Update_0 = runtime.ForwardResponseMessage - - forward_GroupAccountAssociations_List_0 = runtime.ForwardResponseMessage - - forward_GroupAccountAssociations_Delete_0 = runtime.ForwardResponseMessage - - forward_GroupAccountAssociations_Check_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/iam/v1/account_associations.platform.proto b/proto/platform/iam/v1/account_associations.platform.proto deleted file mode 100644 index b6ca2756..00000000 --- a/proto/platform/iam/v1/account_associations.platform.proto +++ /dev/null @@ -1,192 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.iam.v1"; -option java_outer_classname = "PlatformIAMAccountAssociationsProto"; - -package chainguard.platform.iam; - -import "google/protobuf/empty.proto"; -import "google/api/annotations.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; - -service GroupAccountAssociations { - rpc Create(AccountAssociations) returns (AccountAssociations) { - option (google.api.http) = { - post: "/iam/v1/account_associations/{group=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.account_associations.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Update(AccountAssociations) returns (AccountAssociations) { - option (google.api.http) = { - put: "/iam/v1/account_associations/{group=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.account_associations.updated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc List(AccountAssociationsFilter) returns (AccountAssociationsList) { - option (google.api.http) = { - get: "/iam/v1/account_associations" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST] - unscoped: true - } - }; - } - - rpc Delete(DeleteAccountAssociationsRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/iam/v1/account_associations/{group=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.account_associations.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Check(AccountAssociationsCheckRequest) returns (AccountAssociationsStatus) { - option (google.api.http) = { - post: "/iam/v1/account_associations/{group=**}:check" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST] - } - }; - } -} - -message AccountAssociations { - // group is the group with which this account information is associated. - string group = 1 [(chainguard.annotations.iam_scope) = true]; - - // amazon holds information associating an Amazon account with the group. - Amazon amazon = 2; - - // google holds information associating a Google project with the group. - Google google = 3; - - // github holds information associating a GitHub installation with the group. - // Note: this AccountAssociation type is EXPERIMENTAL. - GitHubInstallation github = 6; - - Chainguard chainguard = 7; - - // name of the association. - string name = 4; - - // a short description of this association. - string description = 5; - - // TODO(#617): Azure - - message Amazon { - string account = 1; - } - - message Google { - string project_id = 1; - string project_number = 2; - } - - message GitHubInstallation { - // GitHub hostname app is associated with. Output only. - string host = 1; - - // GitHub App ID. Output only. - int64 app_id = 2; - - // GitHub App Installation ID. Takes precedence over name. - int64 installation_id = 3; - - // GitHub user/org name the installation is installed on. - string name = 4; - } - - message Chainguard { - // service_bindings map from the Chainguard service principal to the - // UIDP of the identity that service should assume. Constraints: - // - The identity must live directly under "group", - // - The identity must be a service_principal, - // - The service_principal of the identity must match the key of this map. - // Note that the key space of this must match the ServicePrincipal enum, - // but the enum type itself cannot be used here because of: - // https://groups.google.com/g/protobuf/c/ikeldBe60eI - map service_bindings = 1; - } - - // next id: 8 -} - -message AccountAssociationsList { - repeated AccountAssociations items = 1; -} - -message AccountAssociationsFilter { - // group is the exact UIDP of the group whose associations we want to list. - string group = 1; - // name is the exact name of the association. - string name = 2; -} - -message DeleteAccountAssociationsRequest { - // group is the exact UIDP of the group whose associations we want to delete. - string group = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message AccountAssociationsStatus { - enum State { - UNKNOWN = 0; - Ready = 1; - NotReady = 2; - } - - State ready = 1; - string reason = 2; - string message = 3; -} - -message AccountAssociationsCheckRequest { - // group is the exact UIDP of the group whose associations we want to check - string group = 1 [(chainguard.annotations.iam_scope) = true]; - - AccountType account_type = 2; - - enum AccountType { - UNKNOWN = 0; - GOOGLE = 1; - AMAZON = 2; - } -} diff --git a/proto/platform/iam/v1/account_associations.platform_grpc.pb.go b/proto/platform/iam/v1/account_associations.platform_grpc.pb.go deleted file mode 100644 index 7c5482e3..00000000 --- a/proto/platform/iam/v1/account_associations.platform_grpc.pb.go +++ /dev/null @@ -1,259 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: account_associations.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - GroupAccountAssociations_Create_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/Create" - GroupAccountAssociations_Update_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/Update" - GroupAccountAssociations_List_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/List" - GroupAccountAssociations_Delete_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/Delete" - GroupAccountAssociations_Check_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/Check" -) - -// GroupAccountAssociationsClient is the client API for GroupAccountAssociations service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type GroupAccountAssociationsClient interface { - Create(ctx context.Context, in *AccountAssociations, opts ...grpc.CallOption) (*AccountAssociations, error) - Update(ctx context.Context, in *AccountAssociations, opts ...grpc.CallOption) (*AccountAssociations, error) - List(ctx context.Context, in *AccountAssociationsFilter, opts ...grpc.CallOption) (*AccountAssociationsList, error) - Delete(ctx context.Context, in *DeleteAccountAssociationsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - Check(ctx context.Context, in *AccountAssociationsCheckRequest, opts ...grpc.CallOption) (*AccountAssociationsStatus, error) -} - -type groupAccountAssociationsClient struct { - cc grpc.ClientConnInterface -} - -func NewGroupAccountAssociationsClient(cc grpc.ClientConnInterface) GroupAccountAssociationsClient { - return &groupAccountAssociationsClient{cc} -} - -func (c *groupAccountAssociationsClient) Create(ctx context.Context, in *AccountAssociations, opts ...grpc.CallOption) (*AccountAssociations, error) { - out := new(AccountAssociations) - err := c.cc.Invoke(ctx, GroupAccountAssociations_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupAccountAssociationsClient) Update(ctx context.Context, in *AccountAssociations, opts ...grpc.CallOption) (*AccountAssociations, error) { - out := new(AccountAssociations) - err := c.cc.Invoke(ctx, GroupAccountAssociations_Update_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupAccountAssociationsClient) List(ctx context.Context, in *AccountAssociationsFilter, opts ...grpc.CallOption) (*AccountAssociationsList, error) { - out := new(AccountAssociationsList) - err := c.cc.Invoke(ctx, GroupAccountAssociations_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupAccountAssociationsClient) Delete(ctx context.Context, in *DeleteAccountAssociationsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, GroupAccountAssociations_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupAccountAssociationsClient) Check(ctx context.Context, in *AccountAssociationsCheckRequest, opts ...grpc.CallOption) (*AccountAssociationsStatus, error) { - out := new(AccountAssociationsStatus) - err := c.cc.Invoke(ctx, GroupAccountAssociations_Check_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// GroupAccountAssociationsServer is the server API for GroupAccountAssociations service. -// All implementations must embed UnimplementedGroupAccountAssociationsServer -// for forward compatibility -type GroupAccountAssociationsServer interface { - Create(context.Context, *AccountAssociations) (*AccountAssociations, error) - Update(context.Context, *AccountAssociations) (*AccountAssociations, error) - List(context.Context, *AccountAssociationsFilter) (*AccountAssociationsList, error) - Delete(context.Context, *DeleteAccountAssociationsRequest) (*emptypb.Empty, error) - Check(context.Context, *AccountAssociationsCheckRequest) (*AccountAssociationsStatus, error) - mustEmbedUnimplementedGroupAccountAssociationsServer() -} - -// UnimplementedGroupAccountAssociationsServer must be embedded to have forward compatible implementations. -type UnimplementedGroupAccountAssociationsServer struct { -} - -func (UnimplementedGroupAccountAssociationsServer) Create(context.Context, *AccountAssociations) (*AccountAssociations, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedGroupAccountAssociationsServer) Update(context.Context, *AccountAssociations) (*AccountAssociations, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} -func (UnimplementedGroupAccountAssociationsServer) List(context.Context, *AccountAssociationsFilter) (*AccountAssociationsList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedGroupAccountAssociationsServer) Delete(context.Context, *DeleteAccountAssociationsRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedGroupAccountAssociationsServer) Check(context.Context, *AccountAssociationsCheckRequest) (*AccountAssociationsStatus, error) { - return nil, status.Errorf(codes.Unimplemented, "method Check not implemented") -} -func (UnimplementedGroupAccountAssociationsServer) mustEmbedUnimplementedGroupAccountAssociationsServer() { -} - -// UnsafeGroupAccountAssociationsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to GroupAccountAssociationsServer will -// result in compilation errors. -type UnsafeGroupAccountAssociationsServer interface { - mustEmbedUnimplementedGroupAccountAssociationsServer() -} - -func RegisterGroupAccountAssociationsServer(s grpc.ServiceRegistrar, srv GroupAccountAssociationsServer) { - s.RegisterService(&GroupAccountAssociations_ServiceDesc, srv) -} - -func _GroupAccountAssociations_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AccountAssociations) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupAccountAssociationsServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: GroupAccountAssociations_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupAccountAssociationsServer).Create(ctx, req.(*AccountAssociations)) - } - return interceptor(ctx, in, info, handler) -} - -func _GroupAccountAssociations_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AccountAssociations) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupAccountAssociationsServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: GroupAccountAssociations_Update_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupAccountAssociationsServer).Update(ctx, req.(*AccountAssociations)) - } - return interceptor(ctx, in, info, handler) -} - -func _GroupAccountAssociations_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AccountAssociationsFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupAccountAssociationsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: GroupAccountAssociations_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupAccountAssociationsServer).List(ctx, req.(*AccountAssociationsFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _GroupAccountAssociations_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteAccountAssociationsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupAccountAssociationsServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: GroupAccountAssociations_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupAccountAssociationsServer).Delete(ctx, req.(*DeleteAccountAssociationsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _GroupAccountAssociations_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AccountAssociationsCheckRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupAccountAssociationsServer).Check(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: GroupAccountAssociations_Check_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupAccountAssociationsServer).Check(ctx, req.(*AccountAssociationsCheckRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// GroupAccountAssociations_ServiceDesc is the grpc.ServiceDesc for GroupAccountAssociations service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var GroupAccountAssociations_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.iam.GroupAccountAssociations", - HandlerType: (*GroupAccountAssociationsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _GroupAccountAssociations_Create_Handler, - }, - { - MethodName: "Update", - Handler: _GroupAccountAssociations_Update_Handler, - }, - { - MethodName: "List", - Handler: _GroupAccountAssociations_List_Handler, - }, - { - MethodName: "Delete", - Handler: _GroupAccountAssociations_Delete_Handler, - }, - { - MethodName: "Check", - Handler: _GroupAccountAssociations_Check_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "account_associations.platform.proto", -} diff --git a/proto/platform/iam/v1/clients.go b/proto/platform/iam/v1/clients.go deleted file mode 100644 index 89e0fbd2..00000000 --- a/proto/platform/iam/v1/clients.go +++ /dev/null @@ -1,156 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "context" - "fmt" - "net/url" - "time" - - delegate "chainguard.dev/go-grpc-kit/pkg/options" - "github.com/chainguard-dev/clog" - "google.golang.org/grpc" - - "chainguard.dev/sdk/auth" - events "chainguard.dev/sdk/proto/platform/events/v1" -) - -type Clients interface { - Groups() GroupsClient - GroupInvites() GroupInvitesClient - Roles() RolesClient - RoleBindings() RoleBindingsClient - - Identities() IdentitiesClient - DeprecatedIdentities() events.IdentitiesClient - IdentityProviders() IdentityProvidersClient - - AccountAssociations() GroupAccountAssociationsClient - - Subscriptions() events.SubscriptionsClient - - Close() error -} - -func NewClients(ctx context.Context, iamURL string, token string) (Clients, error) { - iamURI, err := url.Parse(iamURL) - if err != nil { - return nil, fmt.Errorf("failed to parse iam service address, must be a url: %w", err) - } - - target, opts := delegate.GRPCOptions(*iamURI) - - // TODO: we may want to require transport security at some future point. - if cred := auth.NewFromToken(ctx, token, false); cred != nil { - opts = append(opts, grpc.WithPerRPCCredentials(cred)) - } else { - clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") - } - - var cancel context.CancelFunc - if _, timeoutSet := ctx.Deadline(); !timeoutSet { - ctx, cancel = context.WithTimeout(ctx, 300*time.Second) - defer cancel() - } - conn, err := grpc.DialContext(ctx, target, opts...) - if err != nil { - return nil, fmt.Errorf("iam.NewClients: failed to connect to the iam server: %w", err) - } - - return &clients{ - group: NewGroupsClient(conn), - groupInvite: NewGroupInvitesClient(conn), - role: NewRolesClient(conn), - roleBinding: NewRoleBindingsClient(conn), - identities: NewIdentitiesClient(conn), - deprecatedIdentities: events.NewIdentitiesClient(conn), - identityProviders: NewIdentityProvidersClient(conn), - - accountAssociations: NewGroupAccountAssociationsClient(conn), - - subscription: events.NewSubscriptionsClient(conn), - - conn: conn, - }, nil -} - -func NewClientsFromConnection(conn *grpc.ClientConn) Clients { - return &clients{ - group: NewGroupsClient(conn), - groupInvite: NewGroupInvitesClient(conn), - role: NewRolesClient(conn), - roleBinding: NewRoleBindingsClient(conn), - identities: NewIdentitiesClient(conn), - deprecatedIdentities: events.NewIdentitiesClient(conn), - identityProviders: NewIdentityProvidersClient(conn), - - accountAssociations: NewGroupAccountAssociationsClient(conn), - - subscription: events.NewSubscriptionsClient(conn), - - // conn is not set, this client struct does not own closing it. - } -} - -type clients struct { - group GroupsClient - groupInvite GroupInvitesClient - role RolesClient - roleBinding RoleBindingsClient - identities IdentitiesClient - deprecatedIdentities events.IdentitiesClient - identityProviders IdentityProvidersClient - - accountAssociations GroupAccountAssociationsClient - - subscription events.SubscriptionsClient - - conn *grpc.ClientConn -} - -func (c *clients) Groups() GroupsClient { - return c.group -} - -func (c *clients) GroupInvites() GroupInvitesClient { - return c.groupInvite -} - -func (c *clients) Roles() RolesClient { - return c.role -} - -func (c *clients) RoleBindings() RoleBindingsClient { - return c.roleBinding -} - -func (c *clients) Identities() IdentitiesClient { - return c.identities -} - -func (c *clients) DeprecatedIdentities() events.IdentitiesClient { - return c.deprecatedIdentities -} - -func (c *clients) IdentityProviders() IdentityProvidersClient { - return c.identityProviders -} - -func (c *clients) AccountAssociations() GroupAccountAssociationsClient { - return c.accountAssociations -} - -func (c *clients) Subscriptions() events.SubscriptionsClient { - return c.subscription -} - -func (c *clients) Close() error { - if c.conn != nil { - return c.conn.Close() - } - return nil -} diff --git a/proto/platform/iam/v1/doc.go b/proto/platform/iam/v1/doc.go deleted file mode 100644 index 8fccce6d..00000000 --- a/proto/platform/iam/v1/doc.go +++ /dev/null @@ -1,17 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Generate the proto definitions -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. group.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. group_invites.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. role.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. role_binding.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. identity.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. account_associations.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. identity_providers.platform.proto - -// Package v1 contains the v1 GRPC client and server definitions -// for implementing IAM interactions for the Console. -package v1 diff --git a/proto/platform/iam/v1/group.platform.event.go b/proto/platform/iam/v1/group.platform.event.go deleted file mode 100644 index fba1b291..00000000 --- a/proto/platform/iam/v1/group.platform.event.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import "chainguard.dev/sdk/uidp" - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *Group) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return x.GetId(), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *Group) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *DeleteGroupRequest) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *DeleteGroupRequest) CloudEventsSubject() string { - return x.GetId() -} diff --git a/proto/platform/iam/v1/group.platform.pb.go b/proto/platform/iam/v1/group.platform.pb.go deleted file mode 100644 index 9860a173..00000000 --- a/proto/platform/iam/v1/group.platform.pb.go +++ /dev/null @@ -1,570 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: group.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Group struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The group UIDP under which this group resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name, human readable name of group. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // description, human readable of group. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // resource_limits indicate the maximum number of resources allowed for this group by type. - ResourceLimits map[string]int32 `protobuf:"bytes,4,rep,name=resource_limits,json=resourceLimits,proto3" json:"resource_limits,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // verified means we've verified the owners of this organization. Restrictions include: - // - Only organizations (root groups) can be verified - // - Property can only be set by manually by Chainguardians - // - If verified is set, the organizations name field must be globally unique - // - If verified is set the organizations name should be a domain name - Verified bool `protobuf:"varint,5,opt,name=verified,proto3" json:"verified,omitempty"` -} - -func (x *Group) Reset() { - *x = Group{} - if protoimpl.UnsafeEnabled { - mi := &file_group_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Group) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Group) ProtoMessage() {} - -func (x *Group) ProtoReflect() protoreflect.Message { - mi := &file_group_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Group.ProtoReflect.Descriptor instead. -func (*Group) Descriptor() ([]byte, []int) { - return file_group_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Group) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Group) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Group) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Group) GetResourceLimits() map[string]int32 { - if x != nil { - return x.ResourceLimits - } - return nil -} - -func (x *Group) GetVerified() bool { - if x != nil { - return x.Verified - } - return false -} - -type GroupList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Group `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *GroupList) Reset() { - *x = GroupList{} - if protoimpl.UnsafeEnabled { - mi := &file_group_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GroupList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GroupList) ProtoMessage() {} - -func (x *GroupList) ProtoReflect() protoreflect.Message { - mi := &file_group_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GroupList.ProtoReflect.Descriptor instead. -func (*GroupList) Descriptor() ([]byte, []int) { - return file_group_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *GroupList) GetItems() []*Group { - if x != nil { - return x.Items - } - return nil -} - -type GroupFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // uidp filters records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` - // name is the exact name of the record. - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GroupFilter) Reset() { - *x = GroupFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_group_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GroupFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GroupFilter) ProtoMessage() {} - -func (x *GroupFilter) ProtoReflect() protoreflect.Message { - mi := &file_group_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GroupFilter.ProtoReflect.Descriptor instead. -func (*GroupFilter) Descriptor() ([]byte, []int) { - return file_group_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *GroupFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *GroupFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *GroupFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type CreateGroupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // parent, The Group UIDP path under which the new Group resides. - // This is effectively the iam_scope for Create requests, but because - // we also allow users to create new "root" groups, we check the scoping - // manually. Parent is allowed to be a prefix of a UIDP of a Group within - // scope, or the name of a Group in scope. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Group to create. - Group *Group `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"` -} - -func (x *CreateGroupRequest) Reset() { - *x = CreateGroupRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_group_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateGroupRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateGroupRequest) ProtoMessage() {} - -func (x *CreateGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_group_platform_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 CreateGroupRequest.ProtoReflect.Descriptor instead. -func (*CreateGroupRequest) Descriptor() ([]byte, []int) { - return file_group_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *CreateGroupRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *CreateGroupRequest) GetGroup() *Group { - if x != nil { - return x.Group - } - return nil -} - -type DeleteGroupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteGroupRequest) Reset() { - *x = DeleteGroupRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_group_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteGroupRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteGroupRequest) ProtoMessage() {} - -func (x *DeleteGroupRequest) ProtoReflect() protoreflect.Message { - mi := &file_group_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteGroupRequest.ProtoReflect.Descriptor instead. -func (*DeleteGroupRequest) Descriptor() ([]byte, []int) { - return file_group_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *DeleteGroupRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -var File_group_platform_proto protoreflect.FileDescriptor - -var file_group_platform_proto_rawDesc = []byte{ - 0x0a, 0x14, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, - 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, - 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x91, 0x02, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x16, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, - 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x0f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, 0x72, - 0x69, 0x66, 0x69, 0x65, 0x64, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 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, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x41, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6d, 0x0a, 0x0b, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, - 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x12, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, - 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2c, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, 0xab, 0x05, 0x0a, - 0x06, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0xc5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, - 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x1a, - 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x07, - 0x12, 0x05, 0x0a, 0x01, 0x65, 0x10, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x32, 0x0a, 0x27, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, - 0xae, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x1e, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x64, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x1a, 0x16, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x05, 0x12, 0x03, 0x0a, 0x01, 0x66, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x32, 0x0a, 0x27, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, - 0x12, 0x75, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x22, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x07, - 0x12, 0x05, 0x0a, 0x01, 0x67, 0x10, 0x01, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, - 0x16, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x05, 0x12, 0x03, 0x0a, - 0x01, 0x68, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x32, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, - 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x67, 0x0a, 0x22, 0x64, 0x65, - 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, - 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_group_platform_proto_rawDescOnce sync.Once - file_group_platform_proto_rawDescData = file_group_platform_proto_rawDesc -) - -func file_group_platform_proto_rawDescGZIP() []byte { - file_group_platform_proto_rawDescOnce.Do(func() { - file_group_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_group_platform_proto_rawDescData) - }) - return file_group_platform_proto_rawDescData -} - -var file_group_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_group_platform_proto_goTypes = []interface{}{ - (*Group)(nil), // 0: chainguard.platform.iam.Group - (*GroupList)(nil), // 1: chainguard.platform.iam.GroupList - (*GroupFilter)(nil), // 2: chainguard.platform.iam.GroupFilter - (*CreateGroupRequest)(nil), // 3: chainguard.platform.iam.CreateGroupRequest - (*DeleteGroupRequest)(nil), // 4: chainguard.platform.iam.DeleteGroupRequest - nil, // 5: chainguard.platform.iam.Group.ResourceLimitsEntry - (*v1.UIDPFilter)(nil), // 6: chainguard.platform.common.UIDPFilter - (*emptypb.Empty)(nil), // 7: google.protobuf.Empty -} -var file_group_platform_proto_depIdxs = []int32{ - 5, // 0: chainguard.platform.iam.Group.resource_limits:type_name -> chainguard.platform.iam.Group.ResourceLimitsEntry - 0, // 1: chainguard.platform.iam.GroupList.items:type_name -> chainguard.platform.iam.Group - 6, // 2: chainguard.platform.iam.GroupFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 0, // 3: chainguard.platform.iam.CreateGroupRequest.group:type_name -> chainguard.platform.iam.Group - 3, // 4: chainguard.platform.iam.Groups.Create:input_type -> chainguard.platform.iam.CreateGroupRequest - 0, // 5: chainguard.platform.iam.Groups.Update:input_type -> chainguard.platform.iam.Group - 2, // 6: chainguard.platform.iam.Groups.List:input_type -> chainguard.platform.iam.GroupFilter - 4, // 7: chainguard.platform.iam.Groups.Delete:input_type -> chainguard.platform.iam.DeleteGroupRequest - 0, // 8: chainguard.platform.iam.Groups.Create:output_type -> chainguard.platform.iam.Group - 0, // 9: chainguard.platform.iam.Groups.Update:output_type -> chainguard.platform.iam.Group - 1, // 10: chainguard.platform.iam.Groups.List:output_type -> chainguard.platform.iam.GroupList - 7, // 11: chainguard.platform.iam.Groups.Delete:output_type -> google.protobuf.Empty - 8, // [8:12] is the sub-list for method output_type - 4, // [4:8] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_group_platform_proto_init() } -func file_group_platform_proto_init() { - if File_group_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_group_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Group); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateGroupRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteGroupRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_group_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 6, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_group_platform_proto_goTypes, - DependencyIndexes: file_group_platform_proto_depIdxs, - MessageInfos: file_group_platform_proto_msgTypes, - }.Build() - File_group_platform_proto = out.File - file_group_platform_proto_rawDesc = nil - file_group_platform_proto_goTypes = nil - file_group_platform_proto_depIdxs = nil -} diff --git a/proto/platform/iam/v1/group.platform.pb.gw.go b/proto/platform/iam/v1/group.platform.pb.gw.go deleted file mode 100644 index 5e56d640..00000000 --- a/proto/platform/iam/v1/group.platform.pb.gw.go +++ /dev/null @@ -1,501 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: group.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Groups_Create_0(ctx context.Context, marshaler runtime.Marshaler, client GroupsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateGroupRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Group); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent") - } - - protoReq.Parent, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Groups_Create_0(ctx context.Context, marshaler runtime.Marshaler, server GroupsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateGroupRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Group); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent") - } - - protoReq.Parent, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Groups_Update_0(ctx context.Context, marshaler runtime.Marshaler, client GroupsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Group - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Groups_Update_0(ctx context.Context, marshaler runtime.Marshaler, server GroupsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Group - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Update(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Groups_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Groups_List_0(ctx context.Context, marshaler runtime.Marshaler, client GroupsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GroupFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Groups_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Groups_List_0(ctx context.Context, marshaler runtime.Marshaler, server GroupsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GroupFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Groups_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Groups_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client GroupsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteGroupRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Groups_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server GroupsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteGroupRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterGroupsHandlerServer registers the http handlers for service Groups to "mux". -// UnaryRPC :call GroupsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterGroupsHandlerFromEndpoint instead. -func RegisterGroupsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GroupsServer) error { - - mux.Handle("POST", pattern_Groups_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Create", runtime.WithHTTPPathPattern("/iam/v1/groups/{parent=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Groups_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Groups_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Groups_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Update", runtime.WithHTTPPathPattern("/iam/v1/groups/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Groups_Update_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Groups_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Groups_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Groups/List", runtime.WithHTTPPathPattern("/iam/v1/groups")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Groups_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Groups_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Groups_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Delete", runtime.WithHTTPPathPattern("/iam/v1/groups/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Groups_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Groups_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterGroupsHandlerFromEndpoint is same as RegisterGroupsHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterGroupsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterGroupsHandler(ctx, mux, conn) -} - -// RegisterGroupsHandler registers the http handlers for service Groups to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterGroupsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterGroupsHandlerClient(ctx, mux, NewGroupsClient(conn)) -} - -// RegisterGroupsHandlerClient registers the http handlers for service Groups -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "GroupsClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "GroupsClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "GroupsClient" to call the correct interceptors. -func RegisterGroupsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client GroupsClient) error { - - mux.Handle("POST", pattern_Groups_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Create", runtime.WithHTTPPathPattern("/iam/v1/groups/{parent=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Groups_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Groups_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Groups_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Update", runtime.WithHTTPPathPattern("/iam/v1/groups/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Groups_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Groups_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Groups_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Groups/List", runtime.WithHTTPPathPattern("/iam/v1/groups")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Groups_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Groups_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Groups_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Delete", runtime.WithHTTPPathPattern("/iam/v1/groups/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Groups_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Groups_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Groups_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "groups", "parent"}, "")) - - pattern_Groups_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "groups", "id"}, "")) - - pattern_Groups_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "groups"}, "")) - - pattern_Groups_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "groups", "id"}, "")) -) - -var ( - forward_Groups_Create_0 = runtime.ForwardResponseMessage - - forward_Groups_Update_0 = runtime.ForwardResponseMessage - - forward_Groups_List_0 = runtime.ForwardResponseMessage - - forward_Groups_Delete_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/iam/v1/group.platform.proto b/proto/platform/iam/v1/group.platform.proto deleted file mode 100644 index d354c74f..00000000 --- a/proto/platform/iam/v1/group.platform.proto +++ /dev/null @@ -1,127 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.iam.v1"; -option java_outer_classname = "PlatformIAMGroupProto"; - -package chainguard.platform.iam; - -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Groups { - rpc Create(CreateGroupRequest) returns (Group) { - option (google.api.http) = { - post: "/iam/v1/groups/{parent=**}" - body: "group" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_GROUPS_CREATE] - // We treat group creation as unscoped in order - // to allow users to create new root groups. - unscoped: true - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.group.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Update(Group) returns (Group) { - option (google.api.http) = { - put: "/iam/v1/groups/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_GROUPS_UPDATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.group.updated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc List(GroupFilter) returns (GroupList) { - option (google.api.http) = { - get: "/iam/v1/groups" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_GROUPS_LIST] - unscoped: true - } - }; - } - - rpc Delete(DeleteGroupRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/iam/v1/groups/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_GROUPS_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.group.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } -} - -message Group { - // id, The group UIDP under which this group resides. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - // name, human readable name of group. - string name = 2; - // description, human readable of group. - string description = 3; - // resource_limits indicate the maximum number of resources allowed for this group by type. - map resource_limits = 4; - // verified means we've verified the owners of this organization. Restrictions include: - // - Only organizations (root groups) can be verified - // - Property can only be set by manually by Chainguardians - // - If verified is set, the organizations name field must be globally unique - // - If verified is set the organizations name should be a domain name - bool verified = 5; -} - -message GroupList { - repeated Group items = 1; -} - -message GroupFilter { - // id is the exact UID of the record. - string id = 1; - // uidp filters records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 2; - // name is the exact name of the record. - string name = 3; -} - -message CreateGroupRequest { - // parent, The Group UIDP path under which the new Group resides. - // This is effectively the iam_scope for Create requests, but because - // we also allow users to create new "root" groups, we check the scoping - // manually. Parent is allowed to be a prefix of a UIDP of a Group within - // scope, or the name of a Group in scope. - string parent = 1; - // Group to create. - Group group = 2; -} - -message DeleteGroupRequest { - // id is the exact UIDP of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} diff --git a/proto/platform/iam/v1/group.platform_grpc.pb.go b/proto/platform/iam/v1/group.platform_grpc.pb.go deleted file mode 100644 index a86b2aad..00000000 --- a/proto/platform/iam/v1/group.platform_grpc.pb.go +++ /dev/null @@ -1,221 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: group.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Groups_Create_FullMethodName = "/chainguard.platform.iam.Groups/Create" - Groups_Update_FullMethodName = "/chainguard.platform.iam.Groups/Update" - Groups_List_FullMethodName = "/chainguard.platform.iam.Groups/List" - Groups_Delete_FullMethodName = "/chainguard.platform.iam.Groups/Delete" -) - -// GroupsClient is the client API for Groups service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type GroupsClient interface { - Create(ctx context.Context, in *CreateGroupRequest, opts ...grpc.CallOption) (*Group, error) - Update(ctx context.Context, in *Group, opts ...grpc.CallOption) (*Group, error) - List(ctx context.Context, in *GroupFilter, opts ...grpc.CallOption) (*GroupList, error) - Delete(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) -} - -type groupsClient struct { - cc grpc.ClientConnInterface -} - -func NewGroupsClient(cc grpc.ClientConnInterface) GroupsClient { - return &groupsClient{cc} -} - -func (c *groupsClient) Create(ctx context.Context, in *CreateGroupRequest, opts ...grpc.CallOption) (*Group, error) { - out := new(Group) - err := c.cc.Invoke(ctx, Groups_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsClient) Update(ctx context.Context, in *Group, opts ...grpc.CallOption) (*Group, error) { - out := new(Group) - err := c.cc.Invoke(ctx, Groups_Update_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsClient) List(ctx context.Context, in *GroupFilter, opts ...grpc.CallOption) (*GroupList, error) { - out := new(GroupList) - err := c.cc.Invoke(ctx, Groups_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsClient) Delete(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, Groups_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// GroupsServer is the server API for Groups service. -// All implementations must embed UnimplementedGroupsServer -// for forward compatibility -type GroupsServer interface { - Create(context.Context, *CreateGroupRequest) (*Group, error) - Update(context.Context, *Group) (*Group, error) - List(context.Context, *GroupFilter) (*GroupList, error) - Delete(context.Context, *DeleteGroupRequest) (*emptypb.Empty, error) - mustEmbedUnimplementedGroupsServer() -} - -// UnimplementedGroupsServer must be embedded to have forward compatible implementations. -type UnimplementedGroupsServer struct { -} - -func (UnimplementedGroupsServer) Create(context.Context, *CreateGroupRequest) (*Group, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedGroupsServer) Update(context.Context, *Group) (*Group, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} -func (UnimplementedGroupsServer) List(context.Context, *GroupFilter) (*GroupList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedGroupsServer) Delete(context.Context, *DeleteGroupRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedGroupsServer) mustEmbedUnimplementedGroupsServer() {} - -// UnsafeGroupsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to GroupsServer will -// result in compilation errors. -type UnsafeGroupsServer interface { - mustEmbedUnimplementedGroupsServer() -} - -func RegisterGroupsServer(s grpc.ServiceRegistrar, srv GroupsServer) { - s.RegisterService(&Groups_ServiceDesc, srv) -} - -func _Groups_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateGroupRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupsServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Groups_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupsServer).Create(ctx, req.(*CreateGroupRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Groups_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Group) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupsServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Groups_Update_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupsServer).Update(ctx, req.(*Group)) - } - return interceptor(ctx, in, info, handler) -} - -func _Groups_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GroupFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Groups_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupsServer).List(ctx, req.(*GroupFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _Groups_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteGroupRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupsServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Groups_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupsServer).Delete(ctx, req.(*DeleteGroupRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// Groups_ServiceDesc is the grpc.ServiceDesc for Groups service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Groups_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.iam.Groups", - HandlerType: (*GroupsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _Groups_Create_Handler, - }, - { - MethodName: "Update", - Handler: _Groups_Update_Handler, - }, - { - MethodName: "List", - Handler: _Groups_List_Handler, - }, - { - MethodName: "Delete", - Handler: _Groups_Delete_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "group.platform.proto", -} diff --git a/proto/platform/iam/v1/group_invites.platform.event.go b/proto/platform/iam/v1/group_invites.platform.event.go deleted file mode 100644 index 7526996c..00000000 --- a/proto/platform/iam/v1/group_invites.platform.event.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "chainguard.dev/sdk/uidp" -) - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *GroupInvite) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *GroupInvite) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.CloudEventsRedact. -func (x *GroupInvite) CloudEventsRedact() interface{} { - return &GroupInvite{ - Id: x.Id, - Expiration: x.Expiration, - } -} - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *DeleteGroupInviteRequest) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *DeleteGroupInviteRequest) CloudEventsSubject() string { - return x.GetId() -} diff --git a/proto/platform/iam/v1/group_invites.platform.pb.go b/proto/platform/iam/v1/group_invites.platform.pb.go deleted file mode 100644 index 87a0b464..00000000 --- a/proto/platform/iam/v1/group_invites.platform.pb.go +++ /dev/null @@ -1,981 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: group_invites.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type RegistrationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Kind: - // - // *RegistrationRequest_Human_ - // *RegistrationRequest_Cluster_ - Kind isRegistrationRequest_Kind `protobuf_oneof:"kind"` -} - -func (x *RegistrationRequest) Reset() { - *x = RegistrationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_group_invites_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RegistrationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RegistrationRequest) ProtoMessage() {} - -func (x *RegistrationRequest) ProtoReflect() protoreflect.Message { - mi := &file_group_invites_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RegistrationRequest.ProtoReflect.Descriptor instead. -func (*RegistrationRequest) Descriptor() ([]byte, []int) { - return file_group_invites_platform_proto_rawDescGZIP(), []int{0} -} - -func (m *RegistrationRequest) GetKind() isRegistrationRequest_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *RegistrationRequest) GetHuman() *RegistrationRequest_Human { - if x, ok := x.GetKind().(*RegistrationRequest_Human_); ok { - return x.Human - } - return nil -} - -func (x *RegistrationRequest) GetCluster() *RegistrationRequest_Cluster { - if x, ok := x.GetKind().(*RegistrationRequest_Cluster_); ok { - return x.Cluster - } - return nil -} - -type isRegistrationRequest_Kind interface { - isRegistrationRequest_Kind() -} - -type RegistrationRequest_Human_ struct { - Human *RegistrationRequest_Human `protobuf:"bytes,1,opt,name=human,proto3,oneof"` -} - -type RegistrationRequest_Cluster_ struct { - Cluster *RegistrationRequest_Cluster `protobuf:"bytes,2,opt,name=cluster,proto3,oneof"` -} - -func (*RegistrationRequest_Human_) isRegistrationRequest_Kind() {} - -func (*RegistrationRequest_Cluster_) isRegistrationRequest_Kind() {} - -type GroupInvite struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The group UIDP under which this invite resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // expiration, timestamp this invite becomes no longer valid. - Expiration *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration,proto3" json:"expiration,omitempty"` - // key_id is used to identify the verification key for this code. - KeyId string `protobuf:"bytes,3,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` - // role is the role the invited identity will be role-bound to the group with. - Role *Role `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` - // code is the json-encoded authentication code. - Code string `protobuf:"bytes,5,opt,name=code,proto3" json:"code,omitempty"` -} - -func (x *GroupInvite) Reset() { - *x = GroupInvite{} - if protoimpl.UnsafeEnabled { - mi := &file_group_invites_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GroupInvite) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GroupInvite) ProtoMessage() {} - -func (x *GroupInvite) ProtoReflect() protoreflect.Message { - mi := &file_group_invites_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GroupInvite.ProtoReflect.Descriptor instead. -func (*GroupInvite) Descriptor() ([]byte, []int) { - return file_group_invites_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *GroupInvite) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *GroupInvite) GetExpiration() *timestamppb.Timestamp { - if x != nil { - return x.Expiration - } - return nil -} - -func (x *GroupInvite) GetKeyId() string { - if x != nil { - return x.KeyId - } - return "" -} - -func (x *GroupInvite) GetRole() *Role { - if x != nil { - return x.Role - } - return nil -} - -func (x *GroupInvite) GetCode() string { - if x != nil { - return x.Code - } - return "" -} - -type StoredGroupInvite struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The group UIDP under which this invite resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // expiration, timestamp this invite becomes no longer valid. - Expiration *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration,proto3" json:"expiration,omitempty"` - // key_id is used to identify the verification key for this code. - KeyId string `protobuf:"bytes,3,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` - // role is the role the invited identity will be role-bound to the group with. - Role *Role `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` - // email is the email address that is allowed to accept this invite code. If blank, - // anyone with the invite code an accept. - Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` - // created_at is the timestamp for when the invite was created. - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - // single_use indicates whether or not the invite will be deleted after a user joins the group. - SingleUse bool `protobuf:"varint,7,opt,name=single_use,json=singleUse,proto3" json:"single_use,omitempty"` -} - -func (x *StoredGroupInvite) Reset() { - *x = StoredGroupInvite{} - if protoimpl.UnsafeEnabled { - mi := &file_group_invites_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StoredGroupInvite) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StoredGroupInvite) ProtoMessage() {} - -func (x *StoredGroupInvite) ProtoReflect() protoreflect.Message { - mi := &file_group_invites_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StoredGroupInvite.ProtoReflect.Descriptor instead. -func (*StoredGroupInvite) Descriptor() ([]byte, []int) { - return file_group_invites_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *StoredGroupInvite) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *StoredGroupInvite) GetExpiration() *timestamppb.Timestamp { - if x != nil { - return x.Expiration - } - return nil -} - -func (x *StoredGroupInvite) GetKeyId() string { - if x != nil { - return x.KeyId - } - return "" -} - -func (x *StoredGroupInvite) GetRole() *Role { - if x != nil { - return x.Role - } - return nil -} - -func (x *StoredGroupInvite) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *StoredGroupInvite) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -func (x *StoredGroupInvite) GetSingleUse() bool { - if x != nil { - return x.SingleUse - } - return false -} - -type GroupInviteList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*StoredGroupInvite `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *GroupInviteList) Reset() { - *x = GroupInviteList{} - if protoimpl.UnsafeEnabled { - mi := &file_group_invites_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GroupInviteList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GroupInviteList) ProtoMessage() {} - -func (x *GroupInviteList) ProtoReflect() protoreflect.Message { - mi := &file_group_invites_platform_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 GroupInviteList.ProtoReflect.Descriptor instead. -func (*GroupInviteList) Descriptor() ([]byte, []int) { - return file_group_invites_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *GroupInviteList) GetItems() []*StoredGroupInvite { - if x != nil { - return x.Items - } - return nil -} - -type GroupInviteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // group, The Group UIDP path under which the new group Invite targets. - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - // expiration, timestamp this invite becomes no longer valid. - Ttl *durationpb.Duration `protobuf:"bytes,2,opt,name=ttl,proto3" json:"ttl,omitempty"` - // role is the Role UIDP the invited identity will be role-bound to the group with. - Role string `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` - // email is the exact email address that may accept this invite code, if specified. - Email string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"` - // if single_use is set to true, then the invite will be deleted after a user joins the group. - SingleUse bool `protobuf:"varint,5,opt,name=single_use,json=singleUse,proto3" json:"single_use,omitempty"` -} - -func (x *GroupInviteRequest) Reset() { - *x = GroupInviteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_group_invites_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GroupInviteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GroupInviteRequest) ProtoMessage() {} - -func (x *GroupInviteRequest) ProtoReflect() protoreflect.Message { - mi := &file_group_invites_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GroupInviteRequest.ProtoReflect.Descriptor instead. -func (*GroupInviteRequest) Descriptor() ([]byte, []int) { - return file_group_invites_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *GroupInviteRequest) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -func (x *GroupInviteRequest) GetTtl() *durationpb.Duration { - if x != nil { - return x.Ttl - } - return nil -} - -func (x *GroupInviteRequest) GetRole() string { - if x != nil { - return x.Role - } - return "" -} - -func (x *GroupInviteRequest) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *GroupInviteRequest) GetSingleUse() bool { - if x != nil { - return x.SingleUse - } - return false -} - -type DeleteGroupInviteRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteGroupInviteRequest) Reset() { - *x = DeleteGroupInviteRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_group_invites_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteGroupInviteRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteGroupInviteRequest) ProtoMessage() {} - -func (x *DeleteGroupInviteRequest) ProtoReflect() protoreflect.Message { - mi := &file_group_invites_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteGroupInviteRequest.ProtoReflect.Descriptor instead. -func (*DeleteGroupInviteRequest) Descriptor() ([]byte, []int) { - return file_group_invites_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *DeleteGroupInviteRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type GroupInviteFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // group is used to identify the group this record is rooted under. - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - // id is the exact UID of the record. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - // key_id is the identify the verification key for this code. - KeyId string `protobuf:"bytes,3,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` -} - -func (x *GroupInviteFilter) Reset() { - *x = GroupInviteFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_group_invites_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GroupInviteFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GroupInviteFilter) ProtoMessage() {} - -func (x *GroupInviteFilter) ProtoReflect() protoreflect.Message { - mi := &file_group_invites_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GroupInviteFilter.ProtoReflect.Descriptor instead. -func (*GroupInviteFilter) Descriptor() ([]byte, []int) { - return file_group_invites_platform_proto_rawDescGZIP(), []int{6} -} - -func (x *GroupInviteFilter) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -func (x *GroupInviteFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *GroupInviteFilter) GetKeyId() string { - if x != nil { - return x.KeyId - } - return "" -} - -type RegistrationRequest_Human struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // code is the json-encoded authentication code. - // +optional - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` -} - -func (x *RegistrationRequest_Human) Reset() { - *x = RegistrationRequest_Human{} - if protoimpl.UnsafeEnabled { - mi := &file_group_invites_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RegistrationRequest_Human) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RegistrationRequest_Human) ProtoMessage() {} - -func (x *RegistrationRequest_Human) ProtoReflect() protoreflect.Message { - mi := &file_group_invites_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RegistrationRequest_Human.ProtoReflect.Descriptor instead. -func (*RegistrationRequest_Human) Descriptor() ([]byte, []int) { - return file_group_invites_platform_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *RegistrationRequest_Human) GetCode() string { - if x != nil { - return x.Code - } - return "" -} - -type RegistrationRequest_Cluster struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // code is the json-encoded authentication code. - Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` - // cluster_id is an optional cluster id if registering a cluster. - ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` -} - -func (x *RegistrationRequest_Cluster) Reset() { - *x = RegistrationRequest_Cluster{} - if protoimpl.UnsafeEnabled { - mi := &file_group_invites_platform_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RegistrationRequest_Cluster) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RegistrationRequest_Cluster) ProtoMessage() {} - -func (x *RegistrationRequest_Cluster) ProtoReflect() protoreflect.Message { - mi := &file_group_invites_platform_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RegistrationRequest_Cluster.ProtoReflect.Descriptor instead. -func (*RegistrationRequest_Cluster) Descriptor() ([]byte, []int) { - return file_group_invites_platform_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *RegistrationRequest_Cluster) GetCode() string { - if x != nil { - return x.Code - } - return "" -} - -func (x *RegistrationRequest_Cluster) GetClusterId() string { - if x != nil { - return x.ClusterId - } - return "" -} - -var File_group_invites_platform_proto protoreflect.FileDescriptor - -var file_group_invites_platform_proto_rawDesc = []byte{ - 0x0a, 0x1c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x02, 0x0a, 0x13, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x05, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x12, 0x50, - 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x1a, 0x1b, 0x0a, 0x05, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x1a, 0x3c, 0x0a, - 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x6b, - 0x69, 0x6e, 0x64, 0x22, 0xb7, 0x01, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x99, 0x02, - 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, - 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x22, 0x53, 0x0a, 0x0f, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xa8, - 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x18, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x50, 0x0a, - 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x32, - 0xb2, 0x05, 0x0a, 0x0c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, - 0x12, 0xd5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x78, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, - 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, - 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, - 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x76, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x10, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0x10, 0x01, - 0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcb, 0x01, 0x10, 0x01, 0x12, 0xc5, 0x01, 0x0a, - 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, - 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, - 0x04, 0x0a, 0x02, 0xcc, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_group_invites_platform_proto_rawDescOnce sync.Once - file_group_invites_platform_proto_rawDescData = file_group_invites_platform_proto_rawDesc -) - -func file_group_invites_platform_proto_rawDescGZIP() []byte { - file_group_invites_platform_proto_rawDescOnce.Do(func() { - file_group_invites_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_group_invites_platform_proto_rawDescData) - }) - return file_group_invites_platform_proto_rawDescData -} - -var file_group_invites_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_group_invites_platform_proto_goTypes = []interface{}{ - (*RegistrationRequest)(nil), // 0: chainguard.platform.iam.RegistrationRequest - (*GroupInvite)(nil), // 1: chainguard.platform.iam.GroupInvite - (*StoredGroupInvite)(nil), // 2: chainguard.platform.iam.StoredGroupInvite - (*GroupInviteList)(nil), // 3: chainguard.platform.iam.GroupInviteList - (*GroupInviteRequest)(nil), // 4: chainguard.platform.iam.GroupInviteRequest - (*DeleteGroupInviteRequest)(nil), // 5: chainguard.platform.iam.DeleteGroupInviteRequest - (*GroupInviteFilter)(nil), // 6: chainguard.platform.iam.GroupInviteFilter - (*RegistrationRequest_Human)(nil), // 7: chainguard.platform.iam.RegistrationRequest.Human - (*RegistrationRequest_Cluster)(nil), // 8: chainguard.platform.iam.RegistrationRequest.Cluster - (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp - (*Role)(nil), // 10: chainguard.platform.iam.Role - (*durationpb.Duration)(nil), // 11: google.protobuf.Duration - (*emptypb.Empty)(nil), // 12: google.protobuf.Empty -} -var file_group_invites_platform_proto_depIdxs = []int32{ - 7, // 0: chainguard.platform.iam.RegistrationRequest.human:type_name -> chainguard.platform.iam.RegistrationRequest.Human - 8, // 1: chainguard.platform.iam.RegistrationRequest.cluster:type_name -> chainguard.platform.iam.RegistrationRequest.Cluster - 9, // 2: chainguard.platform.iam.GroupInvite.expiration:type_name -> google.protobuf.Timestamp - 10, // 3: chainguard.platform.iam.GroupInvite.role:type_name -> chainguard.platform.iam.Role - 9, // 4: chainguard.platform.iam.StoredGroupInvite.expiration:type_name -> google.protobuf.Timestamp - 10, // 5: chainguard.platform.iam.StoredGroupInvite.role:type_name -> chainguard.platform.iam.Role - 9, // 6: chainguard.platform.iam.StoredGroupInvite.created_at:type_name -> google.protobuf.Timestamp - 2, // 7: chainguard.platform.iam.GroupInviteList.items:type_name -> chainguard.platform.iam.StoredGroupInvite - 11, // 8: chainguard.platform.iam.GroupInviteRequest.ttl:type_name -> google.protobuf.Duration - 4, // 9: chainguard.platform.iam.GroupInvites.Create:input_type -> chainguard.platform.iam.GroupInviteRequest - 4, // 10: chainguard.platform.iam.GroupInvites.CreateWithGroup:input_type -> chainguard.platform.iam.GroupInviteRequest - 6, // 11: chainguard.platform.iam.GroupInvites.List:input_type -> chainguard.platform.iam.GroupInviteFilter - 5, // 12: chainguard.platform.iam.GroupInvites.Delete:input_type -> chainguard.platform.iam.DeleteGroupInviteRequest - 1, // 13: chainguard.platform.iam.GroupInvites.Create:output_type -> chainguard.platform.iam.GroupInvite - 1, // 14: chainguard.platform.iam.GroupInvites.CreateWithGroup:output_type -> chainguard.platform.iam.GroupInvite - 3, // 15: chainguard.platform.iam.GroupInvites.List:output_type -> chainguard.platform.iam.GroupInviteList - 12, // 16: chainguard.platform.iam.GroupInvites.Delete:output_type -> google.protobuf.Empty - 13, // [13:17] is the sub-list for method output_type - 9, // [9:13] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name -} - -func init() { file_group_invites_platform_proto_init() } -func file_group_invites_platform_proto_init() { - if File_group_invites_platform_proto != nil { - return - } - file_role_platform_proto_init() - if !protoimpl.UnsafeEnabled { - file_group_invites_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistrationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_invites_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupInvite); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_invites_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoredGroupInvite); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_invites_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupInviteList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_invites_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupInviteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_invites_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteGroupInviteRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_invites_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupInviteFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_invites_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistrationRequest_Human); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_group_invites_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegistrationRequest_Cluster); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_group_invites_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*RegistrationRequest_Human_)(nil), - (*RegistrationRequest_Cluster_)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_group_invites_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 9, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_group_invites_platform_proto_goTypes, - DependencyIndexes: file_group_invites_platform_proto_depIdxs, - MessageInfos: file_group_invites_platform_proto_msgTypes, - }.Build() - File_group_invites_platform_proto = out.File - file_group_invites_platform_proto_rawDesc = nil - file_group_invites_platform_proto_goTypes = nil - file_group_invites_platform_proto_depIdxs = nil -} diff --git a/proto/platform/iam/v1/group_invites.platform.pb.gw.go b/proto/platform/iam/v1/group_invites.platform.pb.gw.go deleted file mode 100644 index d1e9d95c..00000000 --- a/proto/platform/iam/v1/group_invites.platform.pb.gw.go +++ /dev/null @@ -1,467 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: group_invites.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_GroupInvites_Create_0(ctx context.Context, marshaler runtime.Marshaler, client GroupInvitesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GroupInviteRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_GroupInvites_Create_0(ctx context.Context, marshaler runtime.Marshaler, server GroupInvitesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GroupInviteRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["group"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") - } - - protoReq.Group, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -func request_GroupInvites_CreateWithGroup_0(ctx context.Context, marshaler runtime.Marshaler, client GroupInvitesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GroupInviteRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CreateWithGroup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_GroupInvites_CreateWithGroup_0(ctx context.Context, marshaler runtime.Marshaler, server GroupInvitesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GroupInviteRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.CreateWithGroup(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_GroupInvites_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_GroupInvites_List_0(ctx context.Context, marshaler runtime.Marshaler, client GroupInvitesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GroupInviteFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GroupInvites_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_GroupInvites_List_0(ctx context.Context, marshaler runtime.Marshaler, server GroupInvitesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GroupInviteFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GroupInvites_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_GroupInvites_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client GroupInvitesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteGroupInviteRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_GroupInvites_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server GroupInvitesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteGroupInviteRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterGroupInvitesHandlerServer registers the http handlers for service GroupInvites to "mux". -// UnaryRPC :call GroupInvitesServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterGroupInvitesHandlerFromEndpoint instead. -func RegisterGroupInvitesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GroupInvitesServer) error { - - mux.Handle("POST", pattern_GroupInvites_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/Create", runtime.WithHTTPPathPattern("/iam/v1/group_invites/{group=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_GroupInvites_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupInvites_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_GroupInvites_CreateWithGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/CreateWithGroup", runtime.WithHTTPPathPattern("/chainguard.platform.iam.GroupInvites/CreateWithGroup")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_GroupInvites_CreateWithGroup_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupInvites_CreateWithGroup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_GroupInvites_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/List", runtime.WithHTTPPathPattern("/iam/v1/group_invites")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_GroupInvites_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupInvites_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_GroupInvites_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/Delete", runtime.WithHTTPPathPattern("/iam/v1/group_invites/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_GroupInvites_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupInvites_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterGroupInvitesHandlerFromEndpoint is same as RegisterGroupInvitesHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterGroupInvitesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterGroupInvitesHandler(ctx, mux, conn) -} - -// RegisterGroupInvitesHandler registers the http handlers for service GroupInvites to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterGroupInvitesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterGroupInvitesHandlerClient(ctx, mux, NewGroupInvitesClient(conn)) -} - -// RegisterGroupInvitesHandlerClient registers the http handlers for service GroupInvites -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "GroupInvitesClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "GroupInvitesClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "GroupInvitesClient" to call the correct interceptors. -func RegisterGroupInvitesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client GroupInvitesClient) error { - - mux.Handle("POST", pattern_GroupInvites_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/Create", runtime.WithHTTPPathPattern("/iam/v1/group_invites/{group=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_GroupInvites_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupInvites_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_GroupInvites_CreateWithGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/CreateWithGroup", runtime.WithHTTPPathPattern("/chainguard.platform.iam.GroupInvites/CreateWithGroup")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_GroupInvites_CreateWithGroup_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupInvites_CreateWithGroup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_GroupInvites_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/List", runtime.WithHTTPPathPattern("/iam/v1/group_invites")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_GroupInvites_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupInvites_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_GroupInvites_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/Delete", runtime.WithHTTPPathPattern("/iam/v1/group_invites/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_GroupInvites_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_GroupInvites_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_GroupInvites_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "group_invites", "group"}, "")) - - pattern_GroupInvites_CreateWithGroup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.iam.GroupInvites", "CreateWithGroup"}, "")) - - pattern_GroupInvites_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "group_invites"}, "")) - - pattern_GroupInvites_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "group_invites", "id"}, "")) -) - -var ( - forward_GroupInvites_Create_0 = runtime.ForwardResponseMessage - - forward_GroupInvites_CreateWithGroup_0 = runtime.ForwardResponseMessage - - forward_GroupInvites_List_0 = runtime.ForwardResponseMessage - - forward_GroupInvites_Delete_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/iam/v1/group_invites.platform.proto b/proto/platform/iam/v1/group_invites.platform.proto deleted file mode 100644 index c7f6ae8a..00000000 --- a/proto/platform/iam/v1/group_invites.platform.proto +++ /dev/null @@ -1,174 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.iam.v1"; -option java_outer_classname = "PlatformIAMGroupInviteProto"; - -package chainguard.platform.iam; - -import "google/api/annotations.proto"; -import "google/protobuf/timestamp.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/empty.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "role.platform.proto"; - -service GroupInvites { - rpc Create(GroupInviteRequest) returns (GroupInvite) { - option (google.api.http) = { - post: "/iam/v1/group_invites/{group=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [ - CAP_IAM_GROUP_INVITES_CREATE, - // Creating a Group Invite is effectively a RoleBinding - // promise, so check that the caller has permission to - // create RoleBindings as well. - CAP_IAM_ROLE_BINDINGS_CREATE - ] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.group_invite.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - // CreateWithGroup is an internal API for creating a new root group - // where the caller is NOT added as an Owner, but an invite code to - // become the owner of the group is returned. This is not intended - // for external consumption, and will not be supported. - // Do not use this! - rpc CreateWithGroup(GroupInviteRequest) returns (GroupInvite) { - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [ - CAP_IAM_GROUP_INVITES_CREATE, - // Creating a Group Invite is effectively a RoleBinding - // promise, so check that the caller has permission to - // create RoleBindings as well. - CAP_IAM_ROLE_BINDINGS_CREATE - ] - // We check for the capabilities above in the token, but - // this method has special undocumented authentication - // semantics since it is not intended to external consumption. - unscoped: true - } - }; - } - - rpc List(GroupInviteFilter) returns (GroupInviteList) { - option (google.api.http) = { - get: "/iam/v1/group_invites" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_GROUP_INVITES_LIST] - unscoped: true - } - }; - } - - rpc Delete(DeleteGroupInviteRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/iam/v1/group_invites/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_GROUP_INVITES_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.group_invite.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } -} - -message RegistrationRequest { - oneof kind { - Human human = 1; - Cluster cluster = 2; - } - - message Human { - // code is the json-encoded authentication code. - // +optional - string code = 1; - } - - message Cluster { - // code is the json-encoded authentication code. - string code = 1; - // cluster_id is an optional cluster id if registering a cluster. - string cluster_id = 2; - } -} - -message GroupInvite { - // id, The group UIDP under which this invite resides. - string id = 1; - // expiration, timestamp this invite becomes no longer valid. - google.protobuf.Timestamp expiration = 2; - // key_id is used to identify the verification key for this code. - string key_id = 3; - // role is the role the invited identity will be role-bound to the group with. - chainguard.platform.iam.Role role = 4; - // code is the json-encoded authentication code. - string code = 5; -} - -message StoredGroupInvite { - // id, The group UIDP under which this invite resides. - string id = 1; - // expiration, timestamp this invite becomes no longer valid. - google.protobuf.Timestamp expiration = 2; - // key_id is used to identify the verification key for this code. - string key_id = 3; - // role is the role the invited identity will be role-bound to the group with. - chainguard.platform.iam.Role role = 4; - // email is the email address that is allowed to accept this invite code. If blank, - // anyone with the invite code an accept. - string email = 5; - // created_at is the timestamp for when the invite was created. - google.protobuf.Timestamp created_at = 6; - // single_use indicates whether or not the invite will be deleted after a user joins the group. - bool single_use = 7; -} - -message GroupInviteList { - repeated StoredGroupInvite items = 1; -} - -message GroupInviteRequest { - // group, The Group UIDP path under which the new group Invite targets. - string group = 1 [(chainguard.annotations.iam_scope) = true]; - // expiration, timestamp this invite becomes no longer valid. - google.protobuf.Duration ttl = 2; - // role is the Role UIDP the invited identity will be role-bound to the group with. - string role = 3; - // email is the exact email address that may accept this invite code, if specified. - string email = 4; - // if single_use is set to true, then the invite will be deleted after a user joins the group. - bool single_use = 5; -} - -message DeleteGroupInviteRequest { - // id is the exact UIDP of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message GroupInviteFilter { - // group is used to identify the group this record is rooted under. - string group = 1; - // id is the exact UID of the record. - string id = 2; - // key_id is the identify the verification key for this code. - string key_id = 3; -} diff --git a/proto/platform/iam/v1/group_invites.platform_grpc.pb.go b/proto/platform/iam/v1/group_invites.platform_grpc.pb.go deleted file mode 100644 index 9a9b9c75..00000000 --- a/proto/platform/iam/v1/group_invites.platform_grpc.pb.go +++ /dev/null @@ -1,231 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: group_invites.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - GroupInvites_Create_FullMethodName = "/chainguard.platform.iam.GroupInvites/Create" - GroupInvites_CreateWithGroup_FullMethodName = "/chainguard.platform.iam.GroupInvites/CreateWithGroup" - GroupInvites_List_FullMethodName = "/chainguard.platform.iam.GroupInvites/List" - GroupInvites_Delete_FullMethodName = "/chainguard.platform.iam.GroupInvites/Delete" -) - -// GroupInvitesClient is the client API for GroupInvites service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type GroupInvitesClient interface { - Create(ctx context.Context, in *GroupInviteRequest, opts ...grpc.CallOption) (*GroupInvite, error) - // CreateWithGroup is an internal API for creating a new root group - // where the caller is NOT added as an Owner, but an invite code to - // become the owner of the group is returned. This is not intended - // for external consumption, and will not be supported. - // Do not use this! - CreateWithGroup(ctx context.Context, in *GroupInviteRequest, opts ...grpc.CallOption) (*GroupInvite, error) - List(ctx context.Context, in *GroupInviteFilter, opts ...grpc.CallOption) (*GroupInviteList, error) - Delete(ctx context.Context, in *DeleteGroupInviteRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) -} - -type groupInvitesClient struct { - cc grpc.ClientConnInterface -} - -func NewGroupInvitesClient(cc grpc.ClientConnInterface) GroupInvitesClient { - return &groupInvitesClient{cc} -} - -func (c *groupInvitesClient) Create(ctx context.Context, in *GroupInviteRequest, opts ...grpc.CallOption) (*GroupInvite, error) { - out := new(GroupInvite) - err := c.cc.Invoke(ctx, GroupInvites_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupInvitesClient) CreateWithGroup(ctx context.Context, in *GroupInviteRequest, opts ...grpc.CallOption) (*GroupInvite, error) { - out := new(GroupInvite) - err := c.cc.Invoke(ctx, GroupInvites_CreateWithGroup_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupInvitesClient) List(ctx context.Context, in *GroupInviteFilter, opts ...grpc.CallOption) (*GroupInviteList, error) { - out := new(GroupInviteList) - err := c.cc.Invoke(ctx, GroupInvites_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupInvitesClient) Delete(ctx context.Context, in *DeleteGroupInviteRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, GroupInvites_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// GroupInvitesServer is the server API for GroupInvites service. -// All implementations must embed UnimplementedGroupInvitesServer -// for forward compatibility -type GroupInvitesServer interface { - Create(context.Context, *GroupInviteRequest) (*GroupInvite, error) - // CreateWithGroup is an internal API for creating a new root group - // where the caller is NOT added as an Owner, but an invite code to - // become the owner of the group is returned. This is not intended - // for external consumption, and will not be supported. - // Do not use this! - CreateWithGroup(context.Context, *GroupInviteRequest) (*GroupInvite, error) - List(context.Context, *GroupInviteFilter) (*GroupInviteList, error) - Delete(context.Context, *DeleteGroupInviteRequest) (*emptypb.Empty, error) - mustEmbedUnimplementedGroupInvitesServer() -} - -// UnimplementedGroupInvitesServer must be embedded to have forward compatible implementations. -type UnimplementedGroupInvitesServer struct { -} - -func (UnimplementedGroupInvitesServer) Create(context.Context, *GroupInviteRequest) (*GroupInvite, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedGroupInvitesServer) CreateWithGroup(context.Context, *GroupInviteRequest) (*GroupInvite, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateWithGroup not implemented") -} -func (UnimplementedGroupInvitesServer) List(context.Context, *GroupInviteFilter) (*GroupInviteList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedGroupInvitesServer) Delete(context.Context, *DeleteGroupInviteRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedGroupInvitesServer) mustEmbedUnimplementedGroupInvitesServer() {} - -// UnsafeGroupInvitesServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to GroupInvitesServer will -// result in compilation errors. -type UnsafeGroupInvitesServer interface { - mustEmbedUnimplementedGroupInvitesServer() -} - -func RegisterGroupInvitesServer(s grpc.ServiceRegistrar, srv GroupInvitesServer) { - s.RegisterService(&GroupInvites_ServiceDesc, srv) -} - -func _GroupInvites_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GroupInviteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupInvitesServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: GroupInvites_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupInvitesServer).Create(ctx, req.(*GroupInviteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _GroupInvites_CreateWithGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GroupInviteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupInvitesServer).CreateWithGroup(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: GroupInvites_CreateWithGroup_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupInvitesServer).CreateWithGroup(ctx, req.(*GroupInviteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _GroupInvites_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GroupInviteFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupInvitesServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: GroupInvites_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupInvitesServer).List(ctx, req.(*GroupInviteFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _GroupInvites_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteGroupInviteRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(GroupInvitesServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: GroupInvites_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(GroupInvitesServer).Delete(ctx, req.(*DeleteGroupInviteRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// GroupInvites_ServiceDesc is the grpc.ServiceDesc for GroupInvites service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var GroupInvites_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.iam.GroupInvites", - HandlerType: (*GroupInvitesServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _GroupInvites_Create_Handler, - }, - { - MethodName: "CreateWithGroup", - Handler: _GroupInvites_CreateWithGroup_Handler, - }, - { - MethodName: "List", - Handler: _GroupInvites_List_Handler, - }, - { - MethodName: "Delete", - Handler: _GroupInvites_Delete_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "group_invites.platform.proto", -} diff --git a/proto/platform/iam/v1/identity.platform.event.go b/proto/platform/iam/v1/identity.platform.event.go deleted file mode 100644 index 12152a4d..00000000 --- a/proto/platform/iam/v1/identity.platform.event.go +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "chainguard.dev/sdk/uidp" -) - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *Identity) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *Identity) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *DeleteIdentityRequest) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *DeleteIdentityRequest) CloudEventsSubject() string { - return x.GetId() -} diff --git a/proto/platform/iam/v1/identity.platform.pb.go b/proto/platform/iam/v1/identity.platform.pb.go deleted file mode 100644 index 693c98f5..00000000 --- a/proto/platform/iam/v1/identity.platform.pb.go +++ /dev/null @@ -1,1357 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: identity.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ServicePrincipal int32 - -const ( - ServicePrincipal_UNKNOWN ServicePrincipal = 0 - ServicePrincipal_COSIGNED ServicePrincipal = 1 - ServicePrincipal_INGESTER ServicePrincipal = 2 - ServicePrincipal_CATALOG_SYNCER ServicePrincipal = 3 -) - -// Enum value maps for ServicePrincipal. -var ( - ServicePrincipal_name = map[int32]string{ - 0: "UNKNOWN", - 1: "COSIGNED", - 2: "INGESTER", - 3: "CATALOG_SYNCER", - } - ServicePrincipal_value = map[string]int32{ - "UNKNOWN": 0, - "COSIGNED": 1, - "INGESTER": 2, - "CATALOG_SYNCER": 3, - } -) - -func (x ServicePrincipal) Enum() *ServicePrincipal { - p := new(ServicePrincipal) - *p = x - return p -} - -func (x ServicePrincipal) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServicePrincipal) Descriptor() protoreflect.EnumDescriptor { - return file_identity_platform_proto_enumTypes[0].Descriptor() -} - -func (ServicePrincipal) Type() protoreflect.EnumType { - return &file_identity_platform_proto_enumTypes[0] -} - -func (x ServicePrincipal) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServicePrincipal.Descriptor instead. -func (ServicePrincipal) EnumDescriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{0} -} - -type Identity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is unique identifier of this specific identity. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name, human readable name of identity. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // description, human readable of identity. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // created_at is the timestamp for when the identity was created. - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - // updated_at is the timestamp for when the identity was last updated. - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - // relationship is used to describe how this identity relates to - // identities coming from 3rd party Identity Providers (IdPs) - // - // Types that are assignable to Relationship: - // - // *Identity_ClaimMatch_ - // *Identity_Static - // *Identity_ServicePrincipal - // *Identity_AwsIdentity - Relationship isIdentity_Relationship `protobuf_oneof:"relationship"` -} - -func (x *Identity) Reset() { - *x = Identity{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Identity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Identity) ProtoMessage() {} - -func (x *Identity) ProtoReflect() protoreflect.Message { - mi := &file_identity_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Identity.ProtoReflect.Descriptor instead. -func (*Identity) Descriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Identity) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Identity) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Identity) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Identity) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -func (x *Identity) GetUpdatedAt() *timestamppb.Timestamp { - if x != nil { - return x.UpdatedAt - } - return nil -} - -func (m *Identity) GetRelationship() isIdentity_Relationship { - if m != nil { - return m.Relationship - } - return nil -} - -func (x *Identity) GetClaimMatch() *Identity_ClaimMatch { - if x, ok := x.GetRelationship().(*Identity_ClaimMatch_); ok { - return x.ClaimMatch - } - return nil -} - -func (x *Identity) GetStatic() *Identity_StaticKeys { - if x, ok := x.GetRelationship().(*Identity_Static); ok { - return x.Static - } - return nil -} - -func (x *Identity) GetServicePrincipal() ServicePrincipal { - if x, ok := x.GetRelationship().(*Identity_ServicePrincipal); ok { - return x.ServicePrincipal - } - return ServicePrincipal_UNKNOWN -} - -func (x *Identity) GetAwsIdentity() *Identity_AWSIdentity { - if x, ok := x.GetRelationship().(*Identity_AwsIdentity); ok { - return x.AwsIdentity - } - return nil -} - -type isIdentity_Relationship interface { - isIdentity_Relationship() -} - -type Identity_ClaimMatch_ struct { - // claim_match checks the third party IdP token's claims against one - // or more configured patterns. - ClaimMatch *Identity_ClaimMatch `protobuf:"bytes,10,opt,name=claim_match,json=claimMatch,proto3,oneof"` -} - -type Identity_Static struct { - // static is equivalent to literal, but instead of discovering the - // IdP's verification keys we verify the identity using pre-registered - // verification keys. This is intended for use with identities from - // providers without an "online" issuer (network accessible to our IdP), - // such as a KinD/minikube cluster. - // NOTE: because this path does not have a mechanism for key rotation - // the identity will expire, with a maximum lifetime of 30d. - Static *Identity_StaticKeys `protobuf:"bytes,11,opt,name=static,proto3,oneof"` -} - -type Identity_ServicePrincipal struct { - // service_principal is the name of the Chainguard service that is - // allowed to assume this identity. These names correlate with the - // service names used in impersonation with account associations. - ServicePrincipal ServicePrincipal `protobuf:"varint,12,opt,name=service_principal,json=servicePrincipal,proto3,enum=chainguard.platform.iam.ServicePrincipal,oneof"` -} - -type Identity_AwsIdentity struct { - // aws_identity matches AWS IAM users and roles to an identity - AwsIdentity *Identity_AWSIdentity `protobuf:"bytes,13,opt,name=aws_identity,json=awsIdentity,proto3,oneof"` -} - -func (*Identity_ClaimMatch_) isIdentity_Relationship() {} - -func (*Identity_Static) isIdentity_Relationship() {} - -func (*Identity_ServicePrincipal) isIdentity_Relationship() {} - -func (*Identity_AwsIdentity) isIdentity_Relationship() {} - -type CreateIdentityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // parent_id, The Group UIDP path under which the new Identity resides. - ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - // Identity to create. - Identity *Identity `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` -} - -func (x *CreateIdentityRequest) Reset() { - *x = CreateIdentityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateIdentityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateIdentityRequest) ProtoMessage() {} - -func (x *CreateIdentityRequest) ProtoReflect() protoreflect.Message { - mi := &file_identity_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateIdentityRequest.ProtoReflect.Descriptor instead. -func (*CreateIdentityRequest) Descriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *CreateIdentityRequest) GetParentId() string { - if x != nil { - return x.ParentId - } - return "" -} - -func (x *CreateIdentityRequest) GetIdentity() *Identity { - if x != nil { - return x.Identity - } - return nil -} - -type DeleteIdentityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ID, UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteIdentityRequest) Reset() { - *x = DeleteIdentityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteIdentityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteIdentityRequest) ProtoMessage() {} - -func (x *DeleteIdentityRequest) ProtoReflect() protoreflect.Message { - mi := &file_identity_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteIdentityRequest.ProtoReflect.Descriptor instead. -func (*DeleteIdentityRequest) Descriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *DeleteIdentityRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type IdentityList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Identity `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *IdentityList) Reset() { - *x = IdentityList{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IdentityList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IdentityList) ProtoMessage() {} - -func (x *IdentityList) ProtoReflect() protoreflect.Message { - mi := &file_identity_platform_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 IdentityList.ProtoReflect.Descriptor instead. -func (*IdentityList) Descriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *IdentityList) GetItems() []*Identity { - if x != nil { - return x.Items - } - return nil -} - -type IdentityFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // uidp filters records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` - // id is unique identifier to look up. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *IdentityFilter) Reset() { - *x = IdentityFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IdentityFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IdentityFilter) ProtoMessage() {} - -func (x *IdentityFilter) ProtoReflect() protoreflect.Message { - mi := &file_identity_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IdentityFilter.ProtoReflect.Descriptor instead. -func (*IdentityFilter) Descriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *IdentityFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *IdentityFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type LookupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // issuer is the oidc issuer to look up. - Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` - // subject is the subject to look up. - Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` -} - -func (x *LookupRequest) Reset() { - *x = LookupRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LookupRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LookupRequest) ProtoMessage() {} - -func (x *LookupRequest) ProtoReflect() protoreflect.Message { - mi := &file_identity_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LookupRequest.ProtoReflect.Descriptor instead. -func (*LookupRequest) Descriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *LookupRequest) GetIssuer() string { - if x != nil { - return x.Issuer - } - return "" -} - -func (x *LookupRequest) GetSubject() string { - if x != nil { - return x.Subject - } - return "" -} - -type Identity_ClaimMatch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required, matches the `iss` claim. - // - // Types that are assignable to Iss: - // - // *Identity_ClaimMatch_Issuer - // *Identity_ClaimMatch_IssuerPattern - Iss isIdentity_ClaimMatch_Iss `protobuf_oneof:"iss"` - // Required, matches the `sub` claim. - // - // Types that are assignable to Sub: - // - // *Identity_ClaimMatch_Subject - // *Identity_ClaimMatch_SubjectPattern - Sub isIdentity_ClaimMatch_Sub `protobuf_oneof:"sub"` - // Optional, matches the `aud` claim. - // When unspecified, this defaults to the hostname of the SaaS - // environment's issuer. - // - // Types that are assignable to Aud: - // - // *Identity_ClaimMatch_Audience - // *Identity_ClaimMatch_AudiencePattern - Aud isIdentity_ClaimMatch_Aud `protobuf_oneof:"aud"` - // claims is a mapping from the name of a custom claim - // to a literal matching that claim's value. - Claims map[string]string `protobuf:"bytes,7,rep,name=claims,proto3" json:"claims,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // claim_patterns is a mapping from the name of a custom claim - // to a regular expression for matching that claim's value. - ClaimPatterns map[string]string `protobuf:"bytes,8,rep,name=claim_patterns,json=claimPatterns,proto3" json:"claim_patterns,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Identity_ClaimMatch) Reset() { - *x = Identity_ClaimMatch{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Identity_ClaimMatch) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Identity_ClaimMatch) ProtoMessage() {} - -func (x *Identity_ClaimMatch) ProtoReflect() protoreflect.Message { - mi := &file_identity_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Identity_ClaimMatch.ProtoReflect.Descriptor instead. -func (*Identity_ClaimMatch) Descriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{0, 0} -} - -func (m *Identity_ClaimMatch) GetIss() isIdentity_ClaimMatch_Iss { - if m != nil { - return m.Iss - } - return nil -} - -func (x *Identity_ClaimMatch) GetIssuer() string { - if x, ok := x.GetIss().(*Identity_ClaimMatch_Issuer); ok { - return x.Issuer - } - return "" -} - -func (x *Identity_ClaimMatch) GetIssuerPattern() string { - if x, ok := x.GetIss().(*Identity_ClaimMatch_IssuerPattern); ok { - return x.IssuerPattern - } - return "" -} - -func (m *Identity_ClaimMatch) GetSub() isIdentity_ClaimMatch_Sub { - if m != nil { - return m.Sub - } - return nil -} - -func (x *Identity_ClaimMatch) GetSubject() string { - if x, ok := x.GetSub().(*Identity_ClaimMatch_Subject); ok { - return x.Subject - } - return "" -} - -func (x *Identity_ClaimMatch) GetSubjectPattern() string { - if x, ok := x.GetSub().(*Identity_ClaimMatch_SubjectPattern); ok { - return x.SubjectPattern - } - return "" -} - -func (m *Identity_ClaimMatch) GetAud() isIdentity_ClaimMatch_Aud { - if m != nil { - return m.Aud - } - return nil -} - -func (x *Identity_ClaimMatch) GetAudience() string { - if x, ok := x.GetAud().(*Identity_ClaimMatch_Audience); ok { - return x.Audience - } - return "" -} - -func (x *Identity_ClaimMatch) GetAudiencePattern() string { - if x, ok := x.GetAud().(*Identity_ClaimMatch_AudiencePattern); ok { - return x.AudiencePattern - } - return "" -} - -func (x *Identity_ClaimMatch) GetClaims() map[string]string { - if x != nil { - return x.Claims - } - return nil -} - -func (x *Identity_ClaimMatch) GetClaimPatterns() map[string]string { - if x != nil { - return x.ClaimPatterns - } - return nil -} - -type isIdentity_ClaimMatch_Iss interface { - isIdentity_ClaimMatch_Iss() -} - -type Identity_ClaimMatch_Issuer struct { - // issuer of the OIDC ID tokens issued for this identity. - Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3,oneof"` -} - -type Identity_ClaimMatch_IssuerPattern struct { - // issuer_pattern is a regular expression for matching the - // token's issuer claim. - IssuerPattern string `protobuf:"bytes,2,opt,name=issuer_pattern,json=issuerPattern,proto3,oneof"` -} - -func (*Identity_ClaimMatch_Issuer) isIdentity_ClaimMatch_Iss() {} - -func (*Identity_ClaimMatch_IssuerPattern) isIdentity_ClaimMatch_Iss() {} - -type isIdentity_ClaimMatch_Sub interface { - isIdentity_ClaimMatch_Sub() -} - -type Identity_ClaimMatch_Subject struct { - // subject of OIDC ID tokens issued for this identity. - Subject string `protobuf:"bytes,3,opt,name=subject,proto3,oneof"` -} - -type Identity_ClaimMatch_SubjectPattern struct { - // subject_pattern is a regular expression for matching the - // token's subject claim. - SubjectPattern string `protobuf:"bytes,4,opt,name=subject_pattern,json=subjectPattern,proto3,oneof"` -} - -func (*Identity_ClaimMatch_Subject) isIdentity_ClaimMatch_Sub() {} - -func (*Identity_ClaimMatch_SubjectPattern) isIdentity_ClaimMatch_Sub() {} - -type isIdentity_ClaimMatch_Aud interface { - isIdentity_ClaimMatch_Aud() -} - -type Identity_ClaimMatch_Audience struct { - // audience of OIDC ID tokens issued for this identity. - Audience string `protobuf:"bytes,5,opt,name=audience,proto3,oneof"` -} - -type Identity_ClaimMatch_AudiencePattern struct { - // audience_pattern is a regular expression for matching the - // token's audience claim. - AudiencePattern string `protobuf:"bytes,6,opt,name=audience_pattern,json=audiencePattern,proto3,oneof"` -} - -func (*Identity_ClaimMatch_Audience) isIdentity_ClaimMatch_Aud() {} - -func (*Identity_ClaimMatch_AudiencePattern) isIdentity_ClaimMatch_Aud() {} - -type Identity_StaticKeys struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // issuer of the OIDC ID tokens issued for this identity. - // Matches the `iss` claim. - Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` - // subject of OIDC ID tokens issued for this identity. - // Matches the `sub` claim. - Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` - // issuer_keys is JWKS-formatted public keys for the issuer. - // Required, otherwise use Literal. - IssuerKeys string `protobuf:"bytes,4,opt,name=issuer_keys,json=issuerKeys,proto3" json:"issuer_keys,omitempty"` - // expiration is the time when the issuer_keys will expire. - // Defaults to / Maximum of 30 days after creation time. - Expiration *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=expiration,proto3" json:"expiration,omitempty"` -} - -func (x *Identity_StaticKeys) Reset() { - *x = Identity_StaticKeys{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Identity_StaticKeys) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Identity_StaticKeys) ProtoMessage() {} - -func (x *Identity_StaticKeys) ProtoReflect() protoreflect.Message { - mi := &file_identity_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Identity_StaticKeys.ProtoReflect.Descriptor instead. -func (*Identity_StaticKeys) Descriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *Identity_StaticKeys) GetIssuer() string { - if x != nil { - return x.Issuer - } - return "" -} - -func (x *Identity_StaticKeys) GetSubject() string { - if x != nil { - return x.Subject - } - return "" -} - -func (x *Identity_StaticKeys) GetIssuerKeys() string { - if x != nil { - return x.IssuerKeys - } - return "" -} - -func (x *Identity_StaticKeys) GetExpiration() *timestamppb.Timestamp { - if x != nil { - return x.Expiration - } - return nil -} - -type Identity_AWSIdentity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required, matches the `Account` field in the GetCallerID AWS IAM - // response - AwsAccount string `protobuf:"bytes,1,opt,name=aws_account,json=awsAccount,proto3" json:"aws_account,omitempty"` - // Required, matches the `Arn` field in the GetCallerID AWS IAM response - // - // Types that are assignable to AwsArn: - // - // *Identity_AWSIdentity_Arn - // *Identity_AWSIdentity_ArnPattern - AwsArn isIdentity_AWSIdentity_AwsArn `protobuf_oneof:"aws_arn"` - // Required, matches the `UserId` field of th GetCallerID AWS IAM response - // - // Types that are assignable to AwsUserId: - // - // *Identity_AWSIdentity_UserId - // *Identity_AWSIdentity_UserIdPattern - AwsUserId isIdentity_AWSIdentity_AwsUserId `protobuf_oneof:"aws_user_id"` -} - -func (x *Identity_AWSIdentity) Reset() { - *x = Identity_AWSIdentity{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_platform_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Identity_AWSIdentity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Identity_AWSIdentity) ProtoMessage() {} - -func (x *Identity_AWSIdentity) ProtoReflect() protoreflect.Message { - mi := &file_identity_platform_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Identity_AWSIdentity.ProtoReflect.Descriptor instead. -func (*Identity_AWSIdentity) Descriptor() ([]byte, []int) { - return file_identity_platform_proto_rawDescGZIP(), []int{0, 2} -} - -func (x *Identity_AWSIdentity) GetAwsAccount() string { - if x != nil { - return x.AwsAccount - } - return "" -} - -func (m *Identity_AWSIdentity) GetAwsArn() isIdentity_AWSIdentity_AwsArn { - if m != nil { - return m.AwsArn - } - return nil -} - -func (x *Identity_AWSIdentity) GetArn() string { - if x, ok := x.GetAwsArn().(*Identity_AWSIdentity_Arn); ok { - return x.Arn - } - return "" -} - -func (x *Identity_AWSIdentity) GetArnPattern() string { - if x, ok := x.GetAwsArn().(*Identity_AWSIdentity_ArnPattern); ok { - return x.ArnPattern - } - return "" -} - -func (m *Identity_AWSIdentity) GetAwsUserId() isIdentity_AWSIdentity_AwsUserId { - if m != nil { - return m.AwsUserId - } - return nil -} - -func (x *Identity_AWSIdentity) GetUserId() string { - if x, ok := x.GetAwsUserId().(*Identity_AWSIdentity_UserId); ok { - return x.UserId - } - return "" -} - -func (x *Identity_AWSIdentity) GetUserIdPattern() string { - if x, ok := x.GetAwsUserId().(*Identity_AWSIdentity_UserIdPattern); ok { - return x.UserIdPattern - } - return "" -} - -type isIdentity_AWSIdentity_AwsArn interface { - isIdentity_AWSIdentity_AwsArn() -} - -type Identity_AWSIdentity_Arn struct { - // Exact match to Arn of AWS Identity - Arn string `protobuf:"bytes,3,opt,name=arn,proto3,oneof"` -} - -type Identity_AWSIdentity_ArnPattern struct { - // Regular expression for matching Arn - ArnPattern string `protobuf:"bytes,4,opt,name=arn_pattern,json=arnPattern,proto3,oneof"` -} - -func (*Identity_AWSIdentity_Arn) isIdentity_AWSIdentity_AwsArn() {} - -func (*Identity_AWSIdentity_ArnPattern) isIdentity_AWSIdentity_AwsArn() {} - -type isIdentity_AWSIdentity_AwsUserId interface { - isIdentity_AWSIdentity_AwsUserId() -} - -type Identity_AWSIdentity_UserId struct { - // Exacty match of the UserID field - UserId string `protobuf:"bytes,5,opt,name=user_id,json=userId,proto3,oneof"` -} - -type Identity_AWSIdentity_UserIdPattern struct { - // Regular expression for UserId field - UserIdPattern string `protobuf:"bytes,6,opt,name=user_id_pattern,json=userIdPattern,proto3,oneof"` -} - -func (*Identity_AWSIdentity_UserId) isIdentity_AWSIdentity_AwsUserId() {} - -func (*Identity_AWSIdentity_UserIdPattern) isIdentity_AWSIdentity_AwsUserId() {} - -var File_identity_platform_proto protoreflect.FileDescriptor - -var file_identity_platform_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xba, 0x0b, 0x0a, 0x08, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, - 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4f, 0x0a, 0x0b, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x0a, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x63, 0x12, 0x58, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, - 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, - 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x52, 0x0a, 0x0c, - 0x61, 0x77, 0x73, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x41, 0x57, 0x53, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x77, 0x73, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x1a, 0xad, 0x04, 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, - 0x18, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0e, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x29, - 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1c, 0x0a, 0x08, 0x61, 0x75, 0x64, - 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x08, 0x61, - 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x10, 0x61, 0x75, 0x64, 0x69, 0x65, - 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x02, 0x52, 0x0f, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x6e, 0x12, 0x50, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x07, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x66, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, - 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x1a, 0x39, - 0x0a, 0x0b, 0x43, 0x6c, 0x61, 0x69, 0x6d, 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, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x69, - 0x73, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x73, 0x75, 0x62, 0x42, 0x05, 0x0a, 0x03, 0x61, 0x75, 0x64, - 0x1a, 0x9b, 0x01, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x4b, 0x65, - 0x79, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xc4, - 0x01, 0x0a, 0x0b, 0x41, 0x57, 0x53, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x77, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x12, 0x0a, 0x03, 0x61, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, - 0x61, 0x72, 0x6e, 0x12, 0x21, 0x0a, 0x0b, 0x61, 0x72, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, - 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x72, 0x6e, 0x50, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x19, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x70, 0x61, 0x74, - 0x74, 0x65, 0x72, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0d, 0x75, 0x73, - 0x65, 0x72, 0x49, 0x64, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x61, - 0x77, 0x73, 0x5f, 0x61, 0x72, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x77, 0x73, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x42, 0x0e, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x68, 0x69, 0x70, 0x22, 0x7b, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, - 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x22, 0x2f, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x0c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x5c, 0x0a, 0x0e, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, - 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x41, 0x0a, 0x0d, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2a, 0x4f, 0x0a, - 0x10, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, - 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, - 0x0a, 0x08, 0x43, 0x4f, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, - 0x49, 0x4e, 0x47, 0x45, 0x53, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x41, - 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x45, 0x52, 0x10, 0x03, 0x32, 0xe9, - 0x06, 0x0a, 0x0a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0xd7, 0x01, - 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x7a, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2d, 0x3a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x21, 0x2f, - 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x85, 0x07, 0xc2, 0xf0, 0x8e, 0xfc, - 0x0b, 0x35, 0x0a, 0x2a, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xbc, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x86, 0x07, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, - 0x35, 0x0a, 0x2a, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x80, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, - 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x08, 0x12, 0x06, 0x0a, 0x02, 0x87, 0x07, 0x10, 0x01, 0x12, 0x80, 0x01, 0x0a, 0x06, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x4c, - 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, - 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, - 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x04, 0x12, 0x02, 0x10, 0x01, 0x12, 0xbb, 0x01, 0x0a, - 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, - 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x69, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, - 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x88, 0x07, 0xc2, - 0xf0, 0x8e, 0xfc, 0x0b, 0x35, 0x0a, 0x2a, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, - 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6c, 0x0a, 0x22, 0x64, 0x65, - 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, - 0x42, 0x1a, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, - 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_identity_platform_proto_rawDescOnce sync.Once - file_identity_platform_proto_rawDescData = file_identity_platform_proto_rawDesc -) - -func file_identity_platform_proto_rawDescGZIP() []byte { - file_identity_platform_proto_rawDescOnce.Do(func() { - file_identity_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_identity_platform_proto_rawDescData) - }) - return file_identity_platform_proto_rawDescData -} - -var file_identity_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_identity_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_identity_platform_proto_goTypes = []interface{}{ - (ServicePrincipal)(0), // 0: chainguard.platform.iam.ServicePrincipal - (*Identity)(nil), // 1: chainguard.platform.iam.Identity - (*CreateIdentityRequest)(nil), // 2: chainguard.platform.iam.CreateIdentityRequest - (*DeleteIdentityRequest)(nil), // 3: chainguard.platform.iam.DeleteIdentityRequest - (*IdentityList)(nil), // 4: chainguard.platform.iam.IdentityList - (*IdentityFilter)(nil), // 5: chainguard.platform.iam.IdentityFilter - (*LookupRequest)(nil), // 6: chainguard.platform.iam.LookupRequest - (*Identity_ClaimMatch)(nil), // 7: chainguard.platform.iam.Identity.ClaimMatch - (*Identity_StaticKeys)(nil), // 8: chainguard.platform.iam.Identity.StaticKeys - (*Identity_AWSIdentity)(nil), // 9: chainguard.platform.iam.Identity.AWSIdentity - nil, // 10: chainguard.platform.iam.Identity.ClaimMatch.ClaimsEntry - nil, // 11: chainguard.platform.iam.Identity.ClaimMatch.ClaimPatternsEntry - (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 13: chainguard.platform.common.UIDPFilter - (*emptypb.Empty)(nil), // 14: google.protobuf.Empty -} -var file_identity_platform_proto_depIdxs = []int32{ - 12, // 0: chainguard.platform.iam.Identity.created_at:type_name -> google.protobuf.Timestamp - 12, // 1: chainguard.platform.iam.Identity.updated_at:type_name -> google.protobuf.Timestamp - 7, // 2: chainguard.platform.iam.Identity.claim_match:type_name -> chainguard.platform.iam.Identity.ClaimMatch - 8, // 3: chainguard.platform.iam.Identity.static:type_name -> chainguard.platform.iam.Identity.StaticKeys - 0, // 4: chainguard.platform.iam.Identity.service_principal:type_name -> chainguard.platform.iam.ServicePrincipal - 9, // 5: chainguard.platform.iam.Identity.aws_identity:type_name -> chainguard.platform.iam.Identity.AWSIdentity - 1, // 6: chainguard.platform.iam.CreateIdentityRequest.identity:type_name -> chainguard.platform.iam.Identity - 1, // 7: chainguard.platform.iam.IdentityList.items:type_name -> chainguard.platform.iam.Identity - 13, // 8: chainguard.platform.iam.IdentityFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 10, // 9: chainguard.platform.iam.Identity.ClaimMatch.claims:type_name -> chainguard.platform.iam.Identity.ClaimMatch.ClaimsEntry - 11, // 10: chainguard.platform.iam.Identity.ClaimMatch.claim_patterns:type_name -> chainguard.platform.iam.Identity.ClaimMatch.ClaimPatternsEntry - 12, // 11: chainguard.platform.iam.Identity.StaticKeys.expiration:type_name -> google.protobuf.Timestamp - 2, // 12: chainguard.platform.iam.Identities.Create:input_type -> chainguard.platform.iam.CreateIdentityRequest - 1, // 13: chainguard.platform.iam.Identities.Update:input_type -> chainguard.platform.iam.Identity - 5, // 14: chainguard.platform.iam.Identities.List:input_type -> chainguard.platform.iam.IdentityFilter - 6, // 15: chainguard.platform.iam.Identities.Lookup:input_type -> chainguard.platform.iam.LookupRequest - 3, // 16: chainguard.platform.iam.Identities.Delete:input_type -> chainguard.platform.iam.DeleteIdentityRequest - 1, // 17: chainguard.platform.iam.Identities.Create:output_type -> chainguard.platform.iam.Identity - 1, // 18: chainguard.platform.iam.Identities.Update:output_type -> chainguard.platform.iam.Identity - 4, // 19: chainguard.platform.iam.Identities.List:output_type -> chainguard.platform.iam.IdentityList - 1, // 20: chainguard.platform.iam.Identities.Lookup:output_type -> chainguard.platform.iam.Identity - 14, // 21: chainguard.platform.iam.Identities.Delete:output_type -> google.protobuf.Empty - 17, // [17:22] is the sub-list for method output_type - 12, // [12:17] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name -} - -func init() { file_identity_platform_proto_init() } -func file_identity_platform_proto_init() { - if File_identity_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_identity_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Identity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateIdentityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteIdentityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdentityList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdentityFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LookupRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Identity_ClaimMatch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Identity_StaticKeys); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Identity_AWSIdentity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_identity_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*Identity_ClaimMatch_)(nil), - (*Identity_Static)(nil), - (*Identity_ServicePrincipal)(nil), - (*Identity_AwsIdentity)(nil), - } - file_identity_platform_proto_msgTypes[6].OneofWrappers = []interface{}{ - (*Identity_ClaimMatch_Issuer)(nil), - (*Identity_ClaimMatch_IssuerPattern)(nil), - (*Identity_ClaimMatch_Subject)(nil), - (*Identity_ClaimMatch_SubjectPattern)(nil), - (*Identity_ClaimMatch_Audience)(nil), - (*Identity_ClaimMatch_AudiencePattern)(nil), - } - file_identity_platform_proto_msgTypes[8].OneofWrappers = []interface{}{ - (*Identity_AWSIdentity_Arn)(nil), - (*Identity_AWSIdentity_ArnPattern)(nil), - (*Identity_AWSIdentity_UserId)(nil), - (*Identity_AWSIdentity_UserIdPattern)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_identity_platform_proto_rawDesc, - NumEnums: 1, - NumMessages: 11, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_identity_platform_proto_goTypes, - DependencyIndexes: file_identity_platform_proto_depIdxs, - EnumInfos: file_identity_platform_proto_enumTypes, - MessageInfos: file_identity_platform_proto_msgTypes, - }.Build() - File_identity_platform_proto = out.File - file_identity_platform_proto_rawDesc = nil - file_identity_platform_proto_goTypes = nil - file_identity_platform_proto_depIdxs = nil -} diff --git a/proto/platform/iam/v1/identity.platform.pb.gw.go b/proto/platform/iam/v1/identity.platform.pb.gw.go deleted file mode 100644 index 903a93bf..00000000 --- a/proto/platform/iam/v1/identity.platform.pb.gw.go +++ /dev/null @@ -1,586 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: identity.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Identities_Create_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateIdentityRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Identity); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Identities_Create_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateIdentityRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Identity); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Identities_Update_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Identity - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Identities_Update_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Identity - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Update(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Identities_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Identities_List_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq IdentityFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Identities_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Identities_List_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq IdentityFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Identities_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Identities_Lookup_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Identities_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LookupRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Identities_Lookup_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.Lookup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Identities_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq LookupRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Identities_Lookup_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.Lookup(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Identities_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteIdentityRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Identities_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteIdentityRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterIdentitiesHandlerServer registers the http handlers for service Identities to "mux". -// UnaryRPC :call IdentitiesServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterIdentitiesHandlerFromEndpoint instead. -func RegisterIdentitiesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server IdentitiesServer) error { - - mux.Handle("POST", pattern_Identities_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Create", runtime.WithHTTPPathPattern("/iam/v1/identities/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Identities_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Identities_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Update", runtime.WithHTTPPathPattern("/iam/v1/identities/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Identities_Update_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Identities_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/List", runtime.WithHTTPPathPattern("/iam/v1/identities")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Identities_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Identities_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Lookup", runtime.WithHTTPPathPattern("/iam/v1/identities/lookup")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Identities_Lookup_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Lookup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Identities_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Delete", runtime.WithHTTPPathPattern("/iam/v1/identities/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Identities_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterIdentitiesHandlerFromEndpoint is same as RegisterIdentitiesHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterIdentitiesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterIdentitiesHandler(ctx, mux, conn) -} - -// RegisterIdentitiesHandler registers the http handlers for service Identities to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterIdentitiesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterIdentitiesHandlerClient(ctx, mux, NewIdentitiesClient(conn)) -} - -// RegisterIdentitiesHandlerClient registers the http handlers for service Identities -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "IdentitiesClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "IdentitiesClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "IdentitiesClient" to call the correct interceptors. -func RegisterIdentitiesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client IdentitiesClient) error { - - mux.Handle("POST", pattern_Identities_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Create", runtime.WithHTTPPathPattern("/iam/v1/identities/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Identities_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Identities_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Update", runtime.WithHTTPPathPattern("/iam/v1/identities/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Identities_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Identities_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/List", runtime.WithHTTPPathPattern("/iam/v1/identities")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Identities_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Identities_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Lookup", runtime.WithHTTPPathPattern("/iam/v1/identities/lookup")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Identities_Lookup_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Lookup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Identities_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Delete", runtime.WithHTTPPathPattern("/iam/v1/identities/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Identities_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Identities_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Identities_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identities", "parent_id"}, "")) - - pattern_Identities_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identities", "id"}, "")) - - pattern_Identities_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "identities"}, "")) - - pattern_Identities_Lookup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"iam", "v1", "identities", "lookup"}, "")) - - pattern_Identities_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identities", "id"}, "")) -) - -var ( - forward_Identities_Create_0 = runtime.ForwardResponseMessage - - forward_Identities_Update_0 = runtime.ForwardResponseMessage - - forward_Identities_List_0 = runtime.ForwardResponseMessage - - forward_Identities_Lookup_0 = runtime.ForwardResponseMessage - - forward_Identities_Delete_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/iam/v1/identity.platform.proto b/proto/platform/iam/v1/identity.platform.proto deleted file mode 100644 index 48dfbeef..00000000 --- a/proto/platform/iam/v1/identity.platform.proto +++ /dev/null @@ -1,251 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.iam.v1"; -option java_outer_classname = "PlatformIAMIdentitiesProto"; - -package chainguard.platform.iam; - -import "google/protobuf/timestamp.proto"; -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Identities { - rpc Create(CreateIdentityRequest) returns (Identity) { - option (google.api.http) = { - post: "/iam/v1/identities/{parent_id=**}" - body: "identity" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_IDENTITY_CREATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.identity.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Update(Identity) returns (Identity) { - option (google.api.http) = { - put: "/iam/v1/identities/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_IDENTITY_UPDATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.identity.updated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc List(IdentityFilter) returns (IdentityList) { - option (google.api.http) = { - get: "/iam/v1/identities" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_IDENTITY_LIST] - unscoped: true - } - }; - } - - rpc Lookup(LookupRequest) returns (Identity) { - option (google.api.http) = { - get: "/iam/v1/identities/lookup" - }; - option (chainguard.annotations.iam) = { - enabled: { - unscoped: true - } - }; - } - - rpc Delete(DeleteIdentityRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/iam/v1/identities/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_IDENTITY_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.identity.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } -} - -enum ServicePrincipal { - UNKNOWN = 0; - - COSIGNED = 1; - INGESTER = 2; - CATALOG_SYNCER = 3; -} - -message Identity { - // id is unique identifier of this specific identity. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - // name, human readable name of identity. - string name = 2; - // description, human readable of identity. - string description = 3; - // created_at is the timestamp for when the identity was created. - google.protobuf.Timestamp created_at = 4; - // updated_at is the timestamp for when the identity was last updated. - google.protobuf.Timestamp updated_at = 5; - - // relationship is used to describe how this identity relates to - // identities coming from 3rd party Identity Providers (IdPs) - oneof relationship { - // claim_match checks the third party IdP token's claims against one - // or more configured patterns. - ClaimMatch claim_match = 10; - - // static is equivalent to literal, but instead of discovering the - // IdP's verification keys we verify the identity using pre-registered - // verification keys. This is intended for use with identities from - // providers without an "online" issuer (network accessible to our IdP), - // such as a KinD/minikube cluster. - // NOTE: because this path does not have a mechanism for key rotation - // the identity will expire, with a maximum lifetime of 30d. - StaticKeys static = 11; - - // service_principal is the name of the Chainguard service that is - // allowed to assume this identity. These names correlate with the - // service names used in impersonation with account associations. - ServicePrincipal service_principal = 12; - - // aws_identity matches AWS IAM users and roles to an identity - AWSIdentity aws_identity = 13; - } - - message ClaimMatch { - // Required, matches the `iss` claim. - oneof iss { - // issuer of the OIDC ID tokens issued for this identity. - string issuer = 1; - // issuer_pattern is a regular expression for matching the - // token's issuer claim. - string issuer_pattern = 2; - } - - // Required, matches the `sub` claim. - oneof sub { - // subject of OIDC ID tokens issued for this identity. - string subject = 3; - - // subject_pattern is a regular expression for matching the - // token's subject claim. - string subject_pattern = 4; - } - - // Optional, matches the `aud` claim. - // When unspecified, this defaults to the hostname of the SaaS - // environment's issuer. - oneof aud { - // audience of OIDC ID tokens issued for this identity. - string audience = 5; - - // audience_pattern is a regular expression for matching the - // token's audience claim. - string audience_pattern = 6; - } - - // claims is a mapping from the name of a custom claim - // to a literal matching that claim's value. - map claims = 7; - - // claim_patterns is a mapping from the name of a custom claim - // to a regular expression for matching that claim's value. - map claim_patterns = 8; - } - - message StaticKeys { - // issuer of the OIDC ID tokens issued for this identity. - // Matches the `iss` claim. - string issuer = 1; - - // subject of OIDC ID tokens issued for this identity. - // Matches the `sub` claim. - string subject = 2; - - // issuer_keys is JWKS-formatted public keys for the issuer. - // Required, otherwise use Literal. - string issuer_keys = 4; - - // expiration is the time when the issuer_keys will expire. - // Defaults to / Maximum of 30 days after creation time. - google.protobuf.Timestamp expiration = 5; - } - - message AWSIdentity { - // Required, matches the `Account` field in the GetCallerID AWS IAM - // response - string aws_account = 1; - - // Required, matches the `Arn` field in the GetCallerID AWS IAM response - oneof aws_arn { - // Exact match to Arn of AWS Identity - string arn = 3; - - // Regular expression for matching Arn - string arn_pattern = 4; - } - - // Required, matches the `UserId` field of th GetCallerID AWS IAM response - oneof aws_user_id { - // Exacty match of the UserID field - string user_id = 5; - - // Regular expression for UserId field - string user_id_pattern = 6; - } - } -} - -message CreateIdentityRequest { - // parent_id, The Group UIDP path under which the new Identity resides. - string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; - // Identity to create. - Identity identity = 2; -} - -message DeleteIdentityRequest { - // ID, UIDP of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message IdentityList { - repeated Identity items = 1; -} - -message IdentityFilter { - // uidp filters records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 1; - - // id is unique identifier to look up. - string id = 2; -} - -message LookupRequest { - // issuer is the oidc issuer to look up. - string issuer = 1; - - // subject is the subject to look up. - string subject = 2; -} diff --git a/proto/platform/iam/v1/identity.platform_grpc.pb.go b/proto/platform/iam/v1/identity.platform_grpc.pb.go deleted file mode 100644 index f509c4d3..00000000 --- a/proto/platform/iam/v1/identity.platform_grpc.pb.go +++ /dev/null @@ -1,258 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: identity.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Identities_Create_FullMethodName = "/chainguard.platform.iam.Identities/Create" - Identities_Update_FullMethodName = "/chainguard.platform.iam.Identities/Update" - Identities_List_FullMethodName = "/chainguard.platform.iam.Identities/List" - Identities_Lookup_FullMethodName = "/chainguard.platform.iam.Identities/Lookup" - Identities_Delete_FullMethodName = "/chainguard.platform.iam.Identities/Delete" -) - -// IdentitiesClient is the client API for Identities service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type IdentitiesClient interface { - Create(ctx context.Context, in *CreateIdentityRequest, opts ...grpc.CallOption) (*Identity, error) - Update(ctx context.Context, in *Identity, opts ...grpc.CallOption) (*Identity, error) - List(ctx context.Context, in *IdentityFilter, opts ...grpc.CallOption) (*IdentityList, error) - Lookup(ctx context.Context, in *LookupRequest, opts ...grpc.CallOption) (*Identity, error) - Delete(ctx context.Context, in *DeleteIdentityRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) -} - -type identitiesClient struct { - cc grpc.ClientConnInterface -} - -func NewIdentitiesClient(cc grpc.ClientConnInterface) IdentitiesClient { - return &identitiesClient{cc} -} - -func (c *identitiesClient) Create(ctx context.Context, in *CreateIdentityRequest, opts ...grpc.CallOption) (*Identity, error) { - out := new(Identity) - err := c.cc.Invoke(ctx, Identities_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *identitiesClient) Update(ctx context.Context, in *Identity, opts ...grpc.CallOption) (*Identity, error) { - out := new(Identity) - err := c.cc.Invoke(ctx, Identities_Update_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *identitiesClient) List(ctx context.Context, in *IdentityFilter, opts ...grpc.CallOption) (*IdentityList, error) { - out := new(IdentityList) - err := c.cc.Invoke(ctx, Identities_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *identitiesClient) Lookup(ctx context.Context, in *LookupRequest, opts ...grpc.CallOption) (*Identity, error) { - out := new(Identity) - err := c.cc.Invoke(ctx, Identities_Lookup_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *identitiesClient) Delete(ctx context.Context, in *DeleteIdentityRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, Identities_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// IdentitiesServer is the server API for Identities service. -// All implementations must embed UnimplementedIdentitiesServer -// for forward compatibility -type IdentitiesServer interface { - Create(context.Context, *CreateIdentityRequest) (*Identity, error) - Update(context.Context, *Identity) (*Identity, error) - List(context.Context, *IdentityFilter) (*IdentityList, error) - Lookup(context.Context, *LookupRequest) (*Identity, error) - Delete(context.Context, *DeleteIdentityRequest) (*emptypb.Empty, error) - mustEmbedUnimplementedIdentitiesServer() -} - -// UnimplementedIdentitiesServer must be embedded to have forward compatible implementations. -type UnimplementedIdentitiesServer struct { -} - -func (UnimplementedIdentitiesServer) Create(context.Context, *CreateIdentityRequest) (*Identity, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedIdentitiesServer) Update(context.Context, *Identity) (*Identity, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} -func (UnimplementedIdentitiesServer) List(context.Context, *IdentityFilter) (*IdentityList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedIdentitiesServer) Lookup(context.Context, *LookupRequest) (*Identity, error) { - return nil, status.Errorf(codes.Unimplemented, "method Lookup not implemented") -} -func (UnimplementedIdentitiesServer) Delete(context.Context, *DeleteIdentityRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedIdentitiesServer) mustEmbedUnimplementedIdentitiesServer() {} - -// UnsafeIdentitiesServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to IdentitiesServer will -// result in compilation errors. -type UnsafeIdentitiesServer interface { - mustEmbedUnimplementedIdentitiesServer() -} - -func RegisterIdentitiesServer(s grpc.ServiceRegistrar, srv IdentitiesServer) { - s.RegisterService(&Identities_ServiceDesc, srv) -} - -func _Identities_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateIdentityRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentitiesServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Identities_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentitiesServer).Create(ctx, req.(*CreateIdentityRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Identities_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Identity) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentitiesServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Identities_Update_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentitiesServer).Update(ctx, req.(*Identity)) - } - return interceptor(ctx, in, info, handler) -} - -func _Identities_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(IdentityFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentitiesServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Identities_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentitiesServer).List(ctx, req.(*IdentityFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _Identities_Lookup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(LookupRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentitiesServer).Lookup(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Identities_Lookup_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentitiesServer).Lookup(ctx, req.(*LookupRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Identities_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteIdentityRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentitiesServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Identities_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentitiesServer).Delete(ctx, req.(*DeleteIdentityRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// Identities_ServiceDesc is the grpc.ServiceDesc for Identities service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Identities_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.iam.Identities", - HandlerType: (*IdentitiesServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _Identities_Create_Handler, - }, - { - MethodName: "Update", - Handler: _Identities_Update_Handler, - }, - { - MethodName: "List", - Handler: _Identities_List_Handler, - }, - { - MethodName: "Lookup", - Handler: _Identities_Lookup_Handler, - }, - { - MethodName: "Delete", - Handler: _Identities_Delete_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "identity.platform.proto", -} diff --git a/proto/platform/iam/v1/identity_providers.platform.event.go b/proto/platform/iam/v1/identity_providers.platform.event.go deleted file mode 100644 index 052684da..00000000 --- a/proto/platform/iam/v1/identity_providers.platform.event.go +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "chainguard.dev/sdk/uidp" -) - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *IdentityProvider) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *IdentityProvider) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.CloudEventsRedact. -func (x *IdentityProvider) CloudEventsRedact() interface{} { - idp := &IdentityProvider{ - Id: x.Id, - Name: x.Name, - Description: x.Description, - DefaultRole: x.DefaultRole, - } - - switch cfg := x.Configuration.(type) { - case *IdentityProvider_Oidc: - // redact OIDC configuration - idp.Configuration = &IdentityProvider_Oidc{ - Oidc: &IdentityProvider_OIDC{ - Issuer: cfg.Oidc.Issuer, - ClientId: cfg.Oidc.ClientId, - // ClientSecret is redacted. - AdditionalScopes: cfg.Oidc.AdditionalScopes, - }, - } - default: - // no redaction - idp.Configuration = x.Configuration - } - - return idp -} - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *DeleteIdentityProviderRequest) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *DeleteIdentityProviderRequest) CloudEventsSubject() string { - return x.GetId() -} diff --git a/proto/platform/iam/v1/identity_providers.platform.pb.go b/proto/platform/iam/v1/identity_providers.platform.pb.go deleted file mode 100644 index abed021a..00000000 --- a/proto/platform/iam/v1/identity_providers.platform.pb.go +++ /dev/null @@ -1,693 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: identity_providers.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type IdentityProvider struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is unique identifier of this specific identity provider - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // default_role is the UIDP of an optional default role - // to grant users of this identity provider. - DefaultRole string `protobuf:"bytes,4,opt,name=default_role,json=defaultRole,proto3" json:"default_role,omitempty"` - // Types that are assignable to Configuration: - // - // *IdentityProvider_Oidc - Configuration isIdentityProvider_Configuration `protobuf_oneof:"configuration"` -} - -func (x *IdentityProvider) Reset() { - *x = IdentityProvider{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_providers_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IdentityProvider) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IdentityProvider) ProtoMessage() {} - -func (x *IdentityProvider) ProtoReflect() protoreflect.Message { - mi := &file_identity_providers_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IdentityProvider.ProtoReflect.Descriptor instead. -func (*IdentityProvider) Descriptor() ([]byte, []int) { - return file_identity_providers_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *IdentityProvider) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *IdentityProvider) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *IdentityProvider) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *IdentityProvider) GetDefaultRole() string { - if x != nil { - return x.DefaultRole - } - return "" -} - -func (m *IdentityProvider) GetConfiguration() isIdentityProvider_Configuration { - if m != nil { - return m.Configuration - } - return nil -} - -func (x *IdentityProvider) GetOidc() *IdentityProvider_OIDC { - if x, ok := x.GetConfiguration().(*IdentityProvider_Oidc); ok { - return x.Oidc - } - return nil -} - -type isIdentityProvider_Configuration interface { - isIdentityProvider_Configuration() -} - -type IdentityProvider_Oidc struct { - Oidc *IdentityProvider_OIDC `protobuf:"bytes,20,opt,name=oidc,proto3,oneof"` -} - -func (*IdentityProvider_Oidc) isIdentityProvider_Configuration() {} - -type CreateIdentityProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // parent_id is the exact UIDP of the IAM group to nest this identity provider under - ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - IdentityProvider *IdentityProvider `protobuf:"bytes,2,opt,name=identity_provider,json=identityProvider,proto3" json:"identity_provider,omitempty"` -} - -func (x *CreateIdentityProviderRequest) Reset() { - *x = CreateIdentityProviderRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_providers_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateIdentityProviderRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateIdentityProviderRequest) ProtoMessage() {} - -func (x *CreateIdentityProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_identity_providers_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateIdentityProviderRequest.ProtoReflect.Descriptor instead. -func (*CreateIdentityProviderRequest) Descriptor() ([]byte, []int) { - return file_identity_providers_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *CreateIdentityProviderRequest) GetParentId() string { - if x != nil { - return x.ParentId - } - return "" -} - -func (x *CreateIdentityProviderRequest) GetIdentityProvider() *IdentityProvider { - if x != nil { - return x.IdentityProvider - } - return nil -} - -type DeleteIdentityProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the IdP - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteIdentityProviderRequest) Reset() { - *x = DeleteIdentityProviderRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_providers_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteIdentityProviderRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteIdentityProviderRequest) ProtoMessage() {} - -func (x *DeleteIdentityProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_identity_providers_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteIdentityProviderRequest.ProtoReflect.Descriptor instead. -func (*DeleteIdentityProviderRequest) Descriptor() ([]byte, []int) { - return file_identity_providers_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *DeleteIdentityProviderRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type IdentityProviderFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Exact match on identity provider UIDP - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Exact match on identity provider name - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // uidp filers records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,3,opt,name=uidp,proto3" json:"uidp,omitempty"` -} - -func (x *IdentityProviderFilter) Reset() { - *x = IdentityProviderFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_providers_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IdentityProviderFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IdentityProviderFilter) ProtoMessage() {} - -func (x *IdentityProviderFilter) ProtoReflect() protoreflect.Message { - mi := &file_identity_providers_platform_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 IdentityProviderFilter.ProtoReflect.Descriptor instead. -func (*IdentityProviderFilter) Descriptor() ([]byte, []int) { - return file_identity_providers_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *IdentityProviderFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *IdentityProviderFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *IdentityProviderFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -type IdentityProviderList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*IdentityProvider `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *IdentityProviderList) Reset() { - *x = IdentityProviderList{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_providers_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IdentityProviderList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IdentityProviderList) ProtoMessage() {} - -func (x *IdentityProviderList) ProtoReflect() protoreflect.Message { - mi := &file_identity_providers_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IdentityProviderList.ProtoReflect.Descriptor instead. -func (*IdentityProviderList) Descriptor() ([]byte, []int) { - return file_identity_providers_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *IdentityProviderList) GetItems() []*IdentityProvider { - if x != nil { - return x.Items - } - return nil -} - -type IdentityProvider_OIDC struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Issuer URL (e.g https://accounts.google.com) - Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` - ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` - ClientSecret string `protobuf:"bytes,3,opt,name=client_secret,json=clientSecret,proto3" json:"client_secret,omitempty"` - // Additional scopes to request for ID tokens - AdditionalScopes []string `protobuf:"bytes,4,rep,name=additional_scopes,json=additionalScopes,proto3" json:"additional_scopes,omitempty"` -} - -func (x *IdentityProvider_OIDC) Reset() { - *x = IdentityProvider_OIDC{} - if protoimpl.UnsafeEnabled { - mi := &file_identity_providers_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IdentityProvider_OIDC) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IdentityProvider_OIDC) ProtoMessage() {} - -func (x *IdentityProvider_OIDC) ProtoReflect() protoreflect.Message { - mi := &file_identity_providers_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IdentityProvider_OIDC.ProtoReflect.Descriptor instead. -func (*IdentityProvider_OIDC) Descriptor() ([]byte, []int) { - return file_identity_providers_platform_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *IdentityProvider_OIDC) GetIssuer() string { - if x != nil { - return x.Issuer - } - return "" -} - -func (x *IdentityProvider_OIDC) GetClientId() string { - if x != nil { - return x.ClientId - } - return "" -} - -func (x *IdentityProvider_OIDC) GetClientSecret() string { - if x != nil { - return x.ClientSecret - } - return "" -} - -func (x *IdentityProvider_OIDC) GetAdditionalScopes() []string { - if x != nil { - return x.AdditionalScopes - } - return nil -} - -var File_identity_providers_platform_proto protoreflect.FileDescriptor - -var file_identity_providers_platform_proto_rawDesc = []byte{ - 0x0a, 0x21, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1c, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, - 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0xea, 0x02, 0x0a, 0x10, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, - 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x04, 0x6f, 0x69, 0x64, 0x63, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x48, 0x00, 0x52, 0x04, 0x6f, 0x69, 0x64, 0x63, 0x1a, 0x8d, 0x01, - 0x0a, 0x04, 0x4f, 0x49, 0x44, 0x43, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x1b, - 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x42, 0x0f, 0x0a, - 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9c, - 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x56, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x10, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x37, 0x0a, - 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, - 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x78, 0x0a, 0x16, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, - 0x22, 0x57, 0x0a, 0x14, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, - 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x32, 0xed, 0x06, 0x0a, 0x11, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, - 0x84, 0x02, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x36, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x96, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x3a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x28, 0x2f, 0x69, 0x61, 0x6d, 0x2f, - 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0x95, 0x0a, 0x91, - 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdf, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x1a, 0x29, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, - 0x01, 0x2a, 0x1a, 0x21, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0x96, - 0x0a, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, - 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x97, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x1a, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x69, 0x61, 0x6d, 0x2f, - 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x97, 0x0a, - 0x10, 0x01, 0x12, 0xd4, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x36, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x7a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x2a, 0x21, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0x98, 0x0a, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, - 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x72, 0x0a, 0x22, 0x64, 0x65, 0x76, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, - 0x20, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_identity_providers_platform_proto_rawDescOnce sync.Once - file_identity_providers_platform_proto_rawDescData = file_identity_providers_platform_proto_rawDesc -) - -func file_identity_providers_platform_proto_rawDescGZIP() []byte { - file_identity_providers_platform_proto_rawDescOnce.Do(func() { - file_identity_providers_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_identity_providers_platform_proto_rawDescData) - }) - return file_identity_providers_platform_proto_rawDescData -} - -var file_identity_providers_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_identity_providers_platform_proto_goTypes = []interface{}{ - (*IdentityProvider)(nil), // 0: chainguard.platform.iam.IdentityProvider - (*CreateIdentityProviderRequest)(nil), // 1: chainguard.platform.iam.CreateIdentityProviderRequest - (*DeleteIdentityProviderRequest)(nil), // 2: chainguard.platform.iam.DeleteIdentityProviderRequest - (*IdentityProviderFilter)(nil), // 3: chainguard.platform.iam.IdentityProviderFilter - (*IdentityProviderList)(nil), // 4: chainguard.platform.iam.IdentityProviderList - (*IdentityProvider_OIDC)(nil), // 5: chainguard.platform.iam.IdentityProvider.OIDC - (*v1.UIDPFilter)(nil), // 6: chainguard.platform.common.UIDPFilter - (*emptypb.Empty)(nil), // 7: google.protobuf.Empty -} -var file_identity_providers_platform_proto_depIdxs = []int32{ - 5, // 0: chainguard.platform.iam.IdentityProvider.oidc:type_name -> chainguard.platform.iam.IdentityProvider.OIDC - 0, // 1: chainguard.platform.iam.CreateIdentityProviderRequest.identity_provider:type_name -> chainguard.platform.iam.IdentityProvider - 6, // 2: chainguard.platform.iam.IdentityProviderFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 0, // 3: chainguard.platform.iam.IdentityProviderList.items:type_name -> chainguard.platform.iam.IdentityProvider - 1, // 4: chainguard.platform.iam.IdentityProviders.Create:input_type -> chainguard.platform.iam.CreateIdentityProviderRequest - 0, // 5: chainguard.platform.iam.IdentityProviders.Update:input_type -> chainguard.platform.iam.IdentityProvider - 3, // 6: chainguard.platform.iam.IdentityProviders.List:input_type -> chainguard.platform.iam.IdentityProviderFilter - 2, // 7: chainguard.platform.iam.IdentityProviders.Delete:input_type -> chainguard.platform.iam.DeleteIdentityProviderRequest - 0, // 8: chainguard.platform.iam.IdentityProviders.Create:output_type -> chainguard.platform.iam.IdentityProvider - 0, // 9: chainguard.platform.iam.IdentityProviders.Update:output_type -> chainguard.platform.iam.IdentityProvider - 4, // 10: chainguard.platform.iam.IdentityProviders.List:output_type -> chainguard.platform.iam.IdentityProviderList - 7, // 11: chainguard.platform.iam.IdentityProviders.Delete:output_type -> google.protobuf.Empty - 8, // [8:12] is the sub-list for method output_type - 4, // [4:8] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_identity_providers_platform_proto_init() } -func file_identity_providers_platform_proto_init() { - if File_identity_providers_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_identity_providers_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdentityProvider); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_providers_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateIdentityProviderRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_providers_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteIdentityProviderRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_providers_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdentityProviderFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_providers_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdentityProviderList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_identity_providers_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IdentityProvider_OIDC); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_identity_providers_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*IdentityProvider_Oidc)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_identity_providers_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 6, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_identity_providers_platform_proto_goTypes, - DependencyIndexes: file_identity_providers_platform_proto_depIdxs, - MessageInfos: file_identity_providers_platform_proto_msgTypes, - }.Build() - File_identity_providers_platform_proto = out.File - file_identity_providers_platform_proto_rawDesc = nil - file_identity_providers_platform_proto_goTypes = nil - file_identity_providers_platform_proto_depIdxs = nil -} diff --git a/proto/platform/iam/v1/identity_providers.platform.pb.gw.go b/proto/platform/iam/v1/identity_providers.platform.pb.gw.go deleted file mode 100644 index fdfb2ada..00000000 --- a/proto/platform/iam/v1/identity_providers.platform.pb.gw.go +++ /dev/null @@ -1,501 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: identity_providers.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_IdentityProviders_Create_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProvidersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateIdentityProviderRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.IdentityProvider); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_IdentityProviders_Create_0(ctx context.Context, marshaler runtime.Marshaler, server IdentityProvidersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateIdentityProviderRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.IdentityProvider); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -func request_IdentityProviders_Update_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProvidersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq IdentityProvider - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_IdentityProviders_Update_0(ctx context.Context, marshaler runtime.Marshaler, server IdentityProvidersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq IdentityProvider - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Update(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_IdentityProviders_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_IdentityProviders_List_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProvidersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq IdentityProviderFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_IdentityProviders_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_IdentityProviders_List_0(ctx context.Context, marshaler runtime.Marshaler, server IdentityProvidersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq IdentityProviderFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_IdentityProviders_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_IdentityProviders_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProvidersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteIdentityProviderRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_IdentityProviders_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server IdentityProvidersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteIdentityProviderRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterIdentityProvidersHandlerServer registers the http handlers for service IdentityProviders to "mux". -// UnaryRPC :call IdentityProvidersServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterIdentityProvidersHandlerFromEndpoint instead. -func RegisterIdentityProvidersHandlerServer(ctx context.Context, mux *runtime.ServeMux, server IdentityProvidersServer) error { - - mux.Handle("POST", pattern_IdentityProviders_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Create", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_IdentityProviders_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_IdentityProviders_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_IdentityProviders_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Update", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_IdentityProviders_Update_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_IdentityProviders_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_IdentityProviders_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/List", runtime.WithHTTPPathPattern("/iam/v1/identityProviders")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_IdentityProviders_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_IdentityProviders_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_IdentityProviders_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Delete", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_IdentityProviders_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_IdentityProviders_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterIdentityProvidersHandlerFromEndpoint is same as RegisterIdentityProvidersHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterIdentityProvidersHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterIdentityProvidersHandler(ctx, mux, conn) -} - -// RegisterIdentityProvidersHandler registers the http handlers for service IdentityProviders to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterIdentityProvidersHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterIdentityProvidersHandlerClient(ctx, mux, NewIdentityProvidersClient(conn)) -} - -// RegisterIdentityProvidersHandlerClient registers the http handlers for service IdentityProviders -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "IdentityProvidersClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "IdentityProvidersClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "IdentityProvidersClient" to call the correct interceptors. -func RegisterIdentityProvidersHandlerClient(ctx context.Context, mux *runtime.ServeMux, client IdentityProvidersClient) error { - - mux.Handle("POST", pattern_IdentityProviders_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Create", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_IdentityProviders_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_IdentityProviders_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_IdentityProviders_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Update", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_IdentityProviders_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_IdentityProviders_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_IdentityProviders_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/List", runtime.WithHTTPPathPattern("/iam/v1/identityProviders")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_IdentityProviders_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_IdentityProviders_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_IdentityProviders_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Delete", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_IdentityProviders_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_IdentityProviders_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_IdentityProviders_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identityProviders", "parent_id"}, "")) - - pattern_IdentityProviders_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identityProviders", "id"}, "")) - - pattern_IdentityProviders_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "identityProviders"}, "")) - - pattern_IdentityProviders_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identityProviders", "id"}, "")) -) - -var ( - forward_IdentityProviders_Create_0 = runtime.ForwardResponseMessage - - forward_IdentityProviders_Update_0 = runtime.ForwardResponseMessage - - forward_IdentityProviders_List_0 = runtime.ForwardResponseMessage - - forward_IdentityProviders_Delete_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/iam/v1/identity_providers.platform.proto b/proto/platform/iam/v1/identity_providers.platform.proto deleted file mode 100644 index d74e65a7..00000000 --- a/proto/platform/iam/v1/identity_providers.platform.proto +++ /dev/null @@ -1,149 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.iam.v1"; -option java_outer_classname = "PlatformIAMIdentityProviderProto"; - -package chainguard.platform.iam; - -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service IdentityProviders { - rpc Create(CreateIdentityProviderRequest) returns (IdentityProvider) { - option (google.api.http) = { - post: "/iam/v1/identityProviders/{parent_id=**}" - body: "identity_provider" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [ - CAP_IAM_IDENTITY_PROVIDERS_CREATE, - // Creating an IdentityProvider provides to option of choosing - // a default role, which makes it effectively a RoleBinding - // promise, so check that the caller has permission to - // create RoleBindings as well. - CAP_IAM_ROLE_BINDINGS_CREATE - ] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.identity_providers.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Update(IdentityProvider) returns (IdentityProvider) { - option (google.api.http) = { - put: "/iam/v1/identityProviders/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [ - CAP_IAM_IDENTITY_PROVIDERS_UPDATE, - // Updating an IdentityProvider provides to option of choosing - // a default role, which makes it effectively a RoleBinding - // promise, so check that the caller has permission to - // create RoleBindings as well. - CAP_IAM_ROLE_BINDINGS_CREATE - ] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.identity_providers.updated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc List(IdentityProviderFilter) returns (IdentityProviderList) { - option (google.api.http) = { - get: "/iam/v1/identityProviders" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_IDENTITY_PROVIDERS_LIST] - unscoped: true - } - }; - } - - rpc Delete(DeleteIdentityProviderRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/iam/v1/identityProviders/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_IDENTITY_PROVIDERS_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.identity_providers.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - -} - -message IdentityProvider { - // id is unique identifier of this specific identity provider - string id = 1 [(chainguard.annotations.iam_scope) = true]; - - string name = 2; - string description = 3; - - // default_role is the UIDP of an optional default role - // to grant users of this identity provider. - string default_role = 4; - - oneof configuration { - OIDC oidc = 20; - - // TODO: SAML, LDAP etc; - } - - message OIDC { - // Issuer URL (e.g https://accounts.google.com) - string issuer = 1; - - string client_id = 2; - string client_secret = 3; - - // Additional scopes to request for ID tokens - repeated string additional_scopes = 4; - } -} - -message CreateIdentityProviderRequest { - // parent_id is the exact UIDP of the IAM group to nest this identity provider under - string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; - - IdentityProvider identity_provider = 2; -} - -message DeleteIdentityProviderRequest { - // id is the exact UIDP of the IdP - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message IdentityProviderFilter { - // Exact match on identity provider UIDP - string id = 1; - - // Exact match on identity provider name - string name = 2; - - // uidp filers records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 3; -} - -message IdentityProviderList { - repeated IdentityProvider items = 1; -} diff --git a/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go b/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go deleted file mode 100644 index 60b20f6c..00000000 --- a/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go +++ /dev/null @@ -1,221 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: identity_providers.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - IdentityProviders_Create_FullMethodName = "/chainguard.platform.iam.IdentityProviders/Create" - IdentityProviders_Update_FullMethodName = "/chainguard.platform.iam.IdentityProviders/Update" - IdentityProviders_List_FullMethodName = "/chainguard.platform.iam.IdentityProviders/List" - IdentityProviders_Delete_FullMethodName = "/chainguard.platform.iam.IdentityProviders/Delete" -) - -// IdentityProvidersClient is the client API for IdentityProviders service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type IdentityProvidersClient interface { - Create(ctx context.Context, in *CreateIdentityProviderRequest, opts ...grpc.CallOption) (*IdentityProvider, error) - Update(ctx context.Context, in *IdentityProvider, opts ...grpc.CallOption) (*IdentityProvider, error) - List(ctx context.Context, in *IdentityProviderFilter, opts ...grpc.CallOption) (*IdentityProviderList, error) - Delete(ctx context.Context, in *DeleteIdentityProviderRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) -} - -type identityProvidersClient struct { - cc grpc.ClientConnInterface -} - -func NewIdentityProvidersClient(cc grpc.ClientConnInterface) IdentityProvidersClient { - return &identityProvidersClient{cc} -} - -func (c *identityProvidersClient) Create(ctx context.Context, in *CreateIdentityProviderRequest, opts ...grpc.CallOption) (*IdentityProvider, error) { - out := new(IdentityProvider) - err := c.cc.Invoke(ctx, IdentityProviders_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *identityProvidersClient) Update(ctx context.Context, in *IdentityProvider, opts ...grpc.CallOption) (*IdentityProvider, error) { - out := new(IdentityProvider) - err := c.cc.Invoke(ctx, IdentityProviders_Update_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *identityProvidersClient) List(ctx context.Context, in *IdentityProviderFilter, opts ...grpc.CallOption) (*IdentityProviderList, error) { - out := new(IdentityProviderList) - err := c.cc.Invoke(ctx, IdentityProviders_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *identityProvidersClient) Delete(ctx context.Context, in *DeleteIdentityProviderRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, IdentityProviders_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// IdentityProvidersServer is the server API for IdentityProviders service. -// All implementations must embed UnimplementedIdentityProvidersServer -// for forward compatibility -type IdentityProvidersServer interface { - Create(context.Context, *CreateIdentityProviderRequest) (*IdentityProvider, error) - Update(context.Context, *IdentityProvider) (*IdentityProvider, error) - List(context.Context, *IdentityProviderFilter) (*IdentityProviderList, error) - Delete(context.Context, *DeleteIdentityProviderRequest) (*emptypb.Empty, error) - mustEmbedUnimplementedIdentityProvidersServer() -} - -// UnimplementedIdentityProvidersServer must be embedded to have forward compatible implementations. -type UnimplementedIdentityProvidersServer struct { -} - -func (UnimplementedIdentityProvidersServer) Create(context.Context, *CreateIdentityProviderRequest) (*IdentityProvider, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedIdentityProvidersServer) Update(context.Context, *IdentityProvider) (*IdentityProvider, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} -func (UnimplementedIdentityProvidersServer) List(context.Context, *IdentityProviderFilter) (*IdentityProviderList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedIdentityProvidersServer) Delete(context.Context, *DeleteIdentityProviderRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedIdentityProvidersServer) mustEmbedUnimplementedIdentityProvidersServer() {} - -// UnsafeIdentityProvidersServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to IdentityProvidersServer will -// result in compilation errors. -type UnsafeIdentityProvidersServer interface { - mustEmbedUnimplementedIdentityProvidersServer() -} - -func RegisterIdentityProvidersServer(s grpc.ServiceRegistrar, srv IdentityProvidersServer) { - s.RegisterService(&IdentityProviders_ServiceDesc, srv) -} - -func _IdentityProviders_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateIdentityProviderRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentityProvidersServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: IdentityProviders_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentityProvidersServer).Create(ctx, req.(*CreateIdentityProviderRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _IdentityProviders_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(IdentityProvider) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentityProvidersServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: IdentityProviders_Update_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentityProvidersServer).Update(ctx, req.(*IdentityProvider)) - } - return interceptor(ctx, in, info, handler) -} - -func _IdentityProviders_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(IdentityProviderFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentityProvidersServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: IdentityProviders_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentityProvidersServer).List(ctx, req.(*IdentityProviderFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _IdentityProviders_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteIdentityProviderRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(IdentityProvidersServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: IdentityProviders_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(IdentityProvidersServer).Delete(ctx, req.(*DeleteIdentityProviderRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// IdentityProviders_ServiceDesc is the grpc.ServiceDesc for IdentityProviders service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var IdentityProviders_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.iam.IdentityProviders", - HandlerType: (*IdentityProvidersServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _IdentityProviders_Create_Handler, - }, - { - MethodName: "Update", - Handler: _IdentityProviders_Update_Handler, - }, - { - MethodName: "List", - Handler: _IdentityProviders_List_Handler, - }, - { - MethodName: "Delete", - Handler: _IdentityProviders_Delete_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "identity_providers.platform.proto", -} diff --git a/proto/platform/iam/v1/role.platform.event.go b/proto/platform/iam/v1/role.platform.event.go deleted file mode 100644 index 489e240f..00000000 --- a/proto/platform/iam/v1/role.platform.event.go +++ /dev/null @@ -1,23 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import "chainguard.dev/sdk/uidp" - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *Role) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *Role) CloudEventsSubject() string { - return x.GetId() -} diff --git a/proto/platform/iam/v1/role.platform.pb.go b/proto/platform/iam/v1/role.platform.pb.go deleted file mode 100644 index 816400c0..00000000 --- a/proto/platform/iam/v1/role.platform.pb.go +++ /dev/null @@ -1,540 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: role.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Role struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The Group path under which this Role resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name, human readable name of group. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // description, human readable description of group. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // capabilities, human readable list of capabilities supported by the group. - Capabilities []string `protobuf:"bytes,4,rep,name=capabilities,proto3" json:"capabilities,omitempty"` -} - -func (x *Role) Reset() { - *x = Role{} - if protoimpl.UnsafeEnabled { - mi := &file_role_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Role) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Role) ProtoMessage() {} - -func (x *Role) ProtoReflect() protoreflect.Message { - mi := &file_role_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Role.ProtoReflect.Descriptor instead. -func (*Role) Descriptor() ([]byte, []int) { - return file_role_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Role) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Role) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Role) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Role) GetCapabilities() []string { - if x != nil { - return x.Capabilities - } - return nil -} - -type RoleList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Role `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *RoleList) Reset() { - *x = RoleList{} - if protoimpl.UnsafeEnabled { - mi := &file_role_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoleList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoleList) ProtoMessage() {} - -func (x *RoleList) ProtoReflect() protoreflect.Message { - mi := &file_role_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RoleList.ProtoReflect.Descriptor instead. -func (*RoleList) Descriptor() ([]byte, []int) { - return file_role_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *RoleList) GetItems() []*Role { - if x != nil { - return x.Items - } - return nil -} - -type RoleFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name is the exact name of the record - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // parent is the exact UIDP of the parent, or / for root - Parent string `protobuf:"bytes,3,opt,name=parent,proto3" json:"parent,omitempty"` - // uidp filters records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,4,opt,name=uidp,proto3" json:"uidp,omitempty"` -} - -func (x *RoleFilter) Reset() { - *x = RoleFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_role_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoleFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoleFilter) ProtoMessage() {} - -func (x *RoleFilter) ProtoReflect() protoreflect.Message { - mi := &file_role_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RoleFilter.ProtoReflect.Descriptor instead. -func (*RoleFilter) Descriptor() ([]byte, []int) { - return file_role_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *RoleFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RoleFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *RoleFilter) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *RoleFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -type CreateRoleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // parent_id, The Group UIDP path under which the new Role resides. - ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - // Role to create. - Role *Role `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` -} - -func (x *CreateRoleRequest) Reset() { - *x = CreateRoleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_role_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateRoleRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateRoleRequest) ProtoMessage() {} - -func (x *CreateRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_role_platform_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 CreateRoleRequest.ProtoReflect.Descriptor instead. -func (*CreateRoleRequest) Descriptor() ([]byte, []int) { - return file_role_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *CreateRoleRequest) GetParentId() string { - if x != nil { - return x.ParentId - } - return "" -} - -func (x *CreateRoleRequest) GetRole() *Role { - if x != nil { - return x.Role - } - return nil -} - -type DeleteRoleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteRoleRequest) Reset() { - *x = DeleteRoleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_role_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteRoleRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteRoleRequest) ProtoMessage() {} - -func (x *DeleteRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_role_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteRoleRequest.ProtoReflect.Descriptor instead. -func (*DeleteRoleRequest) Descriptor() ([]byte, []int) { - return file_role_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *DeleteRoleRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -var File_role_platform_proto protoreflect.FileDescriptor - -var file_role_platform_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1c, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, - 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x78, 0x0a, 0x04, 0x52, 0x6f, 0x6c, - 0x65, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, - 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x22, 0x3f, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x33, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x52, 0x6f, 0x6c, 0x65, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, - 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x22, 0x6b, 0x0a, 0x11, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, - 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x2b, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, - 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, 0xf9, 0x03, 0x0a, 0x05, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, - 0x8b, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x22, 0x1c, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, - 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xad, 0x02, 0x12, 0x74, 0x0a, - 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, - 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, - 0x1a, 0x15, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, - 0x02, 0xae, 0x02, 0x12, 0x73, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, - 0x12, 0x06, 0x0a, 0x02, 0xaf, 0x02, 0x10, 0x01, 0x12, 0x77, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, - 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xb0, - 0x02, 0x42, 0x66, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x14, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x49, 0x41, 0x4d, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, - 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_role_platform_proto_rawDescOnce sync.Once - file_role_platform_proto_rawDescData = file_role_platform_proto_rawDesc -) - -func file_role_platform_proto_rawDescGZIP() []byte { - file_role_platform_proto_rawDescOnce.Do(func() { - file_role_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_role_platform_proto_rawDescData) - }) - return file_role_platform_proto_rawDescData -} - -var file_role_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_role_platform_proto_goTypes = []interface{}{ - (*Role)(nil), // 0: chainguard.platform.iam.Role - (*RoleList)(nil), // 1: chainguard.platform.iam.RoleList - (*RoleFilter)(nil), // 2: chainguard.platform.iam.RoleFilter - (*CreateRoleRequest)(nil), // 3: chainguard.platform.iam.CreateRoleRequest - (*DeleteRoleRequest)(nil), // 4: chainguard.platform.iam.DeleteRoleRequest - (*v1.UIDPFilter)(nil), // 5: chainguard.platform.common.UIDPFilter - (*emptypb.Empty)(nil), // 6: google.protobuf.Empty -} -var file_role_platform_proto_depIdxs = []int32{ - 0, // 0: chainguard.platform.iam.RoleList.items:type_name -> chainguard.platform.iam.Role - 5, // 1: chainguard.platform.iam.RoleFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 0, // 2: chainguard.platform.iam.CreateRoleRequest.role:type_name -> chainguard.platform.iam.Role - 3, // 3: chainguard.platform.iam.Roles.Create:input_type -> chainguard.platform.iam.CreateRoleRequest - 0, // 4: chainguard.platform.iam.Roles.Update:input_type -> chainguard.platform.iam.Role - 2, // 5: chainguard.platform.iam.Roles.List:input_type -> chainguard.platform.iam.RoleFilter - 4, // 6: chainguard.platform.iam.Roles.Delete:input_type -> chainguard.platform.iam.DeleteRoleRequest - 0, // 7: chainguard.platform.iam.Roles.Create:output_type -> chainguard.platform.iam.Role - 0, // 8: chainguard.platform.iam.Roles.Update:output_type -> chainguard.platform.iam.Role - 1, // 9: chainguard.platform.iam.Roles.List:output_type -> chainguard.platform.iam.RoleList - 6, // 10: chainguard.platform.iam.Roles.Delete:output_type -> google.protobuf.Empty - 7, // [7:11] is the sub-list for method output_type - 3, // [3:7] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_role_platform_proto_init() } -func file_role_platform_proto_init() { - if File_role_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_role_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Role); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_role_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoleList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_role_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoleFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_role_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRoleRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_role_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRoleRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_role_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 5, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_role_platform_proto_goTypes, - DependencyIndexes: file_role_platform_proto_depIdxs, - MessageInfos: file_role_platform_proto_msgTypes, - }.Build() - File_role_platform_proto = out.File - file_role_platform_proto_rawDesc = nil - file_role_platform_proto_goTypes = nil - file_role_platform_proto_depIdxs = nil -} diff --git a/proto/platform/iam/v1/role.platform.pb.gw.go b/proto/platform/iam/v1/role.platform.pb.gw.go deleted file mode 100644 index dcc83137..00000000 --- a/proto/platform/iam/v1/role.platform.pb.gw.go +++ /dev/null @@ -1,501 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: role.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Roles_Create_0(ctx context.Context, marshaler runtime.Marshaler, client RolesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateRoleRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Role); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Roles_Create_0(ctx context.Context, marshaler runtime.Marshaler, server RolesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateRoleRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Role); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Roles_Update_0(ctx context.Context, marshaler runtime.Marshaler, client RolesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Role - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Roles_Update_0(ctx context.Context, marshaler runtime.Marshaler, server RolesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Role - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Update(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Roles_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Roles_List_0(ctx context.Context, marshaler runtime.Marshaler, client RolesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RoleFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Roles_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Roles_List_0(ctx context.Context, marshaler runtime.Marshaler, server RolesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RoleFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Roles_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Roles_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client RolesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRoleRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Roles_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server RolesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRoleRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterRolesHandlerServer registers the http handlers for service Roles to "mux". -// UnaryRPC :call RolesServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRolesHandlerFromEndpoint instead. -func RegisterRolesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RolesServer) error { - - mux.Handle("POST", pattern_Roles_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Create", runtime.WithHTTPPathPattern("/iam/v1/roles/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Roles_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Roles_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Roles_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Update", runtime.WithHTTPPathPattern("/iam/v1/roles/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Roles_Update_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Roles_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Roles_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Roles/List", runtime.WithHTTPPathPattern("/iam/v1/roles")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Roles_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Roles_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Roles_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Delete", runtime.WithHTTPPathPattern("/iam/v1/roles/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Roles_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Roles_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterRolesHandlerFromEndpoint is same as RegisterRolesHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterRolesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterRolesHandler(ctx, mux, conn) -} - -// RegisterRolesHandler registers the http handlers for service Roles to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterRolesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterRolesHandlerClient(ctx, mux, NewRolesClient(conn)) -} - -// RegisterRolesHandlerClient registers the http handlers for service Roles -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RolesClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RolesClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "RolesClient" to call the correct interceptors. -func RegisterRolesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RolesClient) error { - - mux.Handle("POST", pattern_Roles_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Create", runtime.WithHTTPPathPattern("/iam/v1/roles/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Roles_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Roles_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Roles_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Update", runtime.WithHTTPPathPattern("/iam/v1/roles/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Roles_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Roles_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Roles_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Roles/List", runtime.WithHTTPPathPattern("/iam/v1/roles")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Roles_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Roles_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Roles_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Delete", runtime.WithHTTPPathPattern("/iam/v1/roles/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Roles_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Roles_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Roles_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "roles", "parent_id"}, "")) - - pattern_Roles_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "roles", "id"}, "")) - - pattern_Roles_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "roles"}, "")) - - pattern_Roles_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "roles", "id"}, "")) -) - -var ( - forward_Roles_Create_0 = runtime.ForwardResponseMessage - - forward_Roles_Update_0 = runtime.ForwardResponseMessage - - forward_Roles_List_0 = runtime.ForwardResponseMessage - - forward_Roles_Delete_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/iam/v1/role.platform.proto b/proto/platform/iam/v1/role.platform.proto deleted file mode 100644 index 7ff18fb4..00000000 --- a/proto/platform/iam/v1/role.platform.proto +++ /dev/null @@ -1,100 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.iam.v1"; -option java_outer_classname = "PlatformIAMRoleProto"; - -package chainguard.platform.iam; - -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Roles { - rpc Create(CreateRoleRequest) returns (Role) { - option (google.api.http) = { - post: "/iam/v1/roles/{parent_id=**}" - body: "role" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ROLES_CREATE] - } - }; - } - - rpc Update(Role) returns (Role) { - option (google.api.http) = { - put: "/iam/v1/roles/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ROLES_UPDATE] - } - }; - } - - rpc List(RoleFilter) returns (RoleList) { - option (google.api.http) = { - get: "/iam/v1/roles" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ROLES_LIST] - unscoped: true - } - }; - } - - rpc Delete(DeleteRoleRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/iam/v1/roles/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ROLES_DELETE] - } - }; - } -} - -message Role { - // id, The Group path under which this Role resides. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - // name, human readable name of group. - string name = 2; - // description, human readable description of group. - string description = 3; - // capabilities, human readable list of capabilities supported by the group. - repeated string capabilities = 4; -} - -message RoleList { - repeated Role items = 1; -} - -message RoleFilter { - // id is the exact UIDP of the record. - string id = 1; - // name is the exact name of the record - string name = 2; - // parent is the exact UIDP of the parent, or / for root - string parent = 3; - // uidp filters records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 4; -} - -message CreateRoleRequest { - // parent_id, The Group UIDP path under which the new Role resides. - string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; - // Role to create. - Role role = 2; -} - -message DeleteRoleRequest { - // id is the exact UIDP of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} diff --git a/proto/platform/iam/v1/role.platform_grpc.pb.go b/proto/platform/iam/v1/role.platform_grpc.pb.go deleted file mode 100644 index 593891b8..00000000 --- a/proto/platform/iam/v1/role.platform_grpc.pb.go +++ /dev/null @@ -1,221 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: role.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Roles_Create_FullMethodName = "/chainguard.platform.iam.Roles/Create" - Roles_Update_FullMethodName = "/chainguard.platform.iam.Roles/Update" - Roles_List_FullMethodName = "/chainguard.platform.iam.Roles/List" - Roles_Delete_FullMethodName = "/chainguard.platform.iam.Roles/Delete" -) - -// RolesClient is the client API for Roles service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type RolesClient interface { - Create(ctx context.Context, in *CreateRoleRequest, opts ...grpc.CallOption) (*Role, error) - Update(ctx context.Context, in *Role, opts ...grpc.CallOption) (*Role, error) - List(ctx context.Context, in *RoleFilter, opts ...grpc.CallOption) (*RoleList, error) - Delete(ctx context.Context, in *DeleteRoleRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) -} - -type rolesClient struct { - cc grpc.ClientConnInterface -} - -func NewRolesClient(cc grpc.ClientConnInterface) RolesClient { - return &rolesClient{cc} -} - -func (c *rolesClient) Create(ctx context.Context, in *CreateRoleRequest, opts ...grpc.CallOption) (*Role, error) { - out := new(Role) - err := c.cc.Invoke(ctx, Roles_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *rolesClient) Update(ctx context.Context, in *Role, opts ...grpc.CallOption) (*Role, error) { - out := new(Role) - err := c.cc.Invoke(ctx, Roles_Update_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *rolesClient) List(ctx context.Context, in *RoleFilter, opts ...grpc.CallOption) (*RoleList, error) { - out := new(RoleList) - err := c.cc.Invoke(ctx, Roles_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *rolesClient) Delete(ctx context.Context, in *DeleteRoleRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, Roles_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RolesServer is the server API for Roles service. -// All implementations must embed UnimplementedRolesServer -// for forward compatibility -type RolesServer interface { - Create(context.Context, *CreateRoleRequest) (*Role, error) - Update(context.Context, *Role) (*Role, error) - List(context.Context, *RoleFilter) (*RoleList, error) - Delete(context.Context, *DeleteRoleRequest) (*emptypb.Empty, error) - mustEmbedUnimplementedRolesServer() -} - -// UnimplementedRolesServer must be embedded to have forward compatible implementations. -type UnimplementedRolesServer struct { -} - -func (UnimplementedRolesServer) Create(context.Context, *CreateRoleRequest) (*Role, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedRolesServer) Update(context.Context, *Role) (*Role, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} -func (UnimplementedRolesServer) List(context.Context, *RoleFilter) (*RoleList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedRolesServer) Delete(context.Context, *DeleteRoleRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedRolesServer) mustEmbedUnimplementedRolesServer() {} - -// UnsafeRolesServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to RolesServer will -// result in compilation errors. -type UnsafeRolesServer interface { - mustEmbedUnimplementedRolesServer() -} - -func RegisterRolesServer(s grpc.ServiceRegistrar, srv RolesServer) { - s.RegisterService(&Roles_ServiceDesc, srv) -} - -func _Roles_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateRoleRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RolesServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Roles_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RolesServer).Create(ctx, req.(*CreateRoleRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Roles_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Role) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RolesServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Roles_Update_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RolesServer).Update(ctx, req.(*Role)) - } - return interceptor(ctx, in, info, handler) -} - -func _Roles_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RoleFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RolesServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Roles_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RolesServer).List(ctx, req.(*RoleFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _Roles_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteRoleRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RolesServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Roles_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RolesServer).Delete(ctx, req.(*DeleteRoleRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// Roles_ServiceDesc is the grpc.ServiceDesc for Roles service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Roles_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.iam.Roles", - HandlerType: (*RolesServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _Roles_Create_Handler, - }, - { - MethodName: "Update", - Handler: _Roles_Update_Handler, - }, - { - MethodName: "List", - Handler: _Roles_List_Handler, - }, - { - MethodName: "Delete", - Handler: _Roles_Delete_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "role.platform.proto", -} diff --git a/proto/platform/iam/v1/role_binding.platform.event.go b/proto/platform/iam/v1/role_binding.platform.event.go deleted file mode 100644 index 1e6eba55..00000000 --- a/proto/platform/iam/v1/role_binding.platform.event.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import "chainguard.dev/sdk/uidp" - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *RoleBinding) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *RoleBinding) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *DeleteRoleBindingRequest) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *DeleteRoleBindingRequest) CloudEventsSubject() string { - return x.GetId() -} diff --git a/proto/platform/iam/v1/role_binding.platform.pb.go b/proto/platform/iam/v1/role_binding.platform.pb.go deleted file mode 100644 index a0d6b4da..00000000 --- a/proto/platform/iam/v1/role_binding.platform.pb.go +++ /dev/null @@ -1,705 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: role_binding.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type RoleBinding struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, the UID of this role binding. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // identity, UID of the Identity to bind. - Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` - // group, UIDP of the group to bind. This field is ignored and will be removed - // in the future. The group is always the parent of the UIDP. - // - // Deprecated: Marked as deprecated in role_binding.platform.proto. - Group string `protobuf:"bytes,3,opt,name=group,proto3" json:"group,omitempty"` - // role, UIDP of the Role to bind - Role string `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` -} - -func (x *RoleBinding) Reset() { - *x = RoleBinding{} - if protoimpl.UnsafeEnabled { - mi := &file_role_binding_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoleBinding) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoleBinding) ProtoMessage() {} - -func (x *RoleBinding) ProtoReflect() protoreflect.Message { - mi := &file_role_binding_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RoleBinding.ProtoReflect.Descriptor instead. -func (*RoleBinding) Descriptor() ([]byte, []int) { - return file_role_binding_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *RoleBinding) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RoleBinding) GetIdentity() string { - if x != nil { - return x.Identity - } - return "" -} - -// Deprecated: Marked as deprecated in role_binding.platform.proto. -func (x *RoleBinding) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -func (x *RoleBinding) GetRole() string { - if x != nil { - return x.Role - } - return "" -} - -type RoleBindingList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*RoleBindingList_Binding `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *RoleBindingList) Reset() { - *x = RoleBindingList{} - if protoimpl.UnsafeEnabled { - mi := &file_role_binding_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoleBindingList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoleBindingList) ProtoMessage() {} - -func (x *RoleBindingList) ProtoReflect() protoreflect.Message { - mi := &file_role_binding_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RoleBindingList.ProtoReflect.Descriptor instead. -func (*RoleBindingList) Descriptor() ([]byte, []int) { - return file_role_binding_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *RoleBindingList) GetItems() []*RoleBindingList_Binding { - if x != nil { - return x.Items - } - return nil -} - -type RoleBindingFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // uidp filters records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` -} - -func (x *RoleBindingFilter) Reset() { - *x = RoleBindingFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_role_binding_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoleBindingFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoleBindingFilter) ProtoMessage() {} - -func (x *RoleBindingFilter) ProtoReflect() protoreflect.Message { - mi := &file_role_binding_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RoleBindingFilter.ProtoReflect.Descriptor instead. -func (*RoleBindingFilter) Descriptor() ([]byte, []int) { - return file_role_binding_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *RoleBindingFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RoleBindingFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -type CreateRoleBindingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // parent, The Group UIDP path under which the new RoleBinding resides. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // RoleBinding to create. - RoleBinding *RoleBinding `protobuf:"bytes,2,opt,name=role_binding,json=roleBinding,proto3" json:"role_binding,omitempty"` -} - -func (x *CreateRoleBindingRequest) Reset() { - *x = CreateRoleBindingRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_role_binding_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateRoleBindingRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateRoleBindingRequest) ProtoMessage() {} - -func (x *CreateRoleBindingRequest) ProtoReflect() protoreflect.Message { - mi := &file_role_binding_platform_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 CreateRoleBindingRequest.ProtoReflect.Descriptor instead. -func (*CreateRoleBindingRequest) Descriptor() ([]byte, []int) { - return file_role_binding_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *CreateRoleBindingRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *CreateRoleBindingRequest) GetRoleBinding() *RoleBinding { - if x != nil { - return x.RoleBinding - } - return nil -} - -type DeleteRoleBindingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteRoleBindingRequest) Reset() { - *x = DeleteRoleBindingRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_role_binding_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteRoleBindingRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteRoleBindingRequest) ProtoMessage() {} - -func (x *DeleteRoleBindingRequest) ProtoReflect() protoreflect.Message { - mi := &file_role_binding_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteRoleBindingRequest.ProtoReflect.Descriptor instead. -func (*DeleteRoleBindingRequest) Descriptor() ([]byte, []int) { - return file_role_binding_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *DeleteRoleBindingRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type RoleBindingList_Binding struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, the UID of this role binding. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // group of the bound role. - Group *Group `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"` - // identity, UID of the Identity bound. - Identity string `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` - // role of the bound identity. - Role *Role `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` - // email of the bound identity. - Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` - // ClaimMatch issuer of the bound identity. - ClaimMatchIssuer string `protobuf:"bytes,6,opt,name=claim_match_issuer,json=claimMatchIssuer,proto3" json:"claim_match_issuer,omitempty"` - // ClaimMatch subject of the bound identity. - ClaimMatchSubject string `protobuf:"bytes,7,opt,name=claim_match_subject,json=claimMatchSubject,proto3" json:"claim_match_subject,omitempty"` - // created_at is the timestamp for when the role binding was created. - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` -} - -func (x *RoleBindingList_Binding) Reset() { - *x = RoleBindingList_Binding{} - if protoimpl.UnsafeEnabled { - mi := &file_role_binding_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoleBindingList_Binding) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoleBindingList_Binding) ProtoMessage() {} - -func (x *RoleBindingList_Binding) ProtoReflect() protoreflect.Message { - mi := &file_role_binding_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RoleBindingList_Binding.ProtoReflect.Descriptor instead. -func (*RoleBindingList_Binding) Descriptor() ([]byte, []int) { - return file_role_binding_platform_proto_rawDescGZIP(), []int{1, 0} -} - -func (x *RoleBindingList_Binding) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RoleBindingList_Binding) GetGroup() *Group { - if x != nil { - return x.Group - } - return nil -} - -func (x *RoleBindingList_Binding) GetIdentity() string { - if x != nil { - return x.Identity - } - return "" -} - -func (x *RoleBindingList_Binding) GetRole() *Role { - if x != nil { - return x.Role - } - return nil -} - -func (x *RoleBindingList_Binding) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -func (x *RoleBindingList_Binding) GetClaimMatchIssuer() string { - if x != nil { - return x.ClaimMatchIssuer - } - return "" -} - -func (x *RoleBindingList_Binding) GetClaimMatchSubject() string { - if x != nil { - return x.ClaimMatchSubject - } - return "" -} - -func (x *RoleBindingList_Binding) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -var File_role_binding_platform_proto protoreflect.FileDescriptor - -var file_role_binding_platform_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x13, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6f, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xa9, 0x03, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, - 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x1a, 0xcd, 0x02, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, - 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, - 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x22, 0x5f, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, - 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, - 0x04, 0x75, 0x69, 0x64, 0x70, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x0b, - 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x32, 0x0a, 0x18, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, - 0x93, 0x06, 0x0a, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x12, 0xe5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x0c, 0x72, - 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, - 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc8, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, - 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, - 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, 0x1c, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0x92, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0x88, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x93, 0x03, 0x10, 0x01, 0x12, 0xc4, - 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x69, - 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, - 0x12, 0x04, 0x0a, 0x02, 0x94, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, - 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_role_binding_platform_proto_rawDescOnce sync.Once - file_role_binding_platform_proto_rawDescData = file_role_binding_platform_proto_rawDesc -) - -func file_role_binding_platform_proto_rawDescGZIP() []byte { - file_role_binding_platform_proto_rawDescOnce.Do(func() { - file_role_binding_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_role_binding_platform_proto_rawDescData) - }) - return file_role_binding_platform_proto_rawDescData -} - -var file_role_binding_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_role_binding_platform_proto_goTypes = []interface{}{ - (*RoleBinding)(nil), // 0: chainguard.platform.iam.RoleBinding - (*RoleBindingList)(nil), // 1: chainguard.platform.iam.RoleBindingList - (*RoleBindingFilter)(nil), // 2: chainguard.platform.iam.RoleBindingFilter - (*CreateRoleBindingRequest)(nil), // 3: chainguard.platform.iam.CreateRoleBindingRequest - (*DeleteRoleBindingRequest)(nil), // 4: chainguard.platform.iam.DeleteRoleBindingRequest - (*RoleBindingList_Binding)(nil), // 5: chainguard.platform.iam.RoleBindingList.Binding - (*v1.UIDPFilter)(nil), // 6: chainguard.platform.common.UIDPFilter - (*Group)(nil), // 7: chainguard.platform.iam.Group - (*Role)(nil), // 8: chainguard.platform.iam.Role - (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 10: google.protobuf.Empty -} -var file_role_binding_platform_proto_depIdxs = []int32{ - 5, // 0: chainguard.platform.iam.RoleBindingList.items:type_name -> chainguard.platform.iam.RoleBindingList.Binding - 6, // 1: chainguard.platform.iam.RoleBindingFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 0, // 2: chainguard.platform.iam.CreateRoleBindingRequest.role_binding:type_name -> chainguard.platform.iam.RoleBinding - 7, // 3: chainguard.platform.iam.RoleBindingList.Binding.group:type_name -> chainguard.platform.iam.Group - 8, // 4: chainguard.platform.iam.RoleBindingList.Binding.role:type_name -> chainguard.platform.iam.Role - 9, // 5: chainguard.platform.iam.RoleBindingList.Binding.created_at:type_name -> google.protobuf.Timestamp - 3, // 6: chainguard.platform.iam.RoleBindings.Create:input_type -> chainguard.platform.iam.CreateRoleBindingRequest - 0, // 7: chainguard.platform.iam.RoleBindings.Update:input_type -> chainguard.platform.iam.RoleBinding - 2, // 8: chainguard.platform.iam.RoleBindings.List:input_type -> chainguard.platform.iam.RoleBindingFilter - 4, // 9: chainguard.platform.iam.RoleBindings.Delete:input_type -> chainguard.platform.iam.DeleteRoleBindingRequest - 0, // 10: chainguard.platform.iam.RoleBindings.Create:output_type -> chainguard.platform.iam.RoleBinding - 0, // 11: chainguard.platform.iam.RoleBindings.Update:output_type -> chainguard.platform.iam.RoleBinding - 1, // 12: chainguard.platform.iam.RoleBindings.List:output_type -> chainguard.platform.iam.RoleBindingList - 10, // 13: chainguard.platform.iam.RoleBindings.Delete:output_type -> google.protobuf.Empty - 10, // [10:14] is the sub-list for method output_type - 6, // [6:10] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name -} - -func init() { file_role_binding_platform_proto_init() } -func file_role_binding_platform_proto_init() { - if File_role_binding_platform_proto != nil { - return - } - file_group_platform_proto_init() - file_role_platform_proto_init() - if !protoimpl.UnsafeEnabled { - file_role_binding_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoleBinding); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_role_binding_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoleBindingList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_role_binding_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoleBindingFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_role_binding_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRoleBindingRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_role_binding_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRoleBindingRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_role_binding_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoleBindingList_Binding); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_role_binding_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 6, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_role_binding_platform_proto_goTypes, - DependencyIndexes: file_role_binding_platform_proto_depIdxs, - MessageInfos: file_role_binding_platform_proto_msgTypes, - }.Build() - File_role_binding_platform_proto = out.File - file_role_binding_platform_proto_rawDesc = nil - file_role_binding_platform_proto_goTypes = nil - file_role_binding_platform_proto_depIdxs = nil -} diff --git a/proto/platform/iam/v1/role_binding.platform.pb.gw.go b/proto/platform/iam/v1/role_binding.platform.pb.gw.go deleted file mode 100644 index a50a2575..00000000 --- a/proto/platform/iam/v1/role_binding.platform.pb.gw.go +++ /dev/null @@ -1,501 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: role_binding.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_RoleBindings_Create_0(ctx context.Context, marshaler runtime.Marshaler, client RoleBindingsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateRoleBindingRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.RoleBinding); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent") - } - - protoReq.Parent, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_RoleBindings_Create_0(ctx context.Context, marshaler runtime.Marshaler, server RoleBindingsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateRoleBindingRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.RoleBinding); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent") - } - - protoReq.Parent, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -func request_RoleBindings_Update_0(ctx context.Context, marshaler runtime.Marshaler, client RoleBindingsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RoleBinding - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_RoleBindings_Update_0(ctx context.Context, marshaler runtime.Marshaler, server RoleBindingsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RoleBinding - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Update(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_RoleBindings_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_RoleBindings_List_0(ctx context.Context, marshaler runtime.Marshaler, client RoleBindingsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RoleBindingFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleBindings_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_RoleBindings_List_0(ctx context.Context, marshaler runtime.Marshaler, server RoleBindingsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RoleBindingFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleBindings_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_RoleBindings_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client RoleBindingsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRoleBindingRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_RoleBindings_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server RoleBindingsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRoleBindingRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterRoleBindingsHandlerServer registers the http handlers for service RoleBindings to "mux". -// UnaryRPC :call RoleBindingsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRoleBindingsHandlerFromEndpoint instead. -func RegisterRoleBindingsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RoleBindingsServer) error { - - mux.Handle("POST", pattern_RoleBindings_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Create", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{parent=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_RoleBindings_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_RoleBindings_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_RoleBindings_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Update", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_RoleBindings_Update_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_RoleBindings_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_RoleBindings_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/List", runtime.WithHTTPPathPattern("/iam/v1/rolebindings")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_RoleBindings_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_RoleBindings_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_RoleBindings_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Delete", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_RoleBindings_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_RoleBindings_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterRoleBindingsHandlerFromEndpoint is same as RegisterRoleBindingsHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterRoleBindingsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterRoleBindingsHandler(ctx, mux, conn) -} - -// RegisterRoleBindingsHandler registers the http handlers for service RoleBindings to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterRoleBindingsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterRoleBindingsHandlerClient(ctx, mux, NewRoleBindingsClient(conn)) -} - -// RegisterRoleBindingsHandlerClient registers the http handlers for service RoleBindings -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RoleBindingsClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RoleBindingsClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "RoleBindingsClient" to call the correct interceptors. -func RegisterRoleBindingsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RoleBindingsClient) error { - - mux.Handle("POST", pattern_RoleBindings_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Create", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{parent=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_RoleBindings_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_RoleBindings_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_RoleBindings_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Update", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_RoleBindings_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_RoleBindings_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_RoleBindings_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/List", runtime.WithHTTPPathPattern("/iam/v1/rolebindings")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_RoleBindings_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_RoleBindings_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_RoleBindings_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Delete", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_RoleBindings_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_RoleBindings_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_RoleBindings_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "rolebindings", "parent"}, "")) - - pattern_RoleBindings_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "rolebindings", "id"}, "")) - - pattern_RoleBindings_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "rolebindings"}, "")) - - pattern_RoleBindings_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "rolebindings", "id"}, "")) -) - -var ( - forward_RoleBindings_Create_0 = runtime.ForwardResponseMessage - - forward_RoleBindings_Update_0 = runtime.ForwardResponseMessage - - forward_RoleBindings_List_0 = runtime.ForwardResponseMessage - - forward_RoleBindings_Delete_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/iam/v1/role_binding.platform.proto b/proto/platform/iam/v1/role_binding.platform.proto deleted file mode 100644 index 1041b77f..00000000 --- a/proto/platform/iam/v1/role_binding.platform.proto +++ /dev/null @@ -1,134 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.iam.v1"; -option java_outer_classname = "PlatformIAMRoleBindingProto"; - -package chainguard.platform.iam; - -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "platform/common/v1/uidp.platform.proto"; -import "group.platform.proto"; -import "role.platform.proto"; - -service RoleBindings { - rpc Create(CreateRoleBindingRequest) returns (RoleBinding) { - option (google.api.http) = { - post: "/iam/v1/rolebindings/{parent=**}" - body: "role_binding" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ROLE_BINDINGS_CREATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.rolebindings.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Update(RoleBinding) returns (RoleBinding) { - option (google.api.http) = { - put: "/iam/v1/rolebindings/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ROLE_BINDINGS_UPDATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.rolebindings.updated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc List(RoleBindingFilter) returns (RoleBindingList) { - option (google.api.http) = { - get: "/iam/v1/rolebindings" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ROLE_BINDINGS_LIST] - unscoped: true - } - }; - } - - rpc Delete(DeleteRoleBindingRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/iam/v1/rolebindings/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_ROLE_BINDINGS_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.rolebindings.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } -} - -message RoleBinding { - // id, the UID of this role binding. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - // identity, UID of the Identity to bind. - string identity = 2; - // group, UIDP of the group to bind. This field is ignored and will be removed - // in the future. The group is always the parent of the UIDP. - string group = 3 [deprecated = true]; - // role, UIDP of the Role to bind - string role = 4; -} - -message RoleBindingList { - message Binding { - // id, the UID of this role binding. - string id = 1; - // group of the bound role. - chainguard.platform.iam.Group group = 2; - // identity, UID of the Identity bound. - string identity = 3; - // role of the bound identity. - chainguard.platform.iam.Role role = 4; - // email of the bound identity. - string email = 5; - // ClaimMatch issuer of the bound identity. - string claim_match_issuer = 6; - // ClaimMatch subject of the bound identity. - string claim_match_subject = 7; - // created_at is the timestamp for when the role binding was created. - google.protobuf.Timestamp created_at = 8; - } - repeated Binding items = 1; -} - -message RoleBindingFilter { - // id is the exact UID of the record. - string id = 1; - // uidp filters records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 2; -} - -message CreateRoleBindingRequest { - // parent, The Group UIDP path under which the new RoleBinding resides. - string parent = 1 [(chainguard.annotations.iam_scope) = true]; - // RoleBinding to create. - RoleBinding role_binding = 2; -} - -message DeleteRoleBindingRequest { - // id is the exact UID of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} diff --git a/proto/platform/iam/v1/role_binding.platform_grpc.pb.go b/proto/platform/iam/v1/role_binding.platform_grpc.pb.go deleted file mode 100644 index 70734cf3..00000000 --- a/proto/platform/iam/v1/role_binding.platform_grpc.pb.go +++ /dev/null @@ -1,221 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: role_binding.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - RoleBindings_Create_FullMethodName = "/chainguard.platform.iam.RoleBindings/Create" - RoleBindings_Update_FullMethodName = "/chainguard.platform.iam.RoleBindings/Update" - RoleBindings_List_FullMethodName = "/chainguard.platform.iam.RoleBindings/List" - RoleBindings_Delete_FullMethodName = "/chainguard.platform.iam.RoleBindings/Delete" -) - -// RoleBindingsClient is the client API for RoleBindings service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type RoleBindingsClient interface { - Create(ctx context.Context, in *CreateRoleBindingRequest, opts ...grpc.CallOption) (*RoleBinding, error) - Update(ctx context.Context, in *RoleBinding, opts ...grpc.CallOption) (*RoleBinding, error) - List(ctx context.Context, in *RoleBindingFilter, opts ...grpc.CallOption) (*RoleBindingList, error) - Delete(ctx context.Context, in *DeleteRoleBindingRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) -} - -type roleBindingsClient struct { - cc grpc.ClientConnInterface -} - -func NewRoleBindingsClient(cc grpc.ClientConnInterface) RoleBindingsClient { - return &roleBindingsClient{cc} -} - -func (c *roleBindingsClient) Create(ctx context.Context, in *CreateRoleBindingRequest, opts ...grpc.CallOption) (*RoleBinding, error) { - out := new(RoleBinding) - err := c.cc.Invoke(ctx, RoleBindings_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *roleBindingsClient) Update(ctx context.Context, in *RoleBinding, opts ...grpc.CallOption) (*RoleBinding, error) { - out := new(RoleBinding) - err := c.cc.Invoke(ctx, RoleBindings_Update_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *roleBindingsClient) List(ctx context.Context, in *RoleBindingFilter, opts ...grpc.CallOption) (*RoleBindingList, error) { - out := new(RoleBindingList) - err := c.cc.Invoke(ctx, RoleBindings_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *roleBindingsClient) Delete(ctx context.Context, in *DeleteRoleBindingRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, RoleBindings_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RoleBindingsServer is the server API for RoleBindings service. -// All implementations must embed UnimplementedRoleBindingsServer -// for forward compatibility -type RoleBindingsServer interface { - Create(context.Context, *CreateRoleBindingRequest) (*RoleBinding, error) - Update(context.Context, *RoleBinding) (*RoleBinding, error) - List(context.Context, *RoleBindingFilter) (*RoleBindingList, error) - Delete(context.Context, *DeleteRoleBindingRequest) (*emptypb.Empty, error) - mustEmbedUnimplementedRoleBindingsServer() -} - -// UnimplementedRoleBindingsServer must be embedded to have forward compatible implementations. -type UnimplementedRoleBindingsServer struct { -} - -func (UnimplementedRoleBindingsServer) Create(context.Context, *CreateRoleBindingRequest) (*RoleBinding, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedRoleBindingsServer) Update(context.Context, *RoleBinding) (*RoleBinding, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} -func (UnimplementedRoleBindingsServer) List(context.Context, *RoleBindingFilter) (*RoleBindingList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedRoleBindingsServer) Delete(context.Context, *DeleteRoleBindingRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedRoleBindingsServer) mustEmbedUnimplementedRoleBindingsServer() {} - -// UnsafeRoleBindingsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to RoleBindingsServer will -// result in compilation errors. -type UnsafeRoleBindingsServer interface { - mustEmbedUnimplementedRoleBindingsServer() -} - -func RegisterRoleBindingsServer(s grpc.ServiceRegistrar, srv RoleBindingsServer) { - s.RegisterService(&RoleBindings_ServiceDesc, srv) -} - -func _RoleBindings_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateRoleBindingRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RoleBindingsServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: RoleBindings_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RoleBindingsServer).Create(ctx, req.(*CreateRoleBindingRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _RoleBindings_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RoleBinding) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RoleBindingsServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: RoleBindings_Update_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RoleBindingsServer).Update(ctx, req.(*RoleBinding)) - } - return interceptor(ctx, in, info, handler) -} - -func _RoleBindings_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RoleBindingFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RoleBindingsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: RoleBindings_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RoleBindingsServer).List(ctx, req.(*RoleBindingFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _RoleBindings_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteRoleBindingRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RoleBindingsServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: RoleBindings_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RoleBindingsServer).Delete(ctx, req.(*DeleteRoleBindingRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// RoleBindings_ServiceDesc is the grpc.ServiceDesc for RoleBindings service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var RoleBindings_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.iam.RoleBindings", - HandlerType: (*RoleBindingsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _RoleBindings_Create_Handler, - }, - { - MethodName: "Update", - Handler: _RoleBindings_Update_Handler, - }, - { - MethodName: "List", - Handler: _RoleBindings_List_Handler, - }, - { - MethodName: "Delete", - Handler: _RoleBindings_Delete_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "role_binding.platform.proto", -} diff --git a/proto/platform/iam/v1/test/mock_account_accociations.go b/proto/platform/iam/v1/test/mock_account_accociations.go deleted file mode 100644 index 8de0cce6..00000000 --- a/proto/platform/iam/v1/test/mock_account_accociations.go +++ /dev/null @@ -1,103 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/proto" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - iam "chainguard.dev/sdk/proto/platform/iam/v1" -) - -var _ iam.GroupAccountAssociationsClient = (*MockGroupAccountAssociationsClient)(nil) - -type MockGroupAccountAssociationsClient struct { - OnCreate []AccountAssociationsOnCreate - OnUpdate []AccountAssociationsOnUpdate - OnDelete []AccountAssociationsOnDelete - OnList []AccountAssociationsOnList - OnCheck []AccountAssociationsOnCheck -} - -type AccountAssociationsOnCreate struct { - Given *iam.AccountAssociations - Created *iam.AccountAssociations - Error error -} - -type AccountAssociationsOnUpdate struct { - Given *iam.AccountAssociations - Updated *iam.AccountAssociations - Error error -} - -type AccountAssociationsOnDelete struct { - Given *iam.DeleteAccountAssociationsRequest - Error error -} - -type AccountAssociationsOnList struct { - Given *iam.AccountAssociationsFilter - List *iam.AccountAssociationsList - Error error -} - -type AccountAssociationsOnCheck struct { - Given *iam.AccountAssociationsCheckRequest - Status *iam.AccountAssociationsStatus - Error error -} - -func (m MockGroupAccountAssociationsClient) Create(_ context.Context, given *iam.AccountAssociations, _ ...grpc.CallOption) (*iam.AccountAssociations, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupAccountAssociationsClient) Update(_ context.Context, given *iam.AccountAssociations, _ ...grpc.CallOption) (*iam.AccountAssociations, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupAccountAssociationsClient) Delete(_ context.Context, given *iam.DeleteAccountAssociationsRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupAccountAssociationsClient) List(_ context.Context, given *iam.AccountAssociationsFilter, _ ...grpc.CallOption) (*iam.AccountAssociationsList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return proto.Clone(o.List).(*iam.AccountAssociationsList), o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupAccountAssociationsClient) Check(_ context.Context, given *iam.AccountAssociationsCheckRequest, _ ...grpc.CallOption) (*iam.AccountAssociationsStatus, error) { - for _, o := range m.OnCheck { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return proto.Clone(o.Status).(*iam.AccountAssociationsStatus), o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/iam/v1/test/mock_client.go b/proto/platform/iam/v1/test/mock_client.go deleted file mode 100644 index 08444e61..00000000 --- a/proto/platform/iam/v1/test/mock_client.go +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - events "chainguard.dev/sdk/proto/platform/events/v1" - iam "chainguard.dev/sdk/proto/platform/iam/v1" -) - -type MockIAMClient struct { - OnClose error - - GroupsClient MockGroupsClient - GroupInvitesClient MockGroupInvitesClient - RolesClient MockRolesClient - RoleBindingsClient MockRoleBindingsClient - IdentitiesClient MockIdentitiesClient - DeprecatedIdentitiesClient MockDeprecatedIdentitiesClient - IdentityProvidersClient MockIdentityProvidersClient - GroupAccountAssociationsClient MockGroupAccountAssociationsClient - SubscriptionsClient MockSubscriptionsClient -} - -var _ iam.Clients = (*MockIAMClient)(nil) - -func (m MockIAMClient) Groups() iam.GroupsClient { - return &m.GroupsClient -} - -func (m MockIAMClient) GroupInvites() iam.GroupInvitesClient { - return &m.GroupInvitesClient -} - -func (m MockIAMClient) Roles() iam.RolesClient { - return &m.RolesClient -} - -func (m MockIAMClient) RoleBindings() iam.RoleBindingsClient { - return &m.RoleBindingsClient -} - -func (m MockIAMClient) Identities() iam.IdentitiesClient { - return &m.IdentitiesClient -} - -func (m MockIAMClient) DeprecatedIdentities() events.IdentitiesClient { - return &m.DeprecatedIdentitiesClient -} - -func (m MockIAMClient) IdentityProviders() iam.IdentityProvidersClient { - return &m.IdentityProvidersClient -} - -func (m MockIAMClient) AccountAssociations() iam.GroupAccountAssociationsClient { - return &m.GroupAccountAssociationsClient -} - -func (m MockIAMClient) Subscriptions() events.SubscriptionsClient { - return &m.SubscriptionsClient -} - -func (m MockIAMClient) Close() error { - return m.OnClose -} diff --git a/proto/platform/iam/v1/test/mock_deprecatedidentities.go b/proto/platform/iam/v1/test/mock_deprecatedidentities.go deleted file mode 100644 index 3480421c..00000000 --- a/proto/platform/iam/v1/test/mock_deprecatedidentities.go +++ /dev/null @@ -1,42 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - events "chainguard.dev/sdk/proto/platform/events/v1" -) - -var _ events.IdentitiesClient = (*MockDeprecatedIdentitiesClient)(nil) - -type MockDeprecatedIdentitiesClient struct { - OnCreate []DeprecatedIdentityOnCreate -} - -type DeprecatedIdentityOnCreate struct { - Given *events.Identity - Created *events.Identity - Error error -} - -func (m MockDeprecatedIdentitiesClient) Create(_ context.Context, given *events.Identity, _ ...grpc.CallOption) (*events.Identity, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockDeprecatedIdentitiesClient) UpdateMetadata(ctx context.Context, in *events.IdentityMetadata, opts ...grpc.CallOption) (*events.IdentityMetadata, error) { //nolint: revive - return in, nil -} diff --git a/proto/platform/iam/v1/test/mock_groups.go b/proto/platform/iam/v1/test/mock_groups.go deleted file mode 100644 index d2eec859..00000000 --- a/proto/platform/iam/v1/test/mock_groups.go +++ /dev/null @@ -1,105 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - iam "chainguard.dev/sdk/proto/platform/iam/v1" - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" -) - -var _ iam.GroupsClient = (*MockGroupsClient)(nil) - -type MockGroupsClient struct { - OnCreate []GroupOnCreate - OnUpdate []GroupOnUpdate - OnDelete []GroupOnDelete - OnList []GroupOnList -} - -type GroupOnCreate struct { - Given *iam.CreateGroupRequest - Created *iam.Group - Error error -} - -type GroupOnUpdate struct { - Given *iam.Group - Updated *iam.Group - Error error -} - -type GroupOnDelete struct { - Given *iam.DeleteGroupRequest - Error error -} - -type GroupOnList struct { - Given *iam.GroupFilter - List *iam.GroupList - Error error -} - -func (m MockGroupsClient) Create(_ context.Context, given *iam.CreateGroupRequest, _ ...grpc.CallOption) (*iam.Group, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupsClient) Update(_ context.Context, given *iam.Group, _ ...grpc.CallOption) (*iam.Group, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupsClient) Delete(_ context.Context, given *iam.DeleteGroupRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupsClient) List(_ context.Context, given *iam.GroupFilter, _ ...grpc.CallOption) (*iam.GroupList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -// -- Server -- - -type MockGroupsServer struct { - iam.UnimplementedGroupsServer - Client MockGroupsClient -} - -func (m MockGroupsServer) Create(ctx context.Context, req *iam.CreateGroupRequest) (*iam.Group, error) { - return m.Client.Create(ctx, req) -} -func (m MockGroupsServer) Update(ctx context.Context, req *iam.Group) (*iam.Group, error) { - return m.Client.Update(ctx, req) -} -func (m MockGroupsServer) List(ctx context.Context, req *iam.GroupFilter) (*iam.GroupList, error) { - return m.Client.List(ctx, req) -} -func (m MockGroupsServer) Delete(ctx context.Context, req *iam.DeleteGroupRequest) (*emptypb.Empty, error) { - return m.Client.Delete(ctx, req) -} diff --git a/proto/platform/iam/v1/test/mock_identities.go b/proto/platform/iam/v1/test/mock_identities.go deleted file mode 100644 index acea986d..00000000 --- a/proto/platform/iam/v1/test/mock_identities.go +++ /dev/null @@ -1,102 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - iam "chainguard.dev/sdk/proto/platform/iam/v1" -) - -var _ iam.IdentitiesClient = (*MockIdentitiesClient)(nil) - -type MockIdentitiesClient struct { - OnCreate []IdentityOnCreate - OnUpdate []IdentityOnUpdate - OnDelete []IdentityOnDelete - OnList []IdentityOnList - OnLooKup []IdentityOnLookup -} - -type IdentityOnCreate struct { - Given *iam.CreateIdentityRequest - Created *iam.Identity - Error error -} - -type IdentityOnUpdate struct { - Given *iam.Identity - Updated *iam.Identity - Error error -} - -type IdentityOnDelete struct { - Given *iam.DeleteIdentityRequest - Error error -} - -type IdentityOnList struct { - Given *iam.IdentityFilter - List *iam.IdentityList - Error error -} - -type IdentityOnLookup struct { - Given *iam.LookupRequest - Found *iam.Identity - Error error -} - -func (m MockIdentitiesClient) Create(_ context.Context, given *iam.CreateIdentityRequest, _ ...grpc.CallOption) (*iam.Identity, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockIdentitiesClient) Update(_ context.Context, given *iam.Identity, _ ...grpc.CallOption) (*iam.Identity, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockIdentitiesClient) Delete(_ context.Context, given *iam.DeleteIdentityRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockIdentitiesClient) List(_ context.Context, given *iam.IdentityFilter, _ ...grpc.CallOption) (*iam.IdentityList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockIdentitiesClient) Lookup(_ context.Context, given *iam.LookupRequest, _ ...grpc.CallOption) (*iam.Identity, error) { - for _, o := range m.OnLooKup { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Found, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/iam/v1/test/mock_identity_providers.go b/proto/platform/iam/v1/test/mock_identity_providers.go deleted file mode 100644 index 1d3d0c53..00000000 --- a/proto/platform/iam/v1/test/mock_identity_providers.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - api "chainguard.dev/sdk/proto/platform/iam/v1" -) - -var _ api.IdentityProvidersClient = (*MockIdentityProvidersClient)(nil) - -type MockIdentityProvidersClient struct { - OnCreate []IdentityProvidersOnCreate - OnUpdate []IdentityProvidersOnUpdate - OnDelete []IdentityProvidersOnDelete - OnList []IdentityProvidersOnList -} - -type IdentityProvidersOnCreate struct { - Given *api.CreateIdentityProviderRequest - Created *api.IdentityProvider - Error error -} - -type IdentityProvidersOnUpdate struct { - Given *api.IdentityProvider - Updated *api.IdentityProvider - Error error -} - -type IdentityProvidersOnDelete struct { - Given *api.DeleteIdentityProviderRequest - Error error -} - -type IdentityProvidersOnList struct { - Given *api.IdentityProviderFilter - List *api.IdentityProviderList - Error error -} - -func (m MockIdentityProvidersClient) Create(_ context.Context, given *api.CreateIdentityProviderRequest, _ ...grpc.CallOption) (*api.IdentityProvider, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockIdentityProvidersClient) Update(_ context.Context, given *api.IdentityProvider, _ ...grpc.CallOption) (*api.IdentityProvider, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockIdentityProvidersClient) Delete(_ context.Context, given *api.DeleteIdentityProviderRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockIdentityProvidersClient) List(_ context.Context, given *api.IdentityProviderFilter, _ ...grpc.CallOption) (*api.IdentityProviderList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/iam/v1/test/mock_invites.go b/proto/platform/iam/v1/test/mock_invites.go deleted file mode 100644 index b546f392..00000000 --- a/proto/platform/iam/v1/test/mock_invites.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - iam "chainguard.dev/sdk/proto/platform/iam/v1" -) - -var _ iam.GroupInvitesClient = (*MockGroupInvitesClient)(nil) - -type MockGroupInvitesClient struct { - OnCreate []GroupInviteOnCreate - OnCreateWithGroup []GroupInviteOnCreateWithGroup - OnDelete []GroupInviteOnDelete - OnList []GroupInviteOnList -} - -type GroupInviteOnCreate struct { - Given *iam.GroupInviteRequest - Created *iam.GroupInvite - Error error -} - -type GroupInviteOnCreateWithGroup struct { - Given *iam.GroupInviteRequest - Created *iam.GroupInvite - Error error -} - -type GroupInviteOnDelete struct { - Given *iam.DeleteGroupInviteRequest - Error error -} - -type GroupInviteOnList struct { - Given *iam.GroupInviteFilter - List *iam.GroupInviteList - Error error -} - -func (m MockGroupInvitesClient) Create(_ context.Context, given *iam.GroupInviteRequest, _ ...grpc.CallOption) (*iam.GroupInvite, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupInvitesClient) CreateWithGroup(_ context.Context, given *iam.GroupInviteRequest, _ ...grpc.CallOption) (*iam.GroupInvite, error) { - for _, o := range m.OnCreateWithGroup { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupInvitesClient) Delete(_ context.Context, given *iam.DeleteGroupInviteRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockGroupInvitesClient) List(_ context.Context, given *iam.GroupInviteFilter, _ ...grpc.CallOption) (*iam.GroupInviteList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/iam/v1/test/mock_role_bindings.go b/proto/platform/iam/v1/test/mock_role_bindings.go deleted file mode 100644 index abd2b9e1..00000000 --- a/proto/platform/iam/v1/test/mock_role_bindings.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - iam "chainguard.dev/sdk/proto/platform/iam/v1" -) - -var _ iam.RoleBindingsClient = (*MockRoleBindingsClient)(nil) - -type MockRoleBindingsClient struct { - OnCreate []RoleBindingOnCreate - OnUpdate []RoleBindingOnUpdate - OnDelete []RoleBindingOnDelete - OnList []RoleBindingOnList -} - -type RoleBindingOnCreate struct { - Given *iam.CreateRoleBindingRequest - Created *iam.RoleBinding - Error error -} - -type RoleBindingOnUpdate struct { - Given *iam.RoleBinding - Updated *iam.RoleBinding - Error error -} - -type RoleBindingOnDelete struct { - Given *iam.DeleteRoleBindingRequest - Error error -} - -type RoleBindingOnList struct { - Given *iam.RoleBindingFilter - List *iam.RoleBindingList - Error error -} - -func (m MockRoleBindingsClient) Create(_ context.Context, given *iam.CreateRoleBindingRequest, _ ...grpc.CallOption) (*iam.RoleBinding, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRoleBindingsClient) Update(_ context.Context, given *iam.RoleBinding, _ ...grpc.CallOption) (*iam.RoleBinding, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRoleBindingsClient) Delete(_ context.Context, given *iam.DeleteRoleBindingRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRoleBindingsClient) List(_ context.Context, given *iam.RoleBindingFilter, _ ...grpc.CallOption) (*iam.RoleBindingList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/iam/v1/test/mock_roles.go b/proto/platform/iam/v1/test/mock_roles.go deleted file mode 100644 index b3b3cc25..00000000 --- a/proto/platform/iam/v1/test/mock_roles.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - iam "chainguard.dev/sdk/proto/platform/iam/v1" -) - -var _ iam.RolesClient = (*MockRolesClient)(nil) - -type MockRolesClient struct { - OnCreate []RoleOnCreate - OnUpdate []RoleOnUpdate - OnDelete []RoleOnDelete - OnList []RoleOnList -} - -type RoleOnCreate struct { - Given *iam.CreateRoleRequest - Created *iam.Role - Error error -} - -type RoleOnUpdate struct { - Given *iam.Role - Updated *iam.Role - Error error -} - -type RoleOnDelete struct { - Given *iam.DeleteRoleRequest - Error error -} - -type RoleOnList struct { - Given *iam.RoleFilter - List *iam.RoleList - Error error -} - -func (m MockRolesClient) Create(_ context.Context, given *iam.CreateRoleRequest, _ ...grpc.CallOption) (*iam.Role, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRolesClient) Update(_ context.Context, given *iam.Role, _ ...grpc.CallOption) (*iam.Role, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRolesClient) Delete(_ context.Context, given *iam.DeleteRoleRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRolesClient) List(_ context.Context, given *iam.RoleFilter, _ ...grpc.CallOption) (*iam.RoleList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/iam/v1/test/mock_subscriptions.go b/proto/platform/iam/v1/test/mock_subscriptions.go deleted file mode 100644 index 8ac42298..00000000 --- a/proto/platform/iam/v1/test/mock_subscriptions.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - events "chainguard.dev/sdk/proto/platform/events/v1" -) - -var _ events.SubscriptionsClient = (*MockSubscriptionsClient)(nil) - -type MockSubscriptionsClient struct { - OnCreate []SubscriptionOnCreate - OnUpdate []SubscriptionOnUpdate - OnDelete []SubscriptionOnDelete - OnList []SubscriptionOnList -} - -type SubscriptionOnCreate struct { - Given *events.CreateSubscriptionRequest - Created *events.Subscription - Error error -} - -type SubscriptionOnUpdate struct { - Given *events.Subscription - Updated *events.Subscription - Error error -} - -type SubscriptionOnDelete struct { - Given *events.DeleteSubscriptionRequest - Error error -} - -type SubscriptionOnList struct { - Given *events.SubscriptionFilter - List *events.SubscriptionList - Error error -} - -func (m MockSubscriptionsClient) Create(_ context.Context, given *events.CreateSubscriptionRequest, _ ...grpc.CallOption) (*events.Subscription, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockSubscriptionsClient) Update(_ context.Context, given *events.Subscription, _ ...grpc.CallOption) (*events.Subscription, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockSubscriptionsClient) Delete(_ context.Context, given *events.DeleteSubscriptionRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockSubscriptionsClient) List(_ context.Context, given *events.SubscriptionFilter, _ ...grpc.CallOption) (*events.SubscriptionList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/oidc/v1/clients.go b/proto/platform/oidc/v1/clients.go deleted file mode 100644 index 2e727281..00000000 --- a/proto/platform/oidc/v1/clients.go +++ /dev/null @@ -1,101 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "context" - "fmt" - "net/url" - "time" - - delegate "chainguard.dev/go-grpc-kit/pkg/options" - "github.com/chainguard-dev/clog" - "google.golang.org/grpc" - - "chainguard.dev/sdk/auth" -) - -type Clients interface { - STS() SecurityTokenServiceClient - - Close() error -} - -type options struct { - userAgent string -} - -type ClientOption func(*options) - -func WithUserAgent(agent string) ClientOption { - return func(o *options) { - o.userAgent = agent - } -} -func NewClients(ctx context.Context, addr string, token string, opts ...ClientOption) (Clients, error) { - conf := new(options) - for _, opt := range opts { - opt(conf) - } - - uri, err := url.Parse(addr) - if err != nil { - return nil, fmt.Errorf("failed to parse oidc service address, must be a url: %w", err) - } - - target, rpcOpts := delegate.GRPCOptions(*uri) - - // TODO: we may want to require transport security at some future point. - if cred := auth.NewFromToken(ctx, token, false); cred != nil { - rpcOpts = append(rpcOpts, grpc.WithPerRPCCredentials(cred)) - } else { - clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") - } - - if conf.userAgent != "" { - rpcOpts = append(rpcOpts, grpc.WithUserAgent(conf.userAgent)) - } - - var cancel context.CancelFunc - if _, timeoutSet := ctx.Deadline(); !timeoutSet { - ctx, cancel = context.WithTimeout(ctx, 300*time.Second) - defer cancel() - } - conn, err := grpc.DialContext(ctx, target, rpcOpts...) - if err != nil { - return nil, fmt.Errorf("oidc.NewClients: failed to connect to the iam server: %w", err) - } - - return &clients{ - sts: NewSecurityTokenServiceClient(conn), - - conn: conn, - }, nil -} - -func NewClientsFromConnection(conn *grpc.ClientConn) Clients { - return &clients{ - sts: NewSecurityTokenServiceClient(conn), - // conn is not set, this client struct does not own closing it. - } -} - -type clients struct { - sts SecurityTokenServiceClient - - conn *grpc.ClientConn -} - -func (c *clients) STS() SecurityTokenServiceClient { - return c.sts -} - -func (c *clients) Close() error { - if c.conn != nil { - return c.conn.Close() - } - return nil -} diff --git a/proto/platform/oidc/v1/doc.go b/proto/platform/oidc/v1/doc.go deleted file mode 100644 index e3a2e450..00000000 --- a/proto/platform/oidc/v1/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package v1 contains the v1 GRPC client and server definitions -// for implementing OIDC interactions for the Platform. -// -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. oidc.platform.proto -package v1 diff --git a/proto/platform/oidc/v1/oidc.platform.pb.go b/proto/platform/oidc/v1/oidc.platform.pb.go deleted file mode 100644 index 9b2888c5..00000000 --- a/proto/platform/oidc/v1/oidc.platform.pb.go +++ /dev/null @@ -1,459 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: oidc.platform.proto - -package v1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ExchangeRefreshTokenRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Aud []string `protobuf:"bytes,1,rep,name=aud,proto3" json:"aud,omitempty"` - Scope string `protobuf:"bytes,2,opt,name=scope,proto3" json:"scope,omitempty"` - // List of capabilities to request for the token. - Cap []string `protobuf:"bytes,3,rep,name=cap,proto3" json:"cap,omitempty"` -} - -func (x *ExchangeRefreshTokenRequest) Reset() { - *x = ExchangeRefreshTokenRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_oidc_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExchangeRefreshTokenRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExchangeRefreshTokenRequest) ProtoMessage() {} - -func (x *ExchangeRefreshTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_oidc_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExchangeRefreshTokenRequest.ProtoReflect.Descriptor instead. -func (*ExchangeRefreshTokenRequest) Descriptor() ([]byte, []int) { - return file_oidc_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *ExchangeRefreshTokenRequest) GetAud() []string { - if x != nil { - return x.Aud - } - return nil -} - -func (x *ExchangeRefreshTokenRequest) GetScope() string { - if x != nil { - return x.Scope - } - return "" -} - -func (x *ExchangeRefreshTokenRequest) GetCap() []string { - if x != nil { - return x.Cap - } - return nil -} - -type ExchangeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Aud []string `protobuf:"bytes,1,rep,name=aud,proto3" json:"aud,omitempty"` - Scope string `protobuf:"bytes,2,opt,name=scope,proto3" json:"scope,omitempty"` - Cluster string `protobuf:"bytes,3,opt,name=cluster,proto3" json:"cluster,omitempty"` - Identity string `protobuf:"bytes,4,opt,name=identity,proto3" json:"identity,omitempty"` - // List of capabilities to request for the token. - Cap []string `protobuf:"bytes,5,rep,name=cap,proto3" json:"cap,omitempty"` - // Whether or not to include the upstream token in the response - IncludeUpstreamToken bool `protobuf:"varint,6,opt,name=include_upstream_token,json=includeUpstreamToken,proto3" json:"include_upstream_token,omitempty"` -} - -func (x *ExchangeRequest) Reset() { - *x = ExchangeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_oidc_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExchangeRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExchangeRequest) ProtoMessage() {} - -func (x *ExchangeRequest) ProtoReflect() protoreflect.Message { - mi := &file_oidc_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExchangeRequest.ProtoReflect.Descriptor instead. -func (*ExchangeRequest) Descriptor() ([]byte, []int) { - return file_oidc_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *ExchangeRequest) GetAud() []string { - if x != nil { - return x.Aud - } - return nil -} - -func (x *ExchangeRequest) GetScope() string { - if x != nil { - return x.Scope - } - return "" -} - -func (x *ExchangeRequest) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - -func (x *ExchangeRequest) GetIdentity() string { - if x != nil { - return x.Identity - } - return "" -} - -func (x *ExchangeRequest) GetCap() []string { - if x != nil { - return x.Cap - } - return nil -} - -func (x *ExchangeRequest) GetIncludeUpstreamToken() bool { - if x != nil { - return x.IncludeUpstreamToken - } - return false -} - -type RawToken struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` -} - -func (x *RawToken) Reset() { - *x = RawToken{} - if protoimpl.UnsafeEnabled { - mi := &file_oidc_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RawToken) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RawToken) ProtoMessage() {} - -func (x *RawToken) ProtoReflect() protoreflect.Message { - mi := &file_oidc_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RawToken.ProtoReflect.Descriptor instead. -func (*RawToken) Descriptor() ([]byte, []int) { - return file_oidc_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *RawToken) GetToken() string { - if x != nil { - return x.Token - } - return "" -} - -// ExchangeRefreshToken returns a pair of token, in order to allow -// refresh token to also be rotated. -type TokenPair struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Token *RawToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - RefreshToken *RawToken `protobuf:"bytes,2,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` -} - -func (x *TokenPair) Reset() { - *x = TokenPair{} - if protoimpl.UnsafeEnabled { - mi := &file_oidc_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TokenPair) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TokenPair) ProtoMessage() {} - -func (x *TokenPair) ProtoReflect() protoreflect.Message { - mi := &file_oidc_platform_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 TokenPair.ProtoReflect.Descriptor instead. -func (*TokenPair) Descriptor() ([]byte, []int) { - return file_oidc_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *TokenPair) GetToken() *RawToken { - if x != nil { - return x.Token - } - return nil -} - -func (x *TokenPair) GetRefreshToken() *RawToken { - if x != nil { - return x.RefreshToken - } - return nil -} - -var File_oidc_platform_proto protoreflect.FileDescriptor - -var file_oidc_platform_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x1a, - 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x1b, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x75, 0x64, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x61, 0x75, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x12, 0x39, 0x0a, 0x03, 0x63, 0x61, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x27, 0xfa, - 0x41, 0x24, 0x0a, 0x22, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x63, - 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x43, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x03, 0x63, 0x61, 0x70, 0x22, 0xe0, 0x01, 0x0a, 0x0f, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x61, 0x75, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x61, 0x75, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x39, 0x0a, - 0x03, 0x63, 0x61, 0x70, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x27, 0xfa, 0x41, 0x24, 0x0a, - 0x22, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x63, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x52, 0x03, 0x63, 0x61, 0x70, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x20, - 0x0a, 0x08, 0x52, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x22, 0x8e, 0x01, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x12, 0x38, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x52, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x47, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x52, 0x61, 0x77, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x32, 0xb4, 0x02, 0x0a, 0x14, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x08, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, - 0x64, 0x63, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x52, 0x61, - 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x5a, 0x0f, - 0x12, 0x0d, 0x2f, 0x73, 0x74, 0x73, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, - 0x0d, 0x2f, 0x73, 0x74, 0x73, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x97, - 0x01, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, - 0x64, 0x63, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, - 0x61, 0x69, 0x72, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x1b, 0x2f, 0x73, 0x74, - 0x73, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x65, 0x0a, 0x23, 0x64, 0x65, 0x76, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x76, 0x31, 0x42, - 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4f, 0x49, 0x44, 0x43, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x2f, 0x76, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_oidc_platform_proto_rawDescOnce sync.Once - file_oidc_platform_proto_rawDescData = file_oidc_platform_proto_rawDesc -) - -func file_oidc_platform_proto_rawDescGZIP() []byte { - file_oidc_platform_proto_rawDescOnce.Do(func() { - file_oidc_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_oidc_platform_proto_rawDescData) - }) - return file_oidc_platform_proto_rawDescData -} - -var file_oidc_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_oidc_platform_proto_goTypes = []interface{}{ - (*ExchangeRefreshTokenRequest)(nil), // 0: chainguard.platform.oidc.ExchangeRefreshTokenRequest - (*ExchangeRequest)(nil), // 1: chainguard.platform.oidc.ExchangeRequest - (*RawToken)(nil), // 2: chainguard.platform.oidc.RawToken - (*TokenPair)(nil), // 3: chainguard.platform.oidc.TokenPair -} -var file_oidc_platform_proto_depIdxs = []int32{ - 2, // 0: chainguard.platform.oidc.TokenPair.token:type_name -> chainguard.platform.oidc.RawToken - 2, // 1: chainguard.platform.oidc.TokenPair.refresh_token:type_name -> chainguard.platform.oidc.RawToken - 1, // 2: chainguard.platform.oidc.SecurityTokenService.Exchange:input_type -> chainguard.platform.oidc.ExchangeRequest - 0, // 3: chainguard.platform.oidc.SecurityTokenService.ExchangeRefreshToken:input_type -> chainguard.platform.oidc.ExchangeRefreshTokenRequest - 2, // 4: chainguard.platform.oidc.SecurityTokenService.Exchange:output_type -> chainguard.platform.oidc.RawToken - 3, // 5: chainguard.platform.oidc.SecurityTokenService.ExchangeRefreshToken:output_type -> chainguard.platform.oidc.TokenPair - 4, // [4:6] is the sub-list for method output_type - 2, // [2:4] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_oidc_platform_proto_init() } -func file_oidc_platform_proto_init() { - if File_oidc_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_oidc_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeRefreshTokenRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_oidc_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_oidc_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RawToken); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_oidc_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TokenPair); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_oidc_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 4, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_oidc_platform_proto_goTypes, - DependencyIndexes: file_oidc_platform_proto_depIdxs, - MessageInfos: file_oidc_platform_proto_msgTypes, - }.Build() - File_oidc_platform_proto = out.File - file_oidc_platform_proto_rawDesc = nil - file_oidc_platform_proto_goTypes = nil - file_oidc_platform_proto_depIdxs = nil -} diff --git a/proto/platform/oidc/v1/oidc.platform.pb.gw.go b/proto/platform/oidc/v1/oidc.platform.pb.gw.go deleted file mode 100644 index e3e6dd52..00000000 --- a/proto/platform/oidc/v1/oidc.platform.pb.gw.go +++ /dev/null @@ -1,336 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: oidc.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -var ( - filter_SecurityTokenService_Exchange_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_SecurityTokenService_Exchange_0(ctx context.Context, marshaler runtime.Marshaler, client SecurityTokenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExchangeRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_Exchange_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.Exchange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SecurityTokenService_Exchange_0(ctx context.Context, marshaler runtime.Marshaler, server SecurityTokenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExchangeRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_Exchange_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.Exchange(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_SecurityTokenService_Exchange_1 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_SecurityTokenService_Exchange_1(ctx context.Context, marshaler runtime.Marshaler, client SecurityTokenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExchangeRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_Exchange_1); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.Exchange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SecurityTokenService_Exchange_1(ctx context.Context, marshaler runtime.Marshaler, server SecurityTokenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExchangeRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_Exchange_1); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.Exchange(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_SecurityTokenService_ExchangeRefreshToken_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_SecurityTokenService_ExchangeRefreshToken_0(ctx context.Context, marshaler runtime.Marshaler, client SecurityTokenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExchangeRefreshTokenRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_ExchangeRefreshToken_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ExchangeRefreshToken(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SecurityTokenService_ExchangeRefreshToken_0(ctx context.Context, marshaler runtime.Marshaler, server SecurityTokenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ExchangeRefreshTokenRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_ExchangeRefreshToken_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ExchangeRefreshToken(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterSecurityTokenServiceHandlerServer registers the http handlers for service SecurityTokenService to "mux". -// UnaryRPC :call SecurityTokenServiceServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSecurityTokenServiceHandlerFromEndpoint instead. -func RegisterSecurityTokenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SecurityTokenServiceServer) error { - - mux.Handle("POST", pattern_SecurityTokenService_Exchange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/Exchange", runtime.WithHTTPPathPattern("/sts/exchange")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SecurityTokenService_Exchange_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityTokenService_Exchange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_SecurityTokenService_Exchange_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/Exchange", runtime.WithHTTPPathPattern("/sts/exchange")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SecurityTokenService_Exchange_1(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityTokenService_Exchange_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_SecurityTokenService_ExchangeRefreshToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/ExchangeRefreshToken", runtime.WithHTTPPathPattern("/sts/exchange_refresh_token")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SecurityTokenService_ExchangeRefreshToken_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityTokenService_ExchangeRefreshToken_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterSecurityTokenServiceHandlerFromEndpoint is same as RegisterSecurityTokenServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterSecurityTokenServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterSecurityTokenServiceHandler(ctx, mux, conn) -} - -// RegisterSecurityTokenServiceHandler registers the http handlers for service SecurityTokenService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterSecurityTokenServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterSecurityTokenServiceHandlerClient(ctx, mux, NewSecurityTokenServiceClient(conn)) -} - -// RegisterSecurityTokenServiceHandlerClient registers the http handlers for service SecurityTokenService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SecurityTokenServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SecurityTokenServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "SecurityTokenServiceClient" to call the correct interceptors. -func RegisterSecurityTokenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SecurityTokenServiceClient) error { - - mux.Handle("POST", pattern_SecurityTokenService_Exchange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/Exchange", runtime.WithHTTPPathPattern("/sts/exchange")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SecurityTokenService_Exchange_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityTokenService_Exchange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_SecurityTokenService_Exchange_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/Exchange", runtime.WithHTTPPathPattern("/sts/exchange")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SecurityTokenService_Exchange_1(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityTokenService_Exchange_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_SecurityTokenService_ExchangeRefreshToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/ExchangeRefreshToken", runtime.WithHTTPPathPattern("/sts/exchange_refresh_token")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SecurityTokenService_ExchangeRefreshToken_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SecurityTokenService_ExchangeRefreshToken_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_SecurityTokenService_Exchange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sts", "exchange"}, "")) - - pattern_SecurityTokenService_Exchange_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sts", "exchange"}, "")) - - pattern_SecurityTokenService_ExchangeRefreshToken_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sts", "exchange_refresh_token"}, "")) -) - -var ( - forward_SecurityTokenService_Exchange_0 = runtime.ForwardResponseMessage - - forward_SecurityTokenService_Exchange_1 = runtime.ForwardResponseMessage - - forward_SecurityTokenService_ExchangeRefreshToken_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/oidc/v1/oidc.platform.proto b/proto/platform/oidc/v1/oidc.platform.proto deleted file mode 100644 index df9442b3..00000000 --- a/proto/platform/oidc/v1/oidc.platform.proto +++ /dev/null @@ -1,64 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/oidc/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.oidc.v1"; -option java_outer_classname = "PlatformOIDCProto"; - -package chainguard.platform.oidc; - -import "google/api/annotations.proto"; -import "google/api/resource.proto"; - -service SecurityTokenService { - rpc Exchange(ExchangeRequest) returns (RawToken) { - option (google.api.http) = { - post: "/sts/exchange" - additional_bindings { - get: "/sts/exchange" - } - }; - } - - rpc ExchangeRefreshToken(ExchangeRefreshTokenRequest) returns (TokenPair) { - option (google.api.http) = { - post: "/sts/exchange_refresh_token" - }; - } -} - -message ExchangeRefreshTokenRequest { - repeated string aud = 1; - string scope = 2; - - // List of capabilities to request for the token. - repeated string cap = 3 [(google.api.resource_reference) = { - type: "chainguard.capabilities/Capability" - }]; -} - -message ExchangeRequest { - repeated string aud = 1; - string scope = 2; - string cluster = 3; - string identity = 4; - - // List of capabilities to request for the token. - repeated string cap = 5 [(google.api.resource_reference) = { - type: "chainguard.capabilities/Capability" - }]; - - // Whether or not to include the upstream token in the response - bool include_upstream_token = 6; -} - -message RawToken { - string token = 1; -} - -// ExchangeRefreshToken returns a pair of token, in order to allow -// refresh token to also be rotated. -message TokenPair { - RawToken token = 1; - RawToken refresh_token = 2; -} diff --git a/proto/platform/oidc/v1/oidc.platform_grpc.pb.go b/proto/platform/oidc/v1/oidc.platform_grpc.pb.go deleted file mode 100644 index f08ece4e..00000000 --- a/proto/platform/oidc/v1/oidc.platform_grpc.pb.go +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: oidc.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - SecurityTokenService_Exchange_FullMethodName = "/chainguard.platform.oidc.SecurityTokenService/Exchange" - SecurityTokenService_ExchangeRefreshToken_FullMethodName = "/chainguard.platform.oidc.SecurityTokenService/ExchangeRefreshToken" -) - -// SecurityTokenServiceClient is the client API for SecurityTokenService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type SecurityTokenServiceClient interface { - Exchange(ctx context.Context, in *ExchangeRequest, opts ...grpc.CallOption) (*RawToken, error) - ExchangeRefreshToken(ctx context.Context, in *ExchangeRefreshTokenRequest, opts ...grpc.CallOption) (*TokenPair, error) -} - -type securityTokenServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewSecurityTokenServiceClient(cc grpc.ClientConnInterface) SecurityTokenServiceClient { - return &securityTokenServiceClient{cc} -} - -func (c *securityTokenServiceClient) Exchange(ctx context.Context, in *ExchangeRequest, opts ...grpc.CallOption) (*RawToken, error) { - out := new(RawToken) - err := c.cc.Invoke(ctx, SecurityTokenService_Exchange_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *securityTokenServiceClient) ExchangeRefreshToken(ctx context.Context, in *ExchangeRefreshTokenRequest, opts ...grpc.CallOption) (*TokenPair, error) { - out := new(TokenPair) - err := c.cc.Invoke(ctx, SecurityTokenService_ExchangeRefreshToken_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// SecurityTokenServiceServer is the server API for SecurityTokenService service. -// All implementations must embed UnimplementedSecurityTokenServiceServer -// for forward compatibility -type SecurityTokenServiceServer interface { - Exchange(context.Context, *ExchangeRequest) (*RawToken, error) - ExchangeRefreshToken(context.Context, *ExchangeRefreshTokenRequest) (*TokenPair, error) - mustEmbedUnimplementedSecurityTokenServiceServer() -} - -// UnimplementedSecurityTokenServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSecurityTokenServiceServer struct { -} - -func (UnimplementedSecurityTokenServiceServer) Exchange(context.Context, *ExchangeRequest) (*RawToken, error) { - return nil, status.Errorf(codes.Unimplemented, "method Exchange not implemented") -} -func (UnimplementedSecurityTokenServiceServer) ExchangeRefreshToken(context.Context, *ExchangeRefreshTokenRequest) (*TokenPair, error) { - return nil, status.Errorf(codes.Unimplemented, "method ExchangeRefreshToken not implemented") -} -func (UnimplementedSecurityTokenServiceServer) mustEmbedUnimplementedSecurityTokenServiceServer() {} - -// UnsafeSecurityTokenServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to SecurityTokenServiceServer will -// result in compilation errors. -type UnsafeSecurityTokenServiceServer interface { - mustEmbedUnimplementedSecurityTokenServiceServer() -} - -func RegisterSecurityTokenServiceServer(s grpc.ServiceRegistrar, srv SecurityTokenServiceServer) { - s.RegisterService(&SecurityTokenService_ServiceDesc, srv) -} - -func _SecurityTokenService_Exchange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ExchangeRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SecurityTokenServiceServer).Exchange(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SecurityTokenService_Exchange_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SecurityTokenServiceServer).Exchange(ctx, req.(*ExchangeRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SecurityTokenService_ExchangeRefreshToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ExchangeRefreshTokenRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SecurityTokenServiceServer).ExchangeRefreshToken(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SecurityTokenService_ExchangeRefreshToken_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SecurityTokenServiceServer).ExchangeRefreshToken(ctx, req.(*ExchangeRefreshTokenRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// SecurityTokenService_ServiceDesc is the grpc.ServiceDesc for SecurityTokenService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var SecurityTokenService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.oidc.SecurityTokenService", - HandlerType: (*SecurityTokenServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Exchange", - Handler: _SecurityTokenService_Exchange_Handler, - }, - { - MethodName: "ExchangeRefreshToken", - Handler: _SecurityTokenService_ExchangeRefreshToken_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "oidc.platform.proto", -} diff --git a/proto/platform/oidc/v1/test/mock_client.go b/proto/platform/oidc/v1/test/mock_client.go deleted file mode 100644 index 5b04441b..00000000 --- a/proto/platform/oidc/v1/test/mock_client.go +++ /dev/null @@ -1,26 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - oidc "chainguard.dev/sdk/proto/platform/oidc/v1" -) - -type MockOIDCClient struct { - OnClose error - - STSClient MockSTSClient -} - -var _ oidc.Clients = (*MockOIDCClient)(nil) - -func (m MockOIDCClient) STS() oidc.SecurityTokenServiceClient { - return &m.STSClient -} - -func (m MockOIDCClient) Close() error { - return m.OnClose -} diff --git a/proto/platform/oidc/v1/test/mock_sts.go b/proto/platform/oidc/v1/test/mock_sts.go deleted file mode 100644 index 2c19fb58..00000000 --- a/proto/platform/oidc/v1/test/mock_sts.go +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - oidc "chainguard.dev/sdk/proto/platform/oidc/v1" - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" -) - -var _ oidc.SecurityTokenServiceClient = (*MockSTSClient)(nil) - -type MockSTSClient struct { - OnExchange []STSOnExchange - OnGetAccessToken []STSOnGetAccessToken -} - -func (m MockSTSClient) Exchange(_ context.Context, given *oidc.ExchangeRequest, _ ...grpc.CallOption) (*oidc.RawToken, error) { - for _, o := range m.OnExchange { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Exchanged, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockSTSClient) ExchangeRefreshToken(_ context.Context, given *oidc.ExchangeRefreshTokenRequest, _ ...grpc.CallOption) (*oidc.TokenPair, error) { - for _, o := range m.OnGetAccessToken { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Exchanged, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -type STSOnExchange struct { - Given *oidc.ExchangeRequest - Exchanged *oidc.RawToken - Error error -} - -type STSOnGetAccessToken struct { - Given *oidc.ExchangeRefreshTokenRequest - Exchanged *oidc.TokenPair - Error error -} diff --git a/proto/platform/ping/v1/clients.go b/proto/platform/ping/v1/clients.go deleted file mode 100644 index c686bbc7..00000000 --- a/proto/platform/ping/v1/clients.go +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "context" - "fmt" - "net/url" - "time" - - delegate "chainguard.dev/go-grpc-kit/pkg/options" - "github.com/chainguard-dev/clog" - "google.golang.org/grpc" - - "chainguard.dev/sdk/auth" -) - -type Clients interface { - Ping() PingServiceClient - - Close() error -} - -func NewClients(ctx context.Context, addr string, token string) (Clients, error) { - uri, err := url.Parse(addr) - if err != nil { - return nil, fmt.Errorf("failed to parse ping service address, must be a url: %w", err) - } - - target, opts := delegate.GRPCOptions(*uri) - - // TODO: we may want to require transport security at some future point. - if cred := auth.NewFromToken(ctx, token, false); cred != nil { - opts = append(opts, grpc.WithPerRPCCredentials(cred)) - } else { - clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") - } - - var cancel context.CancelFunc - if _, timeoutSet := ctx.Deadline(); !timeoutSet { - ctx, cancel = context.WithTimeout(ctx, 300*time.Second) - defer cancel() - } - conn, err := grpc.DialContext(ctx, target, opts...) - if err != nil { - return nil, fmt.Errorf("ping.NewClients: failed to connect to the iam server: %w", err) - } - - return &clients{ - ping: NewPingServiceClient(conn), - - conn: conn, - }, nil -} - -func NewClientsFromConnection(conn *grpc.ClientConn) Clients { - return &clients{ - ping: NewPingServiceClient(conn), - // conn is not set, this client struct does not own closing it. - } -} - -type clients struct { - ping PingServiceClient - conn *grpc.ClientConn -} - -func (c *clients) Ping() PingServiceClient { - return c.ping -} - -func (c *clients) Close() error { - if c.conn != nil { - return c.conn.Close() - } - return nil -} diff --git a/proto/platform/ping/v1/doc.go b/proto/platform/ping/v1/doc.go deleted file mode 100644 index 4e6c5d67..00000000 --- a/proto/platform/ping/v1/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package v1 contains the v1 GRPC client and server definitions -// for implementing ping interactions for the Platform. -// -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. ping.platform.proto -package v1 diff --git a/proto/platform/ping/v1/ping.platform.pb.go b/proto/platform/ping/v1/ping.platform.pb.go deleted file mode 100644 index 45a42d39..00000000 --- a/proto/platform/ping/v1/ping.platform.pb.go +++ /dev/null @@ -1,216 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: ping.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type PingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *PingRequest) Reset() { - *x = PingRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_ping_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PingRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PingRequest) ProtoMessage() {} - -func (x *PingRequest) ProtoReflect() protoreflect.Message { - mi := &file_ping_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. -func (*PingRequest) Descriptor() ([]byte, []int) { - return file_ping_platform_proto_rawDescGZIP(), []int{0} -} - -type Response struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` -} - -func (x *Response) Reset() { - *x = Response{} - if protoimpl.UnsafeEnabled { - mi := &file_ping_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Response) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Response) ProtoMessage() {} - -func (x *Response) ProtoReflect() protoreflect.Message { - mi := &file_ping_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Response.ProtoReflect.Descriptor instead. -func (*Response) Descriptor() ([]byte, []int) { - return file_ping_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *Response) GetResponse() string { - if x != nil { - return x.Response - } - return "" -} - -var File_ping_platform_proto protoreflect.FileDescriptor - -var file_ping_platform_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x69, 0x6e, 0x67, 0x1a, - 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x26, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x7f, 0x0a, 0x0b, - 0x50, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x70, 0x0a, 0x04, 0x50, - 0x69, 0x6e, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x50, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x0a, 0x00, 0x42, 0x65, 0x0a, - 0x23, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, - 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x69, 0x6e, - 0x67, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_ping_platform_proto_rawDescOnce sync.Once - file_ping_platform_proto_rawDescData = file_ping_platform_proto_rawDesc -) - -func file_ping_platform_proto_rawDescGZIP() []byte { - file_ping_platform_proto_rawDescOnce.Do(func() { - file_ping_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_ping_platform_proto_rawDescData) - }) - return file_ping_platform_proto_rawDescData -} - -var file_ping_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_ping_platform_proto_goTypes = []interface{}{ - (*PingRequest)(nil), // 0: chainguard.platform.ping.PingRequest - (*Response)(nil), // 1: chainguard.platform.ping.Response -} -var file_ping_platform_proto_depIdxs = []int32{ - 0, // 0: chainguard.platform.ping.PingService.Ping:input_type -> chainguard.platform.ping.PingRequest - 1, // 1: chainguard.platform.ping.PingService.Ping:output_type -> chainguard.platform.ping.Response - 1, // [1:2] is the sub-list for method output_type - 0, // [0:1] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_ping_platform_proto_init() } -func file_ping_platform_proto_init() { - if File_ping_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_ping_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PingRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_ping_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Response); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_ping_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_ping_platform_proto_goTypes, - DependencyIndexes: file_ping_platform_proto_depIdxs, - MessageInfos: file_ping_platform_proto_msgTypes, - }.Build() - File_ping_platform_proto = out.File - file_ping_platform_proto_rawDesc = nil - file_ping_platform_proto_goTypes = nil - file_ping_platform_proto_depIdxs = nil -} diff --git a/proto/platform/ping/v1/ping.platform.pb.gw.go b/proto/platform/ping/v1/ping.platform.pb.gw.go deleted file mode 100644 index d906d932..00000000 --- a/proto/platform/ping/v1/ping.platform.pb.gw.go +++ /dev/null @@ -1,148 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: ping.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_PingService_Ping_0(ctx context.Context, marshaler runtime.Marshaler, client PingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PingRequest - var metadata runtime.ServerMetadata - - msg, err := client.Ping(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PingService_Ping_0(ctx context.Context, marshaler runtime.Marshaler, server PingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PingRequest - var metadata runtime.ServerMetadata - - msg, err := server.Ping(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterPingServiceHandlerServer registers the http handlers for service PingService to "mux". -// UnaryRPC :call PingServiceServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPingServiceHandlerFromEndpoint instead. -func RegisterPingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PingServiceServer) error { - - mux.Handle("GET", pattern_PingService_Ping_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.ping.PingService/Ping", runtime.WithHTTPPathPattern("/ping/v1/ping")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PingService_Ping_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PingService_Ping_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterPingServiceHandlerFromEndpoint is same as RegisterPingServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterPingServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterPingServiceHandler(ctx, mux, conn) -} - -// RegisterPingServiceHandler registers the http handlers for service PingService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterPingServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterPingServiceHandlerClient(ctx, mux, NewPingServiceClient(conn)) -} - -// RegisterPingServiceHandlerClient registers the http handlers for service PingService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PingServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PingServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "PingServiceClient" to call the correct interceptors. -func RegisterPingServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PingServiceClient) error { - - mux.Handle("GET", pattern_PingService_Ping_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.ping.PingService/Ping", runtime.WithHTTPPathPattern("/ping/v1/ping")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PingService_Ping_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PingService_Ping_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_PingService_Ping_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"ping", "v1"}, "")) -) - -var ( - forward_PingService_Ping_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/ping/v1/ping.platform.proto b/proto/platform/ping/v1/ping.platform.proto deleted file mode 100644 index 86f8d93d..00000000 --- a/proto/platform/ping/v1/ping.platform.proto +++ /dev/null @@ -1,29 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/ping/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.ping.v1"; -option java_outer_classname = "PlatformPingProto"; - -package chainguard.platform.ping; - -import "google/api/annotations.proto"; -import "annotations/auth.proto"; - -service PingService { - rpc Ping(PingRequest) returns (Response) { - option (google.api.http) = { - get: "/ping/v1/ping" - }; - option (chainguard.annotations.iam) = { - // This method doesn't require authentication. - disabled: {} - }; - } -} - -message PingRequest {} - -message Response { - string response = 1; -} diff --git a/proto/platform/ping/v1/ping.platform_grpc.pb.go b/proto/platform/ping/v1/ping.platform_grpc.pb.go deleted file mode 100644 index 8367718d..00000000 --- a/proto/platform/ping/v1/ping.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: ping.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - PingService_Ping_FullMethodName = "/chainguard.platform.ping.PingService/Ping" -) - -// PingServiceClient is the client API for PingService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type PingServiceClient interface { - Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*Response, error) -} - -type pingServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewPingServiceClient(cc grpc.ClientConnInterface) PingServiceClient { - return &pingServiceClient{cc} -} - -func (c *pingServiceClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*Response, error) { - out := new(Response) - err := c.cc.Invoke(ctx, PingService_Ping_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// PingServiceServer is the server API for PingService service. -// All implementations must embed UnimplementedPingServiceServer -// for forward compatibility -type PingServiceServer interface { - Ping(context.Context, *PingRequest) (*Response, error) - mustEmbedUnimplementedPingServiceServer() -} - -// UnimplementedPingServiceServer must be embedded to have forward compatible implementations. -type UnimplementedPingServiceServer struct { -} - -func (UnimplementedPingServiceServer) Ping(context.Context, *PingRequest) (*Response, error) { - return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") -} -func (UnimplementedPingServiceServer) mustEmbedUnimplementedPingServiceServer() {} - -// UnsafePingServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to PingServiceServer will -// result in compilation errors. -type UnsafePingServiceServer interface { - mustEmbedUnimplementedPingServiceServer() -} - -func RegisterPingServiceServer(s grpc.ServiceRegistrar, srv PingServiceServer) { - s.RegisterService(&PingService_ServiceDesc, srv) -} - -func _PingService_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PingRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PingServiceServer).Ping(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: PingService_Ping_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PingServiceServer).Ping(ctx, req.(*PingRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// PingService_ServiceDesc is the grpc.ServiceDesc for PingService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var PingService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.ping.PingService", - HandlerType: (*PingServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Ping", - Handler: _PingService_Ping_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "ping.platform.proto", -} diff --git a/proto/platform/ping/v1/test/ping.go b/proto/platform/ping/v1/test/ping.go deleted file mode 100644 index e91d6763..00000000 --- a/proto/platform/ping/v1/test/ping.go +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "google.golang.org/grpc" - - ping "chainguard.dev/sdk/proto/platform/ping/v1" -) - -var _ ping.Clients = (*MockPingServiceClients)(nil) - -type MockPingServiceClients struct { - OnClose error - - PingServiceClient MockPingServiceClient -} - -func (m MockPingServiceClients) Ping() ping.PingServiceClient { - return &m.PingServiceClient -} - -func (m MockPingServiceClients) Close() error { - return m.OnClose -} - -var _ ping.PingServiceClient = (*MockPingServiceClient)(nil) - -type MockPingServiceClient struct { - ping.PingServiceClient - - OnPing Ping -} - -type Ping struct { - Given *ping.PingRequest - Response *ping.Response - Error error -} - -func (m MockPingServiceClient) Ping(_ context.Context, _ *ping.PingRequest, _ ...grpc.CallOption) (*ping.Response, error) { - if m.OnPing.Given == nil { - return nil, fmt.Errorf("OnPing.Given defined to be %v", m.OnPing.Given) - } - return &ping.Response{}, nil -} diff --git a/proto/platform/registry/v1/clients.go b/proto/platform/registry/v1/clients.go deleted file mode 100644 index 4b892a88..00000000 --- a/proto/platform/registry/v1/clients.go +++ /dev/null @@ -1,81 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "context" - "fmt" - "net/url" - "time" - - delegate "chainguard.dev/go-grpc-kit/pkg/options" - "github.com/chainguard-dev/clog" - "google.golang.org/grpc" - - "chainguard.dev/sdk/auth" -) - -type Clients interface { - Registry() RegistryClient - - Close() error -} - -func NewClients(ctx context.Context, addr string, token string) (Clients, error) { - uri, err := url.Parse(addr) - if err != nil { - return nil, fmt.Errorf("failed to parse tenant service address, must be a url: %w", err) - } - - target, opts := delegate.GRPCOptions(*uri) - - // TODO: we may want to require transport security at some future point. - if cred := auth.NewFromToken(ctx, token, false); cred != nil { - opts = append(opts, grpc.WithPerRPCCredentials(cred)) - } else { - clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") - } - - var cancel context.CancelFunc - if _, timeoutSet := ctx.Deadline(); !timeoutSet { - ctx, cancel = context.WithTimeout(ctx, 300*time.Second) - defer cancel() - } - conn, err := grpc.DialContext(ctx, target, opts...) - if err != nil { - return nil, fmt.Errorf("registry.NewClients: failed to connect to the iam server: %w", err) - } - - return &clients{ - registry: NewRegistryClient(conn), - - conn: conn, - }, nil -} - -func NewClientsFromConnection(conn *grpc.ClientConn) Clients { - return &clients{ - registry: NewRegistryClient(conn), - // conn is not set, this client struct does not own closing it. - } -} - -type clients struct { - registry RegistryClient - - conn *grpc.ClientConn -} - -func (c *clients) Registry() RegistryClient { - return c.registry -} - -func (c *clients) Close() error { - if c.conn != nil { - return c.conn.Close() - } - return nil -} diff --git a/proto/platform/registry/v1/doc.go b/proto/platform/registry/v1/doc.go deleted file mode 100644 index d7b8247f..00000000 --- a/proto/platform/registry/v1/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package v1 contains the v1 GRPC client and server definitions -// for implementing Registry interactions. -// -//go:generate protoc -I . -I ../.. -I ../../.. -I ../../tenant/v1 --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. registry.platform.proto -package v1 diff --git a/proto/platform/registry/v1/registry.platform.event.go b/proto/platform/registry/v1/registry.platform.event.go deleted file mode 100644 index 78043833..00000000 --- a/proto/platform/registry/v1/registry.platform.event.go +++ /dev/null @@ -1,21 +0,0 @@ -/* -Copyright 2024 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *Repo) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return x.GetId(), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *Repo) CloudEventsSubject() string { - return x.GetId() -} diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go deleted file mode 100644 index fc59a93b..00000000 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ /dev/null @@ -1,4240 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: registry.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - v11 "chainguard.dev/sdk/proto/platform/tenant/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type CatalogTier int32 - -const ( - CatalogTier_UNKNOWN CatalogTier = 0 - CatalogTier_FREE CatalogTier = 1 - CatalogTier_STANDARD CatalogTier = 2 - CatalogTier_PREMIUM CatalogTier = 3 -) - -// Enum value maps for CatalogTier. -var ( - CatalogTier_name = map[int32]string{ - 0: "UNKNOWN", - 1: "FREE", - 2: "STANDARD", - 3: "PREMIUM", - } - CatalogTier_value = map[string]int32{ - "UNKNOWN": 0, - "FREE": 1, - "STANDARD": 2, - "PREMIUM": 3, - } -) - -func (x CatalogTier) Enum() *CatalogTier { - p := new(CatalogTier) - *p = x - return p -} - -func (x CatalogTier) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CatalogTier) Descriptor() protoreflect.EnumDescriptor { - return file_registry_platform_proto_enumTypes[0].Descriptor() -} - -func (CatalogTier) Type() protoreflect.EnumType { - return &file_registry_platform_proto_enumTypes[0] -} - -func (x CatalogTier) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CatalogTier.Descriptor instead. -func (CatalogTier) EnumDescriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{0} -} - -type Repo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the identifier of this specific repository. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name is the human-readable name of the repository. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // catalog_tier is the catalog tier this repository belongs to. - CatalogTier CatalogTier `protobuf:"varint,3,opt,name=catalog_tier,json=catalogTier,proto3,enum=chainguard.platform.registry.CatalogTier" json:"catalog_tier,omitempty"` - // bundles is a list of tags/labels that allow us to group repositories to each other for sales purposes. - Bundles []string `protobuf:"bytes,4,rep,name=bundles,proto3" json:"bundles,omitempty"` - // readme is raw Markdown file contents describing the repo. - Readme string `protobuf:"bytes,5,opt,name=readme,proto3" json:"readme,omitempty"` - // (optional) Repository sync configuration. If enabled, images are synced from the source to this repo. - // NOTE: This property can only be set by Chainguard. - // Note: the json_name defaults to "syncConfig" which causes our eventing - // system to not work properly (since the protobuf name is "sync_config") - SyncConfig *SyncConfig `protobuf:"bytes,6,opt,name=sync_config,proto3" json:"sync_config,omitempty"` -} - -func (x *Repo) Reset() { - *x = Repo{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Repo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Repo) ProtoMessage() {} - -func (x *Repo) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Repo.ProtoReflect.Descriptor instead. -func (*Repo) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Repo) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Repo) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Repo) GetCatalogTier() CatalogTier { - if x != nil { - return x.CatalogTier - } - return CatalogTier_UNKNOWN -} - -func (x *Repo) GetBundles() []string { - if x != nil { - return x.Bundles - } - return nil -} - -func (x *Repo) GetReadme() string { - if x != nil { - return x.Readme - } - return "" -} - -func (x *Repo) GetSyncConfig() *SyncConfig { - if x != nil { - return x.SyncConfig - } - return nil -} - -type SyncConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Repo ID to sync from. - Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` - // Controls whether exported tags will be uniquely labeled. - UniqueTags bool `protobuf:"varint,2,opt,name=unique_tags,json=uniqueTags,proto3" json:"unique_tags,omitempty"` - // When the catalog syncer should stop syncing from the source repository. - Expiration *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=expiration,proto3" json:"expiration,omitempty"` -} - -func (x *SyncConfig) Reset() { - *x = SyncConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncConfig) ProtoMessage() {} - -func (x *SyncConfig) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SyncConfig.ProtoReflect.Descriptor instead. -func (*SyncConfig) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *SyncConfig) GetSource() string { - if x != nil { - return x.Source - } - return "" -} - -func (x *SyncConfig) GetUniqueTags() bool { - if x != nil { - return x.UniqueTags - } - return false -} - -func (x *SyncConfig) GetExpiration() *timestamppb.Timestamp { - if x != nil { - return x.Expiration - } - return nil -} - -type CreateRepoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - Repo *Repo `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"` -} - -func (x *CreateRepoRequest) Reset() { - *x = CreateRepoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateRepoRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateRepoRequest) ProtoMessage() {} - -func (x *CreateRepoRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateRepoRequest.ProtoReflect.Descriptor instead. -func (*CreateRepoRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *CreateRepoRequest) GetParentId() string { - if x != nil { - return x.ParentId - } - return "" -} - -func (x *CreateRepoRequest) GetRepo() *Repo { - if x != nil { - return x.Repo - } - return nil -} - -type DeleteRepoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ID, UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteRepoRequest) Reset() { - *x = DeleteRepoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteRepoRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteRepoRequest) ProtoMessage() {} - -func (x *DeleteRepoRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_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 DeleteRepoRequest.ProtoReflect.Descriptor instead. -func (*DeleteRepoRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *DeleteRepoRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type RepoList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Repo `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *RepoList) Reset() { - *x = RepoList{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RepoList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RepoList) ProtoMessage() {} - -func (x *RepoList) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RepoList.ProtoReflect.Descriptor instead. -func (*RepoList) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *RepoList) GetItems() []*Repo { - if x != nil { - return x.Items - } - return nil -} - -type RepoFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // uidp filters records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` - // name is the exact name of the record. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // id is the identifier of this specific repository. - Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *RepoFilter) Reset() { - *x = RepoFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RepoFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RepoFilter) ProtoMessage() {} - -func (x *RepoFilter) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RepoFilter.ProtoReflect.Descriptor instead. -func (*RepoFilter) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *RepoFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *RepoFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *RepoFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type CreateTagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` - Tag *Tag `protobuf:"bytes,2,opt,name=tag,proto3" json:"tag,omitempty"` -} - -func (x *CreateTagRequest) Reset() { - *x = CreateTagRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateTagRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateTagRequest) ProtoMessage() {} - -func (x *CreateTagRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateTagRequest.ProtoReflect.Descriptor instead. -func (*CreateTagRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{6} -} - -func (x *CreateTagRequest) GetRepoId() string { - if x != nil { - return x.RepoId - } - return "" -} - -func (x *CreateTagRequest) GetTag() *Tag { - if x != nil { - return x.Tag - } - return nil -} - -type DeleteTagRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ID, UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteTagRequest) Reset() { - *x = DeleteTagRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteTagRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteTagRequest) ProtoMessage() {} - -func (x *DeleteTagRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteTagRequest.ProtoReflect.Descriptor instead. -func (*DeleteTagRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{7} -} - -func (x *DeleteTagRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type Tag struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, identifier of this Tag, a UIDP under a Repo. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name, the unique name of the Tag. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // digest, the digest of the manifest with this tag. - Digest string `protobuf:"bytes,3,opt,name=digest,proto3" json:"digest,omitempty"` - // last time this tag was updated. - LastUpdated *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` - // deprecated, true if the tag is deprecated. - Deprecated bool `protobuf:"varint,5,opt,name=deprecated,proto3" json:"deprecated,omitempty"` - // bundles is a list of tags/labels for sales purposes. - Bundles []string `protobuf:"bytes,6,rep,name=bundles,proto3" json:"bundles,omitempty"` -} - -func (x *Tag) Reset() { - *x = Tag{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Tag) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Tag) ProtoMessage() {} - -func (x *Tag) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Tag.ProtoReflect.Descriptor instead. -func (*Tag) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{8} -} - -func (x *Tag) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Tag) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Tag) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -func (x *Tag) GetLastUpdated() *timestamppb.Timestamp { - if x != nil { - return x.LastUpdated - } - return nil -} - -func (x *Tag) GetDeprecated() bool { - if x != nil { - return x.Deprecated - } - return false -} - -func (x *Tag) GetBundles() []string { - if x != nil { - return x.Bundles - } - return nil -} - -type TagFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // uidp filters records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` - // The unique name of the Tag to list. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // The timestamp after which returned records were updated. - UpdatedSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=updated_since,json=updatedSince,proto3" json:"updated_since,omitempty"` - // Exclude tags of the form "sha256-*". - ExcludeReferrers bool `protobuf:"varint,6,opt,name=exclude_referrers,json=excludeReferrers,proto3" json:"exclude_referrers,omitempty"` - // Exclude tags of the form "*-20yymmdd". - ExcludeDates bool `protobuf:"varint,7,opt,name=exclude_dates,json=excludeDates,proto3" json:"exclude_dates,omitempty"` - // Exclude tags of the form "*-r[0-9]+". - ExcludeEpochs bool `protobuf:"varint,8,opt,name=exclude_epochs,json=excludeEpochs,proto3" json:"exclude_epochs,omitempty"` - Id string `protobuf:"bytes,9,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *TagFilter) Reset() { - *x = TagFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TagFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TagFilter) ProtoMessage() {} - -func (x *TagFilter) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TagFilter.ProtoReflect.Descriptor instead. -func (*TagFilter) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{9} -} - -func (x *TagFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *TagFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *TagFilter) GetUpdatedSince() *timestamppb.Timestamp { - if x != nil { - return x.UpdatedSince - } - return nil -} - -func (x *TagFilter) GetExcludeReferrers() bool { - if x != nil { - return x.ExcludeReferrers - } - return false -} - -func (x *TagFilter) GetExcludeDates() bool { - if x != nil { - return x.ExcludeDates - } - return false -} - -func (x *TagFilter) GetExcludeEpochs() bool { - if x != nil { - return x.ExcludeEpochs - } - return false -} - -func (x *TagFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type TagList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Tag `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *TagList) Reset() { - *x = TagList{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TagList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TagList) ProtoMessage() {} - -func (x *TagList) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TagList.ProtoReflect.Descriptor instead. -func (*TagList) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{10} -} - -func (x *TagList) GetItems() []*Tag { - if x != nil { - return x.Items - } - return nil -} - -type TagHistoryFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // tag UIDP to list history for. - ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - Start *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=start,proto3" json:"start,omitempty"` - End *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=end,proto3" json:"end,omitempty"` -} - -func (x *TagHistoryFilter) Reset() { - *x = TagHistoryFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TagHistoryFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TagHistoryFilter) ProtoMessage() {} - -func (x *TagHistoryFilter) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TagHistoryFilter.ProtoReflect.Descriptor instead. -func (*TagHistoryFilter) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{11} -} - -func (x *TagHistoryFilter) GetParentId() string { - if x != nil { - return x.ParentId - } - return "" -} - -func (x *TagHistoryFilter) GetStart() *timestamppb.Timestamp { - if x != nil { - return x.Start - } - return nil -} - -func (x *TagHistoryFilter) GetEnd() *timestamppb.Timestamp { - if x != nil { - return x.End - } - return nil -} - -type TagHistoryList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*TagHistory `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *TagHistoryList) Reset() { - *x = TagHistoryList{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TagHistoryList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TagHistoryList) ProtoMessage() {} - -func (x *TagHistoryList) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TagHistoryList.ProtoReflect.Descriptor instead. -func (*TagHistoryList) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{12} -} - -func (x *TagHistoryList) GetItems() []*TagHistory { - if x != nil { - return x.Items - } - return nil -} - -type TagHistory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UpdateTimestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=update_timestamp,json=updateTimestamp,proto3" json:"update_timestamp,omitempty"` - Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` -} - -func (x *TagHistory) Reset() { - *x = TagHistory{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TagHistory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TagHistory) ProtoMessage() {} - -func (x *TagHistory) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TagHistory.ProtoReflect.Descriptor instead. -func (*TagHistory) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{13} -} - -func (x *TagHistory) GetUpdateTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.UpdateTimestamp - } - return nil -} - -func (x *TagHistory) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -type DiffImageResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Packages *PackagesDiff `protobuf:"bytes,1,opt,name=packages,proto3" json:"packages,omitempty"` - Vulnerabilities *VulnerabilitiesDiff `protobuf:"bytes,2,opt,name=vulnerabilities,proto3" json:"vulnerabilities,omitempty"` - Config *ImageConfigDiff `protobuf:"bytes,4,opt,name=config,proto3" json:"config,omitempty"` - // warnings is a list of warning messages to return to the requesting client. - // Warning messages describe a problem the client making the DiffImageRequest should correct or be aware of. - // Warnings over 256 characters and large numbers of warnings may be truncated. - Warnings []string `protobuf:"bytes,5,rep,name=warnings,proto3" json:"warnings,omitempty"` -} - -func (x *DiffImageResponse) Reset() { - *x = DiffImageResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DiffImageResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DiffImageResponse) ProtoMessage() {} - -func (x *DiffImageResponse) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DiffImageResponse.ProtoReflect.Descriptor instead. -func (*DiffImageResponse) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{14} -} - -func (x *DiffImageResponse) GetPackages() *PackagesDiff { - if x != nil { - return x.Packages - } - return nil -} - -func (x *DiffImageResponse) GetVulnerabilities() *VulnerabilitiesDiff { - if x != nil { - return x.Vulnerabilities - } - return nil -} - -func (x *DiffImageResponse) GetConfig() *ImageConfigDiff { - if x != nil { - return x.Config - } - return nil -} - -func (x *DiffImageResponse) GetWarnings() []string { - if x != nil { - return x.Warnings - } - return nil -} - -type ImageConfigDiff struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Changed *ChangedImageConfig `protobuf:"bytes,1,opt,name=changed,proto3" json:"changed,omitempty"` -} - -func (x *ImageConfigDiff) Reset() { - *x = ImageConfigDiff{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ImageConfigDiff) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ImageConfigDiff) ProtoMessage() {} - -func (x *ImageConfigDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ImageConfigDiff.ProtoReflect.Descriptor instead. -func (*ImageConfigDiff) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{15} -} - -func (x *ImageConfigDiff) GetChanged() *ChangedImageConfig { - if x != nil { - return x.Changed - } - return nil -} - -type ChangedImageConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ChangedUser *ChangedImageConfig_ChangedUser `protobuf:"bytes,1,opt,name=changedUser,proto3" json:"changedUser,omitempty"` - ChangedWorkingDir *ChangedImageConfig_ChangedWorkingDir `protobuf:"bytes,2,opt,name=changedWorkingDir,proto3" json:"changedWorkingDir,omitempty"` - Entrypoints *ChangedImageConfig_EntrypointDiff `protobuf:"bytes,3,opt,name=entrypoints,proto3" json:"entrypoints,omitempty"` - Envs *ChangedImageConfig_EnvDiff `protobuf:"bytes,4,opt,name=envs,proto3" json:"envs,omitempty"` - Cmds *ChangedImageConfig_CmdDiff `protobuf:"bytes,5,opt,name=cmds,proto3" json:"cmds,omitempty"` - ChangedStopSignal *ChangedImageConfig_ChangedStopSignal `protobuf:"bytes,6,opt,name=changedStopSignal,proto3" json:"changedStopSignal,omitempty"` - Volumes *ChangedImageConfig_VolumeDiff `protobuf:"bytes,7,opt,name=volumes,proto3" json:"volumes,omitempty"` -} - -func (x *ChangedImageConfig) Reset() { - *x = ChangedImageConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangedImageConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangedImageConfig) ProtoMessage() {} - -func (x *ChangedImageConfig) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChangedImageConfig.ProtoReflect.Descriptor instead. -func (*ChangedImageConfig) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{16} -} - -func (x *ChangedImageConfig) GetChangedUser() *ChangedImageConfig_ChangedUser { - if x != nil { - return x.ChangedUser - } - return nil -} - -func (x *ChangedImageConfig) GetChangedWorkingDir() *ChangedImageConfig_ChangedWorkingDir { - if x != nil { - return x.ChangedWorkingDir - } - return nil -} - -func (x *ChangedImageConfig) GetEntrypoints() *ChangedImageConfig_EntrypointDiff { - if x != nil { - return x.Entrypoints - } - return nil -} - -func (x *ChangedImageConfig) GetEnvs() *ChangedImageConfig_EnvDiff { - if x != nil { - return x.Envs - } - return nil -} - -func (x *ChangedImageConfig) GetCmds() *ChangedImageConfig_CmdDiff { - if x != nil { - return x.Cmds - } - return nil -} - -func (x *ChangedImageConfig) GetChangedStopSignal() *ChangedImageConfig_ChangedStopSignal { - if x != nil { - return x.ChangedStopSignal - } - return nil -} - -func (x *ChangedImageConfig) GetVolumes() *ChangedImageConfig_VolumeDiff { - if x != nil { - return x.Volumes - } - return nil -} - -type ImageConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // User defines the username or UID which the process in the container should run as. - User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` - ExposedPorts map[string]*ImageConfig_ExposedPort `protobuf:"bytes,2,rep,name=exposed_ports,json=exposedPorts,proto3" json:"exposed_ports,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Env is a list of environment variables to be used in a container. - Env []string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty"` - // Entrypoint defines a list of arguments to use as the command to execute when the container starts. - Entrypoint []string `protobuf:"bytes,4,rep,name=entrypoint,proto3" json:"entrypoint,omitempty"` - // Cmd defines the default arguments to the entrypoint of the container. - Cmd []string `protobuf:"bytes,5,rep,name=cmd,proto3" json:"cmd,omitempty"` - // Volumes is a set of directories describing where the process is likely write data specific to a container instance. - Volumes map[string]*ImageConfig_Volume `protobuf:"bytes,6,rep,name=volumes,proto3" json:"volumes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // WorkingDir sets the current working directory of the entrypoint process in the container. - WorkingDir string `protobuf:"bytes,7,opt,name=working_dir,json=workingDir,proto3" json:"working_dir,omitempty"` - // Labels contains arbitrary metadata for the container. - Labels map[string]string `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // StopSignal contains the system call signal that will be sent to the container to exit. - StopSignal string `protobuf:"bytes,9,opt,name=stop_signal,json=stopSignal,proto3" json:"stop_signal,omitempty"` -} - -func (x *ImageConfig) Reset() { - *x = ImageConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ImageConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ImageConfig) ProtoMessage() {} - -func (x *ImageConfig) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ImageConfig.ProtoReflect.Descriptor instead. -func (*ImageConfig) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{17} -} - -func (x *ImageConfig) GetUser() string { - if x != nil { - return x.User - } - return "" -} - -func (x *ImageConfig) GetExposedPorts() map[string]*ImageConfig_ExposedPort { - if x != nil { - return x.ExposedPorts - } - return nil -} - -func (x *ImageConfig) GetEnv() []string { - if x != nil { - return x.Env - } - return nil -} - -func (x *ImageConfig) GetEntrypoint() []string { - if x != nil { - return x.Entrypoint - } - return nil -} - -func (x *ImageConfig) GetCmd() []string { - if x != nil { - return x.Cmd - } - return nil -} - -func (x *ImageConfig) GetVolumes() map[string]*ImageConfig_Volume { - if x != nil { - return x.Volumes - } - return nil -} - -func (x *ImageConfig) GetWorkingDir() string { - if x != nil { - return x.WorkingDir - } - return "" -} - -func (x *ImageConfig) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -func (x *ImageConfig) GetStopSignal() string { - if x != nil { - return x.StopSignal - } - return "" -} - -type PackagesDiff struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Added []*PackageReference `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` - Removed []*PackageReference `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` - Changed []*PackagesDiff_ChangedPackageReference `protobuf:"bytes,3,rep,name=changed,proto3" json:"changed,omitempty"` -} - -func (x *PackagesDiff) Reset() { - *x = PackagesDiff{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PackagesDiff) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PackagesDiff) ProtoMessage() {} - -func (x *PackagesDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PackagesDiff.ProtoReflect.Descriptor instead. -func (*PackagesDiff) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{18} -} - -func (x *PackagesDiff) GetAdded() []*PackageReference { - if x != nil { - return x.Added - } - return nil -} - -func (x *PackagesDiff) GetRemoved() []*PackageReference { - if x != nil { - return x.Removed - } - return nil -} - -func (x *PackagesDiff) GetChanged() []*PackagesDiff_ChangedPackageReference { - if x != nil { - return x.Changed - } - return nil -} - -type VersionReference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - Reference string `protobuf:"bytes,2,opt,name=reference,proto3" json:"reference,omitempty"` -} - -func (x *VersionReference) Reset() { - *x = VersionReference{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VersionReference) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VersionReference) ProtoMessage() {} - -func (x *VersionReference) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VersionReference.ProtoReflect.Descriptor instead. -func (*VersionReference) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{19} -} - -func (x *VersionReference) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *VersionReference) GetReference() string { - if x != nil { - return x.Reference - } - return "" -} - -// PackageReference is a reference to a package, containing minimal information to identify it. -type PackageReference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Reference string `protobuf:"bytes,3,opt,name=reference,proto3" json:"reference,omitempty"` -} - -func (x *PackageReference) Reset() { - *x = PackageReference{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PackageReference) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PackageReference) ProtoMessage() {} - -func (x *PackageReference) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[20] - 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 PackageReference.ProtoReflect.Descriptor instead. -func (*PackageReference) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{20} -} - -func (x *PackageReference) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PackageReference) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *PackageReference) GetReference() string { - if x != nil { - return x.Reference - } - return "" -} - -type VulnerabilitiesDiff struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Added []*VulnerabilityReference `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` - Removed []*VulnerabilityReference `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` - Metadata []*ScannerMetadata `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty"` -} - -func (x *VulnerabilitiesDiff) Reset() { - *x = VulnerabilitiesDiff{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnerabilitiesDiff) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnerabilitiesDiff) ProtoMessage() {} - -func (x *VulnerabilitiesDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnerabilitiesDiff.ProtoReflect.Descriptor instead. -func (*VulnerabilitiesDiff) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{21} -} - -func (x *VulnerabilitiesDiff) GetAdded() []*VulnerabilityReference { - if x != nil { - return x.Added - } - return nil -} - -func (x *VulnerabilitiesDiff) GetRemoved() []*VulnerabilityReference { - if x != nil { - return x.Removed - } - return nil -} - -func (x *VulnerabilitiesDiff) GetMetadata() []*ScannerMetadata { - if x != nil { - return x.Metadata - } - return nil -} - -type ScannerMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Digest string `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` - Scanner *v11.Scanner `protobuf:"bytes,2,opt,name=scanner,proto3" json:"scanner,omitempty"` - VulnerabilityDbLastBuildTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=vulnerability_db_last_build_time,json=vulnerabilityDbLastBuildTime,proto3" json:"vulnerability_db_last_build_time,omitempty"` - VulnerabilityDbSchemaVersion string `protobuf:"bytes,4,opt,name=vulnerability_db_schema_version,json=vulnerabilityDbSchemaVersion,proto3" json:"vulnerability_db_schema_version,omitempty"` -} - -func (x *ScannerMetadata) Reset() { - *x = ScannerMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ScannerMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ScannerMetadata) ProtoMessage() {} - -func (x *ScannerMetadata) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[22] - 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 ScannerMetadata.ProtoReflect.Descriptor instead. -func (*ScannerMetadata) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{22} -} - -func (x *ScannerMetadata) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -func (x *ScannerMetadata) GetScanner() *v11.Scanner { - if x != nil { - return x.Scanner - } - return nil -} - -func (x *ScannerMetadata) GetVulnerabilityDbLastBuildTime() *timestamppb.Timestamp { - if x != nil { - return x.VulnerabilityDbLastBuildTime - } - return nil -} - -func (x *ScannerMetadata) GetVulnerabilityDbSchemaVersion() string { - if x != nil { - return x.VulnerabilityDbSchemaVersion - } - return "" -} - -// VulnerabilityReference is a reference to a vulnerability, containing minimal information to identify it. -type VulnerabilityReference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Reference string `protobuf:"bytes,2,opt,name=reference,proto3" json:"reference,omitempty"` - Severity string `protobuf:"bytes,3,opt,name=severity,proto3" json:"severity,omitempty"` -} - -func (x *VulnerabilityReference) Reset() { - *x = VulnerabilityReference{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnerabilityReference) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnerabilityReference) ProtoMessage() {} - -func (x *VulnerabilityReference) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[23] - 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 VulnerabilityReference.ProtoReflect.Descriptor instead. -func (*VulnerabilityReference) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{23} -} - -func (x *VulnerabilityReference) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *VulnerabilityReference) GetReference() string { - if x != nil { - return x.Reference - } - return "" -} - -func (x *VulnerabilityReference) GetSeverity() string { - if x != nil { - return x.Severity - } - return "" -} - -// DiffImageRequests are used to request a diff between two images. -type DiffImageRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The UIDP of the image repo to diff against. - RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` - FromDigest string `protobuf:"bytes,2,opt,name=from_digest,json=fromDigest,proto3" json:"from_digest,omitempty"` - ToDigest string `protobuf:"bytes,3,opt,name=to_digest,json=toDigest,proto3" json:"to_digest,omitempty"` -} - -func (x *DiffImageRequest) Reset() { - *x = DiffImageRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DiffImageRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DiffImageRequest) ProtoMessage() {} - -func (x *DiffImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[24] - 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 DiffImageRequest.ProtoReflect.Descriptor instead. -func (*DiffImageRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{24} -} - -func (x *DiffImageRequest) GetRepoId() string { - if x != nil { - return x.RepoId - } - return "" -} - -func (x *DiffImageRequest) GetFromDigest() string { - if x != nil { - return x.FromDigest - } - return "" -} - -func (x *DiffImageRequest) GetToDigest() string { - if x != nil { - return x.ToDigest - } - return "" -} - -type SbomRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The UIDP of the image repo to get an SBOM for. - RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` - // The digest of the image to get an SBOM for. - Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` -} - -func (x *SbomRequest) Reset() { - *x = SbomRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SbomRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SbomRequest) ProtoMessage() {} - -func (x *SbomRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[25] - 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 SbomRequest.ProtoReflect.Descriptor instead. -func (*SbomRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{25} -} - -func (x *SbomRequest) GetRepoId() string { - if x != nil { - return x.RepoId - } - return "" -} - -func (x *SbomRequest) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -type ImageConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The UIDP of the image repo to get config for. - RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` - // The digest of the image to get config for. - Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` - // The architecture to get config for. - Arch string `protobuf:"bytes,3,opt,name=arch,proto3" json:"arch,omitempty"` -} - -func (x *ImageConfigRequest) Reset() { - *x = ImageConfigRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ImageConfigRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ImageConfigRequest) ProtoMessage() {} - -func (x *ImageConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[26] - 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 ImageConfigRequest.ProtoReflect.Descriptor instead. -func (*ImageConfigRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{26} -} - -func (x *ImageConfigRequest) GetRepoId() string { - if x != nil { - return x.RepoId - } - return "" -} - -func (x *ImageConfigRequest) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -func (x *ImageConfigRequest) GetArch() string { - if x != nil { - return x.Arch - } - return "" -} - -type VulnReportRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The UIDP of the image repo to get a VulnReport for. - RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` - // The digest of the image to get a VulnReport for. - Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` -} - -func (x *VulnReportRequest) Reset() { - *x = VulnReportRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnReportRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnReportRequest) ProtoMessage() {} - -func (x *VulnReportRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[27] - 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 VulnReportRequest.ProtoReflect.Descriptor instead. -func (*VulnReportRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{27} -} - -func (x *VulnReportRequest) GetRepoId() string { - if x != nil { - return x.RepoId - } - return "" -} - -func (x *VulnReportRequest) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -type ManifestMetadataIndexFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The tag/index digest to fetch metadata for. - Digest string `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` - // The architecture to fetch metadata for. - Arch string `protobuf:"bytes,2,opt,name=arch,proto3" json:"arch,omitempty"` -} - -func (x *ManifestMetadataIndexFilter) Reset() { - *x = ManifestMetadataIndexFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ManifestMetadataIndexFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ManifestMetadataIndexFilter) ProtoMessage() {} - -func (x *ManifestMetadataIndexFilter) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[28] - 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 ManifestMetadataIndexFilter.ProtoReflect.Descriptor instead. -func (*ManifestMetadataIndexFilter) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{28} -} - -func (x *ManifestMetadataIndexFilter) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -func (x *ManifestMetadataIndexFilter) GetArch() string { - if x != nil { - return x.Arch - } - return "" -} - -type ManifestMetadataFilterEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Filter: - // - // *ManifestMetadataFilterEntry_ImageDigest - // *ManifestMetadataFilterEntry_IndexFilter - Filter isManifestMetadataFilterEntry_Filter `protobuf_oneof:"filter"` -} - -func (x *ManifestMetadataFilterEntry) Reset() { - *x = ManifestMetadataFilterEntry{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ManifestMetadataFilterEntry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ManifestMetadataFilterEntry) ProtoMessage() {} - -func (x *ManifestMetadataFilterEntry) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[29] - 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 ManifestMetadataFilterEntry.ProtoReflect.Descriptor instead. -func (*ManifestMetadataFilterEntry) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{29} -} - -func (m *ManifestMetadataFilterEntry) GetFilter() isManifestMetadataFilterEntry_Filter { - if m != nil { - return m.Filter - } - return nil -} - -func (x *ManifestMetadataFilterEntry) GetImageDigest() string { - if x, ok := x.GetFilter().(*ManifestMetadataFilterEntry_ImageDigest); ok { - return x.ImageDigest - } - return "" -} - -func (x *ManifestMetadataFilterEntry) GetIndexFilter() *ManifestMetadataIndexFilter { - if x, ok := x.GetFilter().(*ManifestMetadataFilterEntry_IndexFilter); ok { - return x.IndexFilter - } - return nil -} - -type isManifestMetadataFilterEntry_Filter interface { - isManifestMetadataFilterEntry_Filter() -} - -type ManifestMetadataFilterEntry_ImageDigest struct { - // For fetching metadata for an image digest - ImageDigest string `protobuf:"bytes,1,opt,name=image_digest,json=imageDigest,proto3,oneof"` -} - -type ManifestMetadataFilterEntry_IndexFilter struct { - // For fetching metadata for an index digest - IndexFilter *ManifestMetadataIndexFilter `protobuf:"bytes,2,opt,name=index_filter,json=indexFilter,proto3,oneof"` -} - -func (*ManifestMetadataFilterEntry_ImageDigest) isManifestMetadataFilterEntry_Filter() {} - -func (*ManifestMetadataFilterEntry_IndexFilter) isManifestMetadataFilterEntry_Filter() {} - -type ManifestMetadataFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The UIDP of the image repo that the digests belongs to. - RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` - // List of image digests or index digest to fetch package metadata for. - // All entries specified would be retrieved. - Items []*ManifestMetadataFilterEntry `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *ManifestMetadataFilter) Reset() { - *x = ManifestMetadataFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ManifestMetadataFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ManifestMetadataFilter) ProtoMessage() {} - -func (x *ManifestMetadataFilter) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[30] - 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 ManifestMetadataFilter.ProtoReflect.Descriptor instead. -func (*ManifestMetadataFilter) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{30} -} - -func (x *ManifestMetadataFilter) GetRepoId() string { - if x != nil { - return x.RepoId - } - return "" -} - -func (x *ManifestMetadataFilter) GetItems() []*ManifestMetadataFilterEntry { - if x != nil { - return x.Items - } - return nil -} - -type PkgMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // purl of package or subpackage; spec https://github.com/package-url/purl-spec - Purl string `protobuf:"bytes,1,opt,name=purl,proto3" json:"purl,omitempty"` - // if differ from purl, it means it is a subpackage - OriginPurl string `protobuf:"bytes,2,opt,name=origin_purl,json=originPurl,proto3" json:"origin_purl,omitempty"` - // date when EOL, date 0-0-0 when not eol - EolDate *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=eol_date,json=eolDate,proto3" json:"eol_date,omitempty"` - // timestamp when package was built, date 0-0-0 when build timestamp not available - BuildTimestamp *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=build_timestamp,json=buildTimestamp,proto3" json:"build_timestamp,omitempty"` - // license of package, empty if unknown - License string `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` -} - -func (x *PkgMetadata) Reset() { - *x = PkgMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PkgMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PkgMetadata) ProtoMessage() {} - -func (x *PkgMetadata) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[31] - 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 PkgMetadata.ProtoReflect.Descriptor instead. -func (*PkgMetadata) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{31} -} - -func (x *PkgMetadata) GetPurl() string { - if x != nil { - return x.Purl - } - return "" -} - -func (x *PkgMetadata) GetOriginPurl() string { - if x != nil { - return x.OriginPurl - } - return "" -} - -func (x *PkgMetadata) GetEolDate() *timestamppb.Timestamp { - if x != nil { - return x.EolDate - } - return nil -} - -func (x *PkgMetadata) GetBuildTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.BuildTimestamp - } - return nil -} - -func (x *PkgMetadata) GetLicense() string { - if x != nil { - return x.License - } - return "" -} - -type ManifestMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Digest of image that packages are associated with. - Digest string `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` - // List of packages that are part of image. - PkgMetadata []*PkgMetadata `protobuf:"bytes,2,rep,name=pkg_metadata,json=pkgMetadata,proto3" json:"pkg_metadata,omitempty"` -} - -func (x *ManifestMetadata) Reset() { - *x = ManifestMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ManifestMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ManifestMetadata) ProtoMessage() {} - -func (x *ManifestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[32] - 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 ManifestMetadata.ProtoReflect.Descriptor instead. -func (*ManifestMetadata) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{32} -} - -func (x *ManifestMetadata) GetDigest() string { - if x != nil { - return x.Digest - } - return "" -} - -func (x *ManifestMetadata) GetPkgMetadata() []*PkgMetadata { - if x != nil { - return x.PkgMetadata - } - return nil -} - -type ManifestMetadataList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*ManifestMetadata `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *ManifestMetadataList) Reset() { - *x = ManifestMetadataList{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ManifestMetadataList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ManifestMetadataList) ProtoMessage() {} - -func (x *ManifestMetadataList) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[33] - 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 ManifestMetadataList.ProtoReflect.Descriptor instead. -func (*ManifestMetadataList) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{33} -} - -func (x *ManifestMetadataList) GetItems() []*ManifestMetadata { - if x != nil { - return x.Items - } - return nil -} - -type ChangedImageConfig_ChangedUser struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Current string `protobuf:"bytes,1,opt,name=current,proto3" json:"current,omitempty"` - Previous string `protobuf:"bytes,2,opt,name=previous,proto3" json:"previous,omitempty"` -} - -func (x *ChangedImageConfig_ChangedUser) Reset() { - *x = ChangedImageConfig_ChangedUser{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangedImageConfig_ChangedUser) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangedImageConfig_ChangedUser) ProtoMessage() {} - -func (x *ChangedImageConfig_ChangedUser) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[34] - 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 ChangedImageConfig_ChangedUser.ProtoReflect.Descriptor instead. -func (*ChangedImageConfig_ChangedUser) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{16, 0} -} - -func (x *ChangedImageConfig_ChangedUser) GetCurrent() string { - if x != nil { - return x.Current - } - return "" -} - -func (x *ChangedImageConfig_ChangedUser) GetPrevious() string { - if x != nil { - return x.Previous - } - return "" -} - -type ChangedImageConfig_ChangedWorkingDir struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Current string `protobuf:"bytes,1,opt,name=current,proto3" json:"current,omitempty"` - Previous string `protobuf:"bytes,2,opt,name=previous,proto3" json:"previous,omitempty"` -} - -func (x *ChangedImageConfig_ChangedWorkingDir) Reset() { - *x = ChangedImageConfig_ChangedWorkingDir{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangedImageConfig_ChangedWorkingDir) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangedImageConfig_ChangedWorkingDir) ProtoMessage() {} - -func (x *ChangedImageConfig_ChangedWorkingDir) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[35] - 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 ChangedImageConfig_ChangedWorkingDir.ProtoReflect.Descriptor instead. -func (*ChangedImageConfig_ChangedWorkingDir) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{16, 1} -} - -func (x *ChangedImageConfig_ChangedWorkingDir) GetCurrent() string { - if x != nil { - return x.Current - } - return "" -} - -func (x *ChangedImageConfig_ChangedWorkingDir) GetPrevious() string { - if x != nil { - return x.Previous - } - return "" -} - -type ChangedImageConfig_EntrypointDiff struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Added []string `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` - Removed []string `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` -} - -func (x *ChangedImageConfig_EntrypointDiff) Reset() { - *x = ChangedImageConfig_EntrypointDiff{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangedImageConfig_EntrypointDiff) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangedImageConfig_EntrypointDiff) ProtoMessage() {} - -func (x *ChangedImageConfig_EntrypointDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[36] - 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 ChangedImageConfig_EntrypointDiff.ProtoReflect.Descriptor instead. -func (*ChangedImageConfig_EntrypointDiff) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{16, 2} -} - -func (x *ChangedImageConfig_EntrypointDiff) GetAdded() []string { - if x != nil { - return x.Added - } - return nil -} - -func (x *ChangedImageConfig_EntrypointDiff) GetRemoved() []string { - if x != nil { - return x.Removed - } - return nil -} - -type ChangedImageConfig_EnvDiff struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Added []string `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` - Removed []string `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` -} - -func (x *ChangedImageConfig_EnvDiff) Reset() { - *x = ChangedImageConfig_EnvDiff{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangedImageConfig_EnvDiff) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangedImageConfig_EnvDiff) ProtoMessage() {} - -func (x *ChangedImageConfig_EnvDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[37] - 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 ChangedImageConfig_EnvDiff.ProtoReflect.Descriptor instead. -func (*ChangedImageConfig_EnvDiff) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{16, 3} -} - -func (x *ChangedImageConfig_EnvDiff) GetAdded() []string { - if x != nil { - return x.Added - } - return nil -} - -func (x *ChangedImageConfig_EnvDiff) GetRemoved() []string { - if x != nil { - return x.Removed - } - return nil -} - -type ChangedImageConfig_CmdDiff struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Added []string `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` - Removed []string `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` -} - -func (x *ChangedImageConfig_CmdDiff) Reset() { - *x = ChangedImageConfig_CmdDiff{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangedImageConfig_CmdDiff) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangedImageConfig_CmdDiff) ProtoMessage() {} - -func (x *ChangedImageConfig_CmdDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[38] - 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 ChangedImageConfig_CmdDiff.ProtoReflect.Descriptor instead. -func (*ChangedImageConfig_CmdDiff) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{16, 4} -} - -func (x *ChangedImageConfig_CmdDiff) GetAdded() []string { - if x != nil { - return x.Added - } - return nil -} - -func (x *ChangedImageConfig_CmdDiff) GetRemoved() []string { - if x != nil { - return x.Removed - } - return nil -} - -type ChangedImageConfig_ChangedStopSignal struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Current string `protobuf:"bytes,1,opt,name=current,proto3" json:"current,omitempty"` - Previous string `protobuf:"bytes,2,opt,name=previous,proto3" json:"previous,omitempty"` -} - -func (x *ChangedImageConfig_ChangedStopSignal) Reset() { - *x = ChangedImageConfig_ChangedStopSignal{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangedImageConfig_ChangedStopSignal) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangedImageConfig_ChangedStopSignal) ProtoMessage() {} - -func (x *ChangedImageConfig_ChangedStopSignal) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[39] - 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 ChangedImageConfig_ChangedStopSignal.ProtoReflect.Descriptor instead. -func (*ChangedImageConfig_ChangedStopSignal) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{16, 5} -} - -func (x *ChangedImageConfig_ChangedStopSignal) GetCurrent() string { - if x != nil { - return x.Current - } - return "" -} - -func (x *ChangedImageConfig_ChangedStopSignal) GetPrevious() string { - if x != nil { - return x.Previous - } - return "" -} - -type ChangedImageConfig_Volume struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ChangedImageConfig_Volume) Reset() { - *x = ChangedImageConfig_Volume{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangedImageConfig_Volume) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangedImageConfig_Volume) ProtoMessage() {} - -func (x *ChangedImageConfig_Volume) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[40] - 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 ChangedImageConfig_Volume.ProtoReflect.Descriptor instead. -func (*ChangedImageConfig_Volume) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{16, 6} -} - -type ChangedImageConfig_VolumeDiff struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Added map[string]*ChangedImageConfig_Volume `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Removed map[string]*ChangedImageConfig_Volume `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *ChangedImageConfig_VolumeDiff) Reset() { - *x = ChangedImageConfig_VolumeDiff{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChangedImageConfig_VolumeDiff) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChangedImageConfig_VolumeDiff) ProtoMessage() {} - -func (x *ChangedImageConfig_VolumeDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[41] - 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 ChangedImageConfig_VolumeDiff.ProtoReflect.Descriptor instead. -func (*ChangedImageConfig_VolumeDiff) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{16, 7} -} - -func (x *ChangedImageConfig_VolumeDiff) GetAdded() map[string]*ChangedImageConfig_Volume { - if x != nil { - return x.Added - } - return nil -} - -func (x *ChangedImageConfig_VolumeDiff) GetRemoved() map[string]*ChangedImageConfig_Volume { - if x != nil { - return x.Removed - } - return nil -} - -// ExposedPorts a set of ports to expose from a container running this image. -type ImageConfig_ExposedPort struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ImageConfig_ExposedPort) Reset() { - *x = ImageConfig_ExposedPort{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ImageConfig_ExposedPort) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ImageConfig_ExposedPort) ProtoMessage() {} - -func (x *ImageConfig_ExposedPort) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[44] - 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 ImageConfig_ExposedPort.ProtoReflect.Descriptor instead. -func (*ImageConfig_ExposedPort) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{17, 0} -} - -type ImageConfig_Volume struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ImageConfig_Volume) Reset() { - *x = ImageConfig_Volume{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ImageConfig_Volume) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ImageConfig_Volume) ProtoMessage() {} - -func (x *ImageConfig_Volume) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[46] - 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 ImageConfig_Volume.ProtoReflect.Descriptor instead. -func (*ImageConfig_Volume) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{17, 2} -} - -type PackagesDiff_ChangedPackageReference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Current *VersionReference `protobuf:"bytes,2,opt,name=current,proto3" json:"current,omitempty"` - Previous *VersionReference `protobuf:"bytes,3,opt,name=previous,proto3" json:"previous,omitempty"` -} - -func (x *PackagesDiff_ChangedPackageReference) Reset() { - *x = PackagesDiff_ChangedPackageReference{} - if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PackagesDiff_ChangedPackageReference) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PackagesDiff_ChangedPackageReference) ProtoMessage() {} - -func (x *PackagesDiff_ChangedPackageReference) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[49] - 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 PackagesDiff_ChangedPackageReference.ProtoReflect.Descriptor instead. -func (*PackagesDiff_ChangedPackageReference) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{18, 0} -} - -func (x *PackagesDiff_ChangedPackageReference) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PackagesDiff_ChangedPackageReference) GetCurrent() *VersionReference { - if x != nil { - return x.Current - } - return nil -} - -func (x *PackagesDiff_ChangedPackageReference) GetPrevious() *VersionReference { - if x != nil { - return x.Previous - } - return nil -} - -var File_registry_platform_proto protoreflect.FileDescriptor - -var file_registry_platform_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x76, - 0x75, 0x6c, 0x6e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x13, 0x73, 0x62, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfe, 0x01, 0x0a, 0x04, 0x52, 0x65, 0x70, 0x6f, - 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, - 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0c, - 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x52, 0x0b, 0x63, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x0b, - 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x73, 0x79, 0x6e, - 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x1f, 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, - 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x11, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x2b, - 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x08, 0x52, - 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, - 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x68, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, - 0x70, 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, - 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, - 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x09, 0x54, - 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, - 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, 0x6f, 0x63, - 0x68, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x09, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, - 0x22, 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x12, 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, - 0xa1, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, - 0x69, 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x5b, 0x0a, - 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, - 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x04, 0x08, - 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, 0x0b, 0x65, - 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, - 0x66, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x4c, - 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, - 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, 0x0a, 0x04, - 0x63, 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6d, 0x64, - 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, - 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, 0x0a, 0x07, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, - 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, - 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x1a, 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, - 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, 0x11, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, - 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x1a, 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x12, - 0x5c, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, 0x64, 0x65, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x62, 0x0a, - 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x60, 0x0a, - 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, - 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, - 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x5f, 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x70, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, - 0x64, 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, - 0x50, 0x6f, 0x72, 0x74, 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, 0x4b, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, - 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x08, 0x0a, - 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, - 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, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, - 0x66, 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, - 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x48, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, - 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, - 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, - 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x45, 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, - 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, - 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, - 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, - 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, - 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, - 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, - 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, - 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, - 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, - 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, - 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, - 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, - 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, - 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, - 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, - 0x03, 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, - 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, - 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, - 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, - 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, - 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, - 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, - 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, - 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, - 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, - 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, - 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, - 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, - 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, - 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, - 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, - 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, - 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, - 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, - 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, - 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, - 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, - 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, - 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, - 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, - 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, - 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, - 0x3e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x3d, 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, 0xbd, 0x01, - 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, - 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, - 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, - 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, - 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, - 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, 0xc5, 0x01, - 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, - 0x73, 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, - 0x04, 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, - 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_registry_platform_proto_rawDescOnce sync.Once - file_registry_platform_proto_rawDescData = file_registry_platform_proto_rawDesc -) - -func file_registry_platform_proto_rawDescGZIP() []byte { - file_registry_platform_proto_rawDescOnce.Do(func() { - file_registry_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_registry_platform_proto_rawDescData) - }) - return file_registry_platform_proto_rawDescData -} - -var file_registry_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_registry_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 50) -var file_registry_platform_proto_goTypes = []interface{}{ - (CatalogTier)(0), // 0: chainguard.platform.registry.CatalogTier - (*Repo)(nil), // 1: chainguard.platform.registry.Repo - (*SyncConfig)(nil), // 2: chainguard.platform.registry.SyncConfig - (*CreateRepoRequest)(nil), // 3: chainguard.platform.registry.CreateRepoRequest - (*DeleteRepoRequest)(nil), // 4: chainguard.platform.registry.DeleteRepoRequest - (*RepoList)(nil), // 5: chainguard.platform.registry.RepoList - (*RepoFilter)(nil), // 6: chainguard.platform.registry.RepoFilter - (*CreateTagRequest)(nil), // 7: chainguard.platform.registry.CreateTagRequest - (*DeleteTagRequest)(nil), // 8: chainguard.platform.registry.DeleteTagRequest - (*Tag)(nil), // 9: chainguard.platform.registry.Tag - (*TagFilter)(nil), // 10: chainguard.platform.registry.TagFilter - (*TagList)(nil), // 11: chainguard.platform.registry.TagList - (*TagHistoryFilter)(nil), // 12: chainguard.platform.registry.TagHistoryFilter - (*TagHistoryList)(nil), // 13: chainguard.platform.registry.TagHistoryList - (*TagHistory)(nil), // 14: chainguard.platform.registry.TagHistory - (*DiffImageResponse)(nil), // 15: chainguard.platform.registry.DiffImageResponse - (*ImageConfigDiff)(nil), // 16: chainguard.platform.registry.ImageConfigDiff - (*ChangedImageConfig)(nil), // 17: chainguard.platform.registry.ChangedImageConfig - (*ImageConfig)(nil), // 18: chainguard.platform.registry.ImageConfig - (*PackagesDiff)(nil), // 19: chainguard.platform.registry.PackagesDiff - (*VersionReference)(nil), // 20: chainguard.platform.registry.VersionReference - (*PackageReference)(nil), // 21: chainguard.platform.registry.PackageReference - (*VulnerabilitiesDiff)(nil), // 22: chainguard.platform.registry.VulnerabilitiesDiff - (*ScannerMetadata)(nil), // 23: chainguard.platform.registry.ScannerMetadata - (*VulnerabilityReference)(nil), // 24: chainguard.platform.registry.VulnerabilityReference - (*DiffImageRequest)(nil), // 25: chainguard.platform.registry.DiffImageRequest - (*SbomRequest)(nil), // 26: chainguard.platform.registry.SbomRequest - (*ImageConfigRequest)(nil), // 27: chainguard.platform.registry.ImageConfigRequest - (*VulnReportRequest)(nil), // 28: chainguard.platform.registry.VulnReportRequest - (*ManifestMetadataIndexFilter)(nil), // 29: chainguard.platform.registry.ManifestMetadataIndexFilter - (*ManifestMetadataFilterEntry)(nil), // 30: chainguard.platform.registry.ManifestMetadataFilterEntry - (*ManifestMetadataFilter)(nil), // 31: chainguard.platform.registry.ManifestMetadataFilter - (*PkgMetadata)(nil), // 32: chainguard.platform.registry.PkgMetadata - (*ManifestMetadata)(nil), // 33: chainguard.platform.registry.ManifestMetadata - (*ManifestMetadataList)(nil), // 34: chainguard.platform.registry.ManifestMetadataList - (*ChangedImageConfig_ChangedUser)(nil), // 35: chainguard.platform.registry.ChangedImageConfig.ChangedUser - (*ChangedImageConfig_ChangedWorkingDir)(nil), // 36: chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - (*ChangedImageConfig_EntrypointDiff)(nil), // 37: chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - (*ChangedImageConfig_EnvDiff)(nil), // 38: chainguard.platform.registry.ChangedImageConfig.EnvDiff - (*ChangedImageConfig_CmdDiff)(nil), // 39: chainguard.platform.registry.ChangedImageConfig.CmdDiff - (*ChangedImageConfig_ChangedStopSignal)(nil), // 40: chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - (*ChangedImageConfig_Volume)(nil), // 41: chainguard.platform.registry.ChangedImageConfig.Volume - (*ChangedImageConfig_VolumeDiff)(nil), // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff - nil, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - nil, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - (*ImageConfig_ExposedPort)(nil), // 45: chainguard.platform.registry.ImageConfig.ExposedPort - nil, // 46: chainguard.platform.registry.ImageConfig.ExposedPortsEntry - (*ImageConfig_Volume)(nil), // 47: chainguard.platform.registry.ImageConfig.Volume - nil, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry - nil, // 49: chainguard.platform.registry.ImageConfig.LabelsEntry - (*PackagesDiff_ChangedPackageReference)(nil), // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference - (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 52: chainguard.platform.common.UIDPFilter - (*v11.Scanner)(nil), // 53: chainguard.platform.tenant.Scanner - (*emptypb.Empty)(nil), // 54: google.protobuf.Empty - (*v11.Sbom2)(nil), // 55: chainguard.platform.tenant.Sbom2 - (*v11.VulnReport)(nil), // 56: chainguard.platform.tenant.VulnReport -} -var file_registry_platform_proto_depIdxs = []int32{ - 0, // 0: chainguard.platform.registry.Repo.catalog_tier:type_name -> chainguard.platform.registry.CatalogTier - 2, // 1: chainguard.platform.registry.Repo.sync_config:type_name -> chainguard.platform.registry.SyncConfig - 51, // 2: chainguard.platform.registry.SyncConfig.expiration:type_name -> google.protobuf.Timestamp - 1, // 3: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo - 1, // 4: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo - 52, // 5: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 9, // 6: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag - 51, // 7: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp - 52, // 8: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 51, // 9: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp - 9, // 10: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag - 51, // 11: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp - 51, // 12: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp - 14, // 13: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory - 51, // 14: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp - 19, // 15: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff - 22, // 16: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff - 16, // 17: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff - 17, // 18: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig - 35, // 19: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser - 36, // 20: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - 37, // 21: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - 38, // 22: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff - 39, // 23: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff - 40, // 24: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - 42, // 25: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff - 46, // 26: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry - 48, // 27: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry - 49, // 28: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry - 21, // 29: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference - 21, // 30: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference - 50, // 31: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference - 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference - 24, // 33: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference - 23, // 34: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata - 53, // 35: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner - 51, // 36: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp - 29, // 37: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter - 30, // 38: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry - 51, // 39: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp - 51, // 40: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp - 32, // 41: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata - 33, // 42: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata - 43, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - 44, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 41, // 46: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 45, // 47: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort - 47, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume - 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference - 20, // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference - 3, // 51: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest - 1, // 52: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo - 6, // 53: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter - 4, // 54: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest - 7, // 55: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest - 9, // 56: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag - 8, // 57: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest - 10, // 58: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter - 12, // 59: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter - 25, // 60: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest - 26, // 61: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest - 27, // 62: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest - 28, // 63: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest - 31, // 64: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter - 1, // 65: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo - 1, // 66: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo - 5, // 67: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList - 54, // 68: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty - 9, // 69: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag - 9, // 70: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag - 54, // 71: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty - 11, // 72: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList - 13, // 73: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList - 15, // 74: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse - 55, // 75: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 - 18, // 76: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig - 56, // 77: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport - 34, // 78: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList - 65, // [65:79] is the sub-list for method output_type - 51, // [51:65] is the sub-list for method input_type - 51, // [51:51] is the sub-list for extension type_name - 51, // [51:51] is the sub-list for extension extendee - 0, // [0:51] is the sub-list for field type_name -} - -func init() { file_registry_platform_proto_init() } -func file_registry_platform_proto_init() { - if File_registry_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_registry_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Repo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SyncConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRepoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteRepoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepoList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RepoFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateTagRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteTagRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Tag); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TagFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TagList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TagHistoryFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TagHistoryList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TagHistory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffImageResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImageConfigDiff); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImageConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackagesDiff); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionReference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackageReference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilitiesDiff); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ScannerMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilityReference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffImageRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SbomRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImageConfigRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnReportRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadataIndexFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadataFilterEntry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadataFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PkgMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadataList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_ChangedUser); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_ChangedWorkingDir); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_EntrypointDiff); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_EnvDiff); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_CmdDiff); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_ChangedStopSignal); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_Volume); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_VolumeDiff); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImageConfig_ExposedPort); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ImageConfig_Volume); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_registry_platform_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackagesDiff_ChangedPackageReference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_registry_platform_proto_msgTypes[29].OneofWrappers = []interface{}{ - (*ManifestMetadataFilterEntry_ImageDigest)(nil), - (*ManifestMetadataFilterEntry_IndexFilter)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_registry_platform_proto_rawDesc, - NumEnums: 1, - NumMessages: 50, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_registry_platform_proto_goTypes, - DependencyIndexes: file_registry_platform_proto_depIdxs, - EnumInfos: file_registry_platform_proto_enumTypes, - MessageInfos: file_registry_platform_proto_msgTypes, - }.Build() - File_registry_platform_proto = out.File - file_registry_platform_proto_rawDesc = nil - file_registry_platform_proto_goTypes = nil - file_registry_platform_proto_depIdxs = nil -} diff --git a/proto/platform/registry/v1/registry.platform.pb.gw.go b/proto/platform/registry/v1/registry.platform.pb.gw.go deleted file mode 100644 index 612df8bf..00000000 --- a/proto/platform/registry/v1/registry.platform.pb.gw.go +++ /dev/null @@ -1,1659 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: registry.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Registry_CreateRepo_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateRepoRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Repo); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := client.CreateRepo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_CreateRepo_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateRepoRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Repo); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := server.CreateRepo(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Registry_UpdateRepo_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Repo - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.UpdateRepo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_UpdateRepo_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Repo - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.UpdateRepo(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Registry_ListRepos_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Registry_ListRepos_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RepoFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListRepos_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ListRepos(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_ListRepos_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RepoFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListRepos_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ListRepos(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Registry_DeleteRepo_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRepoRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.DeleteRepo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_DeleteRepo_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteRepoRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.DeleteRepo(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Registry_CreateTag_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateTagRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Tag); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - msg, err := client.CreateTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_CreateTag_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateTagRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Tag); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - msg, err := server.CreateTag(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Registry_UpdateTag_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Tag - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.UpdateTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_UpdateTag_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Tag - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.UpdateTag(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Registry_DeleteTag_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteTagRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.DeleteTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_DeleteTag_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteTagRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.DeleteTag(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Registry_ListTags_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Registry_ListTags_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq TagFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListTags_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ListTags(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_ListTags_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq TagFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListTags_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ListTags(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Registry_ListTagHistory_0 = &utilities.DoubleArray{Encoding: map[string]int{"parent_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Registry_ListTagHistory_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq TagHistoryFilter - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListTagHistory_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ListTagHistory(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_ListTagHistory_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq TagHistoryFilter - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListTagHistory_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ListTagHistory(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Registry_DiffImage_0 = &utilities.DoubleArray{Encoding: map[string]int{"repo_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Registry_DiffImage_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DiffImageRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_DiffImage_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.DiffImage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_DiffImage_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DiffImageRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_DiffImage_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.DiffImage(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Registry_GetSbom_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SbomRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - val, ok = pathParams["digest"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") - } - - protoReq.Digest, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) - } - - msg, err := client.GetSbom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_GetSbom_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SbomRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - val, ok = pathParams["digest"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") - } - - protoReq.Digest, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) - } - - msg, err := server.GetSbom(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Registry_GetImageConfig_0 = &utilities.DoubleArray{Encoding: map[string]int{"repo_id": 0, "digest": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} -) - -func request_Registry_GetImageConfig_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ImageConfigRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - val, ok = pathParams["digest"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") - } - - protoReq.Digest, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_GetImageConfig_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetImageConfig(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_GetImageConfig_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ImageConfigRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - val, ok = pathParams["digest"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") - } - - protoReq.Digest, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_GetImageConfig_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetImageConfig(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Registry_GetVulnReport_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq VulnReportRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - val, ok = pathParams["digest"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") - } - - protoReq.Digest, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) - } - - msg, err := client.GetVulnReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_GetVulnReport_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq VulnReportRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - val, ok = pathParams["digest"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") - } - - protoReq.Digest, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) - } - - msg, err := server.GetVulnReport(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Registry_ListManifestMetadata_0 = &utilities.DoubleArray{Encoding: map[string]int{"repo_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Registry_ListManifestMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ManifestMetadataFilter - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListManifestMetadata_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.ListManifestMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Registry_ListManifestMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ManifestMetadataFilter - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["repo_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") - } - - protoReq.RepoId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListManifestMetadata_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.ListManifestMetadata(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterRegistryHandlerServer registers the http handlers for service Registry to "mux". -// UnaryRPC :call RegistryServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRegistryHandlerFromEndpoint instead. -func RegisterRegistryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RegistryServer) error { - - mux.Handle("POST", pattern_Registry_CreateRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/CreateRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_CreateRepo_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_CreateRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Registry_UpdateRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/UpdateRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_UpdateRepo_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_UpdateRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_ListRepos_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListRepos", runtime.WithHTTPPathPattern("/registry/v1/repos")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_ListRepos_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_ListRepos_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Registry_DeleteRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DeleteRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_DeleteRepo_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_DeleteRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Registry_CreateTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/CreateTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{repo_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_CreateTag_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_CreateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Registry_UpdateTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/UpdateTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_UpdateTag_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_UpdateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Registry_DeleteTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DeleteTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_DeleteTag_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_DeleteTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_ListTags_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListTags", runtime.WithHTTPPathPattern("/registry/v1/tags")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_ListTags_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_ListTags_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_ListTagHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListTagHistory", runtime.WithHTTPPathPattern("/registry/v1/tags/{parent_id=**}/history")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_ListTagHistory_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_ListTagHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_DiffImage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DiffImage", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/diff")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_DiffImage_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_DiffImage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_GetSbom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetSbom", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/sbom")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_GetSbom_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_GetSbom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_GetImageConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetImageConfig", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/imageconfig")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_GetImageConfig_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_GetImageConfig_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_GetVulnReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetVulnReport", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/vulnreport")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_GetVulnReport_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_GetVulnReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_ListManifestMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListManifestMetadata", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/manifestmetdata")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Registry_ListManifestMetadata_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_ListManifestMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterRegistryHandlerFromEndpoint is same as RegisterRegistryHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterRegistryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterRegistryHandler(ctx, mux, conn) -} - -// RegisterRegistryHandler registers the http handlers for service Registry to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterRegistryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterRegistryHandlerClient(ctx, mux, NewRegistryClient(conn)) -} - -// RegisterRegistryHandlerClient registers the http handlers for service Registry -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RegistryClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RegistryClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "RegistryClient" to call the correct interceptors. -func RegisterRegistryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RegistryClient) error { - - mux.Handle("POST", pattern_Registry_CreateRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/CreateRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_CreateRepo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_CreateRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Registry_UpdateRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/UpdateRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_UpdateRepo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_UpdateRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_ListRepos_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListRepos", runtime.WithHTTPPathPattern("/registry/v1/repos")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_ListRepos_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_ListRepos_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Registry_DeleteRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DeleteRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_DeleteRepo_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_DeleteRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Registry_CreateTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/CreateTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{repo_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_CreateTag_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_CreateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Registry_UpdateTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/UpdateTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_UpdateTag_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_UpdateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Registry_DeleteTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DeleteTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_DeleteTag_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_DeleteTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_ListTags_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListTags", runtime.WithHTTPPathPattern("/registry/v1/tags")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_ListTags_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_ListTags_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_ListTagHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListTagHistory", runtime.WithHTTPPathPattern("/registry/v1/tags/{parent_id=**}/history")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_ListTagHistory_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_ListTagHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_DiffImage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DiffImage", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/diff")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_DiffImage_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_DiffImage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_GetSbom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetSbom", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/sbom")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_GetSbom_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_GetSbom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_GetImageConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetImageConfig", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/imageconfig")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_GetImageConfig_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_GetImageConfig_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_GetVulnReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetVulnReport", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/vulnreport")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_GetVulnReport_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_GetVulnReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Registry_ListManifestMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListManifestMetadata", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/manifestmetdata")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Registry_ListManifestMetadata_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Registry_ListManifestMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Registry_CreateRepo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "repos", "parent_id"}, "")) - - pattern_Registry_UpdateRepo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "repos", "id"}, "")) - - pattern_Registry_ListRepos_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"registry", "v1", "repos"}, "")) - - pattern_Registry_DeleteRepo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "repos", "id"}, "")) - - pattern_Registry_CreateTag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "tags", "repo_id"}, "")) - - pattern_Registry_UpdateTag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "tags", "id"}, "")) - - pattern_Registry_DeleteTag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "tags", "id"}, "")) - - pattern_Registry_ListTags_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"registry", "v1", "tags"}, "")) - - pattern_Registry_ListTagHistory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4}, []string{"registry", "v1", "tags", "parent_id", "history"}, "")) - - pattern_Registry_DiffImage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4}, []string{"registry", "v1", "repos", "repo_id", "diff"}, "")) - - pattern_Registry_GetSbom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "sbom"}, "")) - - pattern_Registry_GetImageConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "imageconfig"}, "")) - - pattern_Registry_GetVulnReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "vulnreport"}, "")) - - pattern_Registry_ListManifestMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4}, []string{"registry", "v1", "repos", "repo_id", "manifestmetdata"}, "")) -) - -var ( - forward_Registry_CreateRepo_0 = runtime.ForwardResponseMessage - - forward_Registry_UpdateRepo_0 = runtime.ForwardResponseMessage - - forward_Registry_ListRepos_0 = runtime.ForwardResponseMessage - - forward_Registry_DeleteRepo_0 = runtime.ForwardResponseMessage - - forward_Registry_CreateTag_0 = runtime.ForwardResponseMessage - - forward_Registry_UpdateTag_0 = runtime.ForwardResponseMessage - - forward_Registry_DeleteTag_0 = runtime.ForwardResponseMessage - - forward_Registry_ListTags_0 = runtime.ForwardResponseMessage - - forward_Registry_ListTagHistory_0 = runtime.ForwardResponseMessage - - forward_Registry_DiffImage_0 = runtime.ForwardResponseMessage - - forward_Registry_GetSbom_0 = runtime.ForwardResponseMessage - - forward_Registry_GetImageConfig_0 = runtime.ForwardResponseMessage - - forward_Registry_GetVulnReport_0 = runtime.ForwardResponseMessage - - forward_Registry_ListManifestMetadata_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto deleted file mode 100644 index 6a072f7a..00000000 --- a/proto/platform/registry/v1/registry.platform.proto +++ /dev/null @@ -1,572 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/registry/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.registry.v1"; -option java_outer_classname = "PlatformRegistryProto"; - -package chainguard.platform.registry; - -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "platform/common/v1/uidp.platform.proto"; -import "vuln.platform.proto"; -import "sbom.platform.proto"; - -service Registry { - rpc CreateRepo(CreateRepoRequest) returns (Repo) { - option (google.api.http) = { - post: "/registry/v1/repos/{parent_id=**}" - body: "repo" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_REPO_CREATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.platform.registry.repo.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc UpdateRepo(Repo) returns (Repo) { - option (google.api.http) = { - put: "/registry/v1/repos/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_REPO_UPDATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.platform.registry.repo.updated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc ListRepos(RepoFilter) returns (RepoList) { - option (google.api.http) = { - get: "/registry/v1/repos" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_REPO_LIST] - unscoped: true - } - }; - } - - rpc DeleteRepo(DeleteRepoRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/registry/v1/repos/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_REPO_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.platform.registry.repo.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc CreateTag(CreateTagRequest) returns (Tag) { - option (google.api.http) = { - post: "/registry/v1/tags/{repo_id=**}" - body: "tag" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TAG_CREATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.platform.registry.tag.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc UpdateTag(Tag) returns (Tag) { - option (google.api.http) = { - put: "/registry/v1/tags/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TAG_UPDATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.platform.registry.tag.updated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc DeleteTag(DeleteTagRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/registry/v1/tags/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TAG_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.platform.registry.tag.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc ListTags(TagFilter) returns (TagList) { - option (google.api.http) = { - get: "/registry/v1/tags" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TAG_LIST] - unscoped: true - } - }; - } - - rpc ListTagHistory(TagHistoryFilter) returns (TagHistoryList) { - option (google.api.http) = { - get: "/registry/v1/tags/{parent_id=**}/history" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TAG_LIST] - } - }; - } - - rpc DiffImage(DiffImageRequest) returns (DiffImageResponse) { - option (google.api.http) = { - get: "/registry/v1/repos/{repo_id=**}/diff" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_REPO_LIST, CAP_TENANT_VULN_REPORTS_LIST, CAP_TENANT_SBOMS_LIST] - } - }; - } - - rpc GetSbom(SbomRequest) returns (chainguard.platform.tenant.Sbom2) { - option (google.api.http) = { - get: "/registry/v1/repos/{repo_id=**}/digests/{digest=*}/sbom" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_REPO_LIST, CAP_TENANT_SBOMS_LIST] - } - }; - } - - rpc GetImageConfig(ImageConfigRequest) returns (ImageConfig) { - option (google.api.http) = { - get: "/registry/v1/repos/{repo_id=**}/digests/{digest=*}/imageconfig" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_REPO_LIST, CAP_MANIFEST_METADATA_LIST] - } - }; - } - - rpc GetVulnReport(VulnReportRequest) returns (chainguard.platform.tenant.VulnReport) { - option (google.api.http) = { - get: "/registry/v1/repos/{repo_id=**}/digests/{digest=*}/vulnreport" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_REPO_LIST, CAP_TENANT_VULN_REPORTS_LIST] - } - }; - } - - rpc ListManifestMetadata(ManifestMetadataFilter) returns (ManifestMetadataList) { - option (google.api.http) = { - get: "/registry/v1/repos/{repo_id=**}/manifestmetdata" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_MANIFEST_METADATA_LIST] - } - }; - }; -} - -message Repo { - // id is the identifier of this specific repository. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - - // name is the human-readable name of the repository. - string name = 2; - - // catalog_tier is the catalog tier this repository belongs to. - CatalogTier catalog_tier = 3; - - // bundles is a list of tags/labels that allow us to group repositories to each other for sales purposes. - repeated string bundles = 4; - - // readme is raw Markdown file contents describing the repo. - string readme = 5; - - // (optional) Repository sync configuration. If enabled, images are synced from the source to this repo. - // NOTE: This property can only be set by Chainguard. - // Note: the json_name defaults to "syncConfig" which causes our eventing - // system to not work properly (since the protobuf name is "sync_config") - SyncConfig sync_config = 6 [json_name="sync_config"]; -} - -enum CatalogTier { - UNKNOWN = 0; - FREE = 1; - STANDARD = 2; - PREMIUM = 3; -} - -message SyncConfig { - // Repo ID to sync from. - string source = 1; - - // Controls whether exported tags will be uniquely labeled. - bool unique_tags = 2; - - // When the catalog syncer should stop syncing from the source repository. - google.protobuf.Timestamp expiration = 3; -} - -message CreateRepoRequest { - string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; - Repo repo = 2; -} - -message DeleteRepoRequest { - // ID, UID of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message RepoList { - repeated Repo items = 1; -} - -message RepoFilter { - // uidp filters records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 1; - - // name is the exact name of the record. - string name = 2; - - // id is the identifier of this specific repository. - string id = 3; -} - -message CreateTagRequest { - string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; - Tag tag = 2; -} - -message DeleteTagRequest { - // ID, UID of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message Tag { - // id, identifier of this Tag, a UIDP under a Repo. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - - // name, the unique name of the Tag. - string name = 2; - - // digest, the digest of the manifest with this tag. - string digest = 3; - - // last time this tag was updated. - google.protobuf.Timestamp last_updated = 4; - - // deprecated, true if the tag is deprecated. - bool deprecated = 5; - - // bundles is a list of tags/labels for sales purposes. - repeated string bundles = 6; -} - -message TagFilter { - // uidp filters records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 1; - - // The unique name of the Tag to list. - string name = 2; - - // The timestamp after which returned records were updated. - google.protobuf.Timestamp updated_since = 3; - - // Exclude tags of the form "sha256-*". - bool exclude_referrers = 6; - - // Exclude tags of the form "*-20yymmdd". - bool exclude_dates = 7; - - // Exclude tags of the form "*-r[0-9]+". - bool exclude_epochs = 8; - - string id = 9; -} - -message TagList { - repeated Tag items = 1; -} - -message TagHistoryFilter { - // tag UIDP to list history for. - string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; - - google.protobuf.Timestamp start = 2; - google.protobuf.Timestamp end = 3; -} - -message TagHistoryList { - repeated TagHistory items = 1; -} - -message TagHistory { - google.protobuf.Timestamp update_timestamp = 1; - string digest = 2; -} - -message DiffImageResponse { - PackagesDiff packages = 1; - VulnerabilitiesDiff vulnerabilities = 2; - - // This field referred to the FilesDiff mesage and is no longer in use. - reserved 3; - - ImageConfigDiff config = 4; - - // warnings is a list of warning messages to return to the requesting client. - // Warning messages describe a problem the client making the DiffImageRequest should correct or be aware of. - // Warnings over 256 characters and large numbers of warnings may be truncated. - repeated string warnings = 5; -} - -message ImageConfigDiff { - ChangedImageConfig changed = 1; -} - -message ChangedImageConfig { - message ChangedUser { - string current = 1; - string previous = 2; - } - ChangedUser changedUser = 1; - - message ChangedWorkingDir { - string current = 1; - string previous = 2; - } - - ChangedWorkingDir changedWorkingDir = 2; - - message EntrypointDiff { - repeated string added = 1; - repeated string removed = 2; - } - - EntrypointDiff entrypoints = 3; - - message EnvDiff { - repeated string added = 1; - repeated string removed = 2; - } - - EnvDiff envs = 4; - - message CmdDiff { - repeated string added = 1; - repeated string removed = 2; - } - - CmdDiff cmds = 5; - - message ChangedStopSignal { - string current = 1; - string previous = 2; - } - ChangedStopSignal changedStopSignal = 6; - - message Volume {} - message VolumeDiff { - map added = 1; - map removed = 2; - } - VolumeDiff volumes = 7; -} - -message ImageConfig { - // User defines the username or UID which the process in the container should run as. - string user = 1; - - // ExposedPorts a set of ports to expose from a container running this image. - message ExposedPort {} - map exposed_ports = 2; - - // Env is a list of environment variables to be used in a container. - repeated string env = 3; - - // Entrypoint defines a list of arguments to use as the command to execute when the container starts. - repeated string entrypoint = 4; - - // Cmd defines the default arguments to the entrypoint of the container. - repeated string cmd = 5; - - message Volume {} - // Volumes is a set of directories describing where the process is likely write data specific to a container instance. - map volumes = 6; - - // WorkingDir sets the current working directory of the entrypoint process in the container. - string working_dir = 7; - - // Labels contains arbitrary metadata for the container. - map labels = 8; - - // StopSignal contains the system call signal that will be sent to the container to exit. - string stop_signal = 9; -} - -message PackagesDiff { - repeated PackageReference added = 1; - repeated PackageReference removed = 2; - - message ChangedPackageReference { - string name = 1; - VersionReference current = 2; - VersionReference previous = 3; - } - - repeated ChangedPackageReference changed = 3; -} - -message VersionReference { - string version = 1; - string reference = 2; -} - -// PackageReference is a reference to a package, containing minimal information to identify it. -message PackageReference { - string name = 1; - string version = 2; - string reference = 3; -} - -message VulnerabilitiesDiff { - repeated VulnerabilityReference added = 1; - repeated VulnerabilityReference removed = 2; - repeated ScannerMetadata metadata = 3; -} - -message ScannerMetadata { - string digest = 1; - chainguard.platform.tenant.Scanner scanner = 2; - google.protobuf.Timestamp vulnerability_db_last_build_time = 3; - string vulnerability_db_schema_version = 4; -} - -// VulnerabilityReference is a reference to a vulnerability, containing minimal information to identify it. -message VulnerabilityReference { - string id = 1; - string reference = 2; - string severity = 3; -} - -// DiffImageRequests are used to request a diff between two images. -message DiffImageRequest { - // The UIDP of the image repo to diff against. - string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; - - string from_digest = 2; - string to_digest = 3; -} - -message SbomRequest { - // The UIDP of the image repo to get an SBOM for. - string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; - // The digest of the image to get an SBOM for. - string digest = 2; -} - -message ImageConfigRequest { - // The UIDP of the image repo to get config for. - string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; - // The digest of the image to get config for. - string digest = 2; - // The architecture to get config for. - string arch = 3; -} - -message VulnReportRequest { - // The UIDP of the image repo to get a VulnReport for. - string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; - // The digest of the image to get a VulnReport for. - string digest = 2; -} - -message ManifestMetadataIndexFilter { - // The tag/index digest to fetch metadata for. - string digest = 1; - // The architecture to fetch metadata for. - string arch = 2; -} - -message ManifestMetadataFilterEntry { - oneof filter { - // For fetching metadata for an image digest - string image_digest = 1; - // For fetching metadata for an index digest - ManifestMetadataIndexFilter index_filter = 2; - } -} - -message ManifestMetadataFilter { - // The UIDP of the image repo that the digests belongs to. - string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; - // List of image digests or index digest to fetch package metadata for. - // All entries specified would be retrieved. - repeated ManifestMetadataFilterEntry items = 2; -} - -message PkgMetadata { - // purl of package or subpackage; spec https://github.com/package-url/purl-spec - string purl = 1; - // if differ from purl, it means it is a subpackage - string origin_purl = 2; - // date when EOL, date 0-0-0 when not eol - google.protobuf.Timestamp eol_date = 3; - // timestamp when package was built, date 0-0-0 when build timestamp not available - google.protobuf.Timestamp build_timestamp = 4; - // license of package, empty if unknown - string license = 5; -} - -message ManifestMetadata { - // Digest of image that packages are associated with. - string digest = 1; - // List of packages that are part of image. - repeated PkgMetadata pkg_metadata = 2; -} - -message ManifestMetadataList { - repeated ManifestMetadata items = 1; -} diff --git a/proto/platform/registry/v1/registry.platform_grpc.pb.go b/proto/platform/registry/v1/registry.platform_grpc.pb.go deleted file mode 100644 index 1ce0e110..00000000 --- a/proto/platform/registry/v1/registry.platform_grpc.pb.go +++ /dev/null @@ -1,592 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: registry.platform.proto - -package v1 - -import ( - v1 "chainguard.dev/sdk/proto/platform/tenant/v1" - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Registry_CreateRepo_FullMethodName = "/chainguard.platform.registry.Registry/CreateRepo" - Registry_UpdateRepo_FullMethodName = "/chainguard.platform.registry.Registry/UpdateRepo" - Registry_ListRepos_FullMethodName = "/chainguard.platform.registry.Registry/ListRepos" - Registry_DeleteRepo_FullMethodName = "/chainguard.platform.registry.Registry/DeleteRepo" - Registry_CreateTag_FullMethodName = "/chainguard.platform.registry.Registry/CreateTag" - Registry_UpdateTag_FullMethodName = "/chainguard.platform.registry.Registry/UpdateTag" - Registry_DeleteTag_FullMethodName = "/chainguard.platform.registry.Registry/DeleteTag" - Registry_ListTags_FullMethodName = "/chainguard.platform.registry.Registry/ListTags" - Registry_ListTagHistory_FullMethodName = "/chainguard.platform.registry.Registry/ListTagHistory" - Registry_DiffImage_FullMethodName = "/chainguard.platform.registry.Registry/DiffImage" - Registry_GetSbom_FullMethodName = "/chainguard.platform.registry.Registry/GetSbom" - Registry_GetImageConfig_FullMethodName = "/chainguard.platform.registry.Registry/GetImageConfig" - Registry_GetVulnReport_FullMethodName = "/chainguard.platform.registry.Registry/GetVulnReport" - Registry_ListManifestMetadata_FullMethodName = "/chainguard.platform.registry.Registry/ListManifestMetadata" -) - -// RegistryClient is the client API for Registry service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type RegistryClient interface { - CreateRepo(ctx context.Context, in *CreateRepoRequest, opts ...grpc.CallOption) (*Repo, error) - UpdateRepo(ctx context.Context, in *Repo, opts ...grpc.CallOption) (*Repo, error) - ListRepos(ctx context.Context, in *RepoFilter, opts ...grpc.CallOption) (*RepoList, error) - DeleteRepo(ctx context.Context, in *DeleteRepoRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - CreateTag(ctx context.Context, in *CreateTagRequest, opts ...grpc.CallOption) (*Tag, error) - UpdateTag(ctx context.Context, in *Tag, opts ...grpc.CallOption) (*Tag, error) - DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - ListTags(ctx context.Context, in *TagFilter, opts ...grpc.CallOption) (*TagList, error) - ListTagHistory(ctx context.Context, in *TagHistoryFilter, opts ...grpc.CallOption) (*TagHistoryList, error) - DiffImage(ctx context.Context, in *DiffImageRequest, opts ...grpc.CallOption) (*DiffImageResponse, error) - GetSbom(ctx context.Context, in *SbomRequest, opts ...grpc.CallOption) (*v1.Sbom2, error) - GetImageConfig(ctx context.Context, in *ImageConfigRequest, opts ...grpc.CallOption) (*ImageConfig, error) - GetVulnReport(ctx context.Context, in *VulnReportRequest, opts ...grpc.CallOption) (*v1.VulnReport, error) - ListManifestMetadata(ctx context.Context, in *ManifestMetadataFilter, opts ...grpc.CallOption) (*ManifestMetadataList, error) -} - -type registryClient struct { - cc grpc.ClientConnInterface -} - -func NewRegistryClient(cc grpc.ClientConnInterface) RegistryClient { - return ®istryClient{cc} -} - -func (c *registryClient) CreateRepo(ctx context.Context, in *CreateRepoRequest, opts ...grpc.CallOption) (*Repo, error) { - out := new(Repo) - err := c.cc.Invoke(ctx, Registry_CreateRepo_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) UpdateRepo(ctx context.Context, in *Repo, opts ...grpc.CallOption) (*Repo, error) { - out := new(Repo) - err := c.cc.Invoke(ctx, Registry_UpdateRepo_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) ListRepos(ctx context.Context, in *RepoFilter, opts ...grpc.CallOption) (*RepoList, error) { - out := new(RepoList) - err := c.cc.Invoke(ctx, Registry_ListRepos_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) DeleteRepo(ctx context.Context, in *DeleteRepoRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, Registry_DeleteRepo_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) CreateTag(ctx context.Context, in *CreateTagRequest, opts ...grpc.CallOption) (*Tag, error) { - out := new(Tag) - err := c.cc.Invoke(ctx, Registry_CreateTag_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) UpdateTag(ctx context.Context, in *Tag, opts ...grpc.CallOption) (*Tag, error) { - out := new(Tag) - err := c.cc.Invoke(ctx, Registry_UpdateTag_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, Registry_DeleteTag_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) ListTags(ctx context.Context, in *TagFilter, opts ...grpc.CallOption) (*TagList, error) { - out := new(TagList) - err := c.cc.Invoke(ctx, Registry_ListTags_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) ListTagHistory(ctx context.Context, in *TagHistoryFilter, opts ...grpc.CallOption) (*TagHistoryList, error) { - out := new(TagHistoryList) - err := c.cc.Invoke(ctx, Registry_ListTagHistory_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) DiffImage(ctx context.Context, in *DiffImageRequest, opts ...grpc.CallOption) (*DiffImageResponse, error) { - out := new(DiffImageResponse) - err := c.cc.Invoke(ctx, Registry_DiffImage_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) GetSbom(ctx context.Context, in *SbomRequest, opts ...grpc.CallOption) (*v1.Sbom2, error) { - out := new(v1.Sbom2) - err := c.cc.Invoke(ctx, Registry_GetSbom_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) GetImageConfig(ctx context.Context, in *ImageConfigRequest, opts ...grpc.CallOption) (*ImageConfig, error) { - out := new(ImageConfig) - err := c.cc.Invoke(ctx, Registry_GetImageConfig_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) GetVulnReport(ctx context.Context, in *VulnReportRequest, opts ...grpc.CallOption) (*v1.VulnReport, error) { - out := new(v1.VulnReport) - err := c.cc.Invoke(ctx, Registry_GetVulnReport_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *registryClient) ListManifestMetadata(ctx context.Context, in *ManifestMetadataFilter, opts ...grpc.CallOption) (*ManifestMetadataList, error) { - out := new(ManifestMetadataList) - err := c.cc.Invoke(ctx, Registry_ListManifestMetadata_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RegistryServer is the server API for Registry service. -// All implementations must embed UnimplementedRegistryServer -// for forward compatibility -type RegistryServer interface { - CreateRepo(context.Context, *CreateRepoRequest) (*Repo, error) - UpdateRepo(context.Context, *Repo) (*Repo, error) - ListRepos(context.Context, *RepoFilter) (*RepoList, error) - DeleteRepo(context.Context, *DeleteRepoRequest) (*emptypb.Empty, error) - CreateTag(context.Context, *CreateTagRequest) (*Tag, error) - UpdateTag(context.Context, *Tag) (*Tag, error) - DeleteTag(context.Context, *DeleteTagRequest) (*emptypb.Empty, error) - ListTags(context.Context, *TagFilter) (*TagList, error) - ListTagHistory(context.Context, *TagHistoryFilter) (*TagHistoryList, error) - DiffImage(context.Context, *DiffImageRequest) (*DiffImageResponse, error) - GetSbom(context.Context, *SbomRequest) (*v1.Sbom2, error) - GetImageConfig(context.Context, *ImageConfigRequest) (*ImageConfig, error) - GetVulnReport(context.Context, *VulnReportRequest) (*v1.VulnReport, error) - ListManifestMetadata(context.Context, *ManifestMetadataFilter) (*ManifestMetadataList, error) - mustEmbedUnimplementedRegistryServer() -} - -// UnimplementedRegistryServer must be embedded to have forward compatible implementations. -type UnimplementedRegistryServer struct { -} - -func (UnimplementedRegistryServer) CreateRepo(context.Context, *CreateRepoRequest) (*Repo, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateRepo not implemented") -} -func (UnimplementedRegistryServer) UpdateRepo(context.Context, *Repo) (*Repo, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateRepo not implemented") -} -func (UnimplementedRegistryServer) ListRepos(context.Context, *RepoFilter) (*RepoList, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListRepos not implemented") -} -func (UnimplementedRegistryServer) DeleteRepo(context.Context, *DeleteRepoRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteRepo not implemented") -} -func (UnimplementedRegistryServer) CreateTag(context.Context, *CreateTagRequest) (*Tag, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateTag not implemented") -} -func (UnimplementedRegistryServer) UpdateTag(context.Context, *Tag) (*Tag, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateTag not implemented") -} -func (UnimplementedRegistryServer) DeleteTag(context.Context, *DeleteTagRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method DeleteTag not implemented") -} -func (UnimplementedRegistryServer) ListTags(context.Context, *TagFilter) (*TagList, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListTags not implemented") -} -func (UnimplementedRegistryServer) ListTagHistory(context.Context, *TagHistoryFilter) (*TagHistoryList, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListTagHistory not implemented") -} -func (UnimplementedRegistryServer) DiffImage(context.Context, *DiffImageRequest) (*DiffImageResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method DiffImage not implemented") -} -func (UnimplementedRegistryServer) GetSbom(context.Context, *SbomRequest) (*v1.Sbom2, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetSbom not implemented") -} -func (UnimplementedRegistryServer) GetImageConfig(context.Context, *ImageConfigRequest) (*ImageConfig, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetImageConfig not implemented") -} -func (UnimplementedRegistryServer) GetVulnReport(context.Context, *VulnReportRequest) (*v1.VulnReport, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetVulnReport not implemented") -} -func (UnimplementedRegistryServer) ListManifestMetadata(context.Context, *ManifestMetadataFilter) (*ManifestMetadataList, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListManifestMetadata not implemented") -} -func (UnimplementedRegistryServer) mustEmbedUnimplementedRegistryServer() {} - -// UnsafeRegistryServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to RegistryServer will -// result in compilation errors. -type UnsafeRegistryServer interface { - mustEmbedUnimplementedRegistryServer() -} - -func RegisterRegistryServer(s grpc.ServiceRegistrar, srv RegistryServer) { - s.RegisterService(&Registry_ServiceDesc, srv) -} - -func _Registry_CreateRepo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateRepoRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).CreateRepo(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_CreateRepo_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).CreateRepo(ctx, req.(*CreateRepoRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_UpdateRepo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Repo) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).UpdateRepo(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_UpdateRepo_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).UpdateRepo(ctx, req.(*Repo)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_ListRepos_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RepoFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).ListRepos(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_ListRepos_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).ListRepos(ctx, req.(*RepoFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_DeleteRepo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteRepoRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).DeleteRepo(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_DeleteRepo_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).DeleteRepo(ctx, req.(*DeleteRepoRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_CreateTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateTagRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).CreateTag(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_CreateTag_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).CreateTag(ctx, req.(*CreateTagRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_UpdateTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Tag) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).UpdateTag(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_UpdateTag_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).UpdateTag(ctx, req.(*Tag)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_DeleteTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteTagRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).DeleteTag(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_DeleteTag_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).DeleteTag(ctx, req.(*DeleteTagRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_ListTags_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TagFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).ListTags(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_ListTags_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).ListTags(ctx, req.(*TagFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_ListTagHistory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(TagHistoryFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).ListTagHistory(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_ListTagHistory_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).ListTagHistory(ctx, req.(*TagHistoryFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_DiffImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DiffImageRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).DiffImage(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_DiffImage_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).DiffImage(ctx, req.(*DiffImageRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_GetSbom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SbomRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).GetSbom(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_GetSbom_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).GetSbom(ctx, req.(*SbomRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_GetImageConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ImageConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).GetImageConfig(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_GetImageConfig_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).GetImageConfig(ctx, req.(*ImageConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_GetVulnReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(VulnReportRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).GetVulnReport(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_GetVulnReport_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).GetVulnReport(ctx, req.(*VulnReportRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Registry_ListManifestMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ManifestMetadataFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RegistryServer).ListManifestMetadata(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Registry_ListManifestMetadata_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RegistryServer).ListManifestMetadata(ctx, req.(*ManifestMetadataFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// Registry_ServiceDesc is the grpc.ServiceDesc for Registry service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Registry_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.registry.Registry", - HandlerType: (*RegistryServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "CreateRepo", - Handler: _Registry_CreateRepo_Handler, - }, - { - MethodName: "UpdateRepo", - Handler: _Registry_UpdateRepo_Handler, - }, - { - MethodName: "ListRepos", - Handler: _Registry_ListRepos_Handler, - }, - { - MethodName: "DeleteRepo", - Handler: _Registry_DeleteRepo_Handler, - }, - { - MethodName: "CreateTag", - Handler: _Registry_CreateTag_Handler, - }, - { - MethodName: "UpdateTag", - Handler: _Registry_UpdateTag_Handler, - }, - { - MethodName: "DeleteTag", - Handler: _Registry_DeleteTag_Handler, - }, - { - MethodName: "ListTags", - Handler: _Registry_ListTags_Handler, - }, - { - MethodName: "ListTagHistory", - Handler: _Registry_ListTagHistory_Handler, - }, - { - MethodName: "DiffImage", - Handler: _Registry_DiffImage_Handler, - }, - { - MethodName: "GetSbom", - Handler: _Registry_GetSbom_Handler, - }, - { - MethodName: "GetImageConfig", - Handler: _Registry_GetImageConfig_Handler, - }, - { - MethodName: "GetVulnReport", - Handler: _Registry_GetVulnReport_Handler, - }, - { - MethodName: "ListManifestMetadata", - Handler: _Registry_ListManifestMetadata_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "registry.platform.proto", -} diff --git a/proto/platform/registry/v1/test/registry.go b/proto/platform/registry/v1/test/registry.go deleted file mode 100644 index a0abfed0..00000000 --- a/proto/platform/registry/v1/test/registry.go +++ /dev/null @@ -1,263 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - registry "chainguard.dev/sdk/proto/platform/registry/v1" - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" -) - -var _ registry.Clients = (*MockRegistryClients)(nil) - -type MockRegistryClients struct { - OnClose error - - RegistryClient MockRegistryClient -} - -func (m MockRegistryClients) Registry() registry.RegistryClient { - return &m.RegistryClient -} - -func (m MockRegistryClients) Close() error { - return m.OnClose -} - -var _ registry.RegistryClient = (*MockRegistryClient)(nil) - -type MockRegistryClient struct { - registry.RegistryClient - - OnCreateRepos []ReposOnCreate - OnDeleteRepos []ReposOnDelete - OnListRepos []ReposOnList - OnCreateTags []TagsOnCreate - OnDeleteTags []TagsOnDelete - OnUpdateTag []TagOnUpdate - OnListTags []TagsOnList - OnUpdateRepo []RepoOnUpdate - OnListTagHistory []TagHistoryOnList - OnGetImageConfig []ImageConfigOnGet - OnGetSbom []SbomOnGet - OnGetVulnReport []VulnReportOnGet - OnDiffImage []DiffImage - OnListManifestMetadata []ManifestMetadataOnList -} - -type DiffImage struct { - Given *registry.DiffImageRequest - Diff *registry.DiffImageResponse - Error error -} - -type ReposOnCreate struct { - Given *registry.CreateRepoRequest - Created *registry.Repo - Error error -} - -type ReposOnDelete struct { - Given *registry.DeleteRepoRequest - Error error -} - -type ReposOnList struct { - Given *registry.RepoFilter - List *registry.RepoList - Error error -} - -type TagsOnCreate struct { - Given *registry.CreateTagRequest - Created *registry.Tag - Error error -} - -type TagsOnDelete struct { - Given *registry.DeleteTagRequest - Error error -} - -type TagOnUpdate struct { - Given *registry.Tag - Updated *registry.Tag - Error error -} - -type TagsOnList struct { - Given *registry.TagFilter - List *registry.TagList - Error error -} - -type RepoOnUpdate struct { - Given *registry.Repo - Updated *registry.Repo - Error error -} - -type TagHistoryOnList struct { - Given *registry.TagHistoryFilter - List *registry.TagHistoryList - Error error -} - -type ImageConfigOnGet struct { - Given *registry.ImageConfigRequest - Get *registry.ImageConfig - Error error -} - -type SbomOnGet struct { - Given *registry.SbomRequest - Get *tenant.Sbom2 - Error error -} - -type VulnReportOnGet struct { - Given *registry.VulnReportRequest - Get *tenant.VulnReport - Error error -} - -type ManifestMetadataOnList struct { - Given *registry.ManifestMetadataFilter - List *registry.ManifestMetadataList - Error error -} - -func (m MockRegistryClient) CreateRepo(_ context.Context, given *registry.CreateRepoRequest, _ ...grpc.CallOption) (*registry.Repo, error) { - for _, o := range m.OnCreateRepos { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) DeleteRepo(_ context.Context, given *registry.DeleteRepoRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDeleteRepos { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) ListRepos(_ context.Context, given *registry.RepoFilter, _ ...grpc.CallOption) (*registry.RepoList, error) { //nolint: revive - for _, o := range m.OnListRepos { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) CreateTag(_ context.Context, given *registry.CreateTagRequest, _ ...grpc.CallOption) (*registry.Tag, error) { - for _, o := range m.OnCreateTags { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) UpdateTag(_ context.Context, given *registry.Tag, _ ...grpc.CallOption) (*registry.Tag, error) { - for _, o := range m.OnUpdateTag { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) DeleteTag(_ context.Context, given *registry.DeleteTagRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDeleteTags { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) ListTags(_ context.Context, given *registry.TagFilter, _ ...grpc.CallOption) (*registry.TagList, error) { //nolint: revive - for _, o := range m.OnListTags { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) UpdateRepo(_ context.Context, given *registry.Repo, _ ...grpc.CallOption) (*registry.Repo, error) { //nolint: revive - for _, o := range m.OnUpdateRepo { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) ListTagHistory(_ context.Context, given *registry.TagHistoryFilter, _ ...grpc.CallOption) (*registry.TagHistoryList, error) { //nolint: revive - for _, o := range m.OnListTagHistory { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) GetImageConfig(_ context.Context, given *registry.ImageConfigRequest, _ ...grpc.CallOption) (*registry.ImageConfig, error) { //nolint: revive - for _, o := range m.OnGetImageConfig { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Get, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) GetSbom(_ context.Context, given *registry.SbomRequest, _ ...grpc.CallOption) (*tenant.Sbom2, error) { //nolint: revive - for _, o := range m.OnGetSbom { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Get, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) GetVulnReport(_ context.Context, given *registry.VulnReportRequest, _ ...grpc.CallOption) (*tenant.VulnReport, error) { //nolint: revive - for _, o := range m.OnGetVulnReport { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Get, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) DiffImage(_ context.Context, given *registry.DiffImageRequest, _ ...grpc.CallOption) (*registry.DiffImageResponse, error) { - for _, o := range m.OnDiffImage { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Diff, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockRegistryClient) ListManifestMetadata(_ context.Context, given *registry.ManifestMetadataFilter, _ ...grpc.CallOption) (*registry.ManifestMetadataList, error) { - for _, o := range m.OnListManifestMetadata { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/attestation.platform.pb.go b/proto/platform/tenant/v1/attestation.platform.pb.go deleted file mode 100644 index 347da47a..00000000 --- a/proto/platform/tenant/v1/attestation.platform.pb.go +++ /dev/null @@ -1,389 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: attestation.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Attestation represents a normalized Attestation that we have ingested into our datastore. -// They are linked to Signatures via ID, as in they are 'children' of Signatures -// There can be multiple of these that we keep. -type Attestation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The Attestation UIDP at which this Attestation resides in the hierarchy. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // raw_attestation is a free form type to stub in any attestations so we don't end up a - // adding new tables for all the new type of attestations, initial goal is to add image configs - // and anything which comes up after that - RawAttestation []byte `protobuf:"bytes,2,opt,name=raw_attestation,json=rawAttestation,proto3" json:"raw_attestation,omitempty"` - // format holds the Document format type - Format string `protobuf:"bytes,3,opt,name=format,proto3" json:"format,omitempty"` - // generated_at holds when the Attestation was generated. - GeneratedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=generated_at,json=generatedAt,proto3" json:"generated_at,omitempty"` - // Name of the Attestation. - Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` - // Short description of the Attestation - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - // digest of the Attestation when ingested - Digest *string `protobuf:"bytes,7,opt,name=digest,proto3,oneof" json:"digest,omitempty"` -} - -func (x *Attestation) Reset() { - *x = Attestation{} - if protoimpl.UnsafeEnabled { - mi := &file_attestation_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Attestation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Attestation) ProtoMessage() {} - -func (x *Attestation) ProtoReflect() protoreflect.Message { - mi := &file_attestation_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Attestation.ProtoReflect.Descriptor instead. -func (*Attestation) Descriptor() ([]byte, []int) { - return file_attestation_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Attestation) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Attestation) GetRawAttestation() []byte { - if x != nil { - return x.RawAttestation - } - return nil -} - -func (x *Attestation) GetFormat() string { - if x != nil { - return x.Format - } - return "" -} - -func (x *Attestation) GetGeneratedAt() *timestamppb.Timestamp { - if x != nil { - return x.GeneratedAt - } - return nil -} - -func (x *Attestation) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Attestation) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Attestation) GetDigest() string { - if x != nil && x.Digest != nil { - return *x.Digest - } - return "" -} - -type AttestationList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Attestation `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *AttestationList) Reset() { - *x = AttestationList{} - if protoimpl.UnsafeEnabled { - mi := &file_attestation_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AttestationList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AttestationList) ProtoMessage() {} - -func (x *AttestationList) ProtoReflect() protoreflect.Message { - mi := &file_attestation_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AttestationList.ProtoReflect.Descriptor instead. -func (*AttestationList) Descriptor() ([]byte, []int) { - return file_attestation_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *AttestationList) GetItems() []*Attestation { - if x != nil { - return x.Items - } - return nil -} - -type AttestationFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` -} - -func (x *AttestationFilter) Reset() { - *x = AttestationFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_attestation_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AttestationFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AttestationFilter) ProtoMessage() {} - -func (x *AttestationFilter) ProtoReflect() protoreflect.Message { - mi := &file_attestation_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AttestationFilter.ProtoReflect.Descriptor instead. -func (*AttestationFilter) Descriptor() ([]byte, []int) { - return file_attestation_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *AttestationFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *AttestationFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -var File_attestation_platform_proto protoreflect.FileDescriptor - -var file_attestation_platform_proto_rawDesc = []byte{ - 0x0a, 0x1a, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x0b, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x61, 0x77, - 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0e, 0x72, 0x61, 0x77, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x50, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x5f, 0x0a, 0x11, 0x41, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, - 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x32, 0x82, 0x01, 0x0a, 0x0c, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x72, 0x0a, 0x04, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x1a, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x9e, 0x05, 0x10, 0x01, 0x42, - 0x76, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_attestation_platform_proto_rawDescOnce sync.Once - file_attestation_platform_proto_rawDescData = file_attestation_platform_proto_rawDesc -) - -func file_attestation_platform_proto_rawDescGZIP() []byte { - file_attestation_platform_proto_rawDescOnce.Do(func() { - file_attestation_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_attestation_platform_proto_rawDescData) - }) - return file_attestation_platform_proto_rawDescData -} - -var file_attestation_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_attestation_platform_proto_goTypes = []interface{}{ - (*Attestation)(nil), // 0: chainguard.platform.tenant.Attestation - (*AttestationList)(nil), // 1: chainguard.platform.tenant.AttestationList - (*AttestationFilter)(nil), // 2: chainguard.platform.tenant.AttestationFilter - (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 4: chainguard.platform.common.UIDPFilter -} -var file_attestation_platform_proto_depIdxs = []int32{ - 3, // 0: chainguard.platform.tenant.Attestation.generated_at:type_name -> google.protobuf.Timestamp - 0, // 1: chainguard.platform.tenant.AttestationList.items:type_name -> chainguard.platform.tenant.Attestation - 4, // 2: chainguard.platform.tenant.AttestationFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 2, // 3: chainguard.platform.tenant.Attestations.List:input_type -> chainguard.platform.tenant.AttestationFilter - 1, // 4: chainguard.platform.tenant.Attestations.List:output_type -> chainguard.platform.tenant.AttestationList - 4, // [4:5] is the sub-list for method output_type - 3, // [3:4] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_attestation_platform_proto_init() } -func file_attestation_platform_proto_init() { - if File_attestation_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_attestation_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Attestation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attestation_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestationList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_attestation_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestationFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_attestation_platform_proto_msgTypes[0].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_attestation_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_attestation_platform_proto_goTypes, - DependencyIndexes: file_attestation_platform_proto_depIdxs, - MessageInfos: file_attestation_platform_proto_msgTypes, - }.Build() - File_attestation_platform_proto = out.File - file_attestation_platform_proto_rawDesc = nil - file_attestation_platform_proto_goTypes = nil - file_attestation_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/attestation.platform.pb.gw.go b/proto/platform/tenant/v1/attestation.platform.pb.gw.go deleted file mode 100644 index 459d4b0b..00000000 --- a/proto/platform/tenant/v1/attestation.platform.pb.gw.go +++ /dev/null @@ -1,164 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: attestation.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Attestations_List_0(ctx context.Context, marshaler runtime.Marshaler, client AttestationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AttestationFilter - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Attestations_List_0(ctx context.Context, marshaler runtime.Marshaler, server AttestationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq AttestationFilter - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterAttestationsHandlerServer registers the http handlers for service Attestations to "mux". -// UnaryRPC :call AttestationsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAttestationsHandlerFromEndpoint instead. -func RegisterAttestationsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AttestationsServer) error { - - mux.Handle("POST", pattern_Attestations_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Attestations/List", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Attestations/List")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Attestations_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Attestations_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterAttestationsHandlerFromEndpoint is same as RegisterAttestationsHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterAttestationsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterAttestationsHandler(ctx, mux, conn) -} - -// RegisterAttestationsHandler registers the http handlers for service Attestations to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterAttestationsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterAttestationsHandlerClient(ctx, mux, NewAttestationsClient(conn)) -} - -// RegisterAttestationsHandlerClient registers the http handlers for service Attestations -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AttestationsClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AttestationsClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "AttestationsClient" to call the correct interceptors. -func RegisterAttestationsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AttestationsClient) error { - - mux.Handle("POST", pattern_Attestations_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Attestations/List", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Attestations/List")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Attestations_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Attestations_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Attestations_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Attestations", "List"}, "")) -) - -var ( - forward_Attestations_List_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/tenant/v1/attestation.platform.proto b/proto/platform/tenant/v1/attestation.platform.proto deleted file mode 100644 index 652a67f2..00000000 --- a/proto/platform/tenant/v1/attestation.platform.proto +++ /dev/null @@ -1,63 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantAttestationProto"; - -package chainguard.platform.tenant; - -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Attestations { - rpc List(AttestationFilter) returns (AttestationList) { - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_ATTESTATIONS_LIST] - unscoped: true - } - }; - } - } - -// Attestation represents a normalized Attestation that we have ingested into our datastore. -// They are linked to Signatures via ID, as in they are 'children' of Signatures -// There can be multiple of these that we keep. -message Attestation { - // id, The Attestation UIDP at which this Attestation resides in the hierarchy. - string id = 1; - - // raw_attestation is a free form type to stub in any attestations so we don't end up a - // adding new tables for all the new type of attestations, initial goal is to add image configs - // and anything which comes up after that - bytes raw_attestation = 2; - - // format holds the Document format type - string format = 3; - - // generated_at holds when the Attestation was generated. - google.protobuf.Timestamp generated_at = 4; - - // Name of the Attestation. - string name = 5; - - // Short description of the Attestation - string description = 6; - - // digest of the Attestation when ingested - optional string digest = 7; -} - -message AttestationList { - repeated Attestation items = 1; -} - -message AttestationFilter { - // id is the exact UID of the record. - string id = 1; - - chainguard.platform.common.UIDPFilter uidp = 2; - -} diff --git a/proto/platform/tenant/v1/attestation.platform_grpc.pb.go b/proto/platform/tenant/v1/attestation.platform_grpc.pb.go deleted file mode 100644 index 29dad01f..00000000 --- a/proto/platform/tenant/v1/attestation.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: attestation.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Attestations_List_FullMethodName = "/chainguard.platform.tenant.Attestations/List" -) - -// AttestationsClient is the client API for Attestations service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type AttestationsClient interface { - List(ctx context.Context, in *AttestationFilter, opts ...grpc.CallOption) (*AttestationList, error) -} - -type attestationsClient struct { - cc grpc.ClientConnInterface -} - -func NewAttestationsClient(cc grpc.ClientConnInterface) AttestationsClient { - return &attestationsClient{cc} -} - -func (c *attestationsClient) List(ctx context.Context, in *AttestationFilter, opts ...grpc.CallOption) (*AttestationList, error) { - out := new(AttestationList) - err := c.cc.Invoke(ctx, Attestations_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// AttestationsServer is the server API for Attestations service. -// All implementations must embed UnimplementedAttestationsServer -// for forward compatibility -type AttestationsServer interface { - List(context.Context, *AttestationFilter) (*AttestationList, error) - mustEmbedUnimplementedAttestationsServer() -} - -// UnimplementedAttestationsServer must be embedded to have forward compatible implementations. -type UnimplementedAttestationsServer struct { -} - -func (UnimplementedAttestationsServer) List(context.Context, *AttestationFilter) (*AttestationList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedAttestationsServer) mustEmbedUnimplementedAttestationsServer() {} - -// UnsafeAttestationsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to AttestationsServer will -// result in compilation errors. -type UnsafeAttestationsServer interface { - mustEmbedUnimplementedAttestationsServer() -} - -func RegisterAttestationsServer(s grpc.ServiceRegistrar, srv AttestationsServer) { - s.RegisterService(&Attestations_ServiceDesc, srv) -} - -func _Attestations_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(AttestationFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AttestationsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Attestations_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AttestationsServer).List(ctx, req.(*AttestationFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// Attestations_ServiceDesc is the grpc.ServiceDesc for Attestations service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Attestations_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.Attestations", - HandlerType: (*AttestationsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _Attestations_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "attestation.platform.proto", -} diff --git a/proto/platform/tenant/v1/clients.go b/proto/platform/tenant/v1/clients.go deleted file mode 100644 index e3fc43d6..00000000 --- a/proto/platform/tenant/v1/clients.go +++ /dev/null @@ -1,97 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "context" - "fmt" - "net/url" - "time" - - delegate "chainguard.dev/go-grpc-kit/pkg/options" - "github.com/chainguard-dev/clog" - "google.golang.org/grpc" - - "chainguard.dev/sdk/auth" -) - -type Clients interface { - Sboms() SbomsClient - Signatures() SignaturesClient - VulnReports() VulnReportsClient - - Close() error -} - -func NewClients(ctx context.Context, addr string, token string) (Clients, error) { - uri, err := url.Parse(addr) - if err != nil { - return nil, fmt.Errorf("failed to parse tenant service address, must be a url: %w", err) - } - - target, opts := delegate.GRPCOptions(*uri) - - // TODO: we may want to require transport security at some future point. - if cred := auth.NewFromToken(ctx, token, false); cred != nil { - opts = append(opts, grpc.WithPerRPCCredentials(cred)) - } else { - clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") - } - - var cancel context.CancelFunc - if _, timeoutSet := ctx.Deadline(); !timeoutSet { - ctx, cancel = context.WithTimeout(ctx, 300*time.Second) - defer cancel() - } - conn, err := grpc.DialContext(ctx, target, opts...) - if err != nil { - return nil, fmt.Errorf("failed to connect to the iam server: %w", err) - } - - return &clients{ - sboms: NewSbomsClient(conn), - vulnReports: NewVulnReportsClient(conn), - signatures: NewSignaturesClient(conn), - - conn: conn, - }, nil -} - -func NewClientsFromConnection(conn *grpc.ClientConn) Clients { - return &clients{ - sboms: NewSbomsClient(conn), - vulnReports: NewVulnReportsClient(conn), - signatures: NewSignaturesClient(conn), - // conn is not set, this client struct does not own closing it. - } -} - -type clients struct { - sboms SbomsClient - signatures SignaturesClient - vulnReports VulnReportsClient - - conn *grpc.ClientConn -} - -func (c *clients) Sboms() SbomsClient { - return c.sboms -} - -func (c *clients) Signatures() SignaturesClient { - return c.signatures -} - -func (c *clients) VulnReports() VulnReportsClient { - return c.vulnReports -} - -func (c *clients) Close() error { - if c.conn != nil { - return c.conn.Close() - } - return nil -} diff --git a/proto/platform/tenant/v1/doc.go b/proto/platform/tenant/v1/doc.go deleted file mode 100644 index 6a950653..00000000 --- a/proto/platform/tenant/v1/doc.go +++ /dev/null @@ -1,13 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package v1 contains the v1 GRPC client and server definitions -// for implementing Tenant interactions for the Console. -// -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative signature.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. sbom.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. vuln.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. attestation.platform.proto -package v1 diff --git a/proto/platform/tenant/v1/sbom.platform.pb.go b/proto/platform/tenant/v1/sbom.platform.pb.go deleted file mode 100644 index 69a23ca4..00000000 --- a/proto/platform/tenant/v1/sbom.platform.pb.go +++ /dev/null @@ -1,1058 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: sbom.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Type -type Sbom2_Source int32 - -const ( - Sbom2_UNKNOWN Sbom2_Source = 0 - Sbom2_INGESTED Sbom2_Source = 1 - Sbom2_GENERATED Sbom2_Source = 2 -) - -// Enum value maps for Sbom2_Source. -var ( - Sbom2_Source_name = map[int32]string{ - 0: "UNKNOWN", - 1: "INGESTED", - 2: "GENERATED", - } - Sbom2_Source_value = map[string]int32{ - "UNKNOWN": 0, - "INGESTED": 1, - "GENERATED": 2, - } -) - -func (x Sbom2_Source) Enum() *Sbom2_Source { - p := new(Sbom2_Source) - *p = x - return p -} - -func (x Sbom2_Source) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Sbom2_Source) Descriptor() protoreflect.EnumDescriptor { - return file_sbom_platform_proto_enumTypes[0].Descriptor() -} - -func (Sbom2_Source) Type() protoreflect.EnumType { - return &file_sbom_platform_proto_enumTypes[0] -} - -func (x Sbom2_Source) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Sbom2_Source.Descriptor instead. -func (Sbom2_Source) EnumDescriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{0, 0} -} - -type ComponentGraph_Edge_Type int32 - -const ( - ComponentGraph_Edge_UNKNOWN ComponentGraph_Edge_Type = 0 - ComponentGraph_Edge_DESCRIBES ComponentGraph_Edge_Type = 1 - ComponentGraph_Edge_CONTAINS ComponentGraph_Edge_Type = 2 - ComponentGraph_Edge_DEPENDS_ON ComponentGraph_Edge_Type = 3 - ComponentGraph_Edge_GENERATED_FROM ComponentGraph_Edge_Type = 4 // and so on...; for inspiration, see https://spdx.github.io/spdx-spec/v2.3/relationships-between-SPDX-elements/ -) - -// Enum value maps for ComponentGraph_Edge_Type. -var ( - ComponentGraph_Edge_Type_name = map[int32]string{ - 0: "UNKNOWN", - 1: "DESCRIBES", - 2: "CONTAINS", - 3: "DEPENDS_ON", - 4: "GENERATED_FROM", - } - ComponentGraph_Edge_Type_value = map[string]int32{ - "UNKNOWN": 0, - "DESCRIBES": 1, - "CONTAINS": 2, - "DEPENDS_ON": 3, - "GENERATED_FROM": 4, - } -) - -func (x ComponentGraph_Edge_Type) Enum() *ComponentGraph_Edge_Type { - p := new(ComponentGraph_Edge_Type) - *p = x - return p -} - -func (x ComponentGraph_Edge_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ComponentGraph_Edge_Type) Descriptor() protoreflect.EnumDescriptor { - return file_sbom_platform_proto_enumTypes[1].Descriptor() -} - -func (ComponentGraph_Edge_Type) Type() protoreflect.EnumType { - return &file_sbom_platform_proto_enumTypes[1] -} - -func (x ComponentGraph_Edge_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ComponentGraph_Edge_Type.Descriptor instead. -func (ComponentGraph_Edge_Type) EnumDescriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{1, 1, 0} -} - -// Sbom represents a normalized SBOM that we have ingested into our datastore. -// They are linked to Signatures via ID, as in they are 'children' of Signatures -// There can be multiple of these that we keep. -type Sbom2 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The Sbom UIDP at which this Sbom resides in the hierarchy. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // raw_sbom may or may not be useful in the long term, but for now to make - // progress on this, we'll just yolo and serialize it here. - RawSbom []byte `protobuf:"bytes,2,opt,name=raw_sbom,json=rawSbom,proto3" json:"raw_sbom,omitempty"` - Graph *ComponentGraph `protobuf:"bytes,3,opt,name=graph,proto3" json:"graph,omitempty"` - // last_seen tracks the timestamp at which this sbom was last seen. - // TODO(vaikas): Does this really make any sense? - LastSeen *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` - // tool holds the name of the tool that produced the SBOM. - Tool string `protobuf:"bytes,5,opt,name=tool,proto3" json:"tool,omitempty"` - // format holds whether the SBOM is SPDX, CycloneDX, or other. - Format string `protobuf:"bytes,6,opt,name=format,proto3" json:"format,omitempty"` - // generated_at holds when the SBOM was generated. - GeneratedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=generated_at,json=generatedAt,proto3" json:"generated_at,omitempty"` - // authors is zero or more authors concatenated. - Authors string `protobuf:"bytes,8,opt,name=authors,proto3" json:"authors,omitempty"` - // source is where the SBOM came from. For example, we want to know if sbom - // was generated by us, or ingested. - Source Sbom2_Source `protobuf:"varint,9,opt,name=source,proto3,enum=chainguard.platform.tenant.Sbom2_Source" json:"source,omitempty"` - // Name of the Sbom. - Name string `protobuf:"bytes,10,opt,name=name,proto3" json:"name,omitempty"` - // Short description of the Sbom - Description string `protobuf:"bytes,11,opt,name=description,proto3" json:"description,omitempty"` - // digest of the SBOM when ingested - Digest *string `protobuf:"bytes,12,opt,name=digest,proto3,oneof" json:"digest,omitempty"` -} - -func (x *Sbom2) Reset() { - *x = Sbom2{} - if protoimpl.UnsafeEnabled { - mi := &file_sbom_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Sbom2) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Sbom2) ProtoMessage() {} - -func (x *Sbom2) ProtoReflect() protoreflect.Message { - mi := &file_sbom_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Sbom2.ProtoReflect.Descriptor instead. -func (*Sbom2) Descriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Sbom2) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Sbom2) GetRawSbom() []byte { - if x != nil { - return x.RawSbom - } - return nil -} - -func (x *Sbom2) GetGraph() *ComponentGraph { - if x != nil { - return x.Graph - } - return nil -} - -func (x *Sbom2) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -func (x *Sbom2) GetTool() string { - if x != nil { - return x.Tool - } - return "" -} - -func (x *Sbom2) GetFormat() string { - if x != nil { - return x.Format - } - return "" -} - -func (x *Sbom2) GetGeneratedAt() *timestamppb.Timestamp { - if x != nil { - return x.GeneratedAt - } - return nil -} - -func (x *Sbom2) GetAuthors() string { - if x != nil { - return x.Authors - } - return "" -} - -func (x *Sbom2) GetSource() Sbom2_Source { - if x != nil { - return x.Source - } - return Sbom2_UNKNOWN -} - -func (x *Sbom2) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Sbom2) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Sbom2) GetDigest() string { - if x != nil && x.Digest != nil { - return *x.Digest - } - return "" -} - -type ComponentGraph struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Nodes []*ComponentGraph_Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` - Edges []*ComponentGraph_Edge `protobuf:"bytes,2,rep,name=edges,proto3" json:"edges,omitempty"` -} - -func (x *ComponentGraph) Reset() { - *x = ComponentGraph{} - if protoimpl.UnsafeEnabled { - mi := &file_sbom_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentGraph) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentGraph) ProtoMessage() {} - -func (x *ComponentGraph) ProtoReflect() protoreflect.Message { - mi := &file_sbom_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentGraph.ProtoReflect.Descriptor instead. -func (*ComponentGraph) Descriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *ComponentGraph) GetNodes() []*ComponentGraph_Node { - if x != nil { - return x.Nodes - } - return nil -} - -func (x *ComponentGraph) GetEdges() []*ComponentGraph_Edge { - if x != nil { - return x.Edges - } - return nil -} - -type Package2 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` - License string `protobuf:"bytes,4,opt,name=license,proto3" json:"license,omitempty"` - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - Purl string `protobuf:"bytes,6,opt,name=purl,proto3" json:"purl,omitempty"` -} - -func (x *Package2) Reset() { - *x = Package2{} - if protoimpl.UnsafeEnabled { - mi := &file_sbom_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Package2) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Package2) ProtoMessage() {} - -func (x *Package2) ProtoReflect() protoreflect.Message { - mi := &file_sbom_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Package2.ProtoReflect.Descriptor instead. -func (*Package2) Descriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *Package2) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Package2) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Package2) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *Package2) GetLicense() string { - if x != nil { - return x.License - } - return "" -} - -func (x *Package2) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Package2) GetPurl() string { - if x != nil { - return x.Purl - } - return "" -} - -type File2 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Types []string `protobuf:"bytes,4,rep,name=types,proto3" json:"types,omitempty"` -} - -func (x *File2) Reset() { - *x = File2{} - if protoimpl.UnsafeEnabled { - mi := &file_sbom_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *File2) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*File2) ProtoMessage() {} - -func (x *File2) ProtoReflect() protoreflect.Message { - mi := &file_sbom_platform_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 File2.ProtoReflect.Descriptor instead. -func (*File2) Descriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *File2) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *File2) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *File2) GetTypes() []string { - if x != nil { - return x.Types - } - return nil -} - -type Sbom2List struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Sbom2 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *Sbom2List) Reset() { - *x = Sbom2List{} - if protoimpl.UnsafeEnabled { - mi := &file_sbom_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Sbom2List) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Sbom2List) ProtoMessage() {} - -func (x *Sbom2List) ProtoReflect() protoreflect.Message { - mi := &file_sbom_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Sbom2List.ProtoReflect.Descriptor instead. -func (*Sbom2List) Descriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *Sbom2List) GetItems() []*Sbom2 { - if x != nil { - return x.Items - } - return nil -} - -type Sbom2Filter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` - // active_since is the timestamp after which the records should - // have last been observed in the returned context. - ActiveSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` - // include_raw_sbom is a flag to return the raw sbom field in the record. - IncludeRawSbom bool `protobuf:"varint,4,opt,name=include_raw_sbom,json=includeRawSbom,proto3" json:"include_raw_sbom,omitempty"` -} - -func (x *Sbom2Filter) Reset() { - *x = Sbom2Filter{} - if protoimpl.UnsafeEnabled { - mi := &file_sbom_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Sbom2Filter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Sbom2Filter) ProtoMessage() {} - -func (x *Sbom2Filter) ProtoReflect() protoreflect.Message { - mi := &file_sbom_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Sbom2Filter.ProtoReflect.Descriptor instead. -func (*Sbom2Filter) Descriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *Sbom2Filter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Sbom2Filter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *Sbom2Filter) GetActiveSince() *timestamppb.Timestamp { - if x != nil { - return x.ActiveSince - } - return nil -} - -func (x *Sbom2Filter) GetIncludeRawSbom() bool { - if x != nil { - return x.IncludeRawSbom - } - return false -} - -type ComponentGraph_Node struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to TypedNode: - // - // *ComponentGraph_Node_Package - // *ComponentGraph_Node_File - TypedNode isComponentGraph_Node_TypedNode `protobuf_oneof:"typed_node"` -} - -func (x *ComponentGraph_Node) Reset() { - *x = ComponentGraph_Node{} - if protoimpl.UnsafeEnabled { - mi := &file_sbom_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentGraph_Node) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentGraph_Node) ProtoMessage() {} - -func (x *ComponentGraph_Node) ProtoReflect() protoreflect.Message { - mi := &file_sbom_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentGraph_Node.ProtoReflect.Descriptor instead. -func (*ComponentGraph_Node) Descriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{1, 0} -} - -func (m *ComponentGraph_Node) GetTypedNode() isComponentGraph_Node_TypedNode { - if m != nil { - return m.TypedNode - } - return nil -} - -func (x *ComponentGraph_Node) GetPackage() *Package2 { - if x, ok := x.GetTypedNode().(*ComponentGraph_Node_Package); ok { - return x.Package - } - return nil -} - -func (x *ComponentGraph_Node) GetFile() *File2 { - if x, ok := x.GetTypedNode().(*ComponentGraph_Node_File); ok { - return x.File - } - return nil -} - -type isComponentGraph_Node_TypedNode interface { - isComponentGraph_Node_TypedNode() -} - -type ComponentGraph_Node_Package struct { - Package *Package2 `protobuf:"bytes,1,opt,name=package,proto3,oneof"` -} - -type ComponentGraph_Node_File struct { - File *File2 `protobuf:"bytes,2,opt,name=file,proto3,oneof"` -} - -func (*ComponentGraph_Node_Package) isComponentGraph_Node_TypedNode() {} - -func (*ComponentGraph_Node_File) isComponentGraph_Node_TypedNode() {} - -type ComponentGraph_Edge struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SubjectId string `protobuf:"bytes,1,opt,name=subject_id,json=subjectId,proto3" json:"subject_id,omitempty"` - PredicateId string `protobuf:"bytes,2,opt,name=predicate_id,json=predicateId,proto3" json:"predicate_id,omitempty"` - Type ComponentGraph_Edge_Type `protobuf:"varint,3,opt,name=type,proto3,enum=chainguard.platform.tenant.ComponentGraph_Edge_Type" json:"type,omitempty"` -} - -func (x *ComponentGraph_Edge) Reset() { - *x = ComponentGraph_Edge{} - if protoimpl.UnsafeEnabled { - mi := &file_sbom_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComponentGraph_Edge) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComponentGraph_Edge) ProtoMessage() {} - -func (x *ComponentGraph_Edge) ProtoReflect() protoreflect.Message { - mi := &file_sbom_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComponentGraph_Edge.ProtoReflect.Descriptor instead. -func (*ComponentGraph_Edge) Descriptor() ([]byte, []int) { - return file_sbom_platform_proto_rawDescGZIP(), []int{1, 1} -} - -func (x *ComponentGraph_Edge) GetSubjectId() string { - if x != nil { - return x.SubjectId - } - return "" -} - -func (x *ComponentGraph_Edge) GetPredicateId() string { - if x != nil { - return x.PredicateId - } - return "" -} - -func (x *ComponentGraph_Edge) GetType() ComponentGraph_Edge_Type { - if x != nil { - return x.Type - } - return ComponentGraph_Edge_UNKNOWN -} - -var File_sbom_platform_proto protoreflect.FileDescriptor - -var file_sbom_platform_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x73, 0x62, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, - 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x86, 0x04, 0x0a, 0x05, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x72, 0x61, 0x77, 0x5f, 0x73, 0x62, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, - 0x72, 0x61, 0x77, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x40, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, - 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, - 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3d, - 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x22, 0x32, 0x0a, 0x06, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x47, 0x45, 0x53, 0x54, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, - 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x9b, 0x04, 0x0a, 0x0e, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x45, - 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, - 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x2e, 0x45, 0x64, 0x67, 0x65, 0x52, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x1a, 0x8f, 0x01, 0x0a, - 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x32, 0x48, 0x00, 0x52, 0x07, - 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x32, 0x48, 0x00, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, - 0x42, 0x0c, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0xe8, - 0x01, 0x0a, 0x04, 0x45, 0x64, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, - 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x22, 0x54, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x53, 0x43, - 0x52, 0x49, 0x42, 0x45, 0x53, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x41, - 0x49, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x53, - 0x5f, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, - 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x10, 0x04, 0x22, 0x98, 0x01, 0x0a, 0x08, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x32, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x70, 0x75, 0x72, 0x6c, 0x22, 0x47, 0x0a, 0x05, 0x46, 0x69, 0x6c, 0x65, 0x32, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x44, 0x0a, - 0x09, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, - 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, - 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x28, - 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x73, 0x62, - 0x6f, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x52, 0x61, 0x77, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x6f, 0x0a, 0x05, 0x53, 0x62, 0x6f, 0x6d, - 0x73, 0x12, 0x66, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x08, 0x12, 0x06, 0x0a, 0x02, 0x8a, 0x05, 0x10, 0x01, 0x42, 0x6f, 0x0a, 0x25, 0x64, 0x65, 0x76, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x42, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, - 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_sbom_platform_proto_rawDescOnce sync.Once - file_sbom_platform_proto_rawDescData = file_sbom_platform_proto_rawDesc -) - -func file_sbom_platform_proto_rawDescGZIP() []byte { - file_sbom_platform_proto_rawDescOnce.Do(func() { - file_sbom_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_sbom_platform_proto_rawDescData) - }) - return file_sbom_platform_proto_rawDescData -} - -var file_sbom_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_sbom_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_sbom_platform_proto_goTypes = []interface{}{ - (Sbom2_Source)(0), // 0: chainguard.platform.tenant.Sbom2.Source - (ComponentGraph_Edge_Type)(0), // 1: chainguard.platform.tenant.ComponentGraph.Edge.Type - (*Sbom2)(nil), // 2: chainguard.platform.tenant.Sbom2 - (*ComponentGraph)(nil), // 3: chainguard.platform.tenant.ComponentGraph - (*Package2)(nil), // 4: chainguard.platform.tenant.Package2 - (*File2)(nil), // 5: chainguard.platform.tenant.File2 - (*Sbom2List)(nil), // 6: chainguard.platform.tenant.Sbom2List - (*Sbom2Filter)(nil), // 7: chainguard.platform.tenant.Sbom2Filter - (*ComponentGraph_Node)(nil), // 8: chainguard.platform.tenant.ComponentGraph.Node - (*ComponentGraph_Edge)(nil), // 9: chainguard.platform.tenant.ComponentGraph.Edge - (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 11: chainguard.platform.common.UIDPFilter -} -var file_sbom_platform_proto_depIdxs = []int32{ - 3, // 0: chainguard.platform.tenant.Sbom2.graph:type_name -> chainguard.platform.tenant.ComponentGraph - 10, // 1: chainguard.platform.tenant.Sbom2.last_seen:type_name -> google.protobuf.Timestamp - 10, // 2: chainguard.platform.tenant.Sbom2.generated_at:type_name -> google.protobuf.Timestamp - 0, // 3: chainguard.platform.tenant.Sbom2.source:type_name -> chainguard.platform.tenant.Sbom2.Source - 8, // 4: chainguard.platform.tenant.ComponentGraph.nodes:type_name -> chainguard.platform.tenant.ComponentGraph.Node - 9, // 5: chainguard.platform.tenant.ComponentGraph.edges:type_name -> chainguard.platform.tenant.ComponentGraph.Edge - 2, // 6: chainguard.platform.tenant.Sbom2List.items:type_name -> chainguard.platform.tenant.Sbom2 - 11, // 7: chainguard.platform.tenant.Sbom2Filter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 10, // 8: chainguard.platform.tenant.Sbom2Filter.active_since:type_name -> google.protobuf.Timestamp - 4, // 9: chainguard.platform.tenant.ComponentGraph.Node.package:type_name -> chainguard.platform.tenant.Package2 - 5, // 10: chainguard.platform.tenant.ComponentGraph.Node.file:type_name -> chainguard.platform.tenant.File2 - 1, // 11: chainguard.platform.tenant.ComponentGraph.Edge.type:type_name -> chainguard.platform.tenant.ComponentGraph.Edge.Type - 7, // 12: chainguard.platform.tenant.Sboms.List:input_type -> chainguard.platform.tenant.Sbom2Filter - 6, // 13: chainguard.platform.tenant.Sboms.List:output_type -> chainguard.platform.tenant.Sbom2List - 13, // [13:14] is the sub-list for method output_type - 12, // [12:13] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name -} - -func init() { file_sbom_platform_proto_init() } -func file_sbom_platform_proto_init() { - if File_sbom_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_sbom_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Sbom2); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sbom_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentGraph); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sbom_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Package2); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sbom_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*File2); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sbom_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Sbom2List); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sbom_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Sbom2Filter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sbom_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentGraph_Node); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sbom_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComponentGraph_Edge); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_sbom_platform_proto_msgTypes[0].OneofWrappers = []interface{}{} - file_sbom_platform_proto_msgTypes[6].OneofWrappers = []interface{}{ - (*ComponentGraph_Node_Package)(nil), - (*ComponentGraph_Node_File)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_sbom_platform_proto_rawDesc, - NumEnums: 2, - NumMessages: 8, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_sbom_platform_proto_goTypes, - DependencyIndexes: file_sbom_platform_proto_depIdxs, - EnumInfos: file_sbom_platform_proto_enumTypes, - MessageInfos: file_sbom_platform_proto_msgTypes, - }.Build() - File_sbom_platform_proto = out.File - file_sbom_platform_proto_rawDesc = nil - file_sbom_platform_proto_goTypes = nil - file_sbom_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/sbom.platform.pb.gw.go b/proto/platform/tenant/v1/sbom.platform.pb.gw.go deleted file mode 100644 index f807c51b..00000000 --- a/proto/platform/tenant/v1/sbom.platform.pb.gw.go +++ /dev/null @@ -1,164 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: sbom.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Sboms_List_0(ctx context.Context, marshaler runtime.Marshaler, client SbomsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Sbom2Filter - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Sboms_List_0(ctx context.Context, marshaler runtime.Marshaler, server SbomsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Sbom2Filter - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterSbomsHandlerServer registers the http handlers for service Sboms to "mux". -// UnaryRPC :call SbomsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSbomsHandlerFromEndpoint instead. -func RegisterSbomsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SbomsServer) error { - - mux.Handle("POST", pattern_Sboms_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Sboms/List", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Sboms/List")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Sboms_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Sboms_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterSbomsHandlerFromEndpoint is same as RegisterSbomsHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterSbomsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterSbomsHandler(ctx, mux, conn) -} - -// RegisterSbomsHandler registers the http handlers for service Sboms to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterSbomsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterSbomsHandlerClient(ctx, mux, NewSbomsClient(conn)) -} - -// RegisterSbomsHandlerClient registers the http handlers for service Sboms -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SbomsClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SbomsClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "SbomsClient" to call the correct interceptors. -func RegisterSbomsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SbomsClient) error { - - mux.Handle("POST", pattern_Sboms_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Sboms/List", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Sboms/List")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Sboms_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Sboms_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Sboms_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Sboms", "List"}, "")) -) - -var ( - forward_Sboms_List_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/tenant/v1/sbom.platform.proto b/proto/platform/tenant/v1/sbom.platform.proto deleted file mode 100644 index d1bf64dc..00000000 --- a/proto/platform/tenant/v1/sbom.platform.proto +++ /dev/null @@ -1,131 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantSbomProto"; - -package chainguard.platform.tenant; - -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Sboms { - rpc List(Sbom2Filter) returns (Sbom2List) { - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_SBOMS_LIST] - unscoped: true - } - }; - } - } - -// Sbom represents a normalized SBOM that we have ingested into our datastore. -// They are linked to Signatures via ID, as in they are 'children' of Signatures -// There can be multiple of these that we keep. -message Sbom2 { - // id, The Sbom UIDP at which this Sbom resides in the hierarchy. - string id = 1; - - // raw_sbom may or may not be useful in the long term, but for now to make - // progress on this, we'll just yolo and serialize it here. - bytes raw_sbom = 2; - - ComponentGraph graph = 3; - - // last_seen tracks the timestamp at which this sbom was last seen. - // TODO(vaikas): Does this really make any sense? - google.protobuf.Timestamp last_seen = 4; - - // tool holds the name of the tool that produced the SBOM. - string tool = 5; - // format holds whether the SBOM is SPDX, CycloneDX, or other. - string format = 6; - // generated_at holds when the SBOM was generated. - google.protobuf.Timestamp generated_at = 7; - // authors is zero or more authors concatenated. - string authors = 8; - - // source is where the SBOM came from. For example, we want to know if sbom - // was generated by us, or ingested. - Source source = 9; - - // Type - enum Source { - UNKNOWN = 0; - INGESTED = 1; - GENERATED = 2; - } - // Name of the Sbom. - string name = 10; - - // Short description of the Sbom - string description = 11; - - // digest of the SBOM when ingested - optional string digest = 12; -} - -message ComponentGraph { - repeated Node nodes = 1; - repeated Edge edges = 2; - - message Node { - oneof typed_node { - Package2 package = 1; - File2 file = 2; - } - } - - message Edge { - string subject_id = 1; - string predicate_id = 2; - Type type = 3; - - enum Type { - UNKNOWN = 0; - DESCRIBES = 1; - CONTAINS = 2; - DEPENDS_ON = 3; - GENERATED_FROM = 4; - // and so on...; for inspiration, see https://spdx.github.io/spdx-spec/v2.3/relationships-between-SPDX-elements/ - } - } -} - -message Package2 { - string id = 1; - string name = 2; - string version = 3; - string license = 4; - string description = 5; - string purl = 6; -} - -message File2 { - // 3 was used for single type. - reserved 3; - - string id = 1; - string name = 2; - repeated string types = 4; -} - -message Sbom2List { - repeated Sbom2 items = 1; -} - -message Sbom2Filter { - // id is the exact UID of the record. - string id = 1; - - chainguard.platform.common.UIDPFilter uidp = 2; - - // active_since is the timestamp after which the records should - // have last been observed in the returned context. - google.protobuf.Timestamp active_since = 3; - // include_raw_sbom is a flag to return the raw sbom field in the record. - bool include_raw_sbom = 4; -} diff --git a/proto/platform/tenant/v1/sbom.platform_grpc.pb.go b/proto/platform/tenant/v1/sbom.platform_grpc.pb.go deleted file mode 100644 index 85c02032..00000000 --- a/proto/platform/tenant/v1/sbom.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: sbom.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Sboms_List_FullMethodName = "/chainguard.platform.tenant.Sboms/List" -) - -// SbomsClient is the client API for Sboms service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type SbomsClient interface { - List(ctx context.Context, in *Sbom2Filter, opts ...grpc.CallOption) (*Sbom2List, error) -} - -type sbomsClient struct { - cc grpc.ClientConnInterface -} - -func NewSbomsClient(cc grpc.ClientConnInterface) SbomsClient { - return &sbomsClient{cc} -} - -func (c *sbomsClient) List(ctx context.Context, in *Sbom2Filter, opts ...grpc.CallOption) (*Sbom2List, error) { - out := new(Sbom2List) - err := c.cc.Invoke(ctx, Sboms_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// SbomsServer is the server API for Sboms service. -// All implementations must embed UnimplementedSbomsServer -// for forward compatibility -type SbomsServer interface { - List(context.Context, *Sbom2Filter) (*Sbom2List, error) - mustEmbedUnimplementedSbomsServer() -} - -// UnimplementedSbomsServer must be embedded to have forward compatible implementations. -type UnimplementedSbomsServer struct { -} - -func (UnimplementedSbomsServer) List(context.Context, *Sbom2Filter) (*Sbom2List, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedSbomsServer) mustEmbedUnimplementedSbomsServer() {} - -// UnsafeSbomsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to SbomsServer will -// result in compilation errors. -type UnsafeSbomsServer interface { - mustEmbedUnimplementedSbomsServer() -} - -func RegisterSbomsServer(s grpc.ServiceRegistrar, srv SbomsServer) { - s.RegisterService(&Sboms_ServiceDesc, srv) -} - -func _Sboms_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Sbom2Filter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SbomsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Sboms_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SbomsServer).List(ctx, req.(*Sbom2Filter)) - } - return interceptor(ctx, in, info, handler) -} - -// Sboms_ServiceDesc is the grpc.ServiceDesc for Sboms service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Sboms_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.Sboms", - HandlerType: (*SbomsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _Sboms_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "sbom.platform.proto", -} diff --git a/proto/platform/tenant/v1/signature.platform.pb.go b/proto/platform/tenant/v1/signature.platform.pb.go deleted file mode 100644 index 40c8acfc..00000000 --- a/proto/platform/tenant/v1/signature.platform.pb.go +++ /dev/null @@ -1,731 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: signature.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Signature struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The Signature UIDP at which this Signature resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name of the Signature. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // a short description of this Signature. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // last_seen tracks the timestamp at which this signature was last seen. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` - // predicate_type is an optional field that captures the type of signed - // metadata this signature has signed. - // - For simple signatures (e.g. directly signed artifact), this will - // be empty to represent the "null claim". - // - For signed claims (e.g. attestations), this will hold the in-toto - // predicate type of the signed claim. - PredicateType string `protobuf:"bytes,5,opt,name=predicate_type,json=predicateType,proto3" json:"predicate_type,omitempty"` - // Types that are assignable to Kind: - // - // *Signature_None - // *Signature_Keyless_ - // *Signature_Key_ - Kind isSignature_Kind `protobuf_oneof:"kind"` -} - -func (x *Signature) Reset() { - *x = Signature{} - if protoimpl.UnsafeEnabled { - mi := &file_signature_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Signature) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Signature) ProtoMessage() {} - -func (x *Signature) ProtoReflect() protoreflect.Message { - mi := &file_signature_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Signature.ProtoReflect.Descriptor instead. -func (*Signature) Descriptor() ([]byte, []int) { - return file_signature_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Signature) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Signature) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Signature) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Signature) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -func (x *Signature) GetPredicateType() string { - if x != nil { - return x.PredicateType - } - return "" -} - -func (m *Signature) GetKind() isSignature_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *Signature) GetNone() *emptypb.Empty { - if x, ok := x.GetKind().(*Signature_None); ok { - return x.None - } - return nil -} - -func (x *Signature) GetKeyless() *Signature_Keyless { - if x, ok := x.GetKind().(*Signature_Keyless_); ok { - return x.Keyless - } - return nil -} - -func (x *Signature) GetKey() *Signature_Key { - if x, ok := x.GetKind().(*Signature_Key_); ok { - return x.Key - } - return nil -} - -type isSignature_Kind interface { - isSignature_Kind() -} - -type Signature_None struct { - // none is the kind of signature that is attached when a policy - // designates an image as "statically" trusted. - None *emptypb.Empty `protobuf:"bytes,10,opt,name=none,proto3,oneof"` -} - -type Signature_Keyless_ struct { - // keyless is the kind of signature that is attached when a signature - // was produced via a "keyless" flow. - Keyless *Signature_Keyless `protobuf:"bytes,11,opt,name=keyless,proto3,oneof"` -} - -type Signature_Key_ struct { - // key is the kind of signature that is attached when a signature - // was produced via a static key pair. - Key *Signature_Key `protobuf:"bytes,12,opt,name=key,proto3,oneof"` -} - -func (*Signature_None) isSignature_Kind() {} - -func (*Signature_Keyless_) isSignature_Kind() {} - -func (*Signature_Key_) isSignature_Kind() {} - -type SignatureList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Signature `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *SignatureList) Reset() { - *x = SignatureList{} - if protoimpl.UnsafeEnabled { - mi := &file_signature_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignatureList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignatureList) ProtoMessage() {} - -func (x *SignatureList) ProtoReflect() protoreflect.Message { - mi := &file_signature_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SignatureList.ProtoReflect.Descriptor instead. -func (*SignatureList) Descriptor() ([]byte, []int) { - return file_signature_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *SignatureList) GetItems() []*Signature { - if x != nil { - return x.Items - } - return nil -} - -type SignatureFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` - // active_since is the timestamp after which the records should - // have last been observed in the returned context. - ActiveSince *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - PredicateType *string `protobuf:"bytes,4,opt,name=predicate_type,json=predicateType,proto3,oneof" json:"predicate_type,omitempty"` -} - -func (x *SignatureFilter) Reset() { - *x = SignatureFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_signature_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SignatureFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SignatureFilter) ProtoMessage() {} - -func (x *SignatureFilter) ProtoReflect() protoreflect.Message { - mi := &file_signature_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SignatureFilter.ProtoReflect.Descriptor instead. -func (*SignatureFilter) Descriptor() ([]byte, []int) { - return file_signature_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *SignatureFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *SignatureFilter) GetActiveSince() *timestamppb.Timestamp { - if x != nil { - return x.ActiveSince - } - return nil -} - -func (x *SignatureFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SignatureFilter) GetPredicateType() string { - if x != nil && x.PredicateType != nil { - return *x.PredicateType - } - return "" -} - -type Signature_Keyless struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` - Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` - // TODO: Consider making this a oneof when other providers - // start producing interesting claims. - Github *Signature_Keyless_Github `protobuf:"bytes,3,opt,name=github,proto3" json:"github,omitempty"` -} - -func (x *Signature_Keyless) Reset() { - *x = Signature_Keyless{} - if protoimpl.UnsafeEnabled { - mi := &file_signature_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Signature_Keyless) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Signature_Keyless) ProtoMessage() {} - -func (x *Signature_Keyless) ProtoReflect() protoreflect.Message { - mi := &file_signature_platform_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 Signature_Keyless.ProtoReflect.Descriptor instead. -func (*Signature_Keyless) Descriptor() ([]byte, []int) { - return file_signature_platform_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *Signature_Keyless) GetIssuer() string { - if x != nil { - return x.Issuer - } - return "" -} - -func (x *Signature_Keyless) GetSubject() string { - if x != nil { - return x.Subject - } - return "" -} - -func (x *Signature_Keyless) GetGithub() *Signature_Keyless_Github { - if x != nil { - return x.Github - } - return nil -} - -type Signature_Key struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *Signature_Key) Reset() { - *x = Signature_Key{} - if protoimpl.UnsafeEnabled { - mi := &file_signature_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Signature_Key) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Signature_Key) ProtoMessage() {} - -func (x *Signature_Key) ProtoReflect() protoreflect.Message { - mi := &file_signature_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Signature_Key.ProtoReflect.Descriptor instead. -func (*Signature_Key) Descriptor() ([]byte, []int) { - return file_signature_platform_proto_rawDescGZIP(), []int{0, 1} -} - -type Signature_Keyless_Github struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // OID: 1.3.6.1.4.1.57264.1.2 - WorkflowTrigger string `protobuf:"bytes,1,opt,name=workflow_trigger,json=workflowTrigger,proto3" json:"workflow_trigger,omitempty"` - // OID: 1.3.6.1.4.1.57264.1.3 - WorkflowSha string `protobuf:"bytes,2,opt,name=workflow_sha,json=workflowSha,proto3" json:"workflow_sha,omitempty"` - // OID: 1.3.6.1.4.1.57264.1.4 - WorkflowName string `protobuf:"bytes,3,opt,name=workflow_name,json=workflowName,proto3" json:"workflow_name,omitempty"` - // OID: 1.3.6.1.4.1.57264.1.5 - WorkflowRepo string `protobuf:"bytes,4,opt,name=workflow_repo,json=workflowRepo,proto3" json:"workflow_repo,omitempty"` - // OID: 1.3.6.1.4.1.57264.1.6 - WorkflowRef string `protobuf:"bytes,5,opt,name=workflow_ref,json=workflowRef,proto3" json:"workflow_ref,omitempty"` -} - -func (x *Signature_Keyless_Github) Reset() { - *x = Signature_Keyless_Github{} - if protoimpl.UnsafeEnabled { - mi := &file_signature_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Signature_Keyless_Github) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Signature_Keyless_Github) ProtoMessage() {} - -func (x *Signature_Keyless_Github) ProtoReflect() protoreflect.Message { - mi := &file_signature_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Signature_Keyless_Github.ProtoReflect.Descriptor instead. -func (*Signature_Keyless_Github) Descriptor() ([]byte, []int) { - return file_signature_platform_proto_rawDescGZIP(), []int{0, 0, 0} -} - -func (x *Signature_Keyless_Github) GetWorkflowTrigger() string { - if x != nil { - return x.WorkflowTrigger - } - return "" -} - -func (x *Signature_Keyless_Github) GetWorkflowSha() string { - if x != nil { - return x.WorkflowSha - } - return "" -} - -func (x *Signature_Keyless_Github) GetWorkflowName() string { - if x != nil { - return x.WorkflowName - } - return "" -} - -func (x *Signature_Keyless_Github) GetWorkflowRepo() string { - if x != nil { - return x.WorkflowRepo - } - return "" -} - -func (x *Signature_Keyless_Github) GetWorkflowRef() string { - if x != nil { - return x.WorkflowRef - } - return "" -} - -var File_signature_platform_proto protoreflect.FileDescriptor - -var file_signature_platform_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, - 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xca, 0x05, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, - 0x65, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, - 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x6f, 0x6e, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x04, - 0x6e, 0x6f, 0x6e, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x6c, 0x65, 0x73, 0x73, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4b, 0x65, 0x79, - 0x6c, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x6c, 0x65, 0x73, 0x73, 0x12, - 0x3d, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x48, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x1a, 0xcf, - 0x02, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x6c, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, - 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x4c, 0x0a, 0x06, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x47, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x52, 0x06, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x1a, 0xc3, 0x01, 0x0a, 0x06, 0x47, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x12, 0x29, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, - 0x77, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x68, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, - 0x53, 0x68, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, - 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x21, 0x0a, - 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x66, - 0x1a, 0x05, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, - 0x4c, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x3b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xdf, 0x01, - 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, - 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x3d, 0x0a, - 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x2a, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, - 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x32, - 0x9a, 0x01, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x8b, - 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xef, 0x04, 0x10, 0x01, 0x42, 0x74, 0x0a, 0x25, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, - 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, - 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_signature_platform_proto_rawDescOnce sync.Once - file_signature_platform_proto_rawDescData = file_signature_platform_proto_rawDesc -) - -func file_signature_platform_proto_rawDescGZIP() []byte { - file_signature_platform_proto_rawDescOnce.Do(func() { - file_signature_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_signature_platform_proto_rawDescData) - }) - return file_signature_platform_proto_rawDescData -} - -var file_signature_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_signature_platform_proto_goTypes = []interface{}{ - (*Signature)(nil), // 0: chainguard.platform.tenant.Signature - (*SignatureList)(nil), // 1: chainguard.platform.tenant.SignatureList - (*SignatureFilter)(nil), // 2: chainguard.platform.tenant.SignatureFilter - (*Signature_Keyless)(nil), // 3: chainguard.platform.tenant.Signature.Keyless - (*Signature_Key)(nil), // 4: chainguard.platform.tenant.Signature.Key - (*Signature_Keyless_Github)(nil), // 5: chainguard.platform.tenant.Signature.Keyless.Github - (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 7: google.protobuf.Empty - (*v1.UIDPFilter)(nil), // 8: chainguard.platform.common.UIDPFilter -} -var file_signature_platform_proto_depIdxs = []int32{ - 6, // 0: chainguard.platform.tenant.Signature.last_seen:type_name -> google.protobuf.Timestamp - 7, // 1: chainguard.platform.tenant.Signature.none:type_name -> google.protobuf.Empty - 3, // 2: chainguard.platform.tenant.Signature.keyless:type_name -> chainguard.platform.tenant.Signature.Keyless - 4, // 3: chainguard.platform.tenant.Signature.key:type_name -> chainguard.platform.tenant.Signature.Key - 0, // 4: chainguard.platform.tenant.SignatureList.items:type_name -> chainguard.platform.tenant.Signature - 8, // 5: chainguard.platform.tenant.SignatureFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 6, // 6: chainguard.platform.tenant.SignatureFilter.active_since:type_name -> google.protobuf.Timestamp - 5, // 7: chainguard.platform.tenant.Signature.Keyless.github:type_name -> chainguard.platform.tenant.Signature.Keyless.Github - 2, // 8: chainguard.platform.tenant.Signatures.List:input_type -> chainguard.platform.tenant.SignatureFilter - 1, // 9: chainguard.platform.tenant.Signatures.List:output_type -> chainguard.platform.tenant.SignatureList - 9, // [9:10] is the sub-list for method output_type - 8, // [8:9] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name -} - -func init() { file_signature_platform_proto_init() } -func file_signature_platform_proto_init() { - if File_signature_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_signature_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Signature); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_signature_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignatureList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_signature_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignatureFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_signature_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Signature_Keyless); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_signature_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Signature_Key); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_signature_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Signature_Keyless_Github); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_signature_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*Signature_None)(nil), - (*Signature_Keyless_)(nil), - (*Signature_Key_)(nil), - } - file_signature_platform_proto_msgTypes[2].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_signature_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 6, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_signature_platform_proto_goTypes, - DependencyIndexes: file_signature_platform_proto_depIdxs, - MessageInfos: file_signature_platform_proto_msgTypes, - }.Build() - File_signature_platform_proto = out.File - file_signature_platform_proto_rawDesc = nil - file_signature_platform_proto_goTypes = nil - file_signature_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/signature.platform.proto b/proto/platform/tenant/v1/signature.platform.proto deleted file mode 100644 index d8ab1e92..00000000 --- a/proto/platform/tenant/v1/signature.platform.proto +++ /dev/null @@ -1,110 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantSignatureProto"; - -package chainguard.platform.tenant; - -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Signatures { - rpc List(SignatureFilter) returns (SignatureList) { - option (google.api.http) = { - get: "/tenant/v1/signatures" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_RECORD_SIGNATURES_LIST] - unscoped: true - } - }; - } -} - -message Signature { - // id, The Signature UIDP at which this Signature resides. - string id = 1; - - // name of the Signature. - string name = 2; - - // a short description of this Signature. - string description = 3; - - // last_seen tracks the timestamp at which this signature was last seen. - google.protobuf.Timestamp last_seen = 4; - - // predicate_type is an optional field that captures the type of signed - // metadata this signature has signed. - // - For simple signatures (e.g. directly signed artifact), this will - // be empty to represent the "null claim". - // - For signed claims (e.g. attestations), this will hold the in-toto - // predicate type of the signed claim. - string predicate_type = 5; - - oneof kind { - // none is the kind of signature that is attached when a policy - // designates an image as "statically" trusted. - google.protobuf.Empty none = 10; - - // keyless is the kind of signature that is attached when a signature - // was produced via a "keyless" flow. - Keyless keyless = 11; - - // key is the kind of signature that is attached when a signature - // was produced via a static key pair. - Key key = 12; - } - - message Keyless { - string issuer = 1; - string subject = 2; - - // TODO: Consider making this a oneof when other providers - // start producing interesting claims. - Github github = 3; - - message Github { - // OID: 1.3.6.1.4.1.57264.1.2 - string workflow_trigger = 1; - - // OID: 1.3.6.1.4.1.57264.1.3 - string workflow_sha = 2; - - // OID: 1.3.6.1.4.1.57264.1.4 - string workflow_name = 3; - - // OID: 1.3.6.1.4.1.57264.1.5 - string workflow_repo = 4; - - // OID: 1.3.6.1.4.1.57264.1.6 - string workflow_ref = 5; - } - } - - message Key { - // TODO: What useful information should we encode here? - } -} - -message SignatureList { - repeated Signature items = 1; -} - -message SignatureFilter { - chainguard.platform.common.UIDPFilter uidp = 1; - - // active_since is the timestamp after which the records should - // have last been observed in the returned context. - google.protobuf.Timestamp active_since = 2; - - string name = 3; - - optional string predicate_type = 4; -} diff --git a/proto/platform/tenant/v1/signature.platform_grpc.pb.go b/proto/platform/tenant/v1/signature.platform_grpc.pb.go deleted file mode 100644 index 86f0c51f..00000000 --- a/proto/platform/tenant/v1/signature.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: signature.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Signatures_List_FullMethodName = "/chainguard.platform.tenant.Signatures/List" -) - -// SignaturesClient is the client API for Signatures service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type SignaturesClient interface { - List(ctx context.Context, in *SignatureFilter, opts ...grpc.CallOption) (*SignatureList, error) -} - -type signaturesClient struct { - cc grpc.ClientConnInterface -} - -func NewSignaturesClient(cc grpc.ClientConnInterface) SignaturesClient { - return &signaturesClient{cc} -} - -func (c *signaturesClient) List(ctx context.Context, in *SignatureFilter, opts ...grpc.CallOption) (*SignatureList, error) { - out := new(SignatureList) - err := c.cc.Invoke(ctx, Signatures_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// SignaturesServer is the server API for Signatures service. -// All implementations must embed UnimplementedSignaturesServer -// for forward compatibility -type SignaturesServer interface { - List(context.Context, *SignatureFilter) (*SignatureList, error) - mustEmbedUnimplementedSignaturesServer() -} - -// UnimplementedSignaturesServer must be embedded to have forward compatible implementations. -type UnimplementedSignaturesServer struct { -} - -func (UnimplementedSignaturesServer) List(context.Context, *SignatureFilter) (*SignatureList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedSignaturesServer) mustEmbedUnimplementedSignaturesServer() {} - -// UnsafeSignaturesServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to SignaturesServer will -// result in compilation errors. -type UnsafeSignaturesServer interface { - mustEmbedUnimplementedSignaturesServer() -} - -func RegisterSignaturesServer(s grpc.ServiceRegistrar, srv SignaturesServer) { - s.RegisterService(&Signatures_ServiceDesc, srv) -} - -func _Signatures_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SignatureFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SignaturesServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Signatures_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SignaturesServer).List(ctx, req.(*SignatureFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// Signatures_ServiceDesc is the grpc.ServiceDesc for Signatures service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Signatures_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.Signatures", - HandlerType: (*SignaturesServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _Signatures_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "signature.platform.proto", -} diff --git a/proto/platform/tenant/v1/test/mock_attestations.go b/proto/platform/tenant/v1/test/mock_attestations.go deleted file mode 100644 index 5ad40300..00000000 --- a/proto/platform/tenant/v1/test/mock_attestations.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.AttestationsClient = (*MockAttestationsClientt)(nil) - -type MockAttestationsClientt struct { - OnList []AttestationsOnList -} - -type AttestationsOnList struct { - Given *tenant.AttestationFilter - List *tenant.AttestationList - Error error -} - -func (m MockAttestationsClientt) List(_ context.Context, given *tenant.AttestationFilter, _ ...grpc.CallOption) (*tenant.AttestationList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/test/mock_client.go b/proto/platform/tenant/v1/test/mock_client.go deleted file mode 100644 index d1777b69..00000000 --- a/proto/platform/tenant/v1/test/mock_client.go +++ /dev/null @@ -1,41 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -type MockTenantClient struct { - OnClose error - - SbomsClient MockSbomsClient - SignaturesClient MockSignaturesClient - VulnReportsClient MockVulnReportsClient - AttestationClient MockAttestationsClientt -} - -var _ tenant.Clients = (*MockTenantClient)(nil) - -func (m MockTenantClient) Sboms() tenant.SbomsClient { - return &m.SbomsClient -} - -func (m MockTenantClient) Signatures() tenant.SignaturesClient { - return &m.SignaturesClient -} - -func (m MockTenantClient) VulnReports() tenant.VulnReportsClient { - return &m.VulnReportsClient -} - -func (m MockTenantClient) Attestations() tenant.AttestationsClient { - return &m.AttestationClient -} - -func (m MockTenantClient) Close() error { - return m.OnClose -} diff --git a/proto/platform/tenant/v1/test/mock_sboms.go b/proto/platform/tenant/v1/test/mock_sboms.go deleted file mode 100644 index 3e94ccaf..00000000 --- a/proto/platform/tenant/v1/test/mock_sboms.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.SbomsClient = (*MockSbomsClient)(nil) - -type MockSbomsClient struct { - OnList []SbomsOnList -} - -type SbomsOnList struct { - Given *tenant.Sbom2Filter - List *tenant.Sbom2List - Error error -} - -func (m MockSbomsClient) List(_ context.Context, given *tenant.Sbom2Filter, _ ...grpc.CallOption) (*tenant.Sbom2List, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/test/mock_signatures.go b/proto/platform/tenant/v1/test/mock_signatures.go deleted file mode 100644 index 098311e4..00000000 --- a/proto/platform/tenant/v1/test/mock_signatures.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.SignaturesClient = (*MockSignaturesClient)(nil) - -type MockSignaturesClient struct { - OnList []SignaturesOnList -} - -type SignaturesOnList struct { - Given *tenant.SignatureFilter - List *tenant.SignatureList - Error error -} - -func (m MockSignaturesClient) List(_ context.Context, given *tenant.SignatureFilter, _ ...grpc.CallOption) (*tenant.SignatureList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/test/mock_vuln.go b/proto/platform/tenant/v1/test/mock_vuln.go deleted file mode 100644 index 60a2d753..00000000 --- a/proto/platform/tenant/v1/test/mock_vuln.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.VulnReportsClient = (*MockVulnReportsClient)(nil) - -type MockVulnReportsClient struct { - OnList []VulnReportsOnList -} - -type VulnReportsOnList struct { - Given *tenant.VulnReportFilter - List *tenant.VulnReportList - Error error -} - -func (m MockVulnReportsClient) List(_ context.Context, given *tenant.VulnReportFilter, _ ...grpc.CallOption) (*tenant.VulnReportList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/vuln.platform.pb.go b/proto/platform/tenant/v1/vuln.platform.pb.go deleted file mode 100644 index 96be9e43..00000000 --- a/proto/platform/tenant/v1/vuln.platform.pb.go +++ /dev/null @@ -1,1138 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v5.26.1 -// source: vuln.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type VulnerabilityRecord_Severity int32 - -const ( - VulnerabilityRecord_UNKNOWN VulnerabilityRecord_Severity = 0 - VulnerabilityRecord_LOW VulnerabilityRecord_Severity = 1 - VulnerabilityRecord_MEDIUM VulnerabilityRecord_Severity = 2 - VulnerabilityRecord_HIGH VulnerabilityRecord_Severity = 3 - VulnerabilityRecord_CRITICAL VulnerabilityRecord_Severity = 4 -) - -// Enum value maps for VulnerabilityRecord_Severity. -var ( - VulnerabilityRecord_Severity_name = map[int32]string{ - 0: "UNKNOWN", - 1: "LOW", - 2: "MEDIUM", - 3: "HIGH", - 4: "CRITICAL", - } - VulnerabilityRecord_Severity_value = map[string]int32{ - "UNKNOWN": 0, - "LOW": 1, - "MEDIUM": 2, - "HIGH": 3, - "CRITICAL": 4, - } -) - -func (x VulnerabilityRecord_Severity) Enum() *VulnerabilityRecord_Severity { - p := new(VulnerabilityRecord_Severity) - *p = x - return p -} - -func (x VulnerabilityRecord_Severity) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (VulnerabilityRecord_Severity) Descriptor() protoreflect.EnumDescriptor { - return file_vuln_platform_proto_enumTypes[0].Descriptor() -} - -func (VulnerabilityRecord_Severity) Type() protoreflect.EnumType { - return &file_vuln_platform_proto_enumTypes[0] -} - -func (x VulnerabilityRecord_Severity) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use VulnerabilityRecord_Severity.Descriptor instead. -func (VulnerabilityRecord_Severity) EnumDescriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{3, 0} -} - -type Fix_State int32 - -const ( - Fix_UNKNOWN Fix_State = 0 - Fix_FIXED Fix_State = 1 - Fix_NOT_FIXED Fix_State = 2 - Fix_WONT_FIX Fix_State = 3 -) - -// Enum value maps for Fix_State. -var ( - Fix_State_name = map[int32]string{ - 0: "UNKNOWN", - 1: "FIXED", - 2: "NOT_FIXED", - 3: "WONT_FIX", - } - Fix_State_value = map[string]int32{ - "UNKNOWN": 0, - "FIXED": 1, - "NOT_FIXED": 2, - "WONT_FIX": 3, - } -) - -func (x Fix_State) Enum() *Fix_State { - p := new(Fix_State) - *p = x - return p -} - -func (x Fix_State) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Fix_State) Descriptor() protoreflect.EnumDescriptor { - return file_vuln_platform_proto_enumTypes[1].Descriptor() -} - -func (Fix_State) Type() protoreflect.EnumType { - return &file_vuln_platform_proto_enumTypes[1] -} - -func (x Fix_State) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Fix_State.Descriptor instead. -func (Fix_State) EnumDescriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{4, 0} -} - -type VulnReport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The VulnReport UIDP at which this VulnReport resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // vulnerability_db_last_build_time holds the time when the vulnerability database was built last time. - VulnerabilityDbLastBuildTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=vulnerability_db_last_build_time,json=vulnerabilityDbLastBuildTime,proto3" json:"vulnerability_db_last_build_time,omitempty"` - // Report's list of vulnerability matches(s). - VulnerabilityMatches []*VulnerabilityMatch `protobuf:"bytes,3,rep,name=vulnerability_matches,json=vulnerabilityMatches,proto3" json:"vulnerability_matches,omitempty"` - // scanner contains some information about the scanner used to generate the report. - Scanner *Scanner `protobuf:"bytes,4,opt,name=scanner,proto3" json:"scanner,omitempty"` - // report_generation tracks the timestamp at which this report was generated. - ReportGeneration *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=report_generation,json=reportGeneration,proto3" json:"report_generation,omitempty"` - // raw_vuln_report may or may not be useful in the long term, but for now to make - // progress on this, we'll just yolo and serialize it here. - RawVulnReport []byte `protobuf:"bytes,6,opt,name=raw_vuln_report,json=rawVulnReport,proto3" json:"raw_vuln_report,omitempty"` - // last_seen tracks the timestamp at which this vuln report was last seen. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` -} - -func (x *VulnReport) Reset() { - *x = VulnReport{} - if protoimpl.UnsafeEnabled { - mi := &file_vuln_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnReport) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnReport) ProtoMessage() {} - -func (x *VulnReport) ProtoReflect() protoreflect.Message { - mi := &file_vuln_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnReport.ProtoReflect.Descriptor instead. -func (*VulnReport) Descriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *VulnReport) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *VulnReport) GetVulnerabilityDbLastBuildTime() *timestamppb.Timestamp { - if x != nil { - return x.VulnerabilityDbLastBuildTime - } - return nil -} - -func (x *VulnReport) GetVulnerabilityMatches() []*VulnerabilityMatch { - if x != nil { - return x.VulnerabilityMatches - } - return nil -} - -func (x *VulnReport) GetScanner() *Scanner { - if x != nil { - return x.Scanner - } - return nil -} - -func (x *VulnReport) GetReportGeneration() *timestamppb.Timestamp { - if x != nil { - return x.ReportGeneration - } - return nil -} - -func (x *VulnReport) GetRawVulnReport() []byte { - if x != nil { - return x.RawVulnReport - } - return nil -} - -func (x *VulnReport) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -type Scanner struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // name contains the vendor name of the scanner. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // version holds the version of the used scanner to generate the report. - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` -} - -func (x *Scanner) Reset() { - *x = Scanner{} - if protoimpl.UnsafeEnabled { - mi := &file_vuln_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Scanner) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Scanner) ProtoMessage() {} - -func (x *Scanner) ProtoReflect() protoreflect.Message { - mi := &file_vuln_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Scanner.ProtoReflect.Descriptor instead. -func (*Scanner) Descriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *Scanner) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Scanner) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -type VulnerabilityMatch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Vulnerability holds information about the found vulnerability. - Vulnerability *VulnerabilityRecord `protobuf:"bytes,1,opt,name=vulnerability,proto3" json:"vulnerability,omitempty"` - // Package affected by this vulnerability. - Pkg *Package2 `protobuf:"bytes,2,opt,name=pkg,proto3" json:"pkg,omitempty"` - // Fix related data about this vulnerability. - Fix *Fix `protobuf:"bytes,3,opt,name=fix,proto3,oneof" json:"fix,omitempty"` -} - -func (x *VulnerabilityMatch) Reset() { - *x = VulnerabilityMatch{} - if protoimpl.UnsafeEnabled { - mi := &file_vuln_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnerabilityMatch) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnerabilityMatch) ProtoMessage() {} - -func (x *VulnerabilityMatch) ProtoReflect() protoreflect.Message { - mi := &file_vuln_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnerabilityMatch.ProtoReflect.Descriptor instead. -func (*VulnerabilityMatch) Descriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *VulnerabilityMatch) GetVulnerability() *VulnerabilityRecord { - if x != nil { - return x.Vulnerability - } - return nil -} - -func (x *VulnerabilityMatch) GetPkg() *Package2 { - if x != nil { - return x.Pkg - } - return nil -} - -func (x *VulnerabilityMatch) GetFix() *Fix { - if x != nil { - return x.Fix - } - return nil -} - -type VulnerabilityRecord struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id of the vulnerability e.g. CVE_1231-12. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // a short description of this vulnerability. - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - // severity is the value representing the severity of the vulnerability - Severity VulnerabilityRecord_Severity `protobuf:"varint,3,opt,name=severity,proto3,enum=chainguard.platform.tenant.VulnerabilityRecord_Severity" json:"severity,omitempty"` - // source from where the vulnerability information was obtained, e.g. nvd, github, osv. - Source string `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` - // List of cvss information about the exploitability of the vulnerability. - Cvss []*VulnerabilityRecord_Cvss `protobuf:"bytes,5,rep,name=cvss,proto3" json:"cvss,omitempty"` - // List of cpe_uri on which the vulnerability was found. - CpeUri []string `protobuf:"bytes,6,rep,name=cpe_uri,json=cpeUri,proto3" json:"cpe_uri,omitempty"` - // URLs related to this vulnerability. - RelatedUrls []string `protobuf:"bytes,7,rep,name=related_urls,json=relatedUrls,proto3" json:"related_urls,omitempty"` - // advisories related to this vulnerability. - Advisories map[string]string `protobuf:"bytes,8,rep,name=advisories,proto3" json:"advisories,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // related vulnerabilities to the main vulnerability reported here. - RelatedVulnerabilities []*VulnerabilityRecord_RelatedVulnerability `protobuf:"bytes,9,rep,name=related_vulnerabilities,json=relatedVulnerabilities,proto3" json:"related_vulnerabilities,omitempty"` - // display_id is the normalized value of the vulnerability ID often defined by a CVE-ID. - DisplayId string `protobuf:"bytes,10,opt,name=display_id,json=displayId,proto3" json:"display_id,omitempty"` -} - -func (x *VulnerabilityRecord) Reset() { - *x = VulnerabilityRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_vuln_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnerabilityRecord) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnerabilityRecord) ProtoMessage() {} - -func (x *VulnerabilityRecord) ProtoReflect() protoreflect.Message { - mi := &file_vuln_platform_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 VulnerabilityRecord.ProtoReflect.Descriptor instead. -func (*VulnerabilityRecord) Descriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *VulnerabilityRecord) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *VulnerabilityRecord) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *VulnerabilityRecord) GetSeverity() VulnerabilityRecord_Severity { - if x != nil { - return x.Severity - } - return VulnerabilityRecord_UNKNOWN -} - -func (x *VulnerabilityRecord) GetSource() string { - if x != nil { - return x.Source - } - return "" -} - -func (x *VulnerabilityRecord) GetCvss() []*VulnerabilityRecord_Cvss { - if x != nil { - return x.Cvss - } - return nil -} - -func (x *VulnerabilityRecord) GetCpeUri() []string { - if x != nil { - return x.CpeUri - } - return nil -} - -func (x *VulnerabilityRecord) GetRelatedUrls() []string { - if x != nil { - return x.RelatedUrls - } - return nil -} - -func (x *VulnerabilityRecord) GetAdvisories() map[string]string { - if x != nil { - return x.Advisories - } - return nil -} - -func (x *VulnerabilityRecord) GetRelatedVulnerabilities() []*VulnerabilityRecord_RelatedVulnerability { - if x != nil { - return x.RelatedVulnerabilities - } - return nil -} - -func (x *VulnerabilityRecord) GetDisplayId() string { - if x != nil { - return x.DisplayId - } - return "" -} - -type Fix struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of in versions of the package on which the vulnerability has been solved. - Versions []string `protobuf:"bytes,1,rep,name=versions,proto3" json:"versions,omitempty"` - // state reflects the state of the fix, e.g. fixed, unknown, not-fixed, won't-fix. - State Fix_State `protobuf:"varint,2,opt,name=state,proto3,enum=chainguard.platform.tenant.Fix_State" json:"state,omitempty"` -} - -func (x *Fix) Reset() { - *x = Fix{} - if protoimpl.UnsafeEnabled { - mi := &file_vuln_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Fix) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Fix) ProtoMessage() {} - -func (x *Fix) ProtoReflect() protoreflect.Message { - mi := &file_vuln_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Fix.ProtoReflect.Descriptor instead. -func (*Fix) Descriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *Fix) GetVersions() []string { - if x != nil { - return x.Versions - } - return nil -} - -func (x *Fix) GetState() Fix_State { - if x != nil { - return x.State - } - return Fix_UNKNOWN -} - -type VulnReportList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*VulnReport `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *VulnReportList) Reset() { - *x = VulnReportList{} - if protoimpl.UnsafeEnabled { - mi := &file_vuln_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnReportList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnReportList) ProtoMessage() {} - -func (x *VulnReportList) ProtoReflect() protoreflect.Message { - mi := &file_vuln_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnReportList.ProtoReflect.Descriptor instead. -func (*VulnReportList) Descriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *VulnReportList) GetItems() []*VulnReport { - if x != nil { - return x.Items - } - return nil -} - -type VulnReportFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` - // active_since is the timestamp after which the records should - // have last been observed in the returned context. - ActiveSince *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` - // include_raw_vuln_report is a flag to return a list of reports containing the raw report. - IncludeRawVulnReport bool `protobuf:"varint,6,opt,name=include_raw_vuln_report,json=includeRawVulnReport,proto3" json:"include_raw_vuln_report,omitempty"` -} - -func (x *VulnReportFilter) Reset() { - *x = VulnReportFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_vuln_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnReportFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnReportFilter) ProtoMessage() {} - -func (x *VulnReportFilter) ProtoReflect() protoreflect.Message { - mi := &file_vuln_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnReportFilter.ProtoReflect.Descriptor instead. -func (*VulnReportFilter) Descriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{6} -} - -func (x *VulnReportFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *VulnReportFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *VulnReportFilter) GetActiveSince() *timestamppb.Timestamp { - if x != nil { - return x.ActiveSince - } - return nil -} - -func (x *VulnReportFilter) GetIncludeRawVulnReport() bool { - if x != nil { - return x.IncludeRawVulnReport - } - return false -} - -type VulnerabilityRecord_Cvss struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // CVSS score is on a scale of 0 - 10 where 0 indicates low severity and 10 indicates high severity. - Score string `protobuf:"bytes,1,opt,name=score,proto3" json:"score,omitempty"` - // CVSS version used to populate score and severity. - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` -} - -func (x *VulnerabilityRecord_Cvss) Reset() { - *x = VulnerabilityRecord_Cvss{} - if protoimpl.UnsafeEnabled { - mi := &file_vuln_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnerabilityRecord_Cvss) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnerabilityRecord_Cvss) ProtoMessage() {} - -func (x *VulnerabilityRecord_Cvss) ProtoReflect() protoreflect.Message { - mi := &file_vuln_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnerabilityRecord_Cvss.ProtoReflect.Descriptor instead. -func (*VulnerabilityRecord_Cvss) Descriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{3, 0} -} - -func (x *VulnerabilityRecord_Cvss) GetScore() string { - if x != nil { - return x.Score - } - return "" -} - -func (x *VulnerabilityRecord_Cvss) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -type VulnerabilityRecord_RelatedVulnerability struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ID of the vulnerability. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Source from where the vulnerability information was obtained, e.g. nvd, github, osv. - Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` -} - -func (x *VulnerabilityRecord_RelatedVulnerability) Reset() { - *x = VulnerabilityRecord_RelatedVulnerability{} - if protoimpl.UnsafeEnabled { - mi := &file_vuln_platform_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VulnerabilityRecord_RelatedVulnerability) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VulnerabilityRecord_RelatedVulnerability) ProtoMessage() {} - -func (x *VulnerabilityRecord_RelatedVulnerability) ProtoReflect() protoreflect.Message { - mi := &file_vuln_platform_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VulnerabilityRecord_RelatedVulnerability.ProtoReflect.Descriptor instead. -func (*VulnerabilityRecord_RelatedVulnerability) Descriptor() ([]byte, []int) { - return file_vuln_platform_proto_rawDescGZIP(), []int{3, 2} -} - -func (x *VulnerabilityRecord_RelatedVulnerability) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *VulnerabilityRecord_RelatedVulnerability) GetSource() string { - if x != nil { - return x.Source - } - return "" -} - -var File_vuln_platform_proto protoreflect.FileDescriptor - -var file_vuln_platform_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x76, 0x75, 0x6c, 0x6e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, - 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, - 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x13, 0x73, 0x62, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xce, 0x03, 0x0a, 0x0a, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, - 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x63, 0x0a, 0x15, 0x76, 0x75, 0x6c, 0x6e, - 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x14, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x3d, 0x0a, - 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, - 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x11, - 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x61, 0x77, 0x5f, 0x76, 0x75, 0x6c, - 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, - 0x72, 0x61, 0x77, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x37, 0x0a, - 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, - 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0xe3, 0x01, 0x0a, 0x12, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x55, 0x0a, 0x0d, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, - 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0d, - 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x36, 0x0a, - 0x03, 0x70, 0x6b, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x32, - 0x52, 0x03, 0x70, 0x6b, 0x67, 0x12, 0x36, 0x0a, 0x03, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x46, 0x69, 0x78, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x66, 0x69, 0x78, 0x22, 0xb7, 0x06, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x54, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, - 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x73, 0x65, 0x76, - 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x48, 0x0a, - 0x04, 0x63, 0x76, 0x73, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x43, 0x76, 0x73, - 0x73, 0x52, 0x04, 0x63, 0x76, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x70, 0x65, 0x5f, 0x75, - 0x72, 0x69, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x70, 0x65, 0x55, 0x72, 0x69, - 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x55, - 0x72, 0x6c, 0x73, 0x12, 0x5f, 0x0a, 0x0a, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, - 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, - 0x72, 0x69, 0x65, 0x73, 0x12, 0x7d, 0x0a, 0x17, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x56, 0x75, - 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x16, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x69, - 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, - 0x49, 0x64, 0x1a, 0x36, 0x0a, 0x04, 0x43, 0x76, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, - 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x64, - 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 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, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x14, 0x52, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x44, 0x0a, 0x08, 0x53, 0x65, 0x76, - 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, - 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, - 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x49, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x04, 0x22, - 0x9c, 0x01, 0x0a, 0x03, 0x46, 0x69, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x46, 0x69, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x22, 0x3c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x58, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x10, 0x02, - 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x4f, 0x4e, 0x54, 0x5f, 0x46, 0x49, 0x58, 0x10, 0x03, 0x22, 0x4e, - 0x0a, 0x0e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x3c, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, - 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xe0, - 0x01, 0x0a, 0x10, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, - 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, - 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x35, - 0x0a, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x76, 0x75, - 0x6c, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x61, 0x77, 0x56, 0x75, 0x6c, 0x6e, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, - 0x05, 0x32, 0x9e, 0x01, 0x0a, 0x0b, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x73, 0x12, 0x8e, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x94, 0x05, - 0x10, 0x01, 0x42, 0x6f, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_vuln_platform_proto_rawDescOnce sync.Once - file_vuln_platform_proto_rawDescData = file_vuln_platform_proto_rawDesc -) - -func file_vuln_platform_proto_rawDescGZIP() []byte { - file_vuln_platform_proto_rawDescOnce.Do(func() { - file_vuln_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_vuln_platform_proto_rawDescData) - }) - return file_vuln_platform_proto_rawDescData -} - -var file_vuln_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_vuln_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_vuln_platform_proto_goTypes = []interface{}{ - (VulnerabilityRecord_Severity)(0), // 0: chainguard.platform.tenant.VulnerabilityRecord.Severity - (Fix_State)(0), // 1: chainguard.platform.tenant.Fix.State - (*VulnReport)(nil), // 2: chainguard.platform.tenant.VulnReport - (*Scanner)(nil), // 3: chainguard.platform.tenant.Scanner - (*VulnerabilityMatch)(nil), // 4: chainguard.platform.tenant.VulnerabilityMatch - (*VulnerabilityRecord)(nil), // 5: chainguard.platform.tenant.VulnerabilityRecord - (*Fix)(nil), // 6: chainguard.platform.tenant.Fix - (*VulnReportList)(nil), // 7: chainguard.platform.tenant.VulnReportList - (*VulnReportFilter)(nil), // 8: chainguard.platform.tenant.VulnReportFilter - (*VulnerabilityRecord_Cvss)(nil), // 9: chainguard.platform.tenant.VulnerabilityRecord.Cvss - nil, // 10: chainguard.platform.tenant.VulnerabilityRecord.AdvisoriesEntry - (*VulnerabilityRecord_RelatedVulnerability)(nil), // 11: chainguard.platform.tenant.VulnerabilityRecord.RelatedVulnerability - (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp - (*Package2)(nil), // 13: chainguard.platform.tenant.Package2 - (*v1.UIDPFilter)(nil), // 14: chainguard.platform.common.UIDPFilter -} -var file_vuln_platform_proto_depIdxs = []int32{ - 12, // 0: chainguard.platform.tenant.VulnReport.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp - 4, // 1: chainguard.platform.tenant.VulnReport.vulnerability_matches:type_name -> chainguard.platform.tenant.VulnerabilityMatch - 3, // 2: chainguard.platform.tenant.VulnReport.scanner:type_name -> chainguard.platform.tenant.Scanner - 12, // 3: chainguard.platform.tenant.VulnReport.report_generation:type_name -> google.protobuf.Timestamp - 12, // 4: chainguard.platform.tenant.VulnReport.last_seen:type_name -> google.protobuf.Timestamp - 5, // 5: chainguard.platform.tenant.VulnerabilityMatch.vulnerability:type_name -> chainguard.platform.tenant.VulnerabilityRecord - 13, // 6: chainguard.platform.tenant.VulnerabilityMatch.pkg:type_name -> chainguard.platform.tenant.Package2 - 6, // 7: chainguard.platform.tenant.VulnerabilityMatch.fix:type_name -> chainguard.platform.tenant.Fix - 0, // 8: chainguard.platform.tenant.VulnerabilityRecord.severity:type_name -> chainguard.platform.tenant.VulnerabilityRecord.Severity - 9, // 9: chainguard.platform.tenant.VulnerabilityRecord.cvss:type_name -> chainguard.platform.tenant.VulnerabilityRecord.Cvss - 10, // 10: chainguard.platform.tenant.VulnerabilityRecord.advisories:type_name -> chainguard.platform.tenant.VulnerabilityRecord.AdvisoriesEntry - 11, // 11: chainguard.platform.tenant.VulnerabilityRecord.related_vulnerabilities:type_name -> chainguard.platform.tenant.VulnerabilityRecord.RelatedVulnerability - 1, // 12: chainguard.platform.tenant.Fix.state:type_name -> chainguard.platform.tenant.Fix.State - 2, // 13: chainguard.platform.tenant.VulnReportList.items:type_name -> chainguard.platform.tenant.VulnReport - 14, // 14: chainguard.platform.tenant.VulnReportFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 12, // 15: chainguard.platform.tenant.VulnReportFilter.active_since:type_name -> google.protobuf.Timestamp - 8, // 16: chainguard.platform.tenant.VulnReports.List:input_type -> chainguard.platform.tenant.VulnReportFilter - 7, // 17: chainguard.platform.tenant.VulnReports.List:output_type -> chainguard.platform.tenant.VulnReportList - 17, // [17:18] is the sub-list for method output_type - 16, // [16:17] is the sub-list for method input_type - 16, // [16:16] is the sub-list for extension type_name - 16, // [16:16] is the sub-list for extension extendee - 0, // [0:16] is the sub-list for field type_name -} - -func init() { file_vuln_platform_proto_init() } -func file_vuln_platform_proto_init() { - if File_vuln_platform_proto != nil { - return - } - file_sbom_platform_proto_init() - if !protoimpl.UnsafeEnabled { - file_vuln_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnReport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_vuln_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Scanner); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_vuln_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilityMatch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_vuln_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilityRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_vuln_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Fix); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_vuln_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnReportList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_vuln_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnReportFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_vuln_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilityRecord_Cvss); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_vuln_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilityRecord_RelatedVulnerability); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_vuln_platform_proto_msgTypes[2].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_vuln_platform_proto_rawDesc, - NumEnums: 2, - NumMessages: 10, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_vuln_platform_proto_goTypes, - DependencyIndexes: file_vuln_platform_proto_depIdxs, - EnumInfos: file_vuln_platform_proto_enumTypes, - MessageInfos: file_vuln_platform_proto_msgTypes, - }.Build() - File_vuln_platform_proto = out.File - file_vuln_platform_proto_rawDesc = nil - file_vuln_platform_proto_goTypes = nil - file_vuln_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/vuln.platform.pb.gw.go b/proto/platform/tenant/v1/vuln.platform.pb.gw.go deleted file mode 100644 index 9f610158..00000000 --- a/proto/platform/tenant/v1/vuln.platform.pb.gw.go +++ /dev/null @@ -1,166 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: vuln.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -var ( - filter_VulnReports_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_VulnReports_List_0(ctx context.Context, marshaler runtime.Marshaler, client VulnReportsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq VulnReportFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VulnReports_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_VulnReports_List_0(ctx context.Context, marshaler runtime.Marshaler, server VulnReportsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq VulnReportFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VulnReports_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterVulnReportsHandlerServer registers the http handlers for service VulnReports to "mux". -// UnaryRPC :call VulnReportsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterVulnReportsHandlerFromEndpoint instead. -func RegisterVulnReportsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server VulnReportsServer) error { - - mux.Handle("GET", pattern_VulnReports_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.VulnReports/List", runtime.WithHTTPPathPattern("/tenant/v1/vulnreports")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_VulnReports_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_VulnReports_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterVulnReportsHandlerFromEndpoint is same as RegisterVulnReportsHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterVulnReportsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterVulnReportsHandler(ctx, mux, conn) -} - -// RegisterVulnReportsHandler registers the http handlers for service VulnReports to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterVulnReportsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterVulnReportsHandlerClient(ctx, mux, NewVulnReportsClient(conn)) -} - -// RegisterVulnReportsHandlerClient registers the http handlers for service VulnReports -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "VulnReportsClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "VulnReportsClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "VulnReportsClient" to call the correct interceptors. -func RegisterVulnReportsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client VulnReportsClient) error { - - mux.Handle("GET", pattern_VulnReports_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.VulnReports/List", runtime.WithHTTPPathPattern("/tenant/v1/vulnreports")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_VulnReports_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_VulnReports_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_VulnReports_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "vulnreports"}, "")) -) - -var ( - forward_VulnReports_List_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/tenant/v1/vuln.platform.proto b/proto/platform/tenant/v1/vuln.platform.proto deleted file mode 100644 index c9ba3738..00000000 --- a/proto/platform/tenant/v1/vuln.platform.proto +++ /dev/null @@ -1,162 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantVulnProto"; - -package chainguard.platform.tenant; - -import "google/api/annotations.proto"; -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; -import "sbom.platform.proto"; - -service VulnReports { - rpc List(VulnReportFilter) returns (VulnReportList) { - option (google.api.http) = { - get: "/tenant/v1/vulnreports" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_VULN_REPORTS_LIST] - unscoped: true - } - }; - } -} - -message VulnReport { - // id, The VulnReport UIDP at which this VulnReport resides. - string id = 1; - - // vulnerability_db_last_build_time holds the time when the vulnerability database was built last time. - google.protobuf.Timestamp vulnerability_db_last_build_time = 2; - - // Report's list of vulnerability matches(s). - repeated VulnerabilityMatch vulnerability_matches = 3; - - // scanner contains some information about the scanner used to generate the report. - Scanner scanner = 4; - - // report_generation tracks the timestamp at which this report was generated. - google.protobuf.Timestamp report_generation = 5; - - // raw_vuln_report may or may not be useful in the long term, but for now to make - // progress on this, we'll just yolo and serialize it here. - bytes raw_vuln_report = 6; - - // last_seen tracks the timestamp at which this vuln report was last seen. - google.protobuf.Timestamp last_seen = 7; -} - -message Scanner { - // name contains the vendor name of the scanner. - string name = 1; - // version holds the version of the used scanner to generate the report. - string version = 2; -} - -message VulnerabilityMatch { - // Vulnerability holds information about the found vulnerability. - VulnerabilityRecord vulnerability = 1; - - // Package affected by this vulnerability. - Package2 pkg = 2; - - // Fix related data about this vulnerability. - optional Fix fix = 3; -} - -message VulnerabilityRecord { - // id of the vulnerability e.g. CVE_1231-12. - string id = 1; - - // a short description of this vulnerability. - string description = 2; - - // severity is the value representing the severity of the vulnerability - Severity severity = 3; - - enum Severity { - UNKNOWN = 0; - LOW = 1; - MEDIUM = 2; - HIGH = 3; - CRITICAL = 4; - } - - // source from where the vulnerability information was obtained, e.g. nvd, github, osv. - string source = 4; - - // List of cvss information about the exploitability of the vulnerability. - repeated Cvss cvss = 5; - - message Cvss { - // CVSS score is on a scale of 0 - 10 where 0 indicates low severity and 10 indicates high severity. - string score = 1; - // CVSS version used to populate score and severity. - string version = 2; - } - - // List of cpe_uri on which the vulnerability was found. - repeated string cpe_uri = 6; - - // URLs related to this vulnerability. - repeated string related_urls = 7; - - // advisories related to this vulnerability. - map advisories = 8; - - message RelatedVulnerability { - // ID of the vulnerability. - string id = 1; - // Source from where the vulnerability information was obtained, e.g. nvd, github, osv. - string source = 2; - } - - // related vulnerabilities to the main vulnerability reported here. - repeated RelatedVulnerability related_vulnerabilities = 9; - - // display_id is the normalized value of the vulnerability ID often defined by a CVE-ID. - string display_id = 10; -} - -message Fix { - // List of in versions of the package on which the vulnerability has been solved. - repeated string versions = 1; - - // state reflects the state of the fix, e.g. fixed, unknown, not-fixed, won't-fix. - State state = 2; - enum State { - UNKNOWN = 0; - FIXED = 1; - NOT_FIXED = 2; - WONT_FIX = 3; - } -} - -message VulnReportList { - repeated VulnReport items = 1; -} - -message VulnReportFilter { - // id is the exact UID of the record. - string id = 1; - - chainguard.platform.common.UIDPFilter uidp = 2; - - // This field was retired and is no longer served. - reserved 3; - - // This field was retired and is no longer served. - reserved 4; - - // active_since is the timestamp after which the records should - // have last been observed in the returned context. - google.protobuf.Timestamp active_since = 5; - - // include_raw_vuln_report is a flag to return a list of reports containing the raw report. - bool include_raw_vuln_report = 6; -} diff --git a/proto/platform/tenant/v1/vuln.platform_grpc.pb.go b/proto/platform/tenant/v1/vuln.platform_grpc.pb.go deleted file mode 100644 index f11dfa37..00000000 --- a/proto/platform/tenant/v1/vuln.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v5.26.1 -// source: vuln.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - VulnReports_List_FullMethodName = "/chainguard.platform.tenant.VulnReports/List" -) - -// VulnReportsClient is the client API for VulnReports service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type VulnReportsClient interface { - List(ctx context.Context, in *VulnReportFilter, opts ...grpc.CallOption) (*VulnReportList, error) -} - -type vulnReportsClient struct { - cc grpc.ClientConnInterface -} - -func NewVulnReportsClient(cc grpc.ClientConnInterface) VulnReportsClient { - return &vulnReportsClient{cc} -} - -func (c *vulnReportsClient) List(ctx context.Context, in *VulnReportFilter, opts ...grpc.CallOption) (*VulnReportList, error) { - out := new(VulnReportList) - err := c.cc.Invoke(ctx, VulnReports_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// VulnReportsServer is the server API for VulnReports service. -// All implementations must embed UnimplementedVulnReportsServer -// for forward compatibility -type VulnReportsServer interface { - List(context.Context, *VulnReportFilter) (*VulnReportList, error) - mustEmbedUnimplementedVulnReportsServer() -} - -// UnimplementedVulnReportsServer must be embedded to have forward compatible implementations. -type UnimplementedVulnReportsServer struct { -} - -func (UnimplementedVulnReportsServer) List(context.Context, *VulnReportFilter) (*VulnReportList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedVulnReportsServer) mustEmbedUnimplementedVulnReportsServer() {} - -// UnsafeVulnReportsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to VulnReportsServer will -// result in compilation errors. -type UnsafeVulnReportsServer interface { - mustEmbedUnimplementedVulnReportsServer() -} - -func RegisterVulnReportsServer(s grpc.ServiceRegistrar, srv VulnReportsServer) { - s.RegisterService(&VulnReports_ServiceDesc, srv) -} - -func _VulnReports_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(VulnReportFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(VulnReportsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: VulnReports_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(VulnReportsServer).List(ctx, req.(*VulnReportFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// VulnReports_ServiceDesc is the grpc.ServiceDesc for VulnReports service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var VulnReports_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.VulnReports", - HandlerType: (*VulnReportsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _VulnReports_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "vuln.platform.proto", -} diff --git a/proto/platform/test/mock_clients.go b/proto/platform/test/mock_clients.go deleted file mode 100644 index b6dd728a..00000000 --- a/proto/platform/test/mock_clients.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "chainguard.dev/sdk/proto/platform" - advisory "chainguard.dev/sdk/proto/platform/advisory/v1" - advisorytest "chainguard.dev/sdk/proto/platform/advisory/v1/test" - auth "chainguard.dev/sdk/proto/platform/auth/v1" - authtest "chainguard.dev/sdk/proto/platform/auth/v1/test" - iam "chainguard.dev/sdk/proto/platform/iam/v1" - iamtest "chainguard.dev/sdk/proto/platform/iam/v1/test" - oidc "chainguard.dev/sdk/proto/platform/oidc/v1" - oidctest "chainguard.dev/sdk/proto/platform/oidc/v1/test" - ping "chainguard.dev/sdk/proto/platform/ping/v1" - pingtest "chainguard.dev/sdk/proto/platform/ping/v1/test" - registry "chainguard.dev/sdk/proto/platform/registry/v1" - registrytest "chainguard.dev/sdk/proto/platform/registry/v1/test" - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" - tenanttest "chainguard.dev/sdk/proto/platform/tenant/v1/test" -) - -var _ platform.Clients = (*MockPlatformClients)(nil) - -type MockPlatformClients struct { - OnError error - - IAMClient iamtest.MockIAMClient - TenantClient tenanttest.MockTenantClient - RegistryClient registrytest.MockRegistryClients - AdvisoryClient advisorytest.MockSecurityAdvisoryClients - PingClient pingtest.MockPingServiceClients -} - -func (m MockPlatformClients) Close() error { - return m.OnError -} - -func (m MockPlatformClients) IAM() iam.Clients { - return m.IAMClient -} - -func (m MockPlatformClients) Tenant() tenant.Clients { - return m.TenantClient -} - -func (m MockPlatformClients) Registry() registry.Clients { - return m.RegistryClient -} - -func (m MockPlatformClients) Advisory() advisory.Clients { - return m.AdvisoryClient -} - -func (m MockPlatformClients) Ping() ping.Clients { - return m.PingClient -} - -var _ platform.OIDCClients = (*MockOIDCClients)(nil) - -type MockOIDCClients struct { - OnError error - - AuthClient authtest.MockAuthClient - OIDCClient oidctest.MockOIDCClient - PingClient pingtest.MockPingServiceClients -} - -func (m MockOIDCClients) Close() error { - return m.OnError -} - -func (m MockOIDCClients) Auth() auth.AuthClient { - return m.AuthClient -} - -func (m MockOIDCClients) OIDC() oidc.Clients { - return m.OIDCClient -} - -func (m MockOIDCClients) OIDCPing() ping.Clients { - return m.PingClient -} diff --git a/proto/platform/test/mock_server.go b/proto/platform/test/mock_server.go deleted file mode 100644 index 7a0471c2..00000000 --- a/proto/platform/test/mock_server.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - "testing" - - delegate "chainguard.dev/go-grpc-kit/pkg/options" - iam "chainguard.dev/sdk/proto/platform/iam/v1" - iamtest "chainguard.dev/sdk/proto/platform/iam/v1/test" - "google.golang.org/grpc" - "google.golang.org/grpc/test/bufconn" -) - -type MockPlatformServer struct { - GroupServer iamtest.MockGroupsServer -} - -// StartPlatformServer starts the mock server and returns the connection string. -func (m *MockPlatformServer) StartPlatformServer(_ context.Context, t *testing.T) string { - t.Helper() - lis := bufconn.Listen(1024 * 1024) - testScheme := delegate.RegisterListenerForTest(lis) - t.Cleanup(func() { - delegate.UnregisterTestListener(testScheme) - }) - s := grpc.NewServer() - iam.RegisterGroupsServer(s, m.GroupServer) - go func() { - t.Helper() - if err := s.Serve(lis); err != nil { - panic(fmt.Sprintf("Server exited with error: %v", err)) - } - }() - t.Cleanup(func() { - s.GracefulStop() - }) - - return fmt.Sprintf("%s://%s", testScheme, lis.Addr().String()) -} diff --git a/sts/sts.go b/sts/sts.go deleted file mode 100644 index b18619fd..00000000 --- a/sts/sts.go +++ /dev/null @@ -1,314 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package sts - -import ( - "bytes" - "context" - "crypto/tls" - "fmt" - "io" - "net/http" - "net/url" - - oidc "chainguard.dev/sdk/proto/platform/oidc/v1" - "golang.org/x/oauth2" - "google.golang.org/grpc/metadata" - "google.golang.org/protobuf/encoding/protojson" - "google.golang.org/protobuf/proto" -) - -const GulfstreamAudience = "gulfstream" - -// Exchanger is an interface for exchanging a third-party token for a Chainguard -// token. -type Exchanger interface { - // Exchange performs the actual token exchange, sending "token" to the - // Chainguard issuer's STS interface, and receiving bytes or an error. - Exchange(ctx context.Context, token string, opts ...ExchangerOption) (string, error) - - // Refresh exchanges a refresh token for a new access token and refresh token. - Refresh(ctx context.Context, token string, opts ...ExchangerOption) (accessToken string, refreshToken string, err error) -} - -// New creates a new Exchanger that works against the provided issuer's STS -// endpoint, and requests token with the specified audience. It's behavior -// can be further customized via optional ExchangerOption parameters. -func New(issuer, audience string, opts ...ExchangerOption) Exchanger { - i := &impl{ - opts: options{ - issuer: issuer, - audience: audience, - }, - } - for _, opt := range opts { - opt(&i.opts) - } - - return i -} - -// Exchange performs an OIDC token exchange with the correct Exchanger based on the provided options. -func Exchange(ctx context.Context, issuer, audience, idToken string, exchangerOptions ...ExchangerOption) (string, error) { - opts := options{ - issuer: issuer, - audience: audience, - } - for _, eo := range exchangerOptions { - eo(&opts) - } - - var e Exchanger - if opts.http1Downgrade { - e = &HTTP1DowngradeExchanger{opts: opts} - } else { - e = &impl{opts: opts} - } - return e.Exchange(ctx, idToken, exchangerOptions...) -} - -type impl struct { - opts options -} - -type options struct { - issuer string - audience string - cluster string - userAgent string - scope string - capabilities []string - identity string - includeUpstreamToken bool - http1Downgrade bool -} - -var _ Exchanger = (*impl)(nil) - -// Stubbed when testing -var oidcNewClients = oidc.NewClients - -// Exchange implements Exchanger -func (i *impl) Exchange(ctx context.Context, token string, opts ...ExchangerOption) (string, error) { - o := i.opts - for _, opt := range opts { - opt(&o) - } - - c, err := oidcNewClients(ctx, o.issuer, fmt.Sprintf("Bearer %s", token), oidc.WithUserAgent(o.userAgent)) - if err != nil { - return "", err - } - defer c.Close() - - resp, err := c.STS().Exchange(ctx, &oidc.ExchangeRequest{ - Aud: []string{o.audience}, - Scope: o.scope, - Cluster: o.cluster, - Identity: o.identity, - IncludeUpstreamToken: o.includeUpstreamToken, - Cap: o.capabilities, - }) - if err != nil { - return "", err - } - return resp.Token, nil -} - -// Refresh implements Exchanger -func (i *impl) Refresh(ctx context.Context, token string, opts ...ExchangerOption) (string, string, error) { - o := i.opts - for _, opt := range opts { - opt(&o) - } - - c, err := oidcNewClients(ctx, o.issuer, fmt.Sprintf("Bearer %s", token), oidc.WithUserAgent(o.userAgent)) - if err != nil { - return "", "", err - } - defer c.Close() - - resp, err := c.STS().ExchangeRefreshToken(ctx, &oidc.ExchangeRefreshTokenRequest{ - Aud: []string{o.audience}, - Scope: o.scope, - Cap: o.capabilities, - }) - if err != nil { - return "", "", err - } - return resp.GetToken().GetToken(), resp.GetRefreshToken().GetToken(), err -} - -// ExchangerOption is a way of customizing the behavior of the Exchanger -// constructed via New() -type ExchangerOption func(*options) - -// WithUserAgent sets the user agent sent by the Exchanger. -func WithUserAgent(agent string) ExchangerOption { - return func(i *options) { - i.userAgent = agent - } -} - -// WithCluster sets the cluster parameter sent by the Exchanger. -// -// Only one of cluster or scope may be set. -func WithCluster(cluster string) ExchangerOption { - return func(i *options) { - i.cluster = cluster - } -} - -// WithScope sets the scope parameter sent by the Exchanger. -// -// Only one of cluster or scope may be set. -func WithScope(scope string) ExchangerOption { - return func(i *options) { - i.scope = scope - } -} - -// WithCapabilities sets the capabilities sent by the Exchanger. -func WithCapabilities(cap ...string) ExchangerOption { - return func(i *options) { - i.capabilities = cap - } -} - -// WithIdentity sets the the unique ID of the identity so that STS exchange can -// look up pre-stored verification keys without ambiguity -func WithIdentity(uid string) ExchangerOption { - return func(i *options) { - i.identity = uid - } -} - -// WithIncludeUpstreamToken requests that the upstream token be included in the returned -// STS token. -func WithIncludeUpstreamToken() ExchangerOption { - return func(i *options) { - i.includeUpstreamToken = true - } -} - -// WithHTTP1Downgrade signals Exchange to use HTTP1DowngradeExchanger in the STS exchange. -func WithHTTP1Downgrade() ExchangerOption { - return func(i *options) { - i.http1Downgrade = true - } -} - -type HTTP1DowngradeExchanger struct { - opts options -} - -func NewHTTP1DowngradeExchanger(issuer, audience string, opts ...ExchangerOption) *HTTP1DowngradeExchanger { - i := &HTTP1DowngradeExchanger{ - opts: options{ - issuer: issuer, - audience: audience, - }, - } - for _, opt := range opts { - opt(&i.opts) - } - return i -} - -func (i *HTTP1DowngradeExchanger) doHTTP1(ctx context.Context, - auth string, - path string, in proto.Message, out proto.Message, opts options) error { - body, err := protojson.Marshal(in) - if err != nil { - return err - } - u, err := url.JoinPath(i.opts.issuer, path) - if err != nil { - return err - } - req, err := http.NewRequestWithContext(ctx, http.MethodPost, u, bytes.NewReader(body)) - if err != nil { - return err - } - req.Header.Set("Content-Type", "application/json") - if opts.userAgent != "" { - req.Header.Set("User-Agent", opts.userAgent) - } - - if md, ok := metadata.FromOutgoingContext(ctx); ok { - for k, v := range md { - for _, vv := range v { - req.Header.Add(k, vv) - } - } - } - - // Explicitly disable HTTP/2 support by setting the - // client Transport's TLSNextProto to an empty map. - // ref: https://pkg.go.dev/net/http#hdr-HTTP_2 - client := &http.Client{ - Transport: &oauth2.Transport{ - Base: &http.Transport{ - TLSNextProto: map[string]func(string, *tls.Conn) http.RoundTripper{}, - }, - Source: oauth2.StaticTokenSource(&oauth2.Token{AccessToken: auth}), - }, - } - resp, err := client.Do(req) - if err != nil { - return err - } - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("%s", resp.Status) - } - - b, err := io.ReadAll(resp.Body) - if err != nil { - return err - } - defer resp.Body.Close() - return protojson.Unmarshal(b, out) -} - -func (i *HTTP1DowngradeExchanger) Exchange(ctx context.Context, token string, opts ...ExchangerOption) (string, error) { - o := i.opts - for _, opt := range opts { - opt(&o) - } - in := &oidc.ExchangeRequest{ - Aud: []string{o.audience}, - Scope: o.scope, - Cluster: o.cluster, - Identity: o.identity, - IncludeUpstreamToken: o.includeUpstreamToken, - Cap: o.capabilities, - } - out := new(oidc.RawToken) - if err := i.doHTTP1(ctx, token, "/sts/exchange", in, out, o); err != nil { - return "", err - } - return out.Token, nil -} - -func (i *HTTP1DowngradeExchanger) Refresh(ctx context.Context, token string, opts ...ExchangerOption) (string, string, error) { - o := i.opts - for _, opt := range opts { - opt(&o) - } - - in := &oidc.ExchangeRefreshTokenRequest{ - Aud: []string{o.audience}, - Scope: o.scope, - Cap: o.capabilities, - } - - out := new(oidc.TokenPair) - if err := i.doHTTP1(ctx, token, "sts/access_token", in, out, o); err != nil { - return "", "", err - } - - return out.GetToken().Token, out.GetRefreshToken().Token, nil -} diff --git a/sts/sts_test.go b/sts/sts_test.go deleted file mode 100644 index d2c81592..00000000 --- a/sts/sts_test.go +++ /dev/null @@ -1,424 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package sts - -import ( - "context" - "errors" - "testing" - - oidc "chainguard.dev/sdk/proto/platform/oidc/v1" - "chainguard.dev/sdk/proto/platform/oidc/v1/test" - "github.com/google/go-cmp/cmp" -) - -func TestRefresh(t *testing.T) { - tests := map[string]struct { - issuer string - audience string - newOpts []ExchangerOption - exchangeOpts []ExchangerOption - wantToken string - wantRefreshToken string - wantErr bool - clientMock test.MockOIDCClient - }{ - "zero options": { - issuer: "bar", - audience: "baz", - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnGetAccessToken: []test.STSOnGetAccessToken{{ - Given: &oidc.ExchangeRefreshTokenRequest{ - Aud: []string{"baz"}, - }, - Exchanged: &oidc.TokenPair{ - Token: &oidc.RawToken{Token: "token!"}, - RefreshToken: &oidc.RawToken{Token: "refresh token!"}, - }, - }}, - }, - }, - wantToken: "token!", - wantRefreshToken: "refresh token!", - }, - "basic error plumbing": { - issuer: "bar", - audience: "baz", - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnGetAccessToken: []test.STSOnGetAccessToken{{ - Given: &oidc.ExchangeRefreshTokenRequest{ - Aud: []string{"baz"}, - }, - Error: errors.New("unexpected EOF"), - }}, - }, - }, - wantErr: true, - }, - "capabilities and scope": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithCapabilities("registry.push"), - WithScope("derp"), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnGetAccessToken: []test.STSOnGetAccessToken{{ - Given: &oidc.ExchangeRefreshTokenRequest{ - Aud: []string{"baz"}, - Cap: []string{"registry.push"}, - Scope: "derp", - }, - Exchanged: &oidc.TokenPair{ - Token: &oidc.RawToken{Token: "token!"}, - RefreshToken: &oidc.RawToken{Token: "refresh token"}, - }, - }}, - }, - }, - wantToken: "token!", - wantRefreshToken: "refresh token", - }, - } - - for name, test := range tests { - t.Run(name, func(t *testing.T) { - oidcNewClients = func(_ context.Context, issuer string, token string, opts ...oidc.ClientOption) (oidc.Clients, error) { - return test.clientMock, nil - } - - exch := New(test.issuer, test.audience, test.newOpts...) - token, refreshToken, gotErr := exch.Refresh(context.Background(), "foo", test.exchangeOpts...) - if gotErr != nil && !test.wantErr { - t.Error("got err: ", gotErr, "and expected no error") - } - if diff := cmp.Diff(token, test.wantToken); diff != "" { - t.Error("Got unexpected diff in token: ", diff) - } - if diff := cmp.Diff(refreshToken, test.wantRefreshToken); diff != "" { - t.Error("Got unexpected diff in refresh token: ", diff) - } - }) - } -} -func TestImplExchange(t *testing.T) { - tests := map[string]struct { - issuer string - audience string - newOpts []ExchangerOption - exchangeOpts []ExchangerOption - want string - wantErr bool - clientMock test.MockOIDCClient - }{ - "zero options": { - issuer: "bar", - audience: "baz", - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - }, - Exchanged: &oidc.RawToken{Token: "token!"}, - }}, - }, - }, - want: "token!", - }, - "basic error plumbing": { - issuer: "bar", - audience: "baz", - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - }, - Error: errors.New("unexpected EOF"), - }}, - }, - }, - wantErr: true, - }, - "capabilities and scope on create": { - issuer: "bar", - audience: "baz", - newOpts: []ExchangerOption{ - WithCapabilities("registry.push"), - WithScope("derp"), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - Cap: []string{"registry.push"}, - Scope: "derp", - }, - Exchanged: &oidc.RawToken{Token: "token!"}, - }}, - }, - }, - want: "token!", - }, - "capabilities and scope on exchange": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithCapabilities("registry.push"), - WithScope("derp"), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - Cap: []string{"registry.push"}, - Scope: "derp", - }, - Exchanged: &oidc.RawToken{Token: "token!"}, - }}, - }, - }, - want: "token!", - }, - "identity": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithIdentity("my-identity"), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - Identity: "my-identity", - }, - Exchanged: &oidc.RawToken{Token: "token foo"}, - }}, - }, - }, - want: "token foo", - }, - "include upstream": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithIncludeUpstreamToken(), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - IncludeUpstreamToken: true, - }, - Exchanged: &oidc.RawToken{Token: "tokenz"}, - }}, - }, - }, - want: "tokenz", - }, - "cluster": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithCluster("kind i presume"), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - Cluster: "kind i presume", - }, - Exchanged: &oidc.RawToken{Token: "tokenz"}, - }}, - }, - }, - want: "tokenz", - }, - } - - for name, test := range tests { - t.Run(name, func(t *testing.T) { - oidcNewClients = func(_ context.Context, issuer string, token string, opts ...oidc.ClientOption) (oidc.Clients, error) { - return test.clientMock, nil - } - - exch := New(test.issuer, test.audience, test.newOpts...) - gotToken, gotErr := exch.Exchange(context.Background(), "foo", test.exchangeOpts...) - if gotErr != nil && !test.wantErr { - t.Error("got err: ", gotErr, "and expected no error") - } - if diff := cmp.Diff(gotToken, test.want); diff != "" { - t.Error("Got unexpected diff in token: ", diff) - } - }) - } -} - -func TestExchange(t *testing.T) { - tests := map[string]struct { - issuer string - audience string - exchangeOpts []ExchangerOption - want string - wantErr bool - clientMock test.MockOIDCClient - }{ - "zero options": { - issuer: "bar", - audience: "baz", - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - }, - Exchanged: &oidc.RawToken{Token: "token!"}, - }}, - }, - }, - want: "token!", - }, - "basic error plumbing": { - issuer: "bar", - audience: "baz", - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - }, - Error: errors.New("unexpected EOF"), - }}, - }, - }, - wantErr: true, - }, - "capabilities and scope on create": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithCapabilities("registry.push"), - WithScope("derp"), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - Cap: []string{"registry.push"}, - Scope: "derp", - }, - Exchanged: &oidc.RawToken{Token: "token!"}, - }}, - }, - }, - want: "token!", - }, - "capabilities and scope on exchange": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithCapabilities("registry.push"), - WithScope("derp"), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - Cap: []string{"registry.push"}, - Scope: "derp", - }, - Exchanged: &oidc.RawToken{Token: "token!"}, - }}, - }, - }, - want: "token!", - }, - "identity": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithIdentity("my-identity"), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - Identity: "my-identity", - }, - Exchanged: &oidc.RawToken{Token: "token foo"}, - }}, - }, - }, - want: "token foo", - }, - "include upstream": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithIncludeUpstreamToken(), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - IncludeUpstreamToken: true, - }, - Exchanged: &oidc.RawToken{Token: "tokenz"}, - }}, - }, - }, - want: "tokenz", - }, - "cluster": { - issuer: "bar", - audience: "baz", - exchangeOpts: []ExchangerOption{ - WithCluster("kind i presume"), - }, - clientMock: test.MockOIDCClient{ - STSClient: test.MockSTSClient{ - OnExchange: []test.STSOnExchange{{ - Given: &oidc.ExchangeRequest{ - Aud: []string{"baz"}, - Cluster: "kind i presume", - }, - Exchanged: &oidc.RawToken{Token: "tokenz"}, - }}, - }, - }, - want: "tokenz", - }, - } - - for name, test := range tests { - t.Run(name, func(t *testing.T) { - oidcNewClients = func(_ context.Context, issuer string, token string, opts ...oidc.ClientOption) (oidc.Clients, error) { - return test.clientMock, nil - } - - gotToken, gotErr := Exchange(context.Background(), test.issuer, test.audience, "foo", test.exchangeOpts...) - if gotErr != nil && !test.wantErr { - t.Error("got err: ", gotErr, "and expected no error") - } - if diff := cmp.Diff(gotToken, test.want); diff != "" { - t.Error("Got unexpected diff in token: ", diff) - } - }) - } -} diff --git a/sts/tokensource.go b/sts/tokensource.go deleted file mode 100644 index 0f79b6a7..00000000 --- a/sts/tokensource.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package sts - -import ( - "context" - "fmt" - "time" - - "golang.org/x/oauth2" -) - -// NewTokenSource creates an oauth2.TokenSource by wrapping another TokenSource -// in a Chainguard STS exchange brokered by the provided Exchanger. -func NewTokenSource(ts oauth2.TokenSource, xchg Exchanger) oauth2.TokenSource { - return &stsTokenSource{ - ts: ts, - xchg: xchg, - } -} - -type stsTokenSource struct { - ts oauth2.TokenSource - xchg Exchanger -} - -// Token implements oauth2.TokenSource -func (sts *stsTokenSource) Token() (*oauth2.Token, error) { - tok, err := sts.ts.Token() - if err != nil { - return nil, fmt.Errorf("fetching base token: %w", err) - } - idt, err := sts.xchg.Exchange(context.Background(), tok.AccessToken) - if err != nil { - return nil, fmt.Errorf("exchanging base token: %w", err) - } - return &oauth2.Token{ - AccessToken: idt, - Expiry: time.Now().Add(time.Hour), - }, nil -} diff --git a/uidp/ancestry.go b/uidp/ancestry.go deleted file mode 100644 index 11f106aa..00000000 --- a/uidp/ancestry.go +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package uidp - -import ( - "path" - "regexp" - "strings" -) - -// IsAncestor checks whether the "parent" UIDP is an ancestor (non-inclusive) -// of the given "child" UIDP. -func IsAncestor(parent, child string) bool { - return strings.HasPrefix(child, parent+"/") -} - -// InRoot checks whether the UIDP is in the root, as opposed to within a group -func InRoot(child string) bool { - return !strings.Contains(child, "/") -} - -// IsAncestorOrSelf checks whether the "parent" UIDP is an ancestor (inclusive) -// of the given "child" UIDP. -func IsAncestorOrSelf(parent, child string) bool { - return child == parent || IsAncestor(parent, child) -} - -// Parent returns the "parent" UIDP for a child UIDP. Returns / if parent is root. -// -// Example: -// -// Parent("a/b/c") returns "a/b" -// Parent("a") returns "/" -func Parent(child string) string { - // path.Dir returns "." if the child is already at the root - if p := path.Dir(child); p != "." { - return p - } - return "/" -} - -// Parents returns all "parent" UIDP for a child UIDP. Returns empty slice if parent is root. -// -// Example: -// -// Parents("a/b/c/d") returns ["a/b/c", "a/b", "a"] -func Parents(child string) []string { - parents := make([]string, 0, strings.Count(child, "/")) - for p := Parent(child); p != "/"; p = Parent(p) { - parents = append(parents, p) - } - return parents -} - -// Ancestry returns all parent UIDPs and the child. Returns only the child if it is root. -// -// Example: -// -// Ancestry("a/b/c/d") returns ["a/b/c/d", "a/b/c", "a/b", "a"] -func Ancestry(child string) []string { - ancestry := make([]string, 0, strings.Count(child, "/")+1) - ancestry = append(ancestry, child) - for p := Parent(child); p != "/"; p = Parent(p) { - ancestry = append(ancestry, p) - } - return ancestry -} - -// Valid returns true for valid UIDP values. -// The base segment of a UIDP is 20 hex-encoded bytes (40 characters). This may -// be followed by zero or more parts with 8 hex-encoded bytes (16 characters). -var Valid = regexp.MustCompile(`^[0-9a-f]{40}(?:/[0-9a-f]{16})*$`).MatchString diff --git a/uidp/ancestry_test.go b/uidp/ancestry_test.go deleted file mode 100644 index 5c2eb69d..00000000 --- a/uidp/ancestry_test.go +++ /dev/null @@ -1,177 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package uidp - -import ( - "reflect" - "testing" -) - -func TestAncestorExclusive(t *testing.T) { - tests := []struct { - name string - parent string - child string - want bool - }{{ - name: "direct parent", - parent: "a/b", - child: "a/b/c", - want: true, - }, { - name: "grand parent", - parent: "a", - child: "a/b/c", - want: true, - }, { - name: "self", - parent: "a/b/c", - child: "a/b/c", - want: false, // This should be the main difference from below - }, { - name: "child", - parent: "a/b/c/d", - child: "a/b/c", - want: false, - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - got := IsAncestor(test.parent, test.child) - if got != test.want { - t.Errorf("IsAncestor(%q, %q) = %v, wanted %v", test.parent, test.child, got, test.want) - } - }) - } -} - -func TestAncestorInclusive(t *testing.T) { - tests := []struct { - name string - parent string - child string - want bool - }{{ - name: "direct parent", - parent: "a/b", - child: "a/b/c", - want: true, - }, { - name: "grand parent", - parent: "a", - child: "a/b/c", - want: true, - }, { - name: "self", - parent: "a/b/c", - child: "a/b/c", - want: true, // This should be the main difference from above - }, { - name: "child", - parent: "a/b/c/d", - child: "a/b/c", - want: false, - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - got := IsAncestorOrSelf(test.parent, test.child) - if got != test.want { - t.Errorf("IsAncestor(%q, %q) = %v, wanted %v", test.parent, test.child, got, test.want) - } - }) - } -} - -func TestInRoot(t *testing.T) { - tests := []struct { - id string - want bool - }{ - {"x", true}, - {"xyz", true}, - {"x/y", false}, - {"x/y/z", false}, - } - - for _, test := range tests { - t.Run(test.id, func(t *testing.T) { - got := InRoot(test.id) - if got != test.want { - t.Errorf("InRoot(%q) = %v, wanted %v", test.id, got, test.want) - } - }) - } -} - -func TestParent(t *testing.T) { - tests := []struct { - id string - want string - }{ - {"x", "/"}, - {"xyz", "/"}, - {"x/y", "x"}, - {"x/y/z", "x/y"}, - } - - for _, test := range tests { - t.Run(test.id, func(t *testing.T) { - got := Parent(test.id) - if got != test.want { - t.Errorf("Parent(%q) = %q, wanted %q", test.id, got, test.want) - } - }) - } -} - -func TestParents(t *testing.T) { - tests := []struct { - id string - want []string - }{ - {"x", []string{}}, - {"xyz", []string{}}, - {"x/y", []string{"x"}}, - {"x/y/z", []string{"x/y", "x"}}, - {"", []string{}}, - {"/", []string{}}, - {"//", []string{}}, - } - - for _, test := range tests { - t.Run(test.id, func(t *testing.T) { - got := Parents(test.id) - if !reflect.DeepEqual(got, test.want) { - t.Errorf("Parent(%q) = %q, wanted %q", test.id, got, test.want) - } - }) - } -} - -func TestAncestry(t *testing.T) { - tests := []struct { - id string - want []string - }{ - {"x", []string{"x"}}, - {"xyz", []string{"xyz"}}, - {"x/y", []string{"x/y", "x"}}, - {"x/y/z", []string{"x/y/z", "x/y", "x"}}, - {"", []string{""}}, - {"/", []string{"/"}}, - {"//", []string{"//"}}, - } - - for _, test := range tests { - t.Run(test.id, func(t *testing.T) { - got := Ancestry(test.id) - if !reflect.DeepEqual(got, test.want) { - t.Errorf("Parent(%q) = %q, wanted %q", test.id, got, test.want) - } - }) - } -} diff --git a/uidp/doc.go b/uidp/doc.go deleted file mode 100644 index 97dc9fe8..00000000 --- a/uidp/doc.go +++ /dev/null @@ -1,8 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -// Package uidp contains utilities for reasoning about and manipulating the -// Chainguard IAM "UIDP" (UID Path) concept. -package uidp diff --git a/uidp/uid.go b/uidp/uid.go deleted file mode 100644 index 302034f5..00000000 --- a/uidp/uid.go +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 2021 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package uidp - -import ( - "crypto/rand" - "encoding/hex" - "fmt" -) - -// NOTE: We are using UID over UUID for 2 reasons: -// 1. UUIDs are very large. -// 2. UUIDs are not very random. -// Ref: https://neilmadden.blog/2018/08/30/moving-away-from-uuids/ - -// UID will is used for the primary key for items that must be globally unique. -// - A UID is 20 bytes of random bytes, URL safe hex encoded. -type UID string - -// SUID is be used to form the primary key for items that must be unique within some scoping (non-global). -// - A SUID is 8 random bytes, URL safe hex encoded. -type SUID string - -// UIDP is be used to denote the fully-qualified path for scoped keys. -// - A UIDP will consist of '/' delimited SUID segments with a UID root, following POSIX directory semantics. -// - The "basename" SUID is our key within the scoping of the "dirname" UIDP. -type UIDP string - -func NewUID() UID { - token := make([]byte, 20) - _, _ = rand.Read(token) - return UID(hex.EncodeToString(token)) -} - -func NewSUID() SUID { - token := make([]byte, 8) - _, _ = rand.Read(token) - return SUID(hex.EncodeToString(token)) -} - -func NewUIDP(path UIDP) UIDP { - if len(path) == 0 { - return UIDP(NewUID()) - } - return UIDP(fmt.Sprintf("%s/%s", path, NewSUID())) -} - -func (u UIDP) NewChild() UIDP { - return NewUIDP(u) -} - -func (u UID) String() string { - return string(u) -} - -func (u SUID) String() string { - return string(u) -} - -func (u UIDP) String() string { - return string(u) -} diff --git a/uidp/uid_test.go b/uidp/uid_test.go deleted file mode 100644 index e7f9e540..00000000 --- a/uidp/uid_test.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package uidp - -import "testing" - -func TestUIDPValidity(t *testing.T) { - var uidp UIDP - - for i := 0; i < 5; i++ { - uidp = uidp.NewChild() - - if !Valid(string(uidp)) { - t.Errorf("Invalid UIDP: %s", uidp) - } - } -} diff --git a/validation/aws_account.go b/validation/aws_account.go deleted file mode 100644 index 3a378cb6..00000000 --- a/validation/aws_account.go +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "fmt" - "regexp" -) - -const awsAccountPattern = `^[0-9]{12}$` - -var ( - awsAccountPatternCompiled = regexp.MustCompile(awsAccountPattern) - - // ErrInvalidAWSAccount describes invalid AWS Account IDs by sharing the - // regular expression they must match - ErrInvalidAWSAccount = fmt.Errorf("AWS account ID must match %q", awsAccountPattern) -) - -// ValidateAWSAccount checks an AWS account id is valid. AWS Accounts must be a -// 12 digit number. -func ValidateAWSAccount(id string) error { - if awsAccountPatternCompiled.MatchString(id) { - return nil - } - return ErrInvalidAWSAccount -} diff --git a/validation/aws_account_test.go b/validation/aws_account_test.go deleted file mode 100644 index 19fba577..00000000 --- a/validation/aws_account_test.go +++ /dev/null @@ -1,32 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "testing" -) - -func TestValidateAWSAccount(t *testing.T) { - tests := map[string]struct { - Input string - Expect bool - }{ - "valid": {"123456789012", true}, - "empty": {"", false}, - "letters": {"12345678901a", false}, - "too short": {"123", false}, - "too long": {"1234567890123", false}, - } - - for name, tt := range tests { - t.Run(name, func(t *testing.T) { - got := ValidateAWSAccount(tt.Input) - if (got == nil) != tt.Expect { - t.Errorf("Expected GroupName(`%s`) to return (err == nil) == %v, but got %v", tt.Input, tt.Expect, got) - } - }) - } -} diff --git a/validation/bundles.go b/validation/bundles.go deleted file mode 100644 index d9f3282f..00000000 --- a/validation/bundles.go +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "fmt" - "regexp" -) - -const bundlePattern = `^[a-z]+(:[a-z]+)?$` - -var ( - bundlePatternCompiled = regexp.MustCompile(bundlePattern) - - // ErrInvalidBundles describes invalid bundle(s) by sharing the regular expression - // they must match - ErrInvalidBundles = fmt.Errorf("each bundle item must match %q", bundlePattern) -) - -func ValidateBundles(bundles []string) error { - for _, bundle := range bundles { - if !bundlePatternCompiled.MatchString(bundle) { - return ErrInvalidBundles - } - } - return nil -} diff --git a/validation/bundles_test.go b/validation/bundles_test.go deleted file mode 100644 index 19e35be7..00000000 --- a/validation/bundles_test.go +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "testing" -) - -func TestValidateBundles(t *testing.T) { - tests := map[string]struct { - Input []string - Expect bool - }{ - "valid": {[]string{"boo"}, true}, - "valid colon": {[]string{"bundle:boo", "tag:something"}, true}, - "start with colon": {[]string{":boo"}, false}, - "end with colon": {[]string{"boo:"}, false}, - "multiple colons": {[]string{"boo:haha:ra"}, false}, - "empty": {[]string{""}, false}, - "no slashes": {[]string{"foo/bar"}, false}, - "spaces are not alright": {[]string{"chainguard engineering"}, false}, - "other whitespace is bad": {[]string{"\r\n\tderp"}, false}, - "no uppercase": {[]string{"DERP"}, false}, - } - - for name, tt := range tests { - t.Run(name, func(t *testing.T) { - got := ValidateBundles(tt.Input) - if (got == nil) != tt.Expect { - t.Errorf("Expected Bundles(`%s`) to return (err == nil) == %v, but got %v", tt.Input, tt.Expect, got) - } - }) - } -} diff --git a/validation/name.go b/validation/name.go deleted file mode 100644 index 545ff8d5..00000000 --- a/validation/name.go +++ /dev/null @@ -1,28 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "fmt" - "regexp" -) - -const namePattern = `^[a-z0-9 ._-]{1,}$` - -var ( - namePatternCompiled = regexp.MustCompile(namePattern) - - // ErrInvalidName describes invalid names by sharing the regular expression - // they must match - ErrInvalidName = fmt.Errorf("name must match %q", namePattern) -) - -func ValidateName(name string) error { - if namePatternCompiled.MatchString(name) { - return nil - } - return ErrInvalidName -} diff --git a/validation/name_test.go b/validation/name_test.go deleted file mode 100644 index 05a52f8b..00000000 --- a/validation/name_test.go +++ /dev/null @@ -1,34 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "testing" -) - -func TestValidateName(t *testing.T) { - tests := map[string]struct { - Input string - Expect bool - }{ - "valid": {"boo.foo_-", true}, - "empty": {"", false}, - "no slashes": {"foo/bar", false}, - "spaces are alright": {"chainguard engineering", true}, - "no spaces are alright too": {"chainguarddemo", true}, - "other whitespace is bad": {"\r\n\tderp", false}, - "no uppercase": {"DERP", false}, - } - - for name, tt := range tests { - t.Run(name, func(t *testing.T) { - got := ValidateName(tt.Input) - if (got == nil) != tt.Expect { - t.Errorf("Expected GroupName(`%s`) to return (err == nil) == %v, but got %v", tt.Input, tt.Expect, got) - } - }) - } -} diff --git a/validation/readme.go b/validation/readme.go deleted file mode 100644 index a3a6e609..00000000 --- a/validation/readme.go +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2024 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "fmt" - "html" - "regexp" - "strings" - - "github.com/google/go-cmp/cmp" - "github.com/microcosm-cc/bluemonday" - "github.com/russross/blackfriday/v2" -) - -var ErrUnsafeReadme = fmt.Errorf("readme contained unsafe html content") - -// ValidateReadme validates the contents of a Markdown README.md file. -// If the contents are invalid, a string will be returned containing the -// diff of what the Markdown would look like as HTML if properly sanitized. -func ValidateReadme(readme string) (string, error) { - // Treat empty readme as valid, prevent further processing - if readme == "" { - return "", nil - } - unsafe := readmeToHTML(readme) - safe := sanitizeHTML(unsafe) - // After converting the Markdown to HTML, - // make sure there is no diff after sanitizing it. - // Unescape any encoded HTML tags for proper comparison. - if diff := cmp.Diff(unescapeHTML(unsafe), unescapeHTML(safe)); diff != "" { - return diff, ErrUnsafeReadme - } - return "", nil -} - -func readmeToHTML(rawMarkdown string) string { - s := string(blackfriday.Run([]byte(rawMarkdown))) - // Fix issue where single tags get extra space on conversion (e.g. "
") - s = strings.ReplaceAll(s, " />", "/>") - return s -} - -var bluemondayPolicy = func() *bluemonday.Policy { - p := bluemonday.UGCPolicy() - // Allow fenced code block classes - p = p.AllowAttrs("class").Matching(regexp.MustCompile("^language-[a-zA-Z0-9]+$")).OnElements("code") - // Allow links without ref="nofollow" which are not set automatically on links on markdown conversion - p = p.RequireNoFollowOnLinks(false) - // Allow custom height and width on images - p = p.AllowAttrs("width", "height").OnElements("img") - // Allow HTML comments - p.AllowComments() - return p -}() - -func sanitizeHTML(unsafeHTML string) string { - return bluemondayPolicy.Sanitize(unsafeHTML) -} - -func unescapeHTML(safeHTML string) string { - return html.UnescapeString(safeHTML) -} diff --git a/validation/readme_test.go b/validation/readme_test.go deleted file mode 100644 index 2d860247..00000000 --- a/validation/readme_test.go +++ /dev/null @@ -1,75 +0,0 @@ -/* -Copyright 2024 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "testing" -) - -const ( - safeReadme = ` - -# safe - - - -[click here](./other.md) - - ---- - -Here is some dangerous code inside a code block: - - -` + "```go" + ` -Hello World -` + "```" - - unsafeReadme1 = ` - -# unsafe - - - -[click here](./other.md) - - ---- - -Here is some dangerous code outside a code block: - -Hello World -` - - unsafeReadme2 = ` -# unsafe - -TAKE THAT!!!!!!! - - -` -) - -func TestValidateReadme(t *testing.T) { - tests := map[string]struct { - Input string - Expect bool - }{ - "empty": {"", true}, - "safe": {safeReadme, true}, - "unsafe 1": {unsafeReadme1, false}, - "unsafe 2": {unsafeReadme2, false}, - } - - for name, tt := range tests { - t.Run(name, func(t *testing.T) { - diff, got := ValidateReadme(tt.Input) - if (got == nil) != tt.Expect { - t.Errorf("Expected ValidateReadme(`%s`) to return (err == nil) == %v, but got %v. diff: %s", tt.Input, tt.Expect, got, diff) - } - }) - } -} diff --git a/validation/tag.go b/validation/tag.go deleted file mode 100644 index 79c29594..00000000 --- a/validation/tag.go +++ /dev/null @@ -1,29 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "fmt" - "regexp" -) - -// From https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pulling-manifests -const tagPattern = `^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}$` - -var ( - tagPatternCompiled = regexp.MustCompile(tagPattern) - - // ErrInvalidTag describes invalid tags by sharing the regular expression - // they must match - ErrInvalidTag = fmt.Errorf("tag must match %q", tagPattern) -) - -func ValidateTag(tag string) error { - if tagPatternCompiled.MatchString(tag) { - return nil - } - return ErrInvalidTag -} diff --git a/validation/tag_test.go b/validation/tag_test.go deleted file mode 100644 index 00b8d243..00000000 --- a/validation/tag_test.go +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "testing" -) - -func TestValidateTag(t *testing.T) { - tests := map[string]struct { - Input string - Expect bool - }{ - "valid": {"latest", true}, - "version": {"1.2.3-r1", true}, - "uppercase is ok": {"DERP", true}, - "128 chars is ok": {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", true}, - "129 chars is not ok": {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", false}, - "empty": {"", false}, - "no slashes": {"foo/bar", false}, - "no colons": {"foo:bar", false}, - "no spaces in middle": {"chainguard engineering", false}, - "no leading spaces": {" chainguardengineering", false}, - "no spaces both sides": {" chainguardengineering ", false}, - "no trailing spacess": {"chainguardengineering ", false}, - "other whitespace is bad": {"\r\n\tderp", false}, - } - - for name, tt := range tests { - t.Run(name, func(t *testing.T) { - got := ValidateTag(tt.Input) - if (got == nil) != tt.Expect { - t.Errorf("Expected ValidateTag(`%s`) to return (err == nil) == %v, but got %v", tt.Input, tt.Expect, got) - } - }) - } -} From 4f56141b0de60be7fc847d68b5d8c9680f1b2535 Mon Sep 17 00:00:00 2001 From: Matt Moore Date: Wed, 28 Feb 2024 17:03:00 -0800 Subject: [PATCH 02/41] Export 69c8cc7ed4f53d2f2ef66ef9a73dceebee1b8593 Export: 69c8cc7ed4f53d2f2ef66ef9a73dceebee1b8593 --- .chainguard/source.yaml | 15 + .gitignore | 29 + .golangci.yml | 35 + CODEOWNERS | 1 - LICENSE | 201 + README.md | 52 +- auth/aws/e2e_test.go | 160 + auth/aws/generate.go | 62 + auth/aws/verify.go | 119 + auth/aws/verify_options.go | 83 + auth/context.go | 47 + auth/file.go | 62 + auth/login/html.go | 71 + auth/login/login.go | 80 + auth/login/options.go | 181 + auth/login/options_test.go | 114 + auth/login/orgcheck.go | 43 + auth/login/orgcheck_test.go | 75 + auth/login/server.go | 110 + auth/login/server_test.go | 49 + auth/oidc.go | 148 + auth/token.go | 31 + auth/token/token.go | 174 + auth/token/token_test.go | 481 +++ civil/civil.go | 332 ++ civil/civil_test.go | 547 +++ events/admission/admission.go | 18 + events/admission/namespace.go | 55 + events/extensions.go | 43 + events/generator/generator.go | 32 + events/occurrence.go | 41 + events/policy/policy.go | 46 + events/receiver/receiver.go | 66 + events/registry/registry.go | 91 + events/webhook.go | 14 + go.mod | 155 + go.sum | 534 +++ hack/tools.go | 17 + hack/update-codegen.sh | 19 + hack/update-deps.sh | 14 + hack/verify-golangci-lint.sh | 50 + policy/parse.go | 144 + policy/parse_test.go | 181 + policy/validate.go | 103 + policy/validate_test.go | 194 + proto/annotations/auth.pb.go | 342 ++ proto/annotations/auth.proto | 49 + proto/annotations/doc.go | 11 + proto/annotations/events.pb.go | 258 ++ proto/annotations/events.proto | 29 + proto/capabilities/capabilities.go | 189 + proto/capabilities/capabilities.pb.go | 661 ++++ proto/capabilities/capabilities.proto | 137 + proto/capabilities/capabilities_test.go | 139 + proto/capabilities/doc.go | 9 + proto/capabilities/roles.go | 161 + proto/google/api/annotations.proto | 31 + proto/google/api/field_behavior.proto | 90 + proto/google/api/http.proto | 375 ++ proto/google/api/httpbody.proto | 81 + proto/google/api/resource.proto | 239 ++ .../advisory/v1/advisory.platform.pb.go | 1936 ++++++++++ .../advisory/v1/advisory.platform.pb.gw.go | 256 ++ .../advisory/v1/advisory.platform.proto | 233 ++ .../advisory/v1/advisory.platform_grpc.pb.go | 146 + proto/platform/advisory/v1/clients.go | 81 + proto/platform/advisory/v1/doc.go | 10 + proto/platform/advisory/v1/test/advisory.go | 70 + proto/platform/auth/v1/auth.platform.event.go | 21 + proto/platform/auth/v1/auth.platform.pb.go | 562 +++ proto/platform/auth/v1/auth.platform.pb.gw.go | 237 ++ proto/platform/auth/v1/auth.platform.proto | 111 + .../platform/auth/v1/auth.platform_grpc.pb.go | 147 + proto/platform/auth/v1/doc.go | 10 + proto/platform/auth/v1/test/mock_auth.go | 75 + proto/platform/clients.go | 195 + proto/platform/common/v1/doc.go | 9 + proto/platform/common/v1/uidp.platform.pb.go | 184 + proto/platform/common/v1/uidp.platform.proto | 19 + proto/platform/events/v1/doc.go | 12 + .../events/v1/identities.platform.event.go | 16 + .../events/v1/identities.platform.pb.go | 416 +++ .../events/v1/identities.platform.pb.gw.go | 252 ++ .../events/v1/identities.platform.proto | 97 + .../events/v1/identities.platform_grpc.pb.go | 146 + .../events/v1/subscriptions.platform.event.go | 45 + .../events/v1/subscriptions.platform.pb.go | 510 +++ .../events/v1/subscriptions.platform.pb.gw.go | 389 ++ .../events/v1/subscriptions.platform.proto | 92 + .../v1/subscriptions.platform_grpc.pb.go | 184 + .../v1/account_associations.platform.event.go | 41 + .../v1/account_associations.platform.pb.go | 1120 ++++++ .../v1/account_associations.platform.pb.gw.go | 623 ++++ .../v1/account_associations.platform.proto | 192 + .../account_associations.platform_grpc.pb.go | 259 ++ proto/platform/iam/v1/clients.go | 179 + proto/platform/iam/v1/doc.go | 19 + proto/platform/iam/v1/group.platform.event.go | 38 + proto/platform/iam/v1/group.platform.pb.go | 570 +++ proto/platform/iam/v1/group.platform.pb.gw.go | 506 +++ proto/platform/iam/v1/group.platform.proto | 127 + .../platform/iam/v1/group.platform_grpc.pb.go | 221 ++ .../iam/v1/group_invites.platform.event.go | 48 + .../iam/v1/group_invites.platform.pb.go | 934 +++++ .../iam/v1/group_invites.platform.pb.gw.go | 472 +++ .../iam/v1/group_invites.platform.proto | 165 + .../iam/v1/group_invites.platform_grpc.pb.go | 231 ++ .../iam/v1/identity.platform.event.go | 40 + proto/platform/iam/v1/identity.platform.pb.go | 1357 +++++++ .../iam/v1/identity.platform.pb.gw.go | 591 +++ proto/platform/iam/v1/identity.platform.proto | 251 ++ .../iam/v1/identity.platform_grpc.pb.go | 258 ++ .../v1/identity_providers.platform.event.go | 40 + .../iam/v1/identity_providers.platform.pb.go | 693 ++++ .../v1/identity_providers.platform.pb.gw.go | 506 +++ .../iam/v1/identity_providers.platform.proto | 149 + .../v1/identity_providers.platform_grpc.pb.go | 221 ++ .../iam/v1/policies.platform.event.go | 45 + proto/platform/iam/v1/policies.platform.pb.go | 1027 +++++ .../iam/v1/policies.platform.pb.gw.go | 708 ++++ proto/platform/iam/v1/policies.platform.proto | 208 ++ .../iam/v1/policies.platform_grpc.pb.go | 295 ++ proto/platform/iam/v1/role.platform.event.go | 23 + proto/platform/iam/v1/role.platform.pb.go | 540 +++ proto/platform/iam/v1/role.platform.pb.gw.go | 506 +++ proto/platform/iam/v1/role.platform.proto | 100 + .../platform/iam/v1/role.platform_grpc.pb.go | 221 ++ .../iam/v1/role_binding.platform.event.go | 38 + .../iam/v1/role_binding.platform.pb.go | 687 ++++ .../iam/v1/role_binding.platform.pb.gw.go | 506 +++ .../iam/v1/role_binding.platform.proto | 131 + .../iam/v1/role_binding.platform_grpc.pb.go | 221 ++ proto/platform/iam/v1/sigstore.platform.pb.go | 803 ++++ .../iam/v1/sigstore.platform.pb.gw.go | 506 +++ proto/platform/iam/v1/sigstore.platform.proto | 134 + .../iam/v1/sigstore.platform_grpc.pb.go | 221 ++ .../iam/v1/test/mock_account_accociations.go | 103 + proto/platform/iam/v1/test/mock_client.go | 77 + .../iam/v1/test/mock_deprecatedidentities.go | 42 + proto/platform/iam/v1/test/mock_groups.go | 105 + proto/platform/iam/v1/test/mock_identities.go | 102 + .../iam/v1/test/mock_identity_providers.go | 86 + proto/platform/iam/v1/test/mock_invites.go | 86 + proto/platform/iam/v1/test/mock_policies.go | 118 + .../iam/v1/test/mock_role_bindings.go | 86 + proto/platform/iam/v1/test/mock_roles.go | 86 + proto/platform/iam/v1/test/mock_sigstore.go | 85 + .../iam/v1/test/mock_subscriptions.go | 86 + proto/platform/oidc/v1/clients.go | 101 + proto/platform/oidc/v1/doc.go | 10 + proto/platform/oidc/v1/oidc.platform.pb.go | 459 +++ proto/platform/oidc/v1/oidc.platform.pb.gw.go | 341 ++ proto/platform/oidc/v1/oidc.platform.proto | 64 + .../platform/oidc/v1/oidc.platform_grpc.pb.go | 146 + proto/platform/oidc/v1/test/mock_client.go | 26 + proto/platform/oidc/v1/test/mock_sts.go | 53 + proto/platform/ping/v1/clients.go | 80 + proto/platform/ping/v1/doc.go | 10 + proto/platform/ping/v1/ping.platform.pb.go | 216 ++ proto/platform/ping/v1/ping.platform.pb.gw.go | 153 + proto/platform/ping/v1/ping.platform.proto | 29 + .../platform/ping/v1/ping.platform_grpc.pb.go | 109 + proto/platform/ping/v1/test/ping.go | 52 + proto/platform/registry/v1/clients.go | 81 + proto/platform/registry/v1/doc.go | 10 + .../registry/v1/registry.platform.pb.go | 3295 +++++++++++++++++ .../registry/v1/registry.platform.pb.gw.go | 1406 +++++++ .../registry/v1/registry.platform.proto | 457 +++ .../registry/v1/registry.platform_grpc.pb.go | 518 +++ proto/platform/registry/v1/test/registry.go | 231 ++ .../tenant/v1/attestation.platform.pb.go | 389 ++ .../tenant/v1/attestation.platform.pb.gw.go | 169 + .../tenant/v1/attestation.platform.proto | 63 + .../tenant/v1/attestation.platform_grpc.pb.go | 109 + proto/platform/tenant/v1/clients.go | 164 + .../tenant/v1/cluster.platform.event.go | 45 + .../platform/tenant/v1/cluster.platform.pb.go | 2934 +++++++++++++++ .../tenant/v1/cluster.platform.pb.gw.go | 838 +++++ .../platform/tenant/v1/cluster.platform.proto | 479 +++ .../tenant/v1/cluster.platform_grpc.pb.go | 369 ++ .../platform/tenant/v1/context.platform.pb.go | 876 +++++ .../platform/tenant/v1/context.platform.proto | 119 + .../tenant/v1/context.platform_grpc.pb.go | 109 + proto/platform/tenant/v1/doc.go | 21 + .../tenant/v1/namespace.platform.pb.go | 395 ++ .../tenant/v1/namespace.platform.proto | 61 + .../tenant/v1/namespace.platform_grpc.pb.go | 109 + proto/platform/tenant/v1/node.platform.pb.go | 499 +++ proto/platform/tenant/v1/node.platform.proto | 78 + .../tenant/v1/node.platform_grpc.pb.go | 109 + .../tenant/v1/policy_results.platform.pb.go | 770 ++++ .../v1/policy_results.platform.pb.gw.go | 171 + .../tenant/v1/policy_results.platform.proto | 113 + .../v1/policy_results.platform_grpc.pb.go | 109 + .../platform/tenant/v1/record.platform.pb.go | 1465 ++++++++ .../tenant/v1/record.platform.pb.gw.go | 205 + .../platform/tenant/v1/record.platform.proto | 203 + .../tenant/v1/record.platform_grpc.pb.go | 109 + proto/platform/tenant/v1/risk.platform.pb.go | 947 +++++ .../platform/tenant/v1/risk.platform.pb.gw.go | 171 + proto/platform/tenant/v1/risk.platform.proto | 116 + .../tenant/v1/risk.platform_grpc.pb.go | 109 + proto/platform/tenant/v1/sbom.platform.pb.go | 1058 ++++++ .../platform/tenant/v1/sbom.platform.pb.gw.go | 169 + proto/platform/tenant/v1/sbom.platform.proto | 131 + .../tenant/v1/sbom.platform_grpc.pb.go | 109 + .../tenant/v1/signature.platform.pb.go | 731 ++++ .../tenant/v1/signature.platform.proto | 110 + .../tenant/v1/signature.platform_grpc.pb.go | 109 + .../tenant/v1/test/mock_attestations.go | 38 + proto/platform/tenant/v1/test/mock_client.go | 81 + proto/platform/tenant/v1/test/mock_cluster.go | 150 + .../platform/tenant/v1/test/mock_contexts.go | 38 + .../tenant/v1/test/mock_namespaces.go | 38 + proto/platform/tenant/v1/test/mock_nodes.go | 38 + .../tenant/v1/test/mock_policy_results.go | 38 + proto/platform/tenant/v1/test/mock_records.go | 38 + proto/platform/tenant/v1/test/mock_risks.go | 38 + proto/platform/tenant/v1/test/mock_sboms.go | 38 + .../tenant/v1/test/mock_signatures.go | 38 + proto/platform/tenant/v1/test/mock_vuln.go | 38 + .../platform/tenant/v1/test/mock_workloads.go | 38 + proto/platform/tenant/v1/vuln.platform.pb.go | 1138 ++++++ .../platform/tenant/v1/vuln.platform.pb.gw.go | 171 + proto/platform/tenant/v1/vuln.platform.proto | 162 + .../tenant/v1/vuln.platform_grpc.pb.go | 109 + .../tenant/v1/workload.platform.pb.go | 436 +++ .../tenant/v1/workload.platform.proto | 71 + .../tenant/v1/workload.platform_grpc.pb.go | 109 + proto/platform/test/mock_clients.go | 86 + proto/platform/test/mock_server.go | 45 + sts/sts.go | 314 ++ sts/sts_test.go | 424 +++ sts/tokensource.go | 44 + uidp/ancestry.go | 75 + uidp/ancestry_test.go | 177 + uidp/doc.go | 8 + uidp/uid.go | 65 + uidp/uid_test.go | 20 + validation/aws_account.go | 30 + validation/aws_account_test.go | 32 + validation/bundles.go | 30 + validation/bundles_test.go | 37 + validation/enforcer_options.go | 27 + validation/name.go | 28 + validation/name_test.go | 34 + validation/readme.go | 66 + validation/readme_test.go | 75 + validation/tag.go | 29 + validation/tag_test.go | 40 + 250 files changed, 59411 insertions(+), 21 deletions(-) create mode 100644 .chainguard/source.yaml create mode 100644 .gitignore create mode 100644 .golangci.yml delete mode 100644 CODEOWNERS create mode 100644 LICENSE create mode 100644 auth/aws/e2e_test.go create mode 100644 auth/aws/generate.go create mode 100644 auth/aws/verify.go create mode 100644 auth/aws/verify_options.go create mode 100644 auth/context.go create mode 100644 auth/file.go create mode 100644 auth/login/html.go create mode 100644 auth/login/login.go create mode 100644 auth/login/options.go create mode 100644 auth/login/options_test.go create mode 100644 auth/login/orgcheck.go create mode 100644 auth/login/orgcheck_test.go create mode 100644 auth/login/server.go create mode 100644 auth/login/server_test.go create mode 100644 auth/oidc.go create mode 100644 auth/token.go create mode 100644 auth/token/token.go create mode 100644 auth/token/token_test.go create mode 100644 civil/civil.go create mode 100644 civil/civil_test.go create mode 100644 events/admission/admission.go create mode 100644 events/admission/namespace.go create mode 100644 events/extensions.go create mode 100644 events/generator/generator.go create mode 100644 events/occurrence.go create mode 100644 events/policy/policy.go create mode 100644 events/receiver/receiver.go create mode 100644 events/registry/registry.go create mode 100644 events/webhook.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 hack/tools.go create mode 100755 hack/update-codegen.sh create mode 100755 hack/update-deps.sh create mode 100755 hack/verify-golangci-lint.sh create mode 100644 policy/parse.go create mode 100644 policy/parse_test.go create mode 100644 policy/validate.go create mode 100644 policy/validate_test.go create mode 100644 proto/annotations/auth.pb.go create mode 100644 proto/annotations/auth.proto create mode 100644 proto/annotations/doc.go create mode 100644 proto/annotations/events.pb.go create mode 100644 proto/annotations/events.proto create mode 100644 proto/capabilities/capabilities.go create mode 100644 proto/capabilities/capabilities.pb.go create mode 100644 proto/capabilities/capabilities.proto create mode 100644 proto/capabilities/capabilities_test.go create mode 100644 proto/capabilities/doc.go create mode 100644 proto/capabilities/roles.go create mode 100644 proto/google/api/annotations.proto create mode 100644 proto/google/api/field_behavior.proto create mode 100644 proto/google/api/http.proto create mode 100644 proto/google/api/httpbody.proto create mode 100644 proto/google/api/resource.proto create mode 100644 proto/platform/advisory/v1/advisory.platform.pb.go create mode 100644 proto/platform/advisory/v1/advisory.platform.pb.gw.go create mode 100644 proto/platform/advisory/v1/advisory.platform.proto create mode 100644 proto/platform/advisory/v1/advisory.platform_grpc.pb.go create mode 100644 proto/platform/advisory/v1/clients.go create mode 100644 proto/platform/advisory/v1/doc.go create mode 100644 proto/platform/advisory/v1/test/advisory.go create mode 100644 proto/platform/auth/v1/auth.platform.event.go create mode 100644 proto/platform/auth/v1/auth.platform.pb.go create mode 100644 proto/platform/auth/v1/auth.platform.pb.gw.go create mode 100644 proto/platform/auth/v1/auth.platform.proto create mode 100644 proto/platform/auth/v1/auth.platform_grpc.pb.go create mode 100644 proto/platform/auth/v1/doc.go create mode 100644 proto/platform/auth/v1/test/mock_auth.go create mode 100644 proto/platform/clients.go create mode 100644 proto/platform/common/v1/doc.go create mode 100644 proto/platform/common/v1/uidp.platform.pb.go create mode 100644 proto/platform/common/v1/uidp.platform.proto create mode 100644 proto/platform/events/v1/doc.go create mode 100644 proto/platform/events/v1/identities.platform.event.go create mode 100644 proto/platform/events/v1/identities.platform.pb.go create mode 100644 proto/platform/events/v1/identities.platform.pb.gw.go create mode 100644 proto/platform/events/v1/identities.platform.proto create mode 100644 proto/platform/events/v1/identities.platform_grpc.pb.go create mode 100644 proto/platform/events/v1/subscriptions.platform.event.go create mode 100644 proto/platform/events/v1/subscriptions.platform.pb.go create mode 100644 proto/platform/events/v1/subscriptions.platform.pb.gw.go create mode 100644 proto/platform/events/v1/subscriptions.platform.proto create mode 100644 proto/platform/events/v1/subscriptions.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/account_associations.platform.event.go create mode 100644 proto/platform/iam/v1/account_associations.platform.pb.go create mode 100644 proto/platform/iam/v1/account_associations.platform.pb.gw.go create mode 100644 proto/platform/iam/v1/account_associations.platform.proto create mode 100644 proto/platform/iam/v1/account_associations.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/clients.go create mode 100644 proto/platform/iam/v1/doc.go create mode 100644 proto/platform/iam/v1/group.platform.event.go create mode 100644 proto/platform/iam/v1/group.platform.pb.go create mode 100644 proto/platform/iam/v1/group.platform.pb.gw.go create mode 100644 proto/platform/iam/v1/group.platform.proto create mode 100644 proto/platform/iam/v1/group.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/group_invites.platform.event.go create mode 100644 proto/platform/iam/v1/group_invites.platform.pb.go create mode 100644 proto/platform/iam/v1/group_invites.platform.pb.gw.go create mode 100644 proto/platform/iam/v1/group_invites.platform.proto create mode 100644 proto/platform/iam/v1/group_invites.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/identity.platform.event.go create mode 100644 proto/platform/iam/v1/identity.platform.pb.go create mode 100644 proto/platform/iam/v1/identity.platform.pb.gw.go create mode 100644 proto/platform/iam/v1/identity.platform.proto create mode 100644 proto/platform/iam/v1/identity.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/identity_providers.platform.event.go create mode 100644 proto/platform/iam/v1/identity_providers.platform.pb.go create mode 100644 proto/platform/iam/v1/identity_providers.platform.pb.gw.go create mode 100644 proto/platform/iam/v1/identity_providers.platform.proto create mode 100644 proto/platform/iam/v1/identity_providers.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/policies.platform.event.go create mode 100644 proto/platform/iam/v1/policies.platform.pb.go create mode 100644 proto/platform/iam/v1/policies.platform.pb.gw.go create mode 100644 proto/platform/iam/v1/policies.platform.proto create mode 100644 proto/platform/iam/v1/policies.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/role.platform.event.go create mode 100644 proto/platform/iam/v1/role.platform.pb.go create mode 100644 proto/platform/iam/v1/role.platform.pb.gw.go create mode 100644 proto/platform/iam/v1/role.platform.proto create mode 100644 proto/platform/iam/v1/role.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/role_binding.platform.event.go create mode 100644 proto/platform/iam/v1/role_binding.platform.pb.go create mode 100644 proto/platform/iam/v1/role_binding.platform.pb.gw.go create mode 100644 proto/platform/iam/v1/role_binding.platform.proto create mode 100644 proto/platform/iam/v1/role_binding.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/sigstore.platform.pb.go create mode 100644 proto/platform/iam/v1/sigstore.platform.pb.gw.go create mode 100644 proto/platform/iam/v1/sigstore.platform.proto create mode 100644 proto/platform/iam/v1/sigstore.platform_grpc.pb.go create mode 100644 proto/platform/iam/v1/test/mock_account_accociations.go create mode 100644 proto/platform/iam/v1/test/mock_client.go create mode 100644 proto/platform/iam/v1/test/mock_deprecatedidentities.go create mode 100644 proto/platform/iam/v1/test/mock_groups.go create mode 100644 proto/platform/iam/v1/test/mock_identities.go create mode 100644 proto/platform/iam/v1/test/mock_identity_providers.go create mode 100644 proto/platform/iam/v1/test/mock_invites.go create mode 100644 proto/platform/iam/v1/test/mock_policies.go create mode 100644 proto/platform/iam/v1/test/mock_role_bindings.go create mode 100644 proto/platform/iam/v1/test/mock_roles.go create mode 100644 proto/platform/iam/v1/test/mock_sigstore.go create mode 100644 proto/platform/iam/v1/test/mock_subscriptions.go create mode 100644 proto/platform/oidc/v1/clients.go create mode 100644 proto/platform/oidc/v1/doc.go create mode 100644 proto/platform/oidc/v1/oidc.platform.pb.go create mode 100644 proto/platform/oidc/v1/oidc.platform.pb.gw.go create mode 100644 proto/platform/oidc/v1/oidc.platform.proto create mode 100644 proto/platform/oidc/v1/oidc.platform_grpc.pb.go create mode 100644 proto/platform/oidc/v1/test/mock_client.go create mode 100644 proto/platform/oidc/v1/test/mock_sts.go create mode 100644 proto/platform/ping/v1/clients.go create mode 100644 proto/platform/ping/v1/doc.go create mode 100644 proto/platform/ping/v1/ping.platform.pb.go create mode 100644 proto/platform/ping/v1/ping.platform.pb.gw.go create mode 100644 proto/platform/ping/v1/ping.platform.proto create mode 100644 proto/platform/ping/v1/ping.platform_grpc.pb.go create mode 100644 proto/platform/ping/v1/test/ping.go create mode 100644 proto/platform/registry/v1/clients.go create mode 100644 proto/platform/registry/v1/doc.go create mode 100644 proto/platform/registry/v1/registry.platform.pb.go create mode 100644 proto/platform/registry/v1/registry.platform.pb.gw.go create mode 100644 proto/platform/registry/v1/registry.platform.proto create mode 100644 proto/platform/registry/v1/registry.platform_grpc.pb.go create mode 100644 proto/platform/registry/v1/test/registry.go create mode 100644 proto/platform/tenant/v1/attestation.platform.pb.go create mode 100644 proto/platform/tenant/v1/attestation.platform.pb.gw.go create mode 100644 proto/platform/tenant/v1/attestation.platform.proto create mode 100644 proto/platform/tenant/v1/attestation.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/clients.go create mode 100644 proto/platform/tenant/v1/cluster.platform.event.go create mode 100644 proto/platform/tenant/v1/cluster.platform.pb.go create mode 100644 proto/platform/tenant/v1/cluster.platform.pb.gw.go create mode 100644 proto/platform/tenant/v1/cluster.platform.proto create mode 100644 proto/platform/tenant/v1/cluster.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/context.platform.pb.go create mode 100644 proto/platform/tenant/v1/context.platform.proto create mode 100644 proto/platform/tenant/v1/context.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/doc.go create mode 100644 proto/platform/tenant/v1/namespace.platform.pb.go create mode 100644 proto/platform/tenant/v1/namespace.platform.proto create mode 100644 proto/platform/tenant/v1/namespace.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/node.platform.pb.go create mode 100644 proto/platform/tenant/v1/node.platform.proto create mode 100644 proto/platform/tenant/v1/node.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/policy_results.platform.pb.go create mode 100644 proto/platform/tenant/v1/policy_results.platform.pb.gw.go create mode 100644 proto/platform/tenant/v1/policy_results.platform.proto create mode 100644 proto/platform/tenant/v1/policy_results.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/record.platform.pb.go create mode 100644 proto/platform/tenant/v1/record.platform.pb.gw.go create mode 100644 proto/platform/tenant/v1/record.platform.proto create mode 100644 proto/platform/tenant/v1/record.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/risk.platform.pb.go create mode 100644 proto/platform/tenant/v1/risk.platform.pb.gw.go create mode 100644 proto/platform/tenant/v1/risk.platform.proto create mode 100644 proto/platform/tenant/v1/risk.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/sbom.platform.pb.go create mode 100644 proto/platform/tenant/v1/sbom.platform.pb.gw.go create mode 100644 proto/platform/tenant/v1/sbom.platform.proto create mode 100644 proto/platform/tenant/v1/sbom.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/signature.platform.pb.go create mode 100644 proto/platform/tenant/v1/signature.platform.proto create mode 100644 proto/platform/tenant/v1/signature.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/test/mock_attestations.go create mode 100644 proto/platform/tenant/v1/test/mock_client.go create mode 100644 proto/platform/tenant/v1/test/mock_cluster.go create mode 100644 proto/platform/tenant/v1/test/mock_contexts.go create mode 100644 proto/platform/tenant/v1/test/mock_namespaces.go create mode 100644 proto/platform/tenant/v1/test/mock_nodes.go create mode 100644 proto/platform/tenant/v1/test/mock_policy_results.go create mode 100644 proto/platform/tenant/v1/test/mock_records.go create mode 100644 proto/platform/tenant/v1/test/mock_risks.go create mode 100644 proto/platform/tenant/v1/test/mock_sboms.go create mode 100644 proto/platform/tenant/v1/test/mock_signatures.go create mode 100644 proto/platform/tenant/v1/test/mock_vuln.go create mode 100644 proto/platform/tenant/v1/test/mock_workloads.go create mode 100644 proto/platform/tenant/v1/vuln.platform.pb.go create mode 100644 proto/platform/tenant/v1/vuln.platform.pb.gw.go create mode 100644 proto/platform/tenant/v1/vuln.platform.proto create mode 100644 proto/platform/tenant/v1/vuln.platform_grpc.pb.go create mode 100644 proto/platform/tenant/v1/workload.platform.pb.go create mode 100644 proto/platform/tenant/v1/workload.platform.proto create mode 100644 proto/platform/tenant/v1/workload.platform_grpc.pb.go create mode 100644 proto/platform/test/mock_clients.go create mode 100644 proto/platform/test/mock_server.go create mode 100644 sts/sts.go create mode 100644 sts/sts_test.go create mode 100644 sts/tokensource.go create mode 100644 uidp/ancestry.go create mode 100644 uidp/ancestry_test.go create mode 100644 uidp/doc.go create mode 100644 uidp/uid.go create mode 100644 uidp/uid_test.go create mode 100644 validation/aws_account.go create mode 100644 validation/aws_account_test.go create mode 100644 validation/bundles.go create mode 100644 validation/bundles_test.go create mode 100644 validation/enforcer_options.go create mode 100644 validation/name.go create mode 100644 validation/name_test.go create mode 100644 validation/readme.go create mode 100644 validation/readme_test.go create mode 100644 validation/tag.go create mode 100644 validation/tag_test.go diff --git a/.chainguard/source.yaml b/.chainguard/source.yaml new file mode 100644 index 00000000..4322b525 --- /dev/null +++ b/.chainguard/source.yaml @@ -0,0 +1,15 @@ +# Copyright 2023 Chainguard, Inc. +# SPDX-License-Identifier: Apache-2.0 + +spec: + authorities: + - keyless: + url: https://fulcio.sigstore.dev + identities: + - subjectRegExp: .+@chainguard.dev$ + issuer: https://accounts.google.com + ctlog: + url: https://rekor.sigstore.dev + - key: + # Allow commits signed by Github (merge commits) + kms: https://github.com/web-flow.gpg diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1590cdc0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +# Vim swap files +*.swp + +**/third_party/VENDOR-LICENSE/LICENSE +**/third_party/VENDOR-LICENSE/vendor/golang.org/x/ +**/third_party/VENDOR-LICENSE/golang.org/x/ + +**/.idea/ + +**/.vscode/ + +**/.DS_Store + +# Generated by CI +/**/gha-creds*.json + +# Generated openapi schemas +/proto/**/*.swagger.json +/proto/**/*.swagger.yaml + +# SQLite +*.db + +# Local dev +**/.ko.yaml.orig +**/.ko.yaml.tmp + +# Ignore generated credentials from google-github-actions/auth +gha-creds-*.json diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..41279d73 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,35 @@ +# Copyright 2023 Chainguard, Inc. +# SPDX-License-Identifier: Apache-2.0 + +linters: + enable: + - asciicheck + - unused + - errcheck + - errorlint + - gofmt + - goimports + - gosec + - gocritic + - importas + - prealloc + - revive + - misspell + - stylecheck + - tparallel + - unconvert + - unparam + - whitespace +output: + uniq-by-line: false +issues: + exclude-rules: + - path: _test\.go + linters: + - errcheck + - gosec + max-issues-per-linter: 0 + max-same-issues: 0 +run: + issues-exit-code: 1 + timeout: 10m diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index 4066d21e..00000000 --- a/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -@cmdpdx diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index fe1318c4..251625f5 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,34 @@ # SDK -### The SDK has moved to a public repo at [github.com/chainguard-dev/sdk](https://github.com/chainguard-dev/sdk)! - -For guidance working with the SDK, post questions to -[#eng-squad-experience](https://chainguard-dev.slack.com/archives/C03JLFATBST) in Slack. - -## Recommended workflow for making SDK changes - -The workflow will be different since changes to SDK are not immediately available in `mono`. This recommended workflow -is still a work in progress and subject to change as we discover new pain points in the process. - -1. Determine if your change is appropriate for `chainguard.dev/sdk` (i.e. is it okay to be public), or would -`mono/api-internal` be a better fit? -2. Make changes to your local copy of `chainguard.dev/sdk`. If you are developing something in `mono` that relies -on those changes, it may be helpful to add a temporary `replace chainguard.dev/sdk => [path to your local SDK repo]` -in the relevant `go.mod` for faster iteration. -3. Push `chainguard.dev/sdk` changes and open a PR in [github.com/chainguard-dev/sdk](https://github.com/chainguard-dev/sdk) -and post in [#eng-squad-experience](https://chainguard-dev.slack.com/archives/C03JLFATBST). -or tag relevant reviewers. -4. Cut a new release, update necessary `go.mod` of dependencies. The release cadence for SDK is still TBD, at the moment -ad hoc releases as necessary are fine. If you're unsure, ask in [#eng-squad-experience](https://chainguard-dev.slack.com/archives/C03JLFATBST). +This repository contains the public [gRPC](https://grpc.io/) protos supporting +our services and packages to ease integration with the Chainguard platform. + +## Updating `*.proto` files + +After updating a `*.proto` you'll need to update the corresponding generated go +code. + +```shell +./hack/update-codegen.sh +``` + +### Prerequisites + +Install `protoc`: https://grpc.io/docs/protoc-installation/ + +Example for MacOS: + +```shell +brew install protobuf +``` + +We currently require `protoc` v21.12. + +Install `protoc` codegen dependencies: + +```shell +go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1 +go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 +go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.10.0 +go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.10.0 +``` diff --git a/auth/aws/e2e_test.go b/auth/aws/e2e_test.go new file mode 100644 index 00000000..98482b01 --- /dev/null +++ b/auth/aws/e2e_test.go @@ -0,0 +1,160 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package aws + +import ( + "context" + "fmt" + "net/http" + "net/http/httptest" + "testing" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/google/go-cmp/cmp" + "k8s.io/apimachinery/pkg/util/sets" +) + +func epochTime() time.Time { + return time.Unix(0, 0) +} + +func TestGenerateToken(t *testing.T) { + timeNow = epochTime + + var creds = aws.Credentials{AccessKeyID: "AKID", SecretAccessKey: "SECRET", SessionToken: "SESSION"} + validToken, err := GenerateToken(context.Background(), creds, "aud", "identity") + if err != nil { + t.Fatal(err) + } + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/good": + fmt.Fprintf(w, `{ + "GetCallerIdentityResponse": { + "GetCallerIdentityResult": { + "UserId": "userid", + "Account": "123456789012", + "Arn": "arn" + } + } + }`) + case "/reject": + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, "go away") + } + })) + + tests := map[string]struct { + audience string + identity string + timestamp time.Time + stsURL string + token string + wantErr error + }{ + "happy path": { + audience: "aud", + identity: "identity", + stsURL: ts.URL + "/good", + timestamp: time.Unix(0, 0), + token: validToken, + wantErr: nil, + }, + "audience mismatch": { + audience: "bad audience", + identity: "identity", + stsURL: ts.URL + "/good", + timestamp: time.Unix(0, 0), + token: validToken, + wantErr: ErrInvalidAudience, + }, + "identity mismatch": { + audience: "aud", + identity: "identity is wrong", + stsURL: ts.URL + "/good", + timestamp: time.Unix(0, 0), + token: validToken, + wantErr: ErrInvalidIdentity, + }, + "expired token": { + audience: "aud", + identity: "identity", + stsURL: ts.URL + "/good", + timestamp: time.Unix(0, 0).Add(16 * time.Minute), + token: validToken, + wantErr: ErrTokenExpired, + }, + "no identity set": { + audience: "aud", + identity: "", + stsURL: ts.URL + "/good", + timestamp: time.Unix(0, 0), + token: validToken, + wantErr: ErrInvalidVerificationConfiguration, + }, + "bad token encoding": { + audience: "aud", + identity: "identity", + stsURL: ts.URL + "/good", + timestamp: time.Unix(0, 0), + token: "no-base64-encoded", + wantErr: ErrInvalidEncoding, + }, + "base64 encoded but not even an http request": { + audience: "aud", + identity: "identity", + stsURL: ts.URL + "/good", + timestamp: time.Unix(0, 0), + token: "bm90IGFuIGh0dHAgcmVxdWVzdA==", // echo -n "not an http request" | base64 + wantErr: ErrInvalidEncoding, + }, + "bad sts URL": { + audience: "aud", + identity: "identity", + timestamp: time.Unix(0, 0), + token: validToken, + stsURL: "\t\n", + wantErr: ErrInvalidVerificationConfiguration, + }, + "rejected token": { + audience: "aud", + identity: "identity", + timestamp: time.Unix(0, 0), + token: validToken, + stsURL: ts.URL + "/reject", + wantErr: ErrTokenRejected, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + gotClaims, err := VerifyToken( + context.Background(), + test.token, + WithAudience(sets.New(test.audience)), + WithIdentity(test.identity), + withSTSURL(test.stsURL), + withTimestamp(test.timestamp)) + if err != test.wantErr { //nolint:errorlint + t.Errorf("received error %T and wanted %T", err, test.wantErr) + } + if err != nil { + return + } + + expectedClaims := &VerifiedClaims{ + UserID: "userid", + Account: "123456789012", + Arn: "arn", + } + if diff := cmp.Diff(gotClaims, expectedClaims); diff != "" { + t.Errorf("got different claims than expected diff = %s", diff) + } + }) + } +} diff --git a/auth/aws/generate.go b/auth/aws/generate.go new file mode 100644 index 00000000..5bfcef03 --- /dev/null +++ b/auth/aws/generate.go @@ -0,0 +1,62 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package aws + +import ( + "bytes" + "context" + "encoding/base64" + "fmt" + "net/http" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4" +) + +var timeNow = time.Now + +const ( + audHeader = `Chainguard-Audience` + idHeader = `Chainguard-Identity` +) + +// GenerateToken creates token using the supplied AWS credentials that can prove the user's AWS identity. Audience and identity are +// the Chainguard STS url (e.g https://issuer.enforce.dev) and the UID of the Chainguard assumable identity to assume via STS. +func GenerateToken(ctx context.Context, creds aws.Credentials, audience, identity string) (string, error) { + req, err := http.NewRequest("POST", "https://sts.amazonaws.com", nil) + if err != nil { + return "", fmt.Errorf("failed to create new HTTP request: %w", err) + } + + req.URL.Path = "/" + req.URL.RawQuery = "Action=GetCallerIdentity&Version=2011-06-15" + req.Header.Add("Accept", "application/json") + req.Header.Add(audHeader, audience) + req.Header.Add(idHeader, identity) + + const ( + // hashInit is the sha256 hash of an empty buffer, hex encoded. + hashInit = `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855` //nolint:gosec + + // STS service details for signing + svc = `sts` + region = `us-east-1` + ) + + err = v4.NewSigner().SignHTTP(ctx, creds, req, hashInit, svc, region, timeNow()) + if err != nil { + return "", fmt.Errorf("failed to sign GetCallerIdentity request with AWS credentials: %w", err) + } + + var b bytes.Buffer + err = req.Write(&b) + if err != nil { + return "", fmt.Errorf("failed to serialize GetCallerIdentity HTTP request to buffer: %w", err) + } + + return base64.URLEncoding.EncodeToString(b.Bytes()), nil +} diff --git a/auth/aws/verify.go b/auth/aws/verify.go new file mode 100644 index 00000000..2abca3ee --- /dev/null +++ b/auth/aws/verify.go @@ -0,0 +1,119 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package aws + +import ( + "bufio" + "bytes" + "context" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "time" + + "github.com/chainguard-dev/clog" +) + +var ( + ErrTokenRejected = errors.New("token rejected by AWS STS endpoint") + ErrTokenExpired = errors.New("token expired") + ErrInvalidAudience = errors.New("audience header in token does not match expected audience") + ErrInvalidIdentity = errors.New("identity header in token does not match expected identity") + ErrInvalidEncoding = errors.New("invalid token encoding") + ErrInvalidVerificationConfiguration = errors.New("verifcation was incorrectly configured") +) + +type VerifiedClaims struct { + UserID string `json:"UserId"` + Arn string `json:"Arn"` + Account string `json:"Account"` +} + +func VerifyToken(ctx context.Context, token string, opts ...VerifyOption) (*VerifiedClaims, error) { + conf, err := newConfigFromOptions(opts...) + if err != nil { + clog.FromContext(ctx).Errorf("invalid verification configuration: %v", err) + return nil, ErrInvalidVerificationConfiguration + } + + var req *http.Request + { + decoded, err := base64.URLEncoding.DecodeString(token) + if err != nil { + return nil, ErrInvalidEncoding + } + r := bufio.NewReader(bytes.NewReader(decoded)) + req, err = http.ReadRequest(r) + if err != nil { + return nil, ErrInvalidEncoding + } + + // NB: If RequestURI is set on an outbound http.Request the client will error. This field + // is set because of how we serial and then parse the request so we need to unset it here. + req.RequestURI = "" + req.URL, err = url.Parse(conf.stsURL) + if err != nil { + clog.FromContext(ctx).With("sts_url", conf.stsURL).Errorf("invalid verification configuration. invalid sts url: %v", err) + return nil, ErrInvalidVerificationConfiguration + } + } + + if got := req.Header.Get(audHeader); !conf.allowedAudiences.Has(got) { + clog.FromContext(ctx).With("received", got).Warn("verification failed with audience mismatch") + return nil, ErrInvalidAudience + } + if got := req.Header.Get(idHeader); got != conf.identity { + clog.FromContext(ctx).With("wanted", conf.identity, "received", got).Warn("verification failed with identity mismatch") + return nil, ErrInvalidIdentity + } + + timestamp, err := time.Parse("20060102T150405Z", req.Header.Get("X-Amz-Date")) + if err != nil { + clog.FromContext(ctx).Warnf("verification failed because of a poorly formatted x-amz-date header format: %v", err) + return nil, ErrInvalidEncoding + } + expiry, now := timestamp.Add(15*time.Minute), conf.time() + if expiry.Before(now) { + // According to AWS docs + // > The signed portions (using AWS Signatures) of requests are valid within 15 minutes of the timestamp in the request. + // If the signature timestamp is already older than 15 minutes the token is expired and we reject it. + // c.f https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html + clog.FromContext(ctx).Error("verification failed because of expired token") + return nil, ErrTokenExpired + } + + resp, err := http.DefaultClient.Do(req.WithContext(ctx)) + if err != nil { + clog.FromContext(ctx).Errorf("verification failed because of failure to make AWS STS request: %v", err) + return nil, fmt.Errorf("failed to reach AWS STS endpoint: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("failed to read response body from AWS STS endpoint: %w", err) + } + clog.FromContext(ctx).With("response_code", resp.StatusCode, "response", string(body)).Error("verification failed because it was rejected by AWS STS endpoint") + return nil, ErrTokenRejected + } + + var response struct { + GetCallerIdentityResponse struct { + GetCallerIdentityResult VerifiedClaims + } + } + if err := json.NewDecoder(resp.Body).Decode(&response); err != nil { + clog.FromContext(ctx).Errorf("verification failed because json parsing err in response: %v", err) + return nil, fmt.Errorf("failed to parse json from AWS STS response %w", err) + } + + return &response.GetCallerIdentityResponse.GetCallerIdentityResult, nil +} diff --git a/auth/aws/verify_options.go b/auth/aws/verify_options.go new file mode 100644 index 00000000..2646bafd --- /dev/null +++ b/auth/aws/verify_options.go @@ -0,0 +1,83 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package aws + +import ( + "errors" + "time" + + "k8s.io/apimachinery/pkg/util/sets" +) + +type verifyConf struct { + allowedAudiences sets.Set[string] + identity string + + time func() time.Time + stsURL string +} + +func newDefaultConfig() *verifyConf { + return &verifyConf{ + allowedAudiences: sets.New("https://issuer.enforce.dev"), + stsURL: "https://sts.amazonaws.com/?Action=GetCallerIdentity&Version=2011-06-15", + time: time.Now, + } +} + +func newConfigFromOptions(opts ...VerifyOption) (*verifyConf, error) { + conf := newDefaultConfig() + for _, o := range opts { + o(conf) + } + if err := conf.valid(); err != nil { + return nil, err + } + return conf, nil +} + +func (c *verifyConf) valid() error { + if c.identity == "" { + return errors.New("must specify assume identity to verify") + } + if c.allowedAudiences.Len() == 0 { + return errors.New("must specify audience to verify") + } + if c.stsURL == "" { + return errors.New("must specify AWS STS endpoint url") + } + return nil +} + +type VerifyOption func(*verifyConf) + +func WithAudience(aud sets.Set[string]) VerifyOption { + return func(c *verifyConf) { + c.allowedAudiences = aud + } +} + +func WithIdentity(id string) VerifyOption { + return func(c *verifyConf) { + c.identity = id + } +} + +// Unexported testing options + +func withSTSURL(url string) VerifyOption { + return func(c *verifyConf) { + c.stsURL = url + } +} + +func withTimestamp(t time.Time) VerifyOption { + return func(c *verifyConf) { + c.time = func() time.Time { + return t + } + } +} diff --git a/auth/context.go b/auth/context.go new file mode 100644 index 00000000..c5d909ee --- /dev/null +++ b/auth/context.go @@ -0,0 +1,47 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package auth + +import ( + "context" + + "google.golang.org/grpc/credentials" +) + +type contextAuth struct { + secure bool +} + +// The key to associate token with context. +type tokenKey struct{} + +var _ credentials.PerRPCCredentials = (*contextAuth)(nil) + +// GetRequestMetadata implements credentials.PerRPCCredentials +func (ta *contextAuth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { //nolint: revive + return map[string]string{ + "Authorization": GetToken(ctx), + }, nil +} + +// RequireTransportSecurity implements credentials.PerRPCCredentials +func (ta *contextAuth) RequireTransportSecurity() bool { + return ta.secure +} + +// WithToken associates the token with the returned context. +func WithToken(ctx context.Context, authz string) context.Context { + return context.WithValue(ctx, tokenKey{}, authz) +} + +// GetToken fetches the token from the context. +func GetToken(ctx context.Context) string { + v := ctx.Value(tokenKey{}) + if v == nil { + return "" + } + return v.(string) +} diff --git a/auth/file.go b/auth/file.go new file mode 100644 index 00000000..bfa848dc --- /dev/null +++ b/auth/file.go @@ -0,0 +1,62 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package auth + +import ( + "context" + "os" + "sync" + "time" + + "github.com/chainguard-dev/clog" + "google.golang.org/grpc/credentials" +) + +type fileAuth struct { + file string + secure bool + + m sync.Mutex + lastUpdated time.Time + cache []byte +} + +var _ credentials.PerRPCCredentials = (*fileAuth)(nil) + +// GetRequestMetadata implements credentials.PerRPCCredentials +func (fa *fileAuth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { //nolint: revive + fa.m.Lock() + defer fa.m.Unlock() + + // According to https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ + // The kubelet proactively rotates the token if it is older than 80% of + // its total TTL, or if the token is older than 24 hours. + // We use the minimum lifetime (10m) so the nearest a token should get to + // expiration before it is refreshed is 2 minutes. Use 1 minute to give + // us wiggle room, but we should have 2 minutes to validate the token. + if time.Since(fa.lastUpdated) < time.Minute { + clog.FromContext(ctx).Infof("Using cached token, last refreshed %v", fa.lastUpdated) + return map[string]string{ + "Authorization": string(fa.cache), + }, nil + } + + b, err := os.ReadFile(fa.file) + if err != nil { + return nil, err + } + fa.cache = b + fa.lastUpdated = time.Now() + clog.FromContext(ctx).Info("Using fresh token.") + return map[string]string{ + "Authorization": string(b), + }, nil +} + +// RequireTransportSecurity implements credentials.PerRPCCredentials +func (fa *fileAuth) RequireTransportSecurity() bool { + return fa.secure +} diff --git a/auth/login/html.go b/auth/login/html.go new file mode 100644 index 00000000..0659f5dc --- /dev/null +++ b/auth/login/html.go @@ -0,0 +1,71 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package login + +var ( + HTMLAuthSuccessful = ` + + + Chainguard Authentication + + + + + + + + + + +
+
+ + authentication successful! +
+
+ You may now close + this page or visit: + this page. +
+ +
+ + +` +) diff --git a/auth/login/login.go b/auth/login/login.go new file mode 100644 index 00000000..256f64dd --- /dev/null +++ b/auth/login/login.go @@ -0,0 +1,80 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package login implements client login functionality shared between various +// clients +package login + +import ( + "context" + "fmt" + "net/url" + "os" + "strings" + + "github.com/pkg/browser" +) + +func Login(ctx context.Context, opts ...Option) (token string, refreshToken string, err error) { + conf, err := newConfigFromOptions(opts...) + if err != nil { + return "", "", err + } + + // Start new token server on a random available localhost port + s, err := newServer(ctx) + if err != nil { + return "", "", err + } + defer s.Close() + + params := make(url.Values) + params.Set("exit", "redirect") + params.Set("redirect", s.URL()) + if conf.IDP != "" { + params.Set("idp_id", conf.IDP) + } + if conf.OrgName != "" { + // NB: we reuse the idp_id query param for verified organization SSO + params.Set("idp_id", conf.OrgName) + } + if conf.InviteCode != "" { + params.Set("invite", conf.InviteCode) + } + if conf.ClientID != "" { + params.Set("client_id", conf.ClientID) + } + if conf.Auth0Connection != "" { + params.Set("connection", conf.Auth0Connection) + } + if conf.SkipRegistration { + params.Set("skip_registration", "true") + } + if conf.Identity != "" { + params.Set("identity", conf.Identity) + } + if len(conf.Audience) > 0 { + params.Set("audience", strings.Join(conf.Audience, ",")) + } + if conf.IncludeUpstreamToken { + params.Set("include_upstream_token", "true") + } + if conf.CreateRefreshToken { + params.Set("create_refresh_token", "true") + } + u := fmt.Sprintf("%s/oauth?%s", conf.Issuer, params.Encode()) + fmt.Fprintf(os.Stderr, "Opening browser to %s\n", u) + err = browser.OpenURL(u) + if err != nil { + return "", "", err + } + + token, err = s.Token() + if err != nil { + return "", "", err + } + refreshToken = s.RefreshToken() + return token, refreshToken, nil +} diff --git a/auth/login/options.go b/auth/login/options.go new file mode 100644 index 00000000..843e96df --- /dev/null +++ b/auth/login/options.go @@ -0,0 +1,181 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package login + +import ( + "errors" + "fmt" + + "chainguard.dev/sdk/uidp" +) + +type config struct { + // Audience is the intended audience for the token, if different than what is + // configured for the oauth handler. + Audience []string + + // URL of Chainguard Enforce OIDC Issuer. Defaults to https://issuer.enforce.dev + Issuer string + + // Identity is the exact UIDP of an assumable identity to authenticate as. + Identity string + + // UIDP of specific customer identity provider to log in with + IDP string + + // OrgName is the name of an organization with custom identity provider configured to use for authentication + OrgName string + + // Optional invite code to consume on login + InviteCode string + + // ClientID is the ID of the oauth2 provider + ClientID string + + // Auth0Connection is the connection parameter sent to Auth0 + // to preselect the social connection. + // + // See docs for details: https://auth0.com/docs/api/authentication#social + Auth0Connection string + + // SkipRegistration tells the issuer not to attempt to register + // if the account is not found. + SkipRegistration bool + + // IncludeUpstreamToken tells the issuer to include the encrypted upstream token + // in the Chainguard token + IncludeUpstreamToken bool + + // CreateRefreshToken tells the issuer to create a refresh token + CreateRefreshToken bool +} + +const defaultIssuer = `https://issuer.enforce.dev` + +func newDefaultConfig() *config { + return &config{ + Issuer: defaultIssuer, + } +} + +func newConfigFromOptions(opts ...Option) (*config, error) { + conf := newDefaultConfig() + for _, o := range opts { + o(conf) + } + if err := conf.valid(); err != nil { + return nil, err + } + return conf, nil +} + +func (c *config) valid() error { + if c.ClientID != "" && (c.IDP != "" || c.OrgName != "") { + return errors.New("must specify one of client id or custom identity provider") + } + if c.IDP != "" && c.OrgName != "" { + return errors.New("must specify one of identity provider id or organization name") + } + if c.ClientID == "" && c.IDP == "" && c.OrgName == "" { + return errors.New("must select one of client id, custom identity provider and organization name") + } + + switch { + case c.IDP != "": + if !uidp.Valid(c.IDP) { + return errors.New("invalid ID for identity provider") + } + if c.Auth0Connection != "" { + return errors.New("identity provider ID and Auth0 connection are mutually exclusive") + } + return nil + + case c.OrgName != "": + if c.Auth0Connection != "" { + return errors.New("organization name and Auth0 connection are mutually exclusive") + } + + verified, err := orgCheck(c.OrgName, c.Issuer) + if err != nil { + return fmt.Errorf("error checking if organization is verified: %w", err) + } + if !verified { + return errors.New("organization is not verified must use identity provider ID to log in") + } + + return nil + + default: + return nil + } +} + +type Option func(opt *config) + +func WithAudience(aud []string) Option { + return func(c *config) { + c.Audience = aud + } +} + +func WithClientID(id string) Option { + return func(c *config) { + c.ClientID = id + } +} +func WithIssuer(issuer string) Option { + return func(c *config) { + c.Issuer = issuer + } +} + +func WithIdentity(identity string) Option { + return func(c *config) { + c.Identity = identity + } +} + +func WithIdentityProvider(idp string) Option { + return func(c *config) { + c.IDP = idp + } +} + +func WithOrgName(org string) Option { + return func(c *config) { + c.OrgName = org + } +} + +func WithInviteCode(inviteCode string) Option { + return func(c *config) { + c.InviteCode = inviteCode + } +} + +func WithAuth0Connection(conn string) Option { + return func(c *config) { + c.Auth0Connection = conn + } +} + +func WithSkipRegistration() Option { + return func(c *config) { + c.SkipRegistration = true + } +} + +func WithIncludeUpstreamToken() Option { + return func(c *config) { + c.IncludeUpstreamToken = true + } +} + +func WithCreateRefreshToken() Option { + return func(c *config) { + c.CreateRefreshToken = true + } +} diff --git a/auth/login/options_test.go b/auth/login/options_test.go new file mode 100644 index 00000000..63c4671c --- /dev/null +++ b/auth/login/options_test.go @@ -0,0 +1,114 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package login + +import ( + "net/http/httptest" + "testing" + + "chainguard.dev/sdk/uidp" + "github.com/google/go-cmp/cmp" +) + +func TestConfFromOptions(t *testing.T) { + id := uidp.NewUID().String() + + testIssuer := httptest.NewServer(expectedBehavior("chainguard.dev")) + + tests := map[string]struct { + Options []Option + WantConfig *config + WantErr bool + }{ + "Happy path": { + Options: []Option{ + WithIssuer("https://example.com"), + WithIdentityProvider(id), + WithInviteCode("foo"), + }, + WantConfig: &config{ + Issuer: "https://example.com", + IDP: id, + InviteCode: "foo", + }, + }, + "Bad IDP ID": { + Options: []Option{ + WithIssuer("https://example.com"), + WithIdentityProvider("imnotanidp"), + }, + WantErr: true, + }, + "Org name": { + Options: []Option{ + WithIssuer(testIssuer.URL), + WithOrgName("chainguard.dev"), + }, + WantConfig: &config{ + Issuer: testIssuer.URL, + OrgName: "chainguard.dev", + }, + }, + "Cannot specify both identity provider and org name": { + Options: []Option{ + WithOrgName("chainguard.dev"), + WithIdentityProvider("foo"), + }, + WantErr: true, + }, + "Cannot specify both client id and org name": { + Options: []Option{ + WithOrgName("chainguard.dev"), + WithClientID("auth0"), + }, + WantErr: true, + }, + "No issuer defaults to prod issuer": { + Options: []Option{ + WithIdentityProvider(id), + }, + WantConfig: &config{ + Issuer: defaultIssuer, + IDP: id, + }, + }, + "No idp ID or client ID set errors": { + Options: nil, + WantErr: true, + }, + "IDP and ClientID both set errors": { + Options: []Option{ + WithIdentityProvider(id), + WithClientID("client_id"), + }, + WantErr: true, + }, + "IDP and Auth0Connection both set errors": { + Options: []Option{ + WithIdentityProvider(id), + WithAuth0Connection("github"), + }, + WantErr: true, + }, + } + + for test, data := range tests { + t.Run(test, func(t *testing.T) { + gotConfig, err := newConfigFromOptions(data.Options...) + if err != nil && !data.WantErr { + t.Errorf("got unexpected error %#v", err) + return + } else if err == nil && data.WantErr { + t.Error("expected error and got none") + return + } + + if diff := cmp.Diff(gotConfig, data.WantConfig); diff != "" { + t.Errorf("diff in expected config = %s", diff) + } + }) + } +} diff --git a/auth/login/orgcheck.go b/auth/login/orgcheck.go new file mode 100644 index 00000000..86f67286 --- /dev/null +++ b/auth/login/orgcheck.go @@ -0,0 +1,43 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package login + +import ( + "encoding/json" + "net/http" + "net/url" +) + +func orgCheck(name string, issuer string) (verified bool, err error) { + var endpoint string + { + u, err := url.Parse(issuer) + if err != nil { + return false, err + } + u.Path = `/orgcheck` + + query := make(url.Values, 1) + query.Add("name", name) + u.RawQuery = query.Encode() + + endpoint = u.String() + } + + //#nosec G107 HTTP request with variable input not a risk here. The result + // is from a public endpoint and only used as a convenience to fail early on + // misconfigured organizations + resp, err := http.Get(endpoint) + if err != nil { + return false, err + } + + err = json.NewDecoder(resp.Body).Decode(&verified) + if err != nil { + return false, err + } + return verified, nil +} diff --git a/auth/login/orgcheck_test.go b/auth/login/orgcheck_test.go new file mode 100644 index 00000000..e56e684a --- /dev/null +++ b/auth/login/orgcheck_test.go @@ -0,0 +1,75 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package login + +import ( + "fmt" + "net/http" + "net/http/httptest" + "testing" +) + +func expectedBehavior(verifiedOrg string) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/orgcheck" { + w.WriteHeader(http.StatusNotFound) + return + } + + name := r.URL.Query().Get("name") + if name == "" { + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, "name query param required") + return + } + fmt.Fprint(w, name == verifiedOrg) + } +} + +func brokenIssuer(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(http.StatusInternalServerError) +} + +func TestOrgCheck(t *testing.T) { + tests := map[string]struct { + org string + handler http.HandlerFunc + want bool + wantErr bool + }{ + "verified": { + org: "example.com", + handler: expectedBehavior("example.com"), + want: true, + }, + "not verified": { + org: "not.example.com", + handler: expectedBehavior("example.com"), + want: false, + }, + "broken issuer should error": { + org: "example.com", + handler: brokenIssuer, + wantErr: true, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + s := httptest.NewServer(test.handler) + defer s.Close() + + got, err := orgCheck(test.org, s.URL) + if (err != nil) != test.wantErr { + t.Errorf("err == %s and wantErr = %v", err, test.wantErr) + return + } + if got != test.want { + t.Errorf("got = %v and want = %v", got, test.want) + } + }) + } +} diff --git a/auth/login/server.go b/auth/login/server.go new file mode 100644 index 00000000..d3c3e939 --- /dev/null +++ b/auth/login/server.go @@ -0,0 +1,110 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package login implements client login functionality shared between various +// clients +package login + +import ( + "context" + "errors" + "fmt" + "net" + "net/http" +) + +type server struct { + ctx context.Context + + callbackURL string + rootURL string + + token chan string + + refreshToken string + + l net.Listener +} + +func newServer(ctx context.Context) (*server, error) { + s := new(server) + + { + // NB: port 0 here means select a random port + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + return nil, err + } + port := listener.Addr().(*net.TCPAddr).Port + + s.token = make(chan string, 1) + + s.callbackURL = fmt.Sprintf("http://localhost:%d/callback?token=true", port) + s.rootURL = fmt.Sprintf("http://localhost:%d/", port) + s.l = listener + s.ctx = ctx + } + + // nolint:all + go http.Serve(s.l, s) + + return s, nil +} + +func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/": + fmt.Fprint(w, HTMLAuthSuccessful) + close(s.token) + return + + case "/callback": + token := r.URL.Query().Get("token") + if token == "" { + fmt.Fprint(w, "Account not found, registration required.") + close(s.token) + return + } + s.refreshToken = r.URL.Query().Get("refresh_token") + s.token <- token + // We redirect to `/` to print a "successful auth" message and strip + // the token out of the URI + http.Redirect(w, r, s.rootURL, http.StatusPermanentRedirect) + + default: + http.NotFound(w, r) + } +} + +func (s *server) URL() string { + return s.callbackURL +} + +// Token blocks until a token has been received +func (s *server) Token() (string, error) { + select { + case <-s.ctx.Done(): + return "", s.ctx.Err() + case t, ok := <-s.token: + if !ok { + // Didn't receive token from redirect to callback + return "", errors.New("login failed") + } + + // We've received a token, but need to block until the success page has been written to + // the browser + <-s.token + return t, nil + } +} + +// RefreshToken is called after Token(), so we don't need any blocking here. +func (s *server) RefreshToken() string { + return s.refreshToken +} + +func (s *server) Close() error { + return s.l.Close() +} diff --git a/auth/login/server_test.go b/auth/login/server_test.go new file mode 100644 index 00000000..20b8e454 --- /dev/null +++ b/auth/login/server_test.go @@ -0,0 +1,49 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package login + +import ( + "context" + "errors" + "net/http" + "strings" + "testing" + "time" +) + +func TestServerTimeout(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Millisecond) + defer cancel() + s, err := newServer(ctx) + if err != nil { + t.Fatal(err) + } + + _, err = s.Token() + if !errors.Is(err, context.DeadlineExceeded) { + t.Errorf("expect timeout error getting token") + } +} + +func TestServerHappyPath(t *testing.T) { + s, err := newServer(context.Background()) + if err != nil { + t.Fatal(err) + } + + callback := strings.ReplaceAll(s.URL(), "token=true", "token=foo") + http.Get(callback) + + token, err := s.Token() + if err != nil { + t.Errorf("expected no error, got %#v", err) + } + if token != "foo" { + t.Errorf("expected token == foo, but got token == %q", token) + } + + s.Close() +} diff --git a/auth/oidc.go b/auth/oidc.go new file mode 100644 index 00000000..29cc2872 --- /dev/null +++ b/auth/oidc.go @@ -0,0 +1,148 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package auth + +import ( + "context" + "encoding/base64" + "encoding/json" + "fmt" + "os" + "strings" + "time" + + "github.com/chainguard-dev/clog" + "google.golang.org/grpc/credentials" +) + +// NewFromFile attempts to create a new credentials.PerRPCCredentials based on the provided file. +// Returns nil if not found. +func NewFromFile(ctx context.Context, path string, requireTransportSecurity bool) credentials.PerRPCCredentials { + if _, err := os.Stat(path); !os.IsNotExist(err) { + clog.FromContext(ctx).Infof("Using OIDC token from %s to authenticate requests.", path) + return &fileAuth{ + file: path, + secure: requireTransportSecurity, + } + } + return nil +} + +// NewFromToken attempts to create a new credentials.PerRPCCredentials based on provided OIDC token. +func NewFromToken(_ context.Context, token string, requireTransportSecurity bool) credentials.PerRPCCredentials { + return &tokenAuth{ + token: token, + secure: requireTransportSecurity, + } +} + +// NewFromContext creates a new credentials.PerRPCCredentials based on a token stored in context. +// This allows callers to provide a token for each RPC. +func NewFromContext(_ context.Context, requireTransportSecurity bool) credentials.PerRPCCredentials { + return &contextAuth{ + secure: requireTransportSecurity, + } +} + +// NormalizeIssuer massages an issuer string into a canonical form, such as +// attaching a scheme when certain "special" vendors omit them. +func NormalizeIssuer(issuer string) string { + // Similar to go-oidc, allow Google accounts to be missing scheme: + // https://github.com/coreos/go-oidc/blob/26c5037/oidc/verify.go#L231 + if issuer == "accounts.google.com" { + issuer = "https://accounts.google.com" + } + return issuer +} + +type Actor struct { + Audience string `json:"aud"` + Issuer string `json:"iss"` + Subject string `json:"sub"` +} + +func decodeToken(token string) ([]byte, error) { + parts := strings.Split(token, ".") + if len(parts) < 2 { + return nil, fmt.Errorf("oidc: malformed jwt, expected 3 parts got %d", len(parts)) + } + raw, err := base64.RawURLEncoding.DecodeString(parts[1]) + if err != nil { + return nil, fmt.Errorf("oidc: malformed jwt payload: %w", err) + } + return raw, nil +} + +func ExtractActor(token string) (*Actor, error) { + raw, err := decodeToken(token) + if err != nil { + return nil, err + } + + var payload struct { + Actor Actor `json:"act"` + } + if err := json.Unmarshal(raw, &payload); err != nil { + return nil, fmt.Errorf("oidc: failed to unmarshal actor: %w", err) + } + return &payload.Actor, nil +} + +func ExtractEmail(token string) (email string, verified bool, err error) { + raw, err := decodeToken(token) + if err != nil { + return "", false, err + } + + var payload struct { + Email string `json:"email"` + EmailVerified bool `json:"email_verified"` + } + if err := json.Unmarshal(raw, &payload); err != nil { + return "", false, fmt.Errorf("oidc: failed to unmarshal claims: %w", err) + } + + return payload.Email, payload.EmailVerified, nil +} + +func ExtractIssuer(token string) (string, error) { + iss, _, err := ExtractIssuerAndSubject(token) + return iss, err +} + +func ExtractIssuerAndSubject(token string) (string, string, error) { + raw, err := decodeToken(token) + if err != nil { + return "", "", err + } + + var payload struct { + Issuer string `json:"iss"` + Subject string `json:"sub"` + } + + if err := json.Unmarshal(raw, &payload); err != nil { + return "", "", fmt.Errorf("oidc: failed to unmarshal claims: %w", err) + } + return NormalizeIssuer(payload.Issuer), payload.Subject, nil +} + +func ExtractExpiry(token string) (time.Time, error) { + raw, err := decodeToken(token) + if err != nil { + return time.Time{}, err + } + + var payload struct { + Expiry int64 `json:"exp"` + } + + if err := json.Unmarshal(raw, &payload); err != nil { + return time.Time{}, fmt.Errorf("oidc: failed to unmarshal claims: %w", err) + } + + return time.Unix(payload.Expiry, 0), nil +} diff --git a/auth/token.go b/auth/token.go new file mode 100644 index 00000000..b5593ea9 --- /dev/null +++ b/auth/token.go @@ -0,0 +1,31 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package auth + +import ( + "context" + + "google.golang.org/grpc/credentials" +) + +type tokenAuth struct { + token string + secure bool +} + +var _ credentials.PerRPCCredentials = (*tokenAuth)(nil) + +// GetRequestMetadata implements credentials.PerRPCCredentials +func (ta *tokenAuth) GetRequestMetadata(_ context.Context, uri ...string) (map[string]string, error) { //nolint: revive + return map[string]string{ + "Authorization": ta.token, + }, nil +} + +// RequireTransportSecurity implements credentials.PerRPCCredentials +func (ta *tokenAuth) RequireTransportSecurity() bool { + return ta.secure +} diff --git a/auth/token/token.go b/auth/token/token.go new file mode 100644 index 00000000..485e6c99 --- /dev/null +++ b/auth/token/token.go @@ -0,0 +1,174 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package token + +import ( + "errors" + "fmt" + "io/fs" + "os" + "path/filepath" + "runtime" + "strings" + "time" + + "chainguard.dev/sdk/auth" +) + +type Kind string + +const ( + KindAccess Kind = "oidc-token" + KindRefresh Kind = "refresh-token" +) + +var ( + AllKinds = []Kind{KindAccess, KindRefresh} +) + +var ( + parentDir = "chainguard" +) + +// Save saves the given token to cache/audience +func Save(token []byte, kind Kind, audience string) error { + path, err := Path(kind, audience) + if err != nil { + return err + } + + if err := os.WriteFile(path, token, 0600); err != nil { + return fmt.Errorf("writing token file: %w", err) + } + return nil +} + +// Load returns the token for the given audience if it exists, +// or an error if it doesn't. +func Load(kind Kind, audience string) ([]byte, error) { + path, err := Path(kind, audience) + if err != nil { + return nil, err + } + + bs, err := os.ReadFile(path) + if err != nil { + return nil, fmt.Errorf("reading token file: %w", err) + } + return bs, nil +} + +// Delete removes the token for the given audience, if it exists. +// No error is returned if the token doesn't exist. +func Delete(kind Kind, audience string) error { + path, err := Path(kind, audience) + if err != nil { + return err + } + err = os.Remove(path) + if err != nil && !errors.Is(err, fs.ErrNotExist) { + return fmt.Errorf("failed to remove token (%s): %w", path, err) + } + return nil +} + +// DeleteAll removes all Chainguard tokens and empty audience directories. +func DeleteAll() error { + base, err := cacheFilePath("") + if err != nil { + return fmt.Errorf("error locating Chainguard token dir: %w", err) + } + files, err := os.ReadDir(base) + if err != nil { + return fmt.Errorf("error reading Chainguard token dir: %w", err) + } + // Token directory is expected to be structured as group of audience-specific + // directories, with a single file containing the token + // + // $ tree ~/Library/Caches/chainguard + // /Users/foo/Library/Caches/chainguard + // ├── https:--console-api.enforce.dev + // │ └── oidc-token + // ├── https:--cgr.dev + // └── oidc-token + for _, file := range files { + if !file.IsDir() { + // Encountered a file in the directory. Skip. + continue + } + for _, kind := range AllKinds { + // Try to remove a token, ignore file not exist errors + tokenFile := filepath.Join(base, file.Name(), string(kind)) + if err := os.Remove(tokenFile); err != nil && !errors.Is(err, fs.ErrNotExist) { + return fmt.Errorf("failed to remove %s: %w", tokenFile, err) + } + } + // Remove the (hopefully empty) audience directory. + // Ignore failures since other tools may have stored files in this cache. + dir := filepath.Join(base, file.Name()) + _ = os.Remove(dir) + } + return nil +} + +// Path is the filepath of the token for the given audience. +func Path(kind Kind, audience string) (string, error) { + a := strings.ReplaceAll(audience, "/", "-") + // Windows does not allow : as a valid character for directory names. + // For backwards compatibility, keep : in directory names for non-Windows systems. + // Ref: https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file + if runtime.GOOS == "windows" { + a = strings.ReplaceAll(a, ":", "-") + } + fp := filepath.Join(a, string(kind)) + return cacheFilePath(fp) +} + +// RemainingLife returns the amount of time remaining before the token for +// the given audience expires. Returns 0 for expired and non-existent tokens. +func RemainingLife(kind Kind, audience string, less time.Duration) time.Duration { + tok, err := Load(kind, audience) + if err != nil { + // Not a big deal, life is zero. + return 0 + } + expiry, err := auth.ExtractExpiry(string(tok)) + if err != nil { + // Not a big deal, life is zero. + return 0 + } + return subtractOrZero(expiry, less) +} + +// For testing. +var timeUntil = time.Until + +// Safe calculation for duration remaining from a given time, less the given duration. +func subtractOrZero(expiry time.Time, less time.Duration) time.Duration { + life := timeUntil(expiry.Add(less * -1)) + if life < 0 { + return 0 + } + return life +} + +func cacheFilePath(file string) (string, error) { + path, err := os.UserCacheDir() + if err != nil { + return "", fmt.Errorf("failed to get user cache dir: %w", err) + } + + // Create the cache directories if needed + path = filepath.Join(path, parentDir, file) + _, err = os.Stat(filepath.Dir(path)) + if errors.Is(err, os.ErrNotExist) { + err = nil // Clear err, we're dealing with it. + if err := os.MkdirAll(filepath.Dir(path), os.ModePerm); err != nil { + return "", fmt.Errorf("failed to create %s: %w", path, err) + } + } + return path, err // err could be non-nil, if err != os.ErrNotExist +} diff --git a/auth/token/token_test.go b/auth/token/token_test.go new file mode 100644 index 00000000..a263c9ea --- /dev/null +++ b/auth/token/token_test.go @@ -0,0 +1,481 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package token + +import ( + "os" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "gopkg.in/square/go-jose.v2/jwt" + + "chainguard.dev/go-oidctest/pkg/oidctest" +) + +func testToken(t *testing.T, audience, subject string, issuedAt time.Time, validDur time.Duration) string { + t.Helper() + + signer, iss := oidctest.NewIssuer(t) + + // Create an OIDC token using this issuer's signer. + tok, err := jwt.Signed(signer).Claims(jwt.Claims{ + Issuer: iss, + IssuedAt: jwt.NewNumericDate(issuedAt), + Expiry: jwt.NewNumericDate(issuedAt.Add(validDur)), + Subject: subject, + Audience: jwt.Audience{audience}, + }).CompactSerialize() + if err != nil { + t.Fatalf("CompactSerialize() = %v", err) + } + + return tok +} + +func TestSave(t *testing.T) { + t.Setenv("HOME", t.TempDir()) + cacheDir, err := os.UserCacheDir() + if err != nil { + t.Fatal(err) + } + + tests := []struct { + name string + kind Kind + audience string + wantPath string + }{{ + name: "sans audience", + kind: KindAccess, + audience: "", // Intentionally blank. + wantPath: filepath.Join(cacheDir, parentDir, string(KindAccess)), + }, { + name: "with audience (sans replacement)", + kind: KindAccess, + audience: "audience", + wantPath: filepath.Join(cacheDir, parentDir, "audience", string(KindAccess)), + }, { + name: "with audience (with replacement)", + kind: KindRefresh, + audience: "https://audience.unit.test", + wantPath: filepath.Join(cacheDir, parentDir, "https:--audience.unit.test", string(KindRefresh)), + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + // Save a token + tokenContents := []byte("mytoken") + if err := Save(tokenContents, test.kind, test.audience); err != nil { + t.Fatalf("Save() unexpected error=%v", err) + } + + // Manually check the expected file location + _, err := os.Stat(test.wantPath) + if err != nil { + t.Fatalf("Expected token path returned error: %v", err) + } + + gotContents, err := os.ReadFile(test.wantPath) + if err != nil { + t.Fatalf("Unexpected error reading token filepath=%s, err=%v", test.wantPath, err) + } + + if diff := cmp.Diff(tokenContents, gotContents); diff != "" { + t.Errorf("Reading %s returned unexpected results (-want, +got): %s", test.wantPath, diff) + } + }) + } +} + +func TestLoad(t *testing.T) { + t.Setenv("HOME", t.TempDir()) + cacheDir, err := os.UserCacheDir() + if err != nil { + t.Fatal(err) + } + + tests := []struct { + name string + kind Kind + audience string + }{{ + name: "sans audience", + kind: KindAccess, + audience: "", // Intentionally blank. + }, { + name: "with audience (sans replacement)", + kind: KindAccess, + audience: "audience", + }, { + name: "with audience (with replacement)", + kind: KindRefresh, + audience: "https://audience.unit.test", + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + // Manually save a token + tokenContents := []byte("mytoken") + mutatedAud := strings.ReplaceAll(test.audience, "/", "-") + path := filepath.Join(cacheDir, parentDir, mutatedAud) + if err := os.MkdirAll(path, 0777); err != nil { + t.Fatalf("Unexpected error creating temp dir: %v", err) + } + if err := os.WriteFile(filepath.Join(path, string(test.kind)), tokenContents, 0600); err != nil { + t.Fatalf("Unexpected error writing test token: %v", err) + } + + // Load the token, check its contents + got, err := Load(test.kind, test.audience) + if err != nil { + t.Fatalf("Load() unexpected error=%v", err) + } + if string(tokenContents) != string(got) { + t.Errorf("Load() return mismatch, want=%s, got=%s", tokenContents, got) + } + }) + } +} + +func TestDelete(t *testing.T) { + t.Setenv("HOME", t.TempDir()) + cacheDir, err := os.UserCacheDir() + if err != nil { + t.Fatal(err) + } + + tests := []struct { + name string + audience string + kind Kind + exists bool + wantErr bool + }{{ + name: "no audience ", + audience: "", // Intentionally blank. + kind: KindRefresh, + wantErr: false, + }, { + name: "token doesn't exist", + audience: "audience", + exists: false, + kind: KindAccess, + wantErr: false, + }, { + name: "token does exist", + audience: "audience", + exists: true, + kind: KindAccess, + wantErr: false, + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + // Manually save a token if it should exist + if test.exists { + tokenContents := []byte("mytoken") + path := filepath.Join(cacheDir, parentDir, test.audience) + if err := os.MkdirAll(path, 0777); err != nil { + t.Fatalf("Unexpected error creating temp dir: %v", err) + } + if err := os.WriteFile(filepath.Join(path, string(test.kind)), tokenContents, 0600); err != nil { + t.Fatalf("Unexpected error writing test token: %v", err) + } + } + + // Attempt to delete the token. + err := Delete(test.kind, test.audience) + if (err != nil) != test.wantErr { + t.Fatalf("Delete() error return mismatch, want=%t got=%v", test.wantErr, err) + } + }) + } +} + +func TestDeleteAll(t *testing.T) { + tests := []struct { + name string + auds []string // Create sub-dirs for each of these in cacheDir + audsWithTokens []string // Dirs from above that should also have a token (subset of auds) + extraFiles []string // Any extra files outside of audience dirs to include (in root of cacheDir) + wantErr bool + }{{ + name: "no tokens, no extra files/dirs", + auds: nil, + audsWithTokens: nil, + extraFiles: nil, + wantErr: false, + }, { + name: "all aud dirs have token, no extra files", + auds: []string{"audience1", "audience2"}, + audsWithTokens: []string{"audience1", "audience2"}, + extraFiles: nil, + wantErr: false, + }, { + name: "some empty aud dirs, no extra files", + auds: []string{"audience1", "audience2", "audience3", "audience4"}, + audsWithTokens: []string{"audience1", "audience2"}, + extraFiles: nil, + wantErr: false, + }, { + name: "all empty aud dirs, no extra files", + auds: []string{"audience1", "audience2", "audience3", "audience4"}, + audsWithTokens: []string{}, + extraFiles: nil, + wantErr: false, + }, { + name: "all aud dirs have token, extra files in root", + auds: []string{"audience1", "audience2"}, + audsWithTokens: []string{"audience1", "audience2"}, + extraFiles: []string{"extra1", "extra2"}, + wantErr: false, + }, { + name: "all aud dirs have token, extra files in dirs", + auds: []string{"audience1", "audience2"}, + audsWithTokens: []string{"audience1", "audience2"}, + extraFiles: []string{filepath.Join("audience1", "extra1"), filepath.Join("some-dir", "extra2")}, + wantErr: false, + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + // Make sure parent cache directory exists + t.Setenv("HOME", t.TempDir()) + cacheDir, err := os.UserCacheDir() + if err != nil { + t.Fatal(err) + } + cacheDir = filepath.Join(cacheDir, parentDir) + + if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil { + t.Fatalf("failed to create parent dir %s: %s", cacheDir, err.Error()) + } + // Create audience directories + for _, aud := range test.auds { + dir := filepath.Join(cacheDir, aud) + if err := os.MkdirAll(dir, os.ModePerm); err != nil { + t.Fatalf("failed to create dir %s: %s", dir, err.Error()) + } + } + // Populate "token" files + for _, aud := range test.audsWithTokens { + for _, kind := range AllKinds { + tok := filepath.Join(cacheDir, aud, string(kind)) + if _, err := os.Create(tok); err != nil { + t.Fatalf("failed to create fake token %s: %s", tok, err.Error()) + } + } + } + // Create extra files + for _, extra := range test.extraFiles { + p := filepath.Join(cacheDir, extra) + if err := os.MkdirAll(filepath.Dir(p), os.ModePerm); err != nil { + t.Fatalf("failed to create dir %s: %s", filepath.Dir(p), err.Error()) + } + if _, err := os.Create(p); err != nil { + t.Fatalf("failed to create extra file %s: %s", p, err.Error()) + } + } + + // Then burn it to the ground. + err = DeleteAll() + + // Sift through the ashes. + if (err != nil) != test.wantErr { + t.Errorf("DeleteAll() error return mismatch, want=%t, got=%v", test.wantErr, err) + } + files, err := os.ReadDir(cacheDir) + if err != nil { + t.Fatalf("failed to list files in temp cache dir: %v", err) + } + // Only expect test.extraFiles to remain, all other files/dirs should have been removed. + // TODO: make this more robust and count subfiles within dirs in `files` + // This will currently fail to catch situation where one dir has >1 extra file + if len(files) != len(test.extraFiles) { + t.Errorf("Remaining files mismatch, want=%d, got=%d", len(test.extraFiles), len(files)) + } + }) + } +} + +func TestSaveLoadToken(t *testing.T) { + t.Setenv("HOME", t.TempDir()) + + tests := []struct { + description string + audience string + }{ + { + description: "default audience", + audience: "http://api.api-system.svc", + }, { + description: "default audience with audience", + audience: "http://api.api-system.svc", + }, { + description: "custom audience", + audience: "https://abc-sigstore.enforce.dev", + }, + } + + for _, test := range tests { + t.Run(test.description, func(t *testing.T) { + for _, kind := range AllKinds { + tokenContents := []byte("mytoken") + if err := Save(tokenContents, kind, test.audience); err != nil { + t.Fatal(err) + } + contents, err := Load(kind, test.audience) + if err != nil { + t.Fatal(err) + } + if string(contents) != string(tokenContents) { + t.Fatalf("expected %s got %s", string(tokenContents), string(contents)) + } + } + }) + } +} + +func TestRemainingLife(t *testing.T) { + t.Setenv("HOME", t.TempDir()) + + now := time.Unix(0, 0) + timeUntil = func(t time.Time) time.Duration { + return t.Sub(now) + } + + type ts struct { + audience string + subject string + duration time.Duration + } + + tests := []struct { + name string + token ts + kind Kind + audience string + less time.Duration + want time.Duration + }{{ + name: "exists, 0 less, 30m remain", + token: ts{ + audience: "audience", + subject: "subject", + duration: 30 * time.Minute, + }, + kind: KindAccess, + audience: "audience", + less: 0, + want: 30 * time.Minute, + }, { + name: "exists, less 10m, 20m remain", + token: ts{ + audience: "audience", + subject: "subject", + duration: 30 * time.Minute, + }, + kind: KindRefresh, + audience: "audience", + less: 10 * time.Minute, + want: 20 * time.Minute, + }, { + name: "exists less 30m, 0s remain", + token: ts{ + audience: "audience", + subject: "subject", + duration: 30 * time.Minute, + }, + kind: KindAccess, + audience: "audience", + less: 30 * time.Minute, + want: 0, + }, { + name: "exists less 40m, 0s remain", + token: ts{ + audience: "audience", + subject: "subject", + duration: 30 * time.Minute, + }, + kind: KindAccess, + audience: "audience", + less: 40 * time.Minute, + want: 0, + }, { + name: "doesn't exist, 0s returned", + token: ts{ + audience: "audience", + subject: "subject", + duration: 30 * time.Minute, + }, + kind: KindAccess, + audience: "different", + less: 0, + want: 0, + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + tok := testToken(t, test.token.audience, test.token.subject, now, test.token.duration) + if err := Save([]byte(tok), test.kind, test.token.audience); err != nil { + t.Fatalf("Save() unexpected error=%v", err) + } + + got := RemainingLife(test.kind, test.audience, test.less) + + if got != test.want { + t.Fatalf("RemainingLife() mismatch, want=%v, got=%v", test.want, got) + } + }) + } +} + +func TestPath(t *testing.T) { + t.Setenv("HOME", t.TempDir()) + + cacheDir, err := os.UserCacheDir() + if err != nil { + t.Fatal(err) + } + + tests := map[string]struct { + kind Kind + audience string + expectedPath string + }{ + "no audience": { + audience: "", + kind: KindAccess, + expectedPath: filepath.Join(cacheDir, parentDir, string(KindAccess)), + }, + "audience sans replacement": { + audience: "console.example.com", + kind: KindAccess, + expectedPath: filepath.Join(cacheDir, parentDir, "console.example.com", string(KindAccess)), + }, + "audience with replacement": { + audience: "https://console.example.com", + kind: KindRefresh, + expectedPath: filepath.Join(cacheDir, parentDir, "https:--console.example.com", string(KindRefresh)), + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + got, err := Path(test.kind, test.audience) + if err != nil { + t.Fatal(err) + } + + if diff := cmp.Diff(test.expectedPath, got); diff != "" { + t.Fatal("Path() mismatch (-want, +got):", diff) + } + }) + } +} diff --git a/civil/civil.go b/civil/civil.go new file mode 100644 index 00000000..936e99ae --- /dev/null +++ b/civil/civil.go @@ -0,0 +1,332 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// This is a fork of the cloud.google.com/go package of the same name, which +// carries the patch from: https://github.com/googleapis/google-cloud-go/pull/6410 + +// Copyright 2016 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package civil implements types for civil time, a time-zone-independent +// representation of time that follows the rules of the proleptic +// Gregorian calendar with exactly 24-hour days, 60-minute hours, and 60-second +// minutes. +// +// Because they lack location information, these types do not represent unique +// moments or intervals of time. Use time.Time for that purpose. +package civil + +import ( + "fmt" + "time" +) + +// A Date represents a date (year, month, day). +// +// This type does not include location information, and therefore does not +// describe a unique 24-hour timespan. +type Date struct { + Year int // Year (e.g., 2014). + Month time.Month // Month of the year (January = 1, ...). + Day int // Day of the month, starting at 1. +} + +// DateOf returns the Date in which a time occurs in that time's location. +func DateOf(t time.Time) Date { + var d Date + d.Year, d.Month, d.Day = t.Date() + return d +} + +// ParseDate parses a string in RFC3339 full-date format and returns the date value it represents. +func ParseDate(s string) (Date, error) { + t, err := time.Parse("2006-01-02", s) + if err != nil { + return Date{}, err + } + return DateOf(t), nil +} + +// String returns the date in RFC3339 full-date format. +func (d Date) String() string { + return fmt.Sprintf("%04d-%02d-%02d", d.Year, d.Month, d.Day) +} + +// IsValid reports whether the date is valid. +func (d Date) IsValid() bool { + return DateOf(d.In(time.UTC)) == d +} + +// In returns the time corresponding to time 00:00:00 of the date in the location. +// +// In is always consistent with time.Date, even when time.Date returns a time +// on a different day. For example, if loc is America/Indiana/Vincennes, then both +// +// time.Date(1955, time.May, 1, 0, 0, 0, 0, loc) +// +// and +// +// civil.Date{Year: 1955, Month: time.May, Day: 1}.In(loc) +// +// return 23:00:00 on April 30, 1955. +// +// In panics if loc is nil. +func (d Date) In(loc *time.Location) time.Time { + return time.Date(d.Year, d.Month, d.Day, 0, 0, 0, 0, loc) +} + +// AddDays returns the date that is n days in the future. +// n can also be negative to go into the past. +func (d Date) AddDays(n int) Date { + return DateOf(d.In(time.UTC).AddDate(0, 0, n)) +} + +// DaysSince returns the signed number of days between the date and s, not including the end day. +// This is the inverse operation to AddDays. +func (d Date) DaysSince(s Date) (days int) { + // We convert to Unix time so we do not have to worry about leap seconds: + // Unix time increases by exactly 86400 seconds per day. + deltaUnix := d.In(time.UTC).Unix() - s.In(time.UTC).Unix() + return int(deltaUnix / 86400) +} + +// Before reports whether d occurs before d2. +func (d Date) Before(d2 Date) bool { + if d.Year != d2.Year { + return d.Year < d2.Year + } + if d.Month != d2.Month { + return d.Month < d2.Month + } + return d.Day < d2.Day +} + +// After reports whether d occurs after d2. +func (d Date) After(d2 Date) bool { + return d2.Before(d) +} + +// IsZero reports whether date fields are set to their default value. +func (d Date) IsZero() bool { + return (d.Year == 0) && (int(d.Month) == 0) && (d.Day == 0) +} + +// MarshalText implements the encoding.TextMarshaler interface. +// The output is the result of d.String(). +func (d Date) MarshalText() ([]byte, error) { + return []byte(d.String()), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface. +// The date is expected to be a string in a format accepted by ParseDate. +func (d *Date) UnmarshalText(data []byte) error { + var err error + *d, err = ParseDate(string(data)) + return err +} + +// A Time represents a time with nanosecond precision. +// +// This type does not include location information, and therefore does not +// describe a unique moment in time. +// +// This type exists to represent the TIME type in storage-based APIs like BigQuery. +// Most operations on Times are unlikely to be meaningful. Prefer the DateTime type. +type Time struct { + Hour int // The hour of the day in 24-hour format; range [0-23] + Minute int // The minute of the hour; range [0-59] + Second int // The second of the minute; range [0-59] + Nanosecond int // The nanosecond of the second; range [0-999999999] +} + +// TimeOf returns the Time representing the time of day in which a time occurs +// in that time's location. It ignores the date. +func TimeOf(t time.Time) Time { + var tm Time + tm.Hour, tm.Minute, tm.Second = t.Clock() + tm.Nanosecond = t.Nanosecond() + return tm +} + +// ParseTime parses a string and returns the time value it represents. +// ParseTime accepts an extended form of the RFC3339 partial-time format. After +// the HH:MM:SS part of the string, an optional fractional part may appear, +// consisting of a decimal point followed by one to nine decimal digits. +// (RFC3339 admits only one digit after the decimal point). +func ParseTime(s string) (Time, error) { + t, err := time.Parse("15:04:05.999999999", s) + if err != nil { + return Time{}, err + } + return TimeOf(t), nil +} + +// String returns the date in the format described in ParseTime. If Nanoseconds +// is zero, no fractional part will be generated. Otherwise, the result will +// end with a fractional part consisting of a decimal point and six digits. +// The fractional part is limited to six digits because that is the precision +// limit for BigQuery DATETIME columns. +func (t Time) String() string { + s := fmt.Sprintf("%02d:%02d:%02d", t.Hour, t.Minute, t.Second) + if t.Nanosecond == 0 { + return s + } + return s + fmt.Sprintf(".%06d", t.Nanosecond/1000) +} + +// IsValid reports whether the time is valid. +func (t Time) IsValid() bool { + // Construct a non-zero time. + tm := time.Date(2, 2, 2, t.Hour, t.Minute, t.Second, t.Nanosecond, time.UTC) + return TimeOf(tm) == t +} + +// IsZero reports whether time fields are set to their default value. +func (t Time) IsZero() bool { + return (t.Hour == 0) && (t.Minute == 0) && (t.Second == 0) && (t.Nanosecond == 0) +} + +// Before reports whether t occurs before t2. +func (t Time) Before(t2 Time) bool { + if t.Hour != t2.Hour { + return t.Hour < t2.Hour + } + if t.Minute != t2.Minute { + return t.Minute < t2.Minute + } + if t.Second != t2.Second { + return t.Second < t2.Second + } + + return t.Nanosecond < t2.Nanosecond +} + +// After reports whether t occurs after t2. +func (t Time) After(t2 Time) bool { + return t2.Before(t) +} + +// MarshalText implements the encoding.TextMarshaler interface. +// The output is the result of t.String(). +func (t Time) MarshalText() ([]byte, error) { + return []byte(t.String()), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface. +// The time is expected to be a string in a format accepted by ParseTime. +func (t *Time) UnmarshalText(data []byte) error { + var err error + *t, err = ParseTime(string(data)) + return err +} + +// A DateTime represents a date and time. +// +// This type does not include location information, and therefore does not +// describe a unique moment in time. +type DateTime struct { + Date Date + Time Time +} + +// Note: We deliberately do not embed Date into DateTime, to avoid promoting AddDays and Sub. + +// DateTimeOf returns the DateTime in which a time occurs in that time's location. +func DateTimeOf(t time.Time) DateTime { + return DateTime{ + Date: DateOf(t), + Time: TimeOf(t), + } +} + +// ParseDateTime parses a string and returns the DateTime it represents. +// ParseDateTime accepts a variant of the RFC3339 date-time format that omits +// the time offset but includes an optional fractional time, as described in +// ParseTime. Informally, the accepted format is +// +// YYYY-MM-DDTHH:MM:SS[.FFFFFFFFF] +// +// where the 'T' may be a lower-case 't'. +func ParseDateTime(s string) (DateTime, error) { + t, err := time.Parse("2006-01-02T15:04:05.999999999", s) + if err != nil { + t, err = time.Parse("2006-01-02t15:04:05.999999999", s) + if err != nil { + return DateTime{}, err + } + } + return DateTimeOf(t), nil +} + +// String returns the date in the format described in ParseDate. +func (dt DateTime) String() string { + return dt.Date.String() + "T" + dt.Time.String() +} + +// IsValid reports whether the datetime is valid. +func (dt DateTime) IsValid() bool { + return dt.Date.IsValid() && dt.Time.IsValid() +} + +// In returns the time corresponding to the DateTime in the given location. +// +// If the time is missing or ambigous at the location, In returns the same +// result as time.Date. For example, if loc is America/Indiana/Vincennes, then +// both +// +// time.Date(1955, time.May, 1, 0, 30, 0, 0, loc) +// +// and +// +// civil.DateTime{ +// civil.Date{Year: 1955, Month: time.May, Day: 1}}, +// civil.Time{Minute: 30}}.In(loc) +// +// return 23:30:00 on April 30, 1955. +// +// In panics if loc is nil. +func (dt DateTime) In(loc *time.Location) time.Time { + return time.Date(dt.Date.Year, dt.Date.Month, dt.Date.Day, dt.Time.Hour, dt.Time.Minute, dt.Time.Second, dt.Time.Nanosecond, loc) +} + +// Before reports whether dt occurs before dt2. +func (dt DateTime) Before(dt2 DateTime) bool { + return dt.In(time.UTC).Before(dt2.In(time.UTC)) +} + +// After reports whether dt occurs after dt2. +func (dt DateTime) After(dt2 DateTime) bool { + return dt2.Before(dt) +} + +// IsZero reports whether datetime fields are set to their default value. +func (dt DateTime) IsZero() bool { + return dt.Date.IsZero() && dt.Time.IsZero() +} + +// MarshalText implements the encoding.TextMarshaler interface. +// The output is the result of dt.String(). +func (dt DateTime) MarshalText() ([]byte, error) { + return []byte(dt.String()), nil +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface. +// The datetime is expected to be a string in a format accepted by ParseDateTime +func (dt *DateTime) UnmarshalText(data []byte) error { + var err error + *dt, err = ParseDateTime(string(data)) + return err +} diff --git a/civil/civil_test.go b/civil/civil_test.go new file mode 100644 index 00000000..d1de7c73 --- /dev/null +++ b/civil/civil_test.go @@ -0,0 +1,547 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// This is a fork of the cloud.google.com/go package of the same name, which +// carries the patch from: https://github.com/googleapis/google-cloud-go/pull/6410 + +// Copyright 2016 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package civil + +import ( + "encoding/json" + "testing" + "time" + + "github.com/google/go-cmp/cmp" +) + +func TestDates(t *testing.T) { + for _, test := range []struct { + date Date + loc *time.Location + wantStr string + wantTime time.Time + }{ + { + date: Date{2014, 7, 29}, + loc: time.Local, + wantStr: "2014-07-29", + wantTime: time.Date(2014, time.July, 29, 0, 0, 0, 0, time.Local), + }, + { + date: DateOf(time.Date(2014, 8, 20, 15, 8, 43, 1, time.Local)), + loc: time.UTC, + wantStr: "2014-08-20", + wantTime: time.Date(2014, 8, 20, 0, 0, 0, 0, time.UTC), + }, + { + date: DateOf(time.Date(999, time.January, 26, 0, 0, 0, 0, time.Local)), + loc: time.UTC, + wantStr: "0999-01-26", + wantTime: time.Date(999, 1, 26, 0, 0, 0, 0, time.UTC), + }, + } { + if got := test.date.String(); got != test.wantStr { + t.Errorf("%#v.String() = %q, want %q", test.date, got, test.wantStr) + } + if got := test.date.In(test.loc); !got.Equal(test.wantTime) { + t.Errorf("%#v.In(%v) = %v, want %v", test.date, test.loc, got, test.wantTime) + } + } +} + +func TestDateIsValid(t *testing.T) { + for _, test := range []struct { + date Date + want bool + }{ + {Date{2014, 7, 29}, true}, + {Date{2000, 2, 29}, true}, + {Date{10000, 12, 31}, true}, + {Date{1, 1, 1}, true}, + {Date{0, 1, 1}, true}, // year zero is OK + {Date{-1, 1, 1}, true}, // negative year is OK + {Date{1, 0, 1}, false}, + {Date{1, 1, 0}, false}, + {Date{2016, 1, 32}, false}, + {Date{2016, 13, 1}, false}, + {Date{1, -1, 1}, false}, + {Date{1, 1, -1}, false}, + } { + got := test.date.IsValid() + if got != test.want { + t.Errorf("%#v: got %t, want %t", test.date, got, test.want) + } + } +} + +func TestParseDate(t *testing.T) { + for _, test := range []struct { + str string + want Date // if empty, expect an error + }{ + {"2016-01-02", Date{2016, 1, 2}}, + {"2016-12-31", Date{2016, 12, 31}}, + {"0003-02-04", Date{3, 2, 4}}, + {"999-01-26", Date{}}, + {"", Date{}}, + {"2016-01-02x", Date{}}, + } { + got, err := ParseDate(test.str) + if got != test.want { + t.Errorf("ParseDate(%q) = %+v, want %+v", test.str, got, test.want) + } + if err != nil && test.want != (Date{}) { + t.Errorf("Unexpected error %v from ParseDate(%q)", err, test.str) + } + } +} + +func TestDateArithmetic(t *testing.T) { + for _, test := range []struct { + desc string + start Date + end Date + days int + }{ + { + desc: "zero days noop", + start: Date{2014, 5, 9}, + end: Date{2014, 5, 9}, + days: 0, + }, + { + desc: "crossing a year boundary", + start: Date{2014, 12, 31}, + end: Date{2015, 1, 1}, + days: 1, + }, + { + desc: "negative number of days", + start: Date{2015, 1, 1}, + end: Date{2014, 12, 31}, + days: -1, + }, + { + desc: "full leap year", + start: Date{2004, 1, 1}, + end: Date{2005, 1, 1}, + days: 366, + }, + { + desc: "full non-leap year", + start: Date{2001, 1, 1}, + end: Date{2002, 1, 1}, + days: 365, + }, + { + desc: "crossing a leap second", + start: Date{1972, 6, 30}, + end: Date{1972, 7, 1}, + days: 1, + }, + { + desc: "dates before the unix epoch", + start: Date{101, 1, 1}, + end: Date{102, 1, 1}, + days: 365, + }, + } { + if got := test.start.AddDays(test.days); got != test.end { + t.Errorf("[%s] %#v.AddDays(%v) = %#v, want %#v", test.desc, test.start, test.days, got, test.end) + } + if got := test.end.DaysSince(test.start); got != test.days { + t.Errorf("[%s] %#v.Sub(%#v) = %v, want %v", test.desc, test.end, test.start, got, test.days) + } + } +} + +func TestDateBefore(t *testing.T) { + for _, test := range []struct { + d1, d2 Date + want bool + }{ + {Date{2016, 12, 31}, Date{2017, 1, 1}, true}, + {Date{2016, 1, 1}, Date{2016, 1, 1}, false}, + {Date{2016, 12, 30}, Date{2016, 12, 31}, true}, + } { + if got := test.d1.Before(test.d2); got != test.want { + t.Errorf("%v.Before(%v): got %t, want %t", test.d1, test.d2, got, test.want) + } + } +} + +func TestDateAfter(t *testing.T) { + for _, test := range []struct { + d1, d2 Date + want bool + }{ + {Date{2016, 12, 31}, Date{2017, 1, 1}, false}, + {Date{2016, 1, 1}, Date{2016, 1, 1}, false}, + {Date{2016, 12, 30}, Date{2016, 12, 31}, false}, + } { + if got := test.d1.After(test.d2); got != test.want { + t.Errorf("%v.After(%v): got %t, want %t", test.d1, test.d2, got, test.want) + } + } +} + +func TestDateIsZero(t *testing.T) { + for _, test := range []struct { + date Date + want bool + }{ + {Date{2000, 2, 29}, false}, + {Date{10000, 12, 31}, false}, + {Date{-1, 0, 0}, false}, + {Date{0, 0, 0}, true}, + {Date{}, true}, + } { + got := test.date.IsZero() + if got != test.want { + t.Errorf("%#v: got %t, want %t", test.date, got, test.want) + } + } +} + +func TestTimeToString(t *testing.T) { + for _, test := range []struct { + str string + time Time + roundTrip bool // ParseTime(str).String() == str? + }{ + {"13:26:33", Time{13, 26, 33, 0}, true}, + {"01:02:03.000023", Time{1, 2, 3, 23000}, true}, + {"00:00:00.000001", Time{0, 0, 0, 1000}, true}, + {"13:26:03.1", Time{13, 26, 3, 100000000}, false}, + {"13:26:33.0000003", Time{13, 26, 33, 300}, false}, + } { + t.Run(test.str, func(t *testing.T) { + gotTime, err := ParseTime(test.str) + if err != nil { + t.Errorf("ParseTime(%q): got error: %v", test.str, err) + return + } + if gotTime != test.time { + t.Errorf("ParseTime(%q) = %+v, want %+v", test.str, gotTime, test.time) + } + if test.roundTrip { + gotStr := test.time.String() + if gotStr != test.str { + t.Errorf("%#v.String() = %q, want %q", test.time, gotStr, test.str) + } + } + }) + } +} + +func TestTimeOf(t *testing.T) { + for _, test := range []struct { + time time.Time + want Time + }{ + {time.Date(2014, 8, 20, 15, 8, 43, 1, time.Local), Time{15, 8, 43, 1}}, + {time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC), Time{0, 0, 0, 0}}, + } { + if got := TimeOf(test.time); got != test.want { + t.Errorf("TimeOf(%v) = %+v, want %+v", test.time, got, test.want) + } + } +} + +func TestTimeIsValid(t *testing.T) { + for _, test := range []struct { + time Time + want bool + }{ + {Time{0, 0, 0, 0}, true}, + {Time{23, 0, 0, 0}, true}, + {Time{23, 59, 59, 999999999}, true}, + {Time{24, 59, 59, 999999999}, false}, + {Time{23, 60, 59, 999999999}, false}, + {Time{23, 59, 60, 999999999}, false}, + {Time{23, 59, 59, 1000000000}, false}, + {Time{-1, 0, 0, 0}, false}, + {Time{0, -1, 0, 0}, false}, + {Time{0, 0, -1, 0}, false}, + {Time{0, 0, 0, -1}, false}, + } { + got := test.time.IsValid() + if got != test.want { + t.Errorf("%#v: got %t, want %t", test.time, got, test.want) + } + } +} + +func TestTimeIsZero(t *testing.T) { + for _, test := range []struct { + time Time + want bool + }{ + {Time{0, 0, 0, 0}, true}, + {Time{}, true}, + {Time{0, 0, 0, 1}, false}, + {Time{-1, 0, 0, 0}, false}, + {Time{0, -1, 0, 0}, false}, + } { + got := test.time.IsZero() + if got != test.want { + t.Errorf("%#v: got %t, want %t", test.time, got, test.want) + } + } +} + +func TestTimeBefore(t *testing.T) { + for _, test := range []struct { + t1, t2 Time + want bool + }{ + {Time{12, 0, 0, 0}, Time{14, 0, 0, 0}, true}, + {Time{12, 20, 0, 0}, Time{12, 30, 0, 0}, true}, + {Time{12, 20, 10, 0}, Time{12, 20, 20, 0}, true}, + {Time{12, 20, 10, 5}, Time{12, 20, 10, 10}, true}, + {Time{12, 20, 10, 5}, Time{12, 20, 10, 5}, false}, + } { + if got := test.t1.Before(test.t2); got != test.want { + t.Errorf("%v.Before(%v): got %t, want %t", test.t1, test.t2, got, test.want) + } + } +} + +func TestTimeAfter(t *testing.T) { + for _, test := range []struct { + t1, t2 Time + want bool + }{ + {Time{12, 0, 0, 0}, Time{14, 0, 0, 0}, false}, + {Time{12, 20, 0, 0}, Time{12, 30, 0, 0}, false}, + {Time{12, 20, 10, 0}, Time{12, 20, 20, 0}, false}, + {Time{12, 20, 10, 5}, Time{12, 20, 10, 10}, false}, + {Time{12, 20, 10, 5}, Time{12, 20, 10, 5}, false}, + } { + if got := test.t1.After(test.t2); got != test.want { + t.Errorf("%v.After(%v): got %t, want %t", test.t1, test.t2, got, test.want) + } + } +} + +func TestDateTimeToString(t *testing.T) { + for _, test := range []struct { + str string + dateTime DateTime + roundTrip bool // ParseDateTime(str).String() == str? + }{ + {"2016-03-22T13:26:33", DateTime{Date{2016, 03, 22}, Time{13, 26, 33, 0}}, true}, + {"2016-03-22T13:26:33.000000600", DateTime{Date{2016, 03, 22}, Time{13, 26, 33, 600}}, false}, + {"2016-03-22T13:26:33.000006", DateTime{Date{2016, 03, 22}, Time{13, 26, 33, 6000}}, true}, + {"2016-03-22t13:26:33", DateTime{Date{2016, 03, 22}, Time{13, 26, 33, 0}}, false}, + } { + t.Run(test.str, func(t *testing.T) { + gotDateTime, err := ParseDateTime(test.str) + if err != nil { + t.Errorf("ParseDateTime(%q): got error: %v", test.str, err) + return + } + if gotDateTime != test.dateTime { + t.Errorf("ParseDateTime(%q) = %+v, want %+v", test.str, gotDateTime, test.dateTime) + } + if test.roundTrip { + gotStr := test.dateTime.String() + if gotStr != test.str { + t.Errorf("%#v.String() = %q, want %q", test.dateTime, gotStr, test.str) + } + } + }) + } +} + +func TestParseDateTimeErrors(t *testing.T) { + for _, str := range []string{ + "", + "2016-03-22", // just a date + "13:26:33", // just a time + "2016-03-22 13:26:33", // wrong separating character + "2016-03-22T13:26:33x", // extra at end + } { + if _, err := ParseDateTime(str); err == nil { + t.Errorf("ParseDateTime(%q) succeeded, want error", str) + } + } +} + +func TestDateTimeOf(t *testing.T) { + for _, test := range []struct { + time time.Time + want DateTime + }{ + {time.Date(2014, 8, 20, 15, 8, 43, 1, time.Local), + DateTime{Date{2014, 8, 20}, Time{15, 8, 43, 1}}}, + {time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC), + DateTime{Date{1, 1, 1}, Time{0, 0, 0, 0}}}, + } { + if got := DateTimeOf(test.time); got != test.want { + t.Errorf("DateTimeOf(%v) = %+v, want %+v", test.time, got, test.want) + } + } +} + +func TestDateTimeIsValid(t *testing.T) { + // No need to be exhaustive here; it's just Date.IsValid && Time.IsValid. + for _, test := range []struct { + dt DateTime + want bool + }{ + {DateTime{Date{2016, 3, 20}, Time{0, 0, 0, 0}}, true}, + {DateTime{Date{2016, -3, 20}, Time{0, 0, 0, 0}}, false}, + {DateTime{Date{2016, 3, 20}, Time{24, 0, 0, 0}}, false}, + } { + got := test.dt.IsValid() + if got != test.want { + t.Errorf("%#v: got %t, want %t", test.dt, got, test.want) + } + } +} + +func TestDateTimeIn(t *testing.T) { + dt := DateTime{Date{2016, 1, 2}, Time{3, 4, 5, 6}} + got := dt.In(time.UTC) + want := time.Date(2016, 1, 2, 3, 4, 5, 6, time.UTC) + if !got.Equal(want) { + t.Errorf("got %v, want %v", got, want) + } +} + +func TestDateTimeBefore(t *testing.T) { + d1 := Date{2016, 12, 31} + d2 := Date{2017, 1, 1} + t1 := Time{5, 6, 7, 8} + t2 := Time{5, 6, 7, 9} + for _, test := range []struct { + dt1, dt2 DateTime + want bool + }{ + {DateTime{d1, t1}, DateTime{d2, t1}, true}, + {DateTime{d1, t1}, DateTime{d1, t2}, true}, + {DateTime{d2, t1}, DateTime{d1, t1}, false}, + {DateTime{d2, t1}, DateTime{d2, t1}, false}, + } { + if got := test.dt1.Before(test.dt2); got != test.want { + t.Errorf("%v.Before(%v): got %t, want %t", test.dt1, test.dt2, got, test.want) + } + } +} + +func TestDateTimeAfter(t *testing.T) { + d1 := Date{2016, 12, 31} + d2 := Date{2017, 1, 1} + t1 := Time{5, 6, 7, 8} + t2 := Time{5, 6, 7, 9} + for _, test := range []struct { + dt1, dt2 DateTime + want bool + }{ + {DateTime{d1, t1}, DateTime{d2, t1}, false}, + {DateTime{d1, t1}, DateTime{d1, t2}, false}, + {DateTime{d2, t1}, DateTime{d1, t1}, true}, + {DateTime{d2, t1}, DateTime{d2, t1}, false}, + } { + if got := test.dt1.After(test.dt2); got != test.want { + t.Errorf("%v.After(%v): got %t, want %t", test.dt1, test.dt2, got, test.want) + } + } +} + +func TestDateTimeIsZero(t *testing.T) { + for _, test := range []struct { + dt DateTime + want bool + }{ + {DateTime{Date{2016, 3, 20}, Time{0, 0, 0, 0}}, false}, + {DateTime{Date{}, Time{5, 44, 20, 0}}, false}, + {DateTime{Date{2016, 3, 20}, Time{}}, false}, + {DateTime{Date{0, 0, 0}, Time{5, 16, 47, 2}}, false}, + {DateTime{Date{2021, 9, 5}, Time{9, 30, 51, 6}}, false}, + {DateTime{Date{}, Time{}}, true}, + {DateTime{Date{0, 0, 0}, Time{0, 0, 0, 0}}, true}, + {DateTime{Date{}, Time{0, 0, 0, 0}}, true}, + {DateTime{Date{0, 0, 0}, Time{}}, true}, + } { + got := test.dt.IsZero() + if got != test.want { + t.Errorf("%#v: got %t, want %t", test.dt, got, test.want) + } + } +} + +func TestMarshalJSON(t *testing.T) { + for _, test := range []struct { + value interface{} + want string + }{ + {Date{1987, 4, 15}, `"1987-04-15"`}, + {Time{18, 54, 2, 0}, `"18:54:02"`}, + {DateTime{Date{1987, 4, 15}, Time{18, 54, 2, 0}}, `"1987-04-15T18:54:02"`}, + } { + bgot, err := json.Marshal(test.value) + if err != nil { + t.Fatal(err) + } + if got := string(bgot); got != test.want { + t.Errorf("%#v: got %s, want %s", test.value, got, test.want) + } + } +} + +func TestUnmarshalJSON(t *testing.T) { + var d Date + var tm Time + var dt DateTime + for _, test := range []struct { + data string + ptr interface{} + want interface{} + }{ + {`"1987-04-15"`, &d, &Date{1987, 4, 15}}, + {`"1987-04-\u0031\u0035"`, &d, &Date{1987, 4, 15}}, + {`"18:54:02"`, &tm, &Time{18, 54, 2, 0}}, + {`"1987-04-15T18:54:02"`, &dt, &DateTime{Date{1987, 4, 15}, Time{18, 54, 2, 0}}}, + } { + if err := json.Unmarshal([]byte(test.data), test.ptr); err != nil { + t.Fatalf("%s: %v", test.data, err) + } + if !cmp.Equal(test.ptr, test.want) { + t.Errorf("%s: got %#v, want %#v", test.data, test.ptr, test.want) + } + } + + for _, bad := range []string{"", `""`, `"bad"`, `"1987-04-15x"`, + `19870415`, // a JSON number + `11987-04-15x`, // not a JSON string + + } { + if json.Unmarshal([]byte(bad), &d) == nil { + t.Errorf("%q, Date: got nil, want error", bad) + } + if json.Unmarshal([]byte(bad), &tm) == nil { + t.Errorf("%q, Time: got nil, want error", bad) + } + if json.Unmarshal([]byte(bad), &dt) == nil { + t.Errorf("%q, DateTime: got nil, want error", bad) + } + } +} diff --git a/events/admission/admission.go b/events/admission/admission.go new file mode 100644 index 00000000..5da13dcf --- /dev/null +++ b/events/admission/admission.go @@ -0,0 +1,18 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package admission + +import ( + admissionv1 "k8s.io/api/admission/v1" +) + +// ReviewEventType is the cloudevents event type when an admission controller +// is invoked. +const ReviewEventType = "dev.chainguard.admission.v1" + +// ReviewBody is the body of the Chainguard event Occurrence when the event type +// is ReviewEventType. +type ReviewBody admissionv1.AdmissionReview diff --git a/events/admission/namespace.go b/events/admission/namespace.go new file mode 100644 index 00000000..8e9f3eb0 --- /dev/null +++ b/events/admission/namespace.go @@ -0,0 +1,55 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package admission + +import ( + "chainguard.dev/sdk/uidp" +) + +// NamespaceEventType is the cloudevents event type when a namespace's scope +// changes to include or exclude a particular admission controller. +const NamespaceEventType = "dev.chainguard.admission.namespace.v1" + +// Change is an enumeration of the types of changes we will emit events for. +type Change string + +const ( + // CreatedChange is emitted the first time we see a resource + CreatedChange Change = "created" + + // UpdatedChange is emitted when we see a resource change. + UpdatedChange Change = "updated" +) + +// EnforcerState is an enumeration of the possible states that the enforcer may +// be in. +type EnforcerState string + +const ( + // EnabledEnforcerState is emitted when enforcement is enabled. + EnabledEnforcerState EnforcerState = "enabled" + + // DisabledEnforcerState is emitted when enforcement is disabled. + DisabledEnforcerState EnforcerState = "disabled" +) + +// NamespaceBody is the body of the Chainguard event Occurrence when the event +// type is NamespaceEventType. +type NamespaceBody struct { + // Name is the name of the namespace as it appears within the user's cluster + // e.g. kube-system + Name string `json:"name"` + + // ID is the UIDP of the Namespace (whose parent is the Cluster UIDP) + ID uidp.UIDP `json:"id"` + + // Change holds the type of change to the namespace we have observed. + Change Change `json:"change"` + + // EnforcerState holds the state that policy enforcement is in for a + // particular namespace. + EnforcerState EnforcerState `json:"enforcer_state"` +} diff --git a/events/extensions.go b/events/extensions.go new file mode 100644 index 00000000..0a4e9520 --- /dev/null +++ b/events/extensions.go @@ -0,0 +1,43 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package events + +const ( + // DeliveryTypeKey is the CloudEvents extension name to filter on for kinds + // of deliveries. + DeliveryTypeKey = "chainguarddev1delivery" + // DeliveryTypeWebhook defines webhook delivery type. + DeliveryTypeWebhook = "webhook" + + // DeliveryWebhookTargetKey is the CloudEvents extension name to store the + // target url for webhooks. + DeliveryWebhookTargetKey = "chainguarddev1webhook" + + // DeliverySubscriptionKey is the CloudEvents extension name to store the + // subscription id that caused the event. + DeliverySubscriptionKey = "chainguarddev1subscription" + + // GroupKey is the CloudEvents extension name to store the group associated + // to the event. + GroupKey = "group" + // ClusterKey is the CloudEvents extension name to store the cluster associated + // to the event. + ClusterKey = "cluster" + // ImageKey is the CloudEvents extension name to store the image associated + // to the event. + ImageKey = "image" + + // AudienceKey labels an event for its intended audience ["internal", "customer"]. + AudienceKey = "audience" + // AudienceInternal are events intended for the internal platform. + AudienceInternal = "internal" + // AudienceCustomer are events targeting outside the platform. + AudienceCustomer = "customer" + + // ArrivalTimeKey is the CloudEvents extension name to store the Knative + // arrival timestamp + ArrivalTimeKey = "knativearrivaltime" +) diff --git a/events/generator/generator.go b/events/generator/generator.go new file mode 100644 index 00000000..70bad22d --- /dev/null +++ b/events/generator/generator.go @@ -0,0 +1,32 @@ +/* +Copyright 2024 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package generator + +import ( + "chainguard.dev/sdk/civil" + "google.golang.org/grpc/status" +) + +const GenerateVulnReportEventType = "dev.chainguard.vulnreport.generate.v1" + +// GenerateVulnReportEvent is an event used to trigger the generation of scan reports on-demand +type GenerateVulnReportEvent struct { + // RepoID identifies the UIDP of the repository used to generate the report + RepoID string `json:"repo_id"` + + // Digest holds the digest being used to generate the report. + // Digest will hold the sha256 content. + Digest string `json:"digest"` + + // Type determines whether the report being generated is a refresh. + Type string `json:"type"` + + // When holds when the generation of the report occurred. + When civil.DateTime `json:"when"` + + // Status to represent the problem + Status *status.Status `json:"status,omitempty"` +} diff --git a/events/occurrence.go b/events/occurrence.go new file mode 100644 index 00000000..d77dcd7c --- /dev/null +++ b/events/occurrence.go @@ -0,0 +1,41 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package events + +// Occurrence is the CloudEvent payload for events. +type Occurrence struct { + Actor *Actor `json:"actor,omitempty"` + + // Body is the resource that was created. + Body interface{} `json:"body,omitempty"` +} + +// Actor is the event payload form of which identity was responsible for the +// event. +type Actor struct { + // Subject is the identity that triggered this event. + Subject string `json:"subject"` + + // Actor contains the name/value pairs for each of the claims that were + // validated to assume the identity whose UIDP appears in Subject above. + Actor map[string]string `json:"act,omitempty"` +} + +// Eventable allows us to define a set of methods that allow event metadata to +// be collected. +type Eventable interface { + // CloudEventsSubject returns the subject to use for the cloudevent. + CloudEventsSubject() string +} + +// Extendable allows us to define a generic method to return extensions based on name. +type Extendable interface { + CloudEventsExtension(key string) (string, bool) +} + +type Redactable interface { + CloudEventsRedact() interface{} +} diff --git a/events/policy/policy.go b/events/policy/policy.go new file mode 100644 index 00000000..f1748aa6 --- /dev/null +++ b/events/policy/policy.go @@ -0,0 +1,46 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package policy + +import cloudevents "github.com/cloudevents/sdk-go/v2" + +// ChangedEventType is the cloudevents event type for validation state change for policy. +const ChangedEventType = "dev.chainguard.policy.validation.changed.v1" + +const ( + // NewChange is for new policy state. + NewChange = "new" + // DegradedChange says the policy was passing and now is failing. + DegradedChange = "degraded" + // ImprovedChange says the policy was failing and now is passing. + ImprovedChange = "improved" +) + +// ImagePolicyRecord is policy states for an image in a cluster. +type ImagePolicyRecord struct { + // ClusterID identifies the specific cluster the Request pertains to. + ClusterID string `json:"cluster_id,omitempty"` + // ImageID that this ExistenceRecord belongs to. + ImageID string `json:"image_id,omitempty"` + // LastSeen is the last time we've seen this image_id anywhere on this cluster. + LastSeen *cloudevents.Timestamp `json:"last_seen,omitempty"` + // Policies are a map of policy name to policy state that apply to this image. + Policies map[string]*State `json:"policies,omitempty"` +} + +// State is the state of a policy and how it has changed. +type State struct { + // LastChecked is the time the information was last updated. + LastChecked *cloudevents.Timestamp `json:"last_checked,omitempty"` + // Valid is if the image passes the policy. + Valid bool `json:"valid"` + // Diagnostic holds any diagnostic messages surfaced during the evaluation + // of this policy. + Diagnostic string `json:"diagnostic,omitempty"` + // Change is the kind of change we have seen for this image between checks. + // Can be [Empty, "new", "degraded", "improved"] + Change string `json:"change,omitempty"` +} diff --git a/events/receiver/receiver.go b/events/receiver/receiver.go new file mode 100644 index 00000000..565f5008 --- /dev/null +++ b/events/receiver/receiver.go @@ -0,0 +1,66 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package receiver + +import ( + "context" + "crypto/sha256" + "fmt" + "net/http" + "strings" + + "chainguard.dev/sdk/events" + cloudevents "github.com/cloudevents/sdk-go/v2" + cehttp "github.com/cloudevents/sdk-go/v2/protocol/http" + "github.com/coreos/go-oidc/v3/oidc" +) + +// Handler is a function that handles a CloudEvent. +type Handler func(ctx context.Context, event cloudevents.Event) error + +// New returns a new Handler that verifies the Event was sent by Chainguard, +// intended for the specified Group, then invokes the provided Handler. +// +// TODO(jason): Accept options for configuring the issuer and accepted event types. +func New(ctx context.Context, issuer, group string, fn Handler) (Handler, error) { + // Construct a verifier that ensures tokens are issued by the Chainguard + // issuer we expect and are intended for a customer webhook. + provider, err := oidc.NewProvider(ctx, issuer) + if err != nil { + return nil, fmt.Errorf("failed to create provider: %w", err) + } + verifier := provider.Verifier(&oidc.Config{ClientID: "customer"}) + + return func(ctx context.Context, event cloudevents.Event) error { + // We expect Chainguard webhooks to pass an Authorization header. + auth := strings.TrimPrefix(cehttp.RequestDataFromContext(ctx).Header.Get("Authorization"), "Bearer ") + if auth == "" { + return cloudevents.NewHTTPResult(http.StatusUnauthorized, "Unauthorized") + } + + claims := events.WebhookCustomClaims{} + + // Verify that the token is well-formed, and in fact intended for us! + if tok, err := verifier.Verify(ctx, auth); err != nil { + return cloudevents.NewHTTPResult(http.StatusForbidden, "unable to verify token: %w", err) + } else if !strings.HasPrefix(tok.Subject, "webhook:") { + return cloudevents.NewHTTPResult(http.StatusForbidden, "subject should be from the Chainguard webhook component, got: %s", tok.Subject) + } else if got := strings.TrimPrefix(tok.Subject, "webhook:"); got != group { + return cloudevents.NewHTTPResult(http.StatusForbidden, "this token is intended for %s, wanted one for %s", got, group) + } else if err := tok.Claims(&claims); err != nil { + return cloudevents.NewHTTPResult(http.StatusForbidden, "this token does not contain the Chainguard custom webhook claims: %v", err) + } + + h := sha256.New() + h.Write(event.Data()) + bs := h.Sum(nil) + if got, want := fmt.Sprintf("sha256:%x", bs), claims.Webhook.Digest; got != want { + return cloudevents.NewHTTPResult(http.StatusForbidden, "this token is intended for a message with digest %s, got message with digest %s", want, got) + } + + return fn(ctx, event) + }, nil +} diff --git a/events/registry/registry.go b/events/registry/registry.go new file mode 100644 index 00000000..dc338ac2 --- /dev/null +++ b/events/registry/registry.go @@ -0,0 +1,91 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package registry + +import "chainguard.dev/sdk/civil" + +const ( + // PulledEventType is the cloudevents event type for registry pulls + PulledEventType = "dev.chainguard.registry.pull.v1" + + // PushedEventType is the cloudevents event type for registry pushes + PushedEventType = "dev.chainguard.registry.push.v1" +) + +// PullEvent describes an item being pulled from the registry. +type PullEvent struct { + // Repository identifies the repository being pulled + Repository string `json:"repository"` + + // RepoID identifies the UIDP of the repository being pulled + RepoID string `json:"repo_id"` + + // Tag holds the tag being pulled, if there is one. + Tag string `json:"tag,omitempty"` + + // Digest holds the digest being pulled. + // Digest will hold the sha256 of the content being fetched, whether that is + // a blob or a manifest. + Digest string `json:"digest"` + + // Method holds the HTTP method of the request. For pulls, this should be + // one of HEAD (digest resolution or existence check), or GET to actually + // fetch the content. + Method string `json:"method"` + + // Type determines whether the object being fetched is a manifest or blob. + Type string `json:"type"` + + // When holds when the pull occurred. + When civil.DateTime `json:"when"` + + // Location holds the detected approximate location of the client who pulled. + // For example, "ColumbusOHUS" or "Minato City13JP". + Location string `json:"location"` + + // UserAgent holds the user-agent of the client who pulled. + UserAgent string `json:"user_agent"` + + Error *Error `json:"error,omitempty"` +} + +// PushEvent describes an item being pushed to the registry. +type PushEvent struct { + // Repository identifies the repository being pushed + Repository string `json:"repository"` + + // RepoID identifies the UIDP of the repository being pushed + RepoID string `json:"repo_id"` + + // Tag holds the tag being pushed, if there is one. + Tag string `json:"tag,omitempty"` + + // Digest holds the digest being pushed. + // Digest will hold the sha256 of the content being pushed, whether that is + // a blob or a manifest. + Digest string `json:"digest"` + + // Type determines whether the object being pushed is a manifest or blob. + Type string `json:"type"` + + // When holds when the push occurred. + When civil.DateTime `json:"when"` + + // Location holds the detected approximate location of the client who pushed. + // For example, "ColumbusOHUS" or "Minato City13JP". + Location string `json:"location"` + + // UserAgent holds the user-agent of the client who pushed. + UserAgent string `json:"user_agent"` + + Error *Error `json:"error,omitempty"` +} + +type Error struct { + Status int `json:"status"` + Code string `json:"code"` + Message string `json:"message"` +} diff --git a/events/webhook.go b/events/webhook.go new file mode 100644 index 00000000..56a17013 --- /dev/null +++ b/events/webhook.go @@ -0,0 +1,14 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package events + +// WebhookCustomClaims holds the custom claims embedded in the webhook's +// OIDC authorization token. +type WebhookCustomClaims struct { + Webhook struct { + Digest string `json:"digest"` + } `json:"webhook"` +} diff --git a/go.mod b/go.mod new file mode 100644 index 00000000..dbe084d2 --- /dev/null +++ b/go.mod @@ -0,0 +1,155 @@ +module chainguard.dev/sdk + +go 1.21.2 + +toolchain go1.21.5 + +require ( + chainguard.dev/go-grpc-kit v0.17.2 + chainguard.dev/go-oidctest v0.2.0 + github.com/aws/aws-sdk-go-v2 v1.24.1 + github.com/bits-and-blooms/bitset v1.13.0 + github.com/chainguard-dev/clog v1.3.1 + github.com/cloudevents/sdk-go/v2 v2.15.0 + github.com/coreos/go-oidc/v3 v3.9.0 + github.com/google/go-cmp v0.6.0 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 + github.com/microcosm-cc/bluemonday v1.0.26 + github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 + github.com/russross/blackfriday/v2 v2.1.0 + github.com/sigstore/policy-controller v0.8.4 + go.uber.org/zap v1.26.0 + golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 + golang.org/x/oauth2 v0.17.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe + google.golang.org/grpc v1.61.1 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 + google.golang.org/protobuf v1.32.0 + gopkg.in/square/go-jose.v2 v2.6.0 + k8s.io/api v0.29.1 + k8s.io/apimachinery v0.29.1 + knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845 + sigs.k8s.io/yaml v1.4.0 +) + +require ( + cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/kms v1.15.5 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 // indirect + github.com/aws/aws-sdk-go v1.50.1 // indirect + github.com/aws/aws-sdk-go-v2/config v1.26.6 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.16.16 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 // indirect + github.com/aws/aws-sdk-go-v2/service/kms v1.27.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 // indirect + github.com/aws/smithy-go v1.19.0 // indirect + github.com/aymerick/douceur v0.2.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/blendle/zapdriver v1.3.1 // indirect + github.com/cenkalti/backoff/v3 v3.2.2 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/evanphx/json-patch/v5 v5.7.0 // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-jose/go-jose/v3 v3.0.1 // indirect + github.com/go-logr/logr v1.3.0 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v5 v5.0.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/go-containerregistry v0.18.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/s2a-go v0.1.7 // indirect + github.com/google/uuid v1.5.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/gorilla/css v1.0.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.5 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 // indirect + github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect + github.com/hashicorp/go-sockaddr v1.0.6 // indirect + github.com/hashicorp/hcl v1.0.1-vault-5 // indirect + github.com/hashicorp/vault/api v1.10.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jellydator/ttlcache/v3 v3.1.1 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kelseyhightower/envconfig v1.4.0 // indirect + github.com/kylelemons/godebug v1.1.0 // indirect + github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 // indirect + github.com/mattn/go-colorable v0.1.9 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/ryanuber/go-glob v1.0.0 // indirect + github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect + github.com/sigstore/sigstore v1.8.1 // indirect + github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.1 // indirect + github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.1 // indirect + github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.1 // indirect + github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.1 // indirect + github.com/spf13/cobra v1.8.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/theupdateframework/go-tuf v0.7.0 // indirect + github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect + go.opentelemetry.io/otel v1.21.0 // indirect + go.opentelemetry.io/otel/metric v1.21.0 // indirect + go.opentelemetry.io/otel/trace v1.21.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.19.0 // indirect + golang.org/x/net v0.21.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.17.0 // indirect + golang.org/x/term v0.17.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.5.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect + google.golang.org/api v0.156.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect + gopkg.in/go-jose/go-jose.v2 v2.6.2 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/client-go v0.29.1 // indirect + k8s.io/klog/v2 v2.110.1 // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/release-utils v0.7.7 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 00000000..4ca5f6bb --- /dev/null +++ b/go.sum @@ -0,0 +1,534 @@ +chainguard.dev/go-grpc-kit v0.17.2 h1:WVYmCjDncj1MkEiU4qq7nIgzyqlCU+qyk0lJvTJ09bs= +chainguard.dev/go-grpc-kit v0.17.2/go.mod h1:uZTFtFzAGyVFHhJexiHbna4N5rHQU7aUXPwytlGhqz4= +chainguard.dev/go-oidctest v0.2.0 h1:03EuCjzAjbCvIOpSA+135g51Wdefz3UgQ8OtfSFQKCI= +chainguard.dev/go-oidctest v0.2.0/go.mod h1:1qO3asevouDqgMw4sgaVSzXqgDZQN7B6PtxLoUTzndo= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.111.0 h1:YHLKNupSD1KqjDbQ3+LVdQ81h/UJbJyZG203cEfnQgM= +cloud.google.com/go v0.111.0/go.mod h1:0mibmpKP1TyOOFYQY5izo0LnT+ecvOQ0Sg3OdmMiNRU= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/kms v1.15.5 h1:pj1sRfut2eRbD9pFRjNnPNg/CzJPuQAzUujMIM1vVeM= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 h1:MyVTgWR8qd/Jw1Le0NZebGBUCLbtak3bJ3z1OlqZBpw= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1/go.mod h1:GpPjLhVR9dnUoJMyHWSPy71xY9/lcmpzIPZXmF0FCVY= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 h1:D3occbWoio4EBLkbkevetNMAVX197GkzbUMtqjGWn80= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0/go.mod h1:bTSOgj05NGRuHHhQwAdPnYr9TOdNmKlZTgGLL6nyAdI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 h1:hVeq+yCyUi+MsoO/CU95yqCIcdzra5ovzk8Q2BBpV2M= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/aws/aws-sdk-go v1.50.1 h1:AwnLUM7TcH9vMZqA4TcDKmGfLmDW5VXwT5tPH6kXylo= +github.com/aws/aws-sdk-go v1.50.1/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU= +github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= +github.com/aws/aws-sdk-go-v2/config v1.26.6 h1:Z/7w9bUqlRI0FFQpetVuFYEsjzE3h7fpU6HuGmfPL/o= +github.com/aws/aws-sdk-go-v2/config v1.26.6/go.mod h1:uKU6cnDmYCvJ+pxO9S4cWDb2yWWIH5hra+32hVh1MI4= +github.com/aws/aws-sdk-go-v2/credentials v1.16.16 h1:8q6Rliyv0aUFAVtzaldUEcS+T5gbadPbWdV1WcAddK8= +github.com/aws/aws-sdk-go-v2/credentials v1.16.16/go.mod h1:UHVZrdUsv63hPXFo1H7c5fEneoVo9UXiz36QG1GEPi0= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 h1:c5I5iH+DZcH3xOIMlz3/tCKJDaHFwYEmxvlh2fAcFo8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11/go.mod h1:cRrYDYAMUohBJUtUnOhydaMHtiK/1NZ0Otc9lIb6O0Y= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3 h1:n3GDfwqF2tzEkXlv5cuy4iy7LpKDtqDMcNLfZDu9rls= +github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 h1:DBYTXwIGQSGs9w4jKm60F5dmCQ3EEruxdc0MFh+3EY4= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= +github.com/aws/aws-sdk-go-v2/service/kms v1.27.9 h1:W9PbZAZAEcelhhjb7KuwUtf+Lbc+i7ByYJRuWLlnxyQ= +github.com/aws/aws-sdk-go-v2/service/kms v1.27.9/go.mod h1:2tFmR7fQnOdQlM2ZCEPpFnBIQD1U8wmXmduBgZbOag0= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 h1:eajuO3nykDPdYicLlP3AGgOyVN3MOlFmZv7WGTuJPow= +github.com/aws/aws-sdk-go-v2/service/sso v1.18.7/go.mod h1:+mJNDdF+qiUlNKNC3fxn74WWNN+sOiGOEImje+3ScPM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 h1:QPMJf+Jw8E1l7zqhZmMlFw6w1NmfkfiSK8mS4zOx3BA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7/go.mod h1:ykf3COxYI0UJmxcfcxcVuz7b6uADi1FkiUz6Eb7AgM8= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 h1:NzO4Vrau795RkUdSHKEwiR01FaGzGOH1EETJ+5QHnm0= +github.com/aws/aws-sdk-go-v2/service/sts v1.26.7/go.mod h1:6h2YuIoxaMSCFf5fi1EgZAwdfkGMgDY+DVfa61uLe4U= +github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= +github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= +github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= +github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= +github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= +github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= +github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chainguard-dev/clog v1.3.1 h1:CDNCty5WKQhJzoOPubk0GdXt+bPQyargmfClqebrpaQ= +github.com/chainguard-dev/clog v1.3.1/go.mod h1:cV516KZWqYc/phZsCNwF36u/KMGS+Gj5Uqeb8Hlp95Y= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudevents/sdk-go/v2 v2.15.0 h1:aKnhLQhyoJXqEECQdOIZnbZ9VupqlidE6hedugDGr+I= +github.com/cloudevents/sdk-go/v2 v2.15.0/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101 h1:7To3pQ+pZo0i3dsWEbinPNFs5gPSBOsJtx3wTT94VBY= +github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be h1:J5BL2kskAlV9ckgEsNQXscjIaLiOYiZ75d4e94E6dcQ= +github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be/go.mod h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w= +github.com/coreos/go-oidc/v3 v3.9.0 h1:0J/ogVOd4y8P0f0xUh8l9t07xRP/d8tccvjHl2dcsSo= +github.com/coreos/go-oidc/v3 v3.9.0/go.mod h1:rTKz2PYwftcrtoCzV5g5kvfJoWcm0Mk8AF8y1iAQro4= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= +github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= +github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= +github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA= +github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= +github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= +github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 h1:0VpGH+cDhbDtdcweoyCVsF3fhN8kejK6rFe/2FFX2nU= +github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49/go.mod h1:BkkQ4L1KS1xMt2aWSPStnn55ChGC0DPOn2FQYj+f25M= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.18.0 h1:ShE7erKNPqRh5ue6Z9DUOlk04WsnFWPO6YGr3OxnfoQ= +github.com/google/go-containerregistry v0.18.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 h1:JYghRBlGCZyCF2wNUJ8W0cwaQdtpcssJ4CgC406g+WU= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.16.2 h1:K4ev2ib4LdQETX5cSZBG0DVLk1jwGqSPXBjdah3veNs= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= +github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 h1:iBt4Ew4XEGLfh6/bPk4rSYmuZJGizr6/x/AEizP0CQc= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8/go.mod h1:aiJI+PIApBRQG7FZTEBx5GiiX+HbOHilUdNxUZi4eV0= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= +github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEyqO4u9I= +github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI= +github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= +github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= +github.com/hashicorp/vault/api v1.10.0 h1:/US7sIjWN6Imp4o/Rj1Ce2Nr5bki/AXi9vAW3p2tOJQ= +github.com/hashicorp/vault/api v1.10.0/go.mod h1:jo5Y/ET+hNyz+JnKDt8XLAdKs+AM0G5W0Vp1IrFI8N8= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jellydator/ttlcache/v3 v3.1.1 h1:RCgYJqo3jgvhl+fEWvjNW8thxGWsgxi+TPhRir1Y9y8= +github.com/jellydator/ttlcache/v3 v3.1.1/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmhodges/clock v1.2.0 h1:eq4kys+NI0PLngzaHEe7AmPT90XMGIEySD1JfV1PDIs= +github.com/jmhodges/clock v1.2.0/go.mod h1:qKjhA7x7u/lQpPB1XAqX1b1lCI/w3/fNuYpI/ZjLynI= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 h1:WGrKdjHtWC67RX96eTkYD2f53NDHhrq/7robWTAfk4s= +github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491/go.mod h1:o158RFmdEbYyIZmXAbrvmJWesbyxlLKee6X64VPVuOc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58= +github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= +github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= +github.com/sigstore/policy-controller v0.8.4 h1:1ieS2W4GfcWfxvdE7lbfZlgW2dSnUinae2OoUM5/7Vg= +github.com/sigstore/policy-controller v0.8.4/go.mod h1:jQtLtLpcwzIuRrCtNjWLWfSQlI4ompYOU9CW5dPi6t8= +github.com/sigstore/sigstore v1.8.1 h1:mAVposMb14oplk2h/bayPmIVdzbq2IhCgy4g6R0ZSjo= +github.com/sigstore/sigstore v1.8.1/go.mod h1:02SL1158BSj15bZyOFz7m+/nJzLZfFd9A8ab3Kz7w/E= +github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.1 h1:rEDdUefulkIQaMJyzLwtgPDLNXBIltBABiFYfb0YmgQ= +github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.1/go.mod h1:RCdYCc1IxCYWzh2IdzdA6Yf7JIY0cMRqH08fpQYechw= +github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.1 h1:DvRWG99QGWZC5mp42SEde2Xke/Q384Idnj2da7yB+Mk= +github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.1/go.mod h1:s13mo3a0UCQS3+PAUUZfvKe48sMDMsHk2GE1b2YfPcU= +github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.1 h1:lwdRsJv1UbBemuk7w5YfXAQilQxMoFevrzamdPbG0wY= +github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.1/go.mod h1:2OaSQ80EcdyVRSQ3T4d1lsc6Scopblsiq8U2AEk5K1A= +github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.1 h1:9Ki0qudKpc1FQdef7xHO2bkLyTuw+qNUpWRzjBEmF4c= +github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.1/go.mod h1:nhIgyu4YwwNgalIwTGsoAzam16jjAn3ADRSWKbWPwGI= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/theupdateframework/go-tuf v0.7.0 h1:CqbQFrWo1ae3/I0UCblSbczevCCbS31Qvs5LdxRWqRI= +github.com/theupdateframework/go-tuf v0.7.0/go.mod h1:uEB7WSY+7ZIugK6R1hiBMBjQftaFzn7ZCDJcp1tCUug= +github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= +github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 h1:mchzmB1XO2pMaKFRqk/+MV3mgGG96aqaPXaMifQU47w= +golang.org/x/exp v0.0.0-20231108232855-2478ac86f678/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= +golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= +golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= +gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/api v0.156.0 h1:yloYcGbBtVYjLKQe4enCunxvwn3s2w/XPrrhVf6MsvQ= +google.golang.org/api v0.156.0/go.mod h1:bUSmn4KFO0Q+69zo9CNIDp4Psi6BqM0np0CbzKRSiSY= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac h1:ZL/Teoy/ZGnzyrqK/Optxxp2pmVh+fmJ97slxSRyzUg= +google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k= +google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe h1:0poefMBYvYbs7g5UkjS6HcxBPaTRAmznle9jnxYoAI8= +google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe h1:bQnxqljG/wqi4NTXu2+DJ3n7APcEA882QZ1JvhQAq9o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY= +google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/go-jose/go-jose.v2 v2.6.2 h1:Rl5+9rA0kG3vsO1qhncMPRT5eHICihAMQYJkD7u/i4M= +gopkg.in/go-jose/go-jose.v2 v2.6.2/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= +gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/api v0.29.1 h1:DAjwWX/9YT7NQD4INu49ROJuZAAAP/Ijki48GUPzxqw= +k8s.io/api v0.29.1/go.mod h1:7Kl10vBRUXhnQQI8YR/R327zXC8eJ7887/+Ybta+RoQ= +k8s.io/apimachinery v0.29.1 h1:KY4/E6km/wLBguvCZv8cKTeOwwOBqFNjwJIdMkMbbRc= +k8s.io/apimachinery v0.29.1/go.mod h1:6HVkd1FwxIagpYrHSwJlQqZI3G9LfYWRPAkUvLnXTKU= +k8s.io/client-go v0.29.1 h1:19B/+2NGEwnFLzt0uB5kNJnfTsbV8w6TgQRz9l7ti7A= +k8s.io/client-go v0.29.1/go.mod h1:TDG/psL9hdet0TI9mGyHJSgRkW3H9JZk2dNEUS7bRks= +k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= +k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= +k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845 h1:NJm46LR4AeO03E0H7B+TYTkelTSnsswktpIAaK1pkTg= +knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845/go.mod h1:9UXGl+Sue7Am1/mbvLimpPZwQlOkbjAMMIenH60pVJ4= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= +sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/release-utils v0.7.7 h1:JKDOvhCk6zW8ipEOkpTGDH/mW3TI+XqtPp16aaQ79FU= +sigs.k8s.io/release-utils v0.7.7/go.mod h1:iU7DGVNi3umZJ8q6aHyUFzsDUIaYwNnNKGHo3YE5E3s= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/hack/tools.go b/hack/tools.go new file mode 100644 index 00000000..eea6e0ce --- /dev/null +++ b/hack/tools.go @@ -0,0 +1,17 @@ +//go:build tools +// +build tools + +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package tools + +import ( + // Proto dependencies. + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway" + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2" + _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc" + _ "google.golang.org/protobuf/cmd/protoc-gen-go" +) diff --git a/hack/update-codegen.sh b/hack/update-codegen.sh new file mode 100755 index 00000000..a557bd13 --- /dev/null +++ b/hack/update-codegen.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +# Copyright 2022 Chainguard, Inc. +# SPDX-License-Identifier: Apache-2.0 + +set -o errexit +set -o nounset +set -o pipefail + +REPO_ROOT_DIR=$PWD/$(dirname "$0")/.. + +echo === Tidying up for Golang +go mod tidy + +echo === Generating for Golang +go generate ./... + +# Make sure our dependencies are up-to-date +${REPO_ROOT_DIR}/hack/update-deps.sh diff --git a/hack/update-deps.sh b/hack/update-deps.sh new file mode 100755 index 00000000..19e9873e --- /dev/null +++ b/hack/update-deps.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# Copyright 2022 Chainguard, Inc. +# SPDX-License-Identifier: Apache-2.0 + +set -o errexit +set -o nounset +set -o pipefail + +REPO_ROOT_DIR=$(dirname "$0")/.. +pushd ${REPO_ROOT_DIR} + +echo === Update Deps for Golang +go mod tidy diff --git a/hack/verify-golangci-lint.sh b/hack/verify-golangci-lint.sh new file mode 100755 index 00000000..ec8c6ef0 --- /dev/null +++ b/hack/verify-golangci-lint.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +# Copyright 2023 Chainguard, Inc. +# SPDX-License-Identifier: Apache-2.0 + +set -o errexit +set -o nounset +set -o pipefail + +VERSION=v1.54.2 +URL_BASE=https://raw.githubusercontent.com/golangci/golangci-lint +URL=$URL_BASE/$VERSION/install.sh +# If you update the version above you might need to update the checksum +# if it does not match. We say might because in the past the install script +# has been unchanged even if there is a new verion of golangci-lint. +# To obtain the checksum, download the install script and run the following +# command: +# > sha256sum +INSTALL_CHECKSUM=060f1f3deb31b3d3b9515d691d9a776354cd63c7fcb5e036f18f0444cf2c934b + +if [[ ! -f .golangci.yml ]]; then + echo 'ERROR: missing .golangci.yml in repo root' >&2 + exit 1 +fi + +if ! command -v golangci-lint; then + INSTALL_SCRIPT=$(mktemp -d)/install.sh + curl -sfL $URL >$INSTALL_SCRIPT + if echo "${INSTALL_CHECKSUM} $INSTALL_SCRIPT" | sha256sum --check; then + chmod 755 $INSTALL_SCRIPT + $INSTALL_SCRIPT -b /tmp $VERSION + export PATH=$PATH:/tmp + pwd + else + echo 'ERROR: install script sha256 checksum invalid' >&2 + exit 1 + fi +fi + +golangci-lint version + +error=0 +while read -r i; do + echo "Checking golangci-lint for $i" + pushd "$i" + golangci-lint run ./... || error=1 + popd +done <<< "$(find . -name go.mod -exec dirname {} \;)" + +exit $error diff --git a/policy/parse.go b/policy/parse.go new file mode 100644 index 00000000..206c1a68 --- /dev/null +++ b/policy/parse.go @@ -0,0 +1,144 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package policy + +import ( + "context" + "encoding/json" + "fmt" + "strings" + + "github.com/sigstore/policy-controller/pkg/apis/glob" + "github.com/sigstore/policy-controller/pkg/apis/policy/v1alpha1" + "github.com/sigstore/policy-controller/pkg/apis/policy/v1beta1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "knative.dev/pkg/apis" + "sigs.k8s.io/yaml" +) + +// Parse decodes a provided YAML document containing zero or more objects into +// a collection of unstructured.Unstructured objects. +func Parse(_ context.Context, document string) ([]*unstructured.Unstructured, error) { + docs := strings.Split(document, "\n---\n") + + objs := make([]*unstructured.Unstructured, 0, len(docs)) + for i, doc := range docs { + doc = strings.TrimSpace(doc) + if doc == "" { + continue + } + var obj unstructured.Unstructured + if err := yaml.Unmarshal([]byte(doc), &obj); err != nil { + return nil, fmt.Errorf("decoding object[%d]: %w", i, err) + } + if obj.GetAPIVersion() == "" { + return nil, apis.ErrMissingField("apiVersion").ViaIndex(i) + } + if obj.GetName() == "" { + return nil, apis.ErrMissingField("metadata.name").ViaIndex(i) + } + objs = append(objs, &obj) + } + return objs, nil +} + +// ParseClusterImagePolicies returns ClusterImagePolicy objects found in the +// policy document. +func ParseClusterImagePolicies(ctx context.Context, document string) (cips []*v1beta1.ClusterImagePolicy, warns error, err error) { + if warns, err = Validate(ctx, document); err != nil { + return nil, warns, err + } + + cips, err = parseClusterImagePolicies(ctx, document) + if err != nil { + return nil, warns, err + } + + return cips, warns, nil +} + +// UnsafeParseClusterImagePolicies returns ClusterImagePolicy objects found in the +// policy document, without validating if the policy is valid. +func UnsafeParseClusterImagePolicies(ctx context.Context, document string) (cips []*v1beta1.ClusterImagePolicy, err error) { + return parseClusterImagePolicies(ctx, document) +} + +// CoversImage parses the given policy document, and checks if the target image +// matches any of the image globs included in the policy. +func CoversImage(ctx context.Context, document, target string) (bool, error) { + cips, _, err := ParseClusterImagePolicies(ctx, document) + if err != nil { + return false, err + } + if len(cips) != 1 { + return false, fmt.Errorf("document must contain exactly one ClusterImagePolicy (%d found)", len(cips)) + } + + for _, image := range cips[0].Spec.Images { + ok, err := glob.Match(image.Glob, target) + if err != nil { + return false, err + } + if ok { + return true, nil + } + } + return false, nil +} + +func parseClusterImagePolicies(ctx context.Context, document string) (cips []*v1beta1.ClusterImagePolicy, err error) { + ol, err := Parse(ctx, document) + if err != nil { + return nil, err + } + + cips = make([]*v1beta1.ClusterImagePolicy, 0) + for _, obj := range ol { + gv, err := schema.ParseGroupVersion(obj.GetAPIVersion()) + if err != nil { + // Practically unstructured.Unstructured won't let this happen. + return nil, fmt.Errorf("error parsing apiVersion of: %w", err) + } + + cip := &v1beta1.ClusterImagePolicy{} + + switch gv.WithKind(obj.GetKind()) { + case v1alpha1.SchemeGroupVersion.WithKind("ClusterImagePolicy"): + v1a1 := &v1alpha1.ClusterImagePolicy{} + if err := convert(obj, v1a1); err != nil { + return nil, err + } + if err := v1a1.ConvertTo(ctx, cip); err != nil { + return nil, err + } + + case v1beta1.SchemeGroupVersion.WithKind("ClusterImagePolicy"): + // This is allowed, but we should convert things. + if err := convert(obj, cip); err != nil { + return nil, err + } + + default: + continue + } + + cips = append(cips, cip) + } + return cips, nil +} + +func convert(from interface{}, to runtime.Object) error { + bs, err := json.Marshal(from) + if err != nil { + return fmt.Errorf("Marshal() = %w", err) + } + if err := json.Unmarshal(bs, to); err != nil { + return fmt.Errorf("Unmarshal() = %w", err) + } + return nil +} diff --git a/policy/parse_test.go b/policy/parse_test.go new file mode 100644 index 00000000..e6345ea3 --- /dev/null +++ b/policy/parse_test.go @@ -0,0 +1,181 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package policy + +import ( + "context" + "errors" + "testing" + + "github.com/google/go-cmp/cmp" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "knative.dev/pkg/apis" +) + +func TestParse(t *testing.T) { + tests := []struct { + name string + doc string + want []*unstructured.Unstructured + wantErr error + }{{ + name: "good single object", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: {} +`, + want: []*unstructured.Unstructured{{ + Object: map[string]interface{}{ + "apiVersion": "policy.sigstore.dev/v1beta1", + "kind": "ClusterImagePolicy", + "metadata": map[string]interface{}{ + "name": "blah", + }, + "spec": map[string]interface{}{}, + }, + }}, + }, { + name: "good multi-object", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: {} +--- +--- +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: foo +spec: {} +--- + +--- +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: bar +spec: {} +`, + want: []*unstructured.Unstructured{{ + Object: map[string]interface{}{ + "apiVersion": "policy.sigstore.dev/v1beta1", + "kind": "ClusterImagePolicy", + "metadata": map[string]interface{}{ + "name": "blah", + }, + "spec": map[string]interface{}{}, + }, + }, { + Object: map[string]interface{}{ + "apiVersion": "policy.sigstore.dev/v1beta1", + "kind": "ClusterImagePolicy", + "metadata": map[string]interface{}{ + "name": "foo", + }, + "spec": map[string]interface{}{}, + }, + }, { + Object: map[string]interface{}{ + "apiVersion": "policy.sigstore.dev/v1beta1", + "kind": "ClusterImagePolicy", + "metadata": map[string]interface{}{ + "name": "bar", + }, + "spec": map[string]interface{}{}, + }, + }}, + }, { + name: "bad missing apiVersion", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: {} +--- +# Missing: apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: foo +spec: {} +--- +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: bar +spec: {} +`, + wantErr: apis.ErrMissingField("[1].apiVersion"), + }, { + name: "bad missing kind", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: {} +--- +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: foo +spec: {} +--- +apiVersion: policy.sigstore.dev/v1beta1 +# Missing: kind: ClusterImagePolicy +metadata: + name: bar +spec: {} +`, + wantErr: errors.New(`decoding object[2]: error unmarshaling JSON: while decoding JSON: Object 'Kind' is missing in '{"apiVersion":"policy.sigstore.dev/v1beta1","metadata":{"name":"bar"},"spec":{}}'`), + }, { + name: "bad missing apiVersion", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + # Missing: name: blah +sp dec: {} +--- +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: foo +spec: {} +--- +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: bar +spec: {} +`, + wantErr: apis.ErrMissingField("[0].metadata.name"), + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + got, gotErr := Parse(context.Background(), test.doc) + + switch { + case (gotErr != nil) != (test.wantErr != nil): + t.Fatalf("Parse() = %v, wanted %v", gotErr, test.wantErr) + case gotErr != nil && gotErr.Error() != test.wantErr.Error(): + t.Fatalf("Parse() = %v, wanted %v", gotErr, test.wantErr) + case gotErr != nil: + return // This was an error test. + } + + if diff := cmp.Diff(got, test.want); diff != "" { + t.Errorf("Parse (-got, +want) = %s", diff) + } + }) + } +} diff --git a/policy/validate.go b/policy/validate.go new file mode 100644 index 00000000..a785fe5b --- /dev/null +++ b/policy/validate.go @@ -0,0 +1,103 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package policy + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + + "github.com/sigstore/policy-controller/pkg/apis/policy/v1alpha1" + "github.com/sigstore/policy-controller/pkg/apis/policy/v1beta1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "knative.dev/pkg/apis" +) + +var ( + // ErrEmptyDocument is the error returned when no document body is + // specified. + ErrEmptyDocument = errors.New("document is required to create policy") + + // ErrUnknownType is the error returned when a type contained in the policy + // is unrecognized. + ErrUnknownType = errors.New("unknown type") +) + +// Validate decodes a provided YAML document containing zero or more objects +// and performs limited validation on them. +func Validate(ctx context.Context, document string) (warns error, err error) { + if len(document) == 0 { + return nil, ErrEmptyDocument + } + + uol, err := Parse(ctx, document) + if err != nil { + return nil, err + } + + for i, uo := range uol { + switch uo.GroupVersionKind() { + case v1beta1.SchemeGroupVersion.WithKind("ClusterImagePolicy"): + if warns, err = validate(ctx, uo, &v1beta1.ClusterImagePolicy{}); err != nil { + return + } + + case v1alpha1.SchemeGroupVersion.WithKind("ClusterImagePolicy"): + if warns, err = validate(ctx, uo, &v1alpha1.ClusterImagePolicy{}); err != nil { + return + } + + case corev1.SchemeGroupVersion.WithKind("Secret"): + if uo.GetNamespace() != "cosign-system" { + return warns, apis.ErrInvalidValue(uo.GetNamespace(), "metadata.namespace").ViaIndex(i) + } + // Any additional validation worth performing? Should we check the + // schema of the secret matches the expectations of cosigned? + + default: + return warns, fmt.Errorf("%w: %v", ErrUnknownType, uo.GroupVersionKind()) + } + } + return warns, nil +} + +type crd interface { + apis.Validatable + apis.Defaultable +} + +func validate(ctx context.Context, uo *unstructured.Unstructured, v crd) (warns error, err error) { + b, err := json.Marshal(uo) + if err != nil { + return nil, fmt.Errorf("unable to marshal: %w", err) + } + + dec := json.NewDecoder(bytes.NewBuffer(b)) + dec.DisallowUnknownFields() + if err := dec.Decode(v); err != nil { + return nil, fmt.Errorf("unable to unmarshal: %w", err) + } + + // Apply defaulting to simulate the defaulting webhook that runs prior + // to validation. + v.SetDefaults(ctx) + + // We can't just return v.Validate(ctx) because of Go's typed nils. + // nolint:revive + if ve := v.Validate(ctx); ve != nil { + // Separate validation warnings from errors so the caller can discern between them. + if warnFE := ve.Filter(apis.WarningLevel); warnFE != nil { + warns = warnFE + } + if errorFE := ve.Filter(apis.ErrorLevel); errorFE != nil { + err = errorFE + } + } + return +} diff --git a/policy/validate_test.go b/policy/validate_test.go new file mode 100644 index 00000000..15df0a31 --- /dev/null +++ b/policy/validate_test.go @@ -0,0 +1,194 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package policy + +import ( + "context" + "errors" + "testing" + + policycontrollerconfig "github.com/sigstore/policy-controller/pkg/config" + "knative.dev/pkg/apis" +) + +func TestValidate(t *testing.T) { + tests := []struct { + name string + doc string + wantWarns error + wantErr error + allowEmptyAuthorities bool + }{{ + name: "good single object", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: + images: + - glob: '*' + authorities: + - keyless: + identities: + - issuer: https://issuer.example.com + subject: foo@example.com + url: https://fulcio.sigstore.dev +`, + wantErr: nil, + }, { + name: "good CIP and Secret", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: + images: + - glob: '*' + authorities: + - keyless: + identities: + - issuer: https://issuer.example.com + subject: foo@example.com + url: https://fulcio.sigstore.dev +--- +apiVersion: v1 +kind: Secret +metadata: + name: foo + namespace: cosign-system +stringData: + foo: bar +`, + wantErr: nil, + }, { + name: "bad secret namespace", + doc: ` +apiVersion: v1 +kind: Secret +metadata: + name: foo + namespace: something-system +stringData: + foo: bar +`, + wantErr: errors.New(`invalid value: something-system: [0].metadata.namespace`), + }, { + name: "bad image policy", + doc: ` +apiVersion: policy.sigstore.dev/v1alpha1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: + images: + - glob: '*' + authorities: + - key: {} +`, + wantErr: apis.ErrMissingOneOf("data", "kms", "secretref").ViaField("key").ViaFieldIndex("authorities", 0).ViaField("spec"), + }, { + name: "empty document", + doc: ``, + wantErr: ErrEmptyDocument, + }, { + name: "object missing kind", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +# Missing: kind: ClusterImagePolicy +metadata: + name: blah +spec: {} +`, + wantErr: errors.New(`decoding object[0]: error unmarshaling JSON: while decoding JSON: Object 'Kind' is missing in '{"apiVersion":"policy.sigstore.dev/v1beta1","metadata":{"name":"blah"},"spec":{}}'`), + }, { + name: "unknown field", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: + asdf: dfsadf +`, + wantErr: errors.New(`unable to unmarshal: json: unknown field "asdf"`), + }, { + name: "unknown type", + doc: ` +apiVersion: unknown.dev/v1 +kind: OtherPolicy +metadata: + name: blah +spec: {} +`, + wantErr: errors.New(`unknown type: unknown.dev/v1, Kind=OtherPolicy`), + }, { + name: "error - missing field", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: + images: + - glob: '*' + authorities: + - keyless: + url: https://fulcio.sigstore.dev +`, + wantWarns: nil, + wantErr: errors.New("missing field(s): spec.authorities[0].keyless.identities"), + }, + { + name: "admit - missing authorities", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: + images: + - glob: '*' +`, + wantErr: nil, + allowEmptyAuthorities: true, + }, { + name: "deny - missing authorities", + doc: ` +apiVersion: policy.sigstore.dev/v1beta1 +kind: ClusterImagePolicy +metadata: + name: blah +spec: + images: + - glob: '*' +`, + wantErr: errors.New("missing field(s): spec.authorities"), + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + testContext := context.Background() + if test.allowEmptyAuthorities { + testContext = policycontrollerconfig.ToContext(testContext, &policycontrollerconfig.PolicyControllerConfig{FailOnEmptyAuthorities: false}) + } + gotWarns, gotErr := Validate(testContext, test.doc) + if (gotErr != nil) != (test.wantErr != nil) { + t.Fatalf("Parse() = %v, wanted %v", gotErr, test.wantErr) + } + if (gotWarns != nil) != (test.wantWarns != nil) { + t.Fatalf("Parse() = %v, wanted %v", gotWarns, test.wantWarns) + } + if gotErr != nil && gotErr.Error() != test.wantErr.Error() { + t.Fatalf("Parse() = %v, wanted %v", gotErr, test.wantErr) + } + if gotWarns != nil && gotWarns.Error() != test.wantWarns.Error() { + t.Fatalf("Parse() = %v, wanted %v", gotWarns, test.wantWarns) + } + }) + } +} diff --git a/proto/annotations/auth.pb.go b/proto/annotations/auth.pb.go new file mode 100644 index 00000000..a7aeace6 --- /dev/null +++ b/proto/annotations/auth.pb.go @@ -0,0 +1,342 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: auth.proto + +package annotations + +import ( + capabilities "chainguard.dev/sdk/proto/capabilities" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type IAM struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Mode: + // + // *IAM_Disabled + // *IAM_Enabled + Mode isIAM_Mode `protobuf_oneof:"mode"` +} + +func (x *IAM) Reset() { + *x = IAM{} + if protoimpl.UnsafeEnabled { + mi := &file_auth_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IAM) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IAM) ProtoMessage() {} + +func (x *IAM) ProtoReflect() protoreflect.Message { + mi := &file_auth_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IAM.ProtoReflect.Descriptor instead. +func (*IAM) Descriptor() ([]byte, []int) { + return file_auth_proto_rawDescGZIP(), []int{0} +} + +func (m *IAM) GetMode() isIAM_Mode { + if m != nil { + return m.Mode + } + return nil +} + +func (x *IAM) GetDisabled() *emptypb.Empty { + if x, ok := x.GetMode().(*IAM_Disabled); ok { + return x.Disabled + } + return nil +} + +func (x *IAM) GetEnabled() *IAM_Rules { + if x, ok := x.GetMode().(*IAM_Enabled); ok { + return x.Enabled + } + return nil +} + +type isIAM_Mode interface { + isIAM_Mode() +} + +type IAM_Disabled struct { + Disabled *emptypb.Empty `protobuf:"bytes,1,opt,name=disabled,proto3,oneof"` +} + +type IAM_Enabled struct { + Enabled *IAM_Rules `protobuf:"bytes,2,opt,name=enabled,proto3,oneof"` +} + +func (*IAM_Disabled) isIAM_Mode() {} + +func (*IAM_Enabled) isIAM_Mode() {} + +type IAM_Rules struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A list of capabilities required by a particular API. + // This field is either scoped or unscoped, as determined + // by the field below. + // - When it is "scoped", this field is combined with the + // field designated by "(iam_scope) = true" (see below) + // on the request message to indicate what capabilities + // the caller needs at what scope in order to authorize + // the action they are performing. + // - When is it "unscoped", this field is used to determine + // the set of scopes the caller has the appropriate access + // to so that the RPC itself can scope down the results + // it returns. + Capabilities []capabilities.Capability `protobuf:"varint,1,rep,packed,name=capabilities,proto3,enum=chainguard.capabilities.Capability" json:"capabilities,omitempty"` + // Unscoped is set on APIs where the request itself doesn't + // carry a field with "iam_scope", and instead scopes itself + // to the set of groups to which the caller has access + // according to their OIDC token. + Unscoped bool `protobuf:"varint,2,opt,name=unscoped,proto3" json:"unscoped,omitempty"` +} + +func (x *IAM_Rules) Reset() { + *x = IAM_Rules{} + if protoimpl.UnsafeEnabled { + mi := &file_auth_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IAM_Rules) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IAM_Rules) ProtoMessage() {} + +func (x *IAM_Rules) ProtoReflect() protoreflect.Message { + mi := &file_auth_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IAM_Rules.ProtoReflect.Descriptor instead. +func (*IAM_Rules) Descriptor() ([]byte, []int) { + return file_auth_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *IAM_Rules) GetCapabilities() []capabilities.Capability { + if x != nil { + return x.Capabilities + } + return nil +} + +func (x *IAM_Rules) GetUnscoped() bool { + if x != nil { + return x.Unscoped + } + return false +} + +var file_auth_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.MethodOptions)(nil), + ExtensionType: (*IAM)(nil), + Field: 189350641, + Name: "chainguard.annotations.iam", + Tag: "bytes,189350641,opt,name=iam", + Filename: "auth.proto", + }, + { + ExtendedType: (*descriptorpb.FieldOptions)(nil), + ExtensionType: (*bool)(nil), + Field: 189350642, + Name: "chainguard.annotations.iam_scope", + Tag: "varint,189350642,opt,name=iam_scope", + Filename: "auth.proto", + }, +} + +// Extension fields to descriptorpb.MethodOptions. +var ( + // optional chainguard.annotations.IAM iam = 189350641; + E_Iam = &file_auth_proto_extTypes[0] // randomly chosen +) + +// Extension fields to descriptorpb.FieldOptions. +var ( + // optional bool iam_scope = 189350642; + E_IamScope = &file_auth_proto_extTypes[1] // one more than above +) + +var File_auth_proto protoreflect.FileDescriptor + +var file_auth_proto_rawDesc = []byte{ + 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x2f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf0, 0x01, 0x0a, 0x03, 0x49, 0x41, 0x4d, 0x12, 0x34, 0x0a, 0x08, + 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x41, 0x4d, + 0x2e, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x48, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x1a, 0x6c, 0x0a, 0x05, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x63, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x6e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x75, 0x6e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x42, + 0x06, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x3a, 0x50, 0x0a, 0x03, 0x69, 0x61, 0x6d, 0x12, 0x1e, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf1, + 0x85, 0xa5, 0x5a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x49, 0x41, 0x4d, 0x52, 0x03, 0x69, 0x61, 0x6d, 0x3a, 0x3d, 0x0a, 0x09, 0x69, 0x61, 0x6d, + 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf2, 0x85, 0xa5, 0x5a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x69, 0x61, 0x6d, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x5a, 0x0a, 0x1e, 0x64, 0x65, 0x76, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x41, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x24, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, + 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_auth_proto_rawDescOnce sync.Once + file_auth_proto_rawDescData = file_auth_proto_rawDesc +) + +func file_auth_proto_rawDescGZIP() []byte { + file_auth_proto_rawDescOnce.Do(func() { + file_auth_proto_rawDescData = protoimpl.X.CompressGZIP(file_auth_proto_rawDescData) + }) + return file_auth_proto_rawDescData +} + +var file_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_auth_proto_goTypes = []interface{}{ + (*IAM)(nil), // 0: chainguard.annotations.IAM + (*IAM_Rules)(nil), // 1: chainguard.annotations.IAM.Rules + (*emptypb.Empty)(nil), // 2: google.protobuf.Empty + (capabilities.Capability)(0), // 3: chainguard.capabilities.Capability + (*descriptorpb.MethodOptions)(nil), // 4: google.protobuf.MethodOptions + (*descriptorpb.FieldOptions)(nil), // 5: google.protobuf.FieldOptions +} +var file_auth_proto_depIdxs = []int32{ + 2, // 0: chainguard.annotations.IAM.disabled:type_name -> google.protobuf.Empty + 1, // 1: chainguard.annotations.IAM.enabled:type_name -> chainguard.annotations.IAM.Rules + 3, // 2: chainguard.annotations.IAM.Rules.capabilities:type_name -> chainguard.capabilities.Capability + 4, // 3: chainguard.annotations.iam:extendee -> google.protobuf.MethodOptions + 5, // 4: chainguard.annotations.iam_scope:extendee -> google.protobuf.FieldOptions + 0, // 5: chainguard.annotations.iam:type_name -> chainguard.annotations.IAM + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 5, // [5:6] is the sub-list for extension type_name + 3, // [3:5] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_auth_proto_init() } +func file_auth_proto_init() { + if File_auth_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_auth_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IAM); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_auth_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IAM_Rules); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_auth_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*IAM_Disabled)(nil), + (*IAM_Enabled)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_auth_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 2, + NumServices: 0, + }, + GoTypes: file_auth_proto_goTypes, + DependencyIndexes: file_auth_proto_depIdxs, + MessageInfos: file_auth_proto_msgTypes, + ExtensionInfos: file_auth_proto_extTypes, + }.Build() + File_auth_proto = out.File + file_auth_proto_rawDesc = nil + file_auth_proto_goTypes = nil + file_auth_proto_depIdxs = nil +} diff --git a/proto/annotations/auth.proto b/proto/annotations/auth.proto new file mode 100644 index 00000000..99f29d9e --- /dev/null +++ b/proto/annotations/auth.proto @@ -0,0 +1,49 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/annotations"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.annotations"; +option java_outer_classname = "AnnotationsProto"; + +package chainguard.annotations; + +import "google/protobuf/descriptor.proto"; +import "google/protobuf/empty.proto"; +import "capabilities/capabilities.proto"; + +extend google.protobuf.MethodOptions { + IAM iam = 189350641; // randomly chosen +} + +message IAM { + oneof mode { + google.protobuf.Empty disabled = 1; + Rules enabled = 2; + } + + message Rules { + // A list of capabilities required by a particular API. + // This field is either scoped or unscoped, as determined + // by the field below. + // * When it is "scoped", this field is combined with the + // field designated by "(iam_scope) = true" (see below) + // on the request message to indicate what capabilities + // the caller needs at what scope in order to authorize + // the action they are performing. + // * When is it "unscoped", this field is used to determine + // the set of scopes the caller has the appropriate access + // to so that the RPC itself can scope down the results + // it returns. + repeated chainguard.capabilities.Capability capabilities = 1; + + // Unscoped is set on APIs where the request itself doesn't + // carry a field with "iam_scope", and instead scopes itself + // to the set of groups to which the caller has access + // according to their OIDC token. + bool unscoped = 2; + } +} + +extend google.protobuf.FieldOptions { + bool iam_scope = 189350642; // one more than above +} diff --git a/proto/annotations/doc.go b/proto/annotations/doc.go new file mode 100644 index 00000000..3c5444ee --- /dev/null +++ b/proto/annotations/doc.go @@ -0,0 +1,11 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package accounts contains the GRPC client and server definitions +// for implementing Auth interactions for the Console. +// +//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. auth.proto +//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. events.proto +package annotations diff --git a/proto/annotations/events.pb.go b/proto/annotations/events.pb.go new file mode 100644 index 00000000..f04beef8 --- /dev/null +++ b/proto/annotations/events.pb.go @@ -0,0 +1,258 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: events.proto + +package annotations + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type EventAttributes_Audience int32 + +const ( + // intended for inside the bounds of the platform. + EventAttributes_INTERNAL EventAttributes_Audience = 0 + // allowed to be sent outside the platform. + EventAttributes_CUSTOMER EventAttributes_Audience = 1 +) + +// Enum value maps for EventAttributes_Audience. +var ( + EventAttributes_Audience_name = map[int32]string{ + 0: "INTERNAL", + 1: "CUSTOMER", + } + EventAttributes_Audience_value = map[string]int32{ + "INTERNAL": 0, + "CUSTOMER": 1, + } +) + +func (x EventAttributes_Audience) Enum() *EventAttributes_Audience { + p := new(EventAttributes_Audience) + *p = x + return p +} + +func (x EventAttributes_Audience) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EventAttributes_Audience) Descriptor() protoreflect.EnumDescriptor { + return file_events_proto_enumTypes[0].Descriptor() +} + +func (EventAttributes_Audience) Type() protoreflect.EnumType { + return &file_events_proto_enumTypes[0] +} + +func (x EventAttributes_Audience) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use EventAttributes_Audience.Descriptor instead. +func (EventAttributes_Audience) EnumDescriptor() ([]byte, []int) { + return file_events_proto_rawDescGZIP(), []int{0, 0} +} + +type EventAttributes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // type is the cloudevent type to use for the outbound event. + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + // extensions lists which extensions + Extensions []string `protobuf:"bytes,2,rep,name=extensions,proto3" json:"extensions,omitempty"` + // audience is the intended audience for the event. + Audience EventAttributes_Audience `protobuf:"varint,3,opt,name=audience,proto3,enum=chainguard.annotations.EventAttributes_Audience" json:"audience,omitempty"` +} + +func (x *EventAttributes) Reset() { + *x = EventAttributes{} + if protoimpl.UnsafeEnabled { + mi := &file_events_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventAttributes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventAttributes) ProtoMessage() {} + +func (x *EventAttributes) ProtoReflect() protoreflect.Message { + mi := &file_events_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventAttributes.ProtoReflect.Descriptor instead. +func (*EventAttributes) Descriptor() ([]byte, []int) { + return file_events_proto_rawDescGZIP(), []int{0} +} + +func (x *EventAttributes) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *EventAttributes) GetExtensions() []string { + if x != nil { + return x.Extensions + } + return nil +} + +func (x *EventAttributes) GetAudience() EventAttributes_Audience { + if x != nil { + return x.Audience + } + return EventAttributes_INTERNAL +} + +var file_events_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.MethodOptions)(nil), + ExtensionType: (*EventAttributes)(nil), + Field: 401635080, + Name: "chainguard.annotations.events", + Tag: "bytes,401635080,opt,name=events", + Filename: "events.proto", + }, +} + +// Extension fields to descriptorpb.MethodOptions. +var ( + // optional chainguard.annotations.EventAttributes events = 401635080; + E_Events = &file_events_proto_extTypes[0] // randomly chosen +) + +var File_events_proto protoreflect.FileDescriptor + +var file_events_proto_rawDesc = []byte{ + 0x0a, 0x0c, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x01, 0x0a, 0x0f, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x4c, 0x0a, 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x64, 0x69, + 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x26, + 0x0a, 0x08, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, + 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x55, 0x53, 0x54, + 0x4f, 0x4d, 0x45, 0x52, 0x10, 0x01, 0x3a, 0x63, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x88, 0xee, 0xc1, 0xbf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x5a, 0x0a, 0x1e, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, + 0x6b, 0x2e, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x10, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x24, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, + 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_events_proto_rawDescOnce sync.Once + file_events_proto_rawDescData = file_events_proto_rawDesc +) + +func file_events_proto_rawDescGZIP() []byte { + file_events_proto_rawDescOnce.Do(func() { + file_events_proto_rawDescData = protoimpl.X.CompressGZIP(file_events_proto_rawDescData) + }) + return file_events_proto_rawDescData +} + +var file_events_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_events_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_events_proto_goTypes = []interface{}{ + (EventAttributes_Audience)(0), // 0: chainguard.annotations.EventAttributes.Audience + (*EventAttributes)(nil), // 1: chainguard.annotations.EventAttributes + (*descriptorpb.MethodOptions)(nil), // 2: google.protobuf.MethodOptions +} +var file_events_proto_depIdxs = []int32{ + 0, // 0: chainguard.annotations.EventAttributes.audience:type_name -> chainguard.annotations.EventAttributes.Audience + 2, // 1: chainguard.annotations.events:extendee -> google.protobuf.MethodOptions + 1, // 2: chainguard.annotations.events:type_name -> chainguard.annotations.EventAttributes + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 2, // [2:3] is the sub-list for extension type_name + 1, // [1:2] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_events_proto_init() } +func file_events_proto_init() { + if File_events_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventAttributes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_events_proto_rawDesc, + NumEnums: 1, + NumMessages: 1, + NumExtensions: 1, + NumServices: 0, + }, + GoTypes: file_events_proto_goTypes, + DependencyIndexes: file_events_proto_depIdxs, + EnumInfos: file_events_proto_enumTypes, + MessageInfos: file_events_proto_msgTypes, + ExtensionInfos: file_events_proto_extTypes, + }.Build() + File_events_proto = out.File + file_events_proto_rawDesc = nil + file_events_proto_goTypes = nil + file_events_proto_depIdxs = nil +} diff --git a/proto/annotations/events.proto b/proto/annotations/events.proto new file mode 100644 index 00000000..f2d0839f --- /dev/null +++ b/proto/annotations/events.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/annotations"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.annotations"; +option java_outer_classname = "AnnotationsProto"; + +package chainguard.annotations; + +import "google/protobuf/descriptor.proto"; + +extend google.protobuf.MethodOptions { + EventAttributes events = 401635080; // randomly chosen +} + +message EventAttributes { + // type is the cloudevent type to use for the outbound event. + string type = 1; + // extensions lists which extensions + repeated string extensions = 2; + enum Audience { + // intended for inside the bounds of the platform. + INTERNAL = 0; + // allowed to be sent outside the platform. + CUSTOMER = 1; + } + // audience is the intended audience for the event. + Audience audience = 3; +} diff --git a/proto/capabilities/capabilities.go b/proto/capabilities/capabilities.go new file mode 100644 index 00000000..71e89e01 --- /dev/null +++ b/proto/capabilities/capabilities.go @@ -0,0 +1,189 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package capabilities + +import ( + "context" + "encoding/json" + "fmt" + "io" + "sort" + "strings" + "sync" + + "github.com/bits-and-blooms/bitset" + "github.com/chainguard-dev/clog" + "go.uber.org/zap" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/descriptorpb" +) + +var ( + // Map of stringified name to capability. Initialized with initNameCapabilityMap() + nameCapabilityMap = make(map[string]Capability, len(Capability_value)) + ponce sync.Once + perror error +) + +// Names returns a slice of all capabilities Stringify'd, sans UNKNOWN. +func Names() []string { + all := make([]string, 0, len(Capability_name)-1) // One less, we don't want UNKNOWN + for n := range Capability_name { + if Capability(n) == Capability_UNKNOWN { + continue + } + sc, err := Stringify(Capability(n)) + if err != nil { + // This should never happen! + continue + } + all = append(all, sc) + } + return all +} + +func Stringify(cap Capability) (string, error) { + evd := cap.Descriptor().Values().ByNumber(cap.Number()) + if evd == nil { + return "", status.Errorf(codes.Internal, "capability has no descriptor: %v", cap) + } + opt := evd.Options() + if opt == nil { + return "", status.Errorf(codes.Internal, "capability has no options: %v", cap) + } + evo := opt.(*descriptorpb.EnumValueOptions) + name := proto.GetExtension(evo, E_Name) + if name == nil { + return "", status.Errorf(codes.Internal, "capability is missing the name option: %v", cap) + } + return name.(string), nil +} + +func StringifyAll(caps []Capability) ([]string, error) { + scs := make([]string, 0, len(caps)) + for _, cap := range caps { + sc, err := Stringify(cap) + if err != nil { + return nil, err + } + scs = append(scs, sc) + } + return scs, nil +} + +func Parse(name string) (Capability, error) { + ponce.Do(func() { + // Populate nameCapabilityMap + for cap := range Capability_name { + scap, perror := Stringify(Capability(cap)) + if perror == nil { + nameCapabilityMap[scap] = Capability(cap) + } else { + clog.FromContext(context.Background()).Errorf("Failed to stringify capability %d, error: %v", + cap, zap.Error(perror)) + } + } + }) + + if perror != nil { + return Capability_UNKNOWN, perror + } + return nameCapabilityMap[name], nil +} + +func Bitify(cap Capability) (uint32, error) { + evd := cap.Descriptor().Values().ByNumber(cap.Number()) + if evd == nil { + return 0, status.Errorf(codes.Internal, "capability has no descriptor: %v", cap) + } + opt := evd.Options() + if opt == nil { + return 0, status.Errorf(codes.Internal, "capability has no options: %v", cap) + } + evo := opt.(*descriptorpb.EnumValueOptions) + name := proto.GetExtension(evo, E_Bit) + if name == nil { + return 0, status.Errorf(codes.Internal, "capability is missing the bit option: %v", cap) + } + return name.(uint32), nil +} + +// Set performs efficient encoding of a list of capabilities. +type Set []Capability + +func (s Set) String() string { + caps := make([]string, 0, len(s)) + for _, c := range s { + st, err := Stringify(c) + if err != nil { + st = fmt.Sprintf("[ERROR(cap=%d)", c) + } + caps = append(caps, st) + } + sort.Strings(caps) + return strings.Join(caps, ",") +} + +// MarshalJSON implements json.Marshaler +func (s Set) MarshalJSON() ([]byte, error) { + bs := bitset.New(50) + for _, cap := range s { + b, err := Bitify(cap) + if err != nil { + return nil, err + } + bs.Set(uint(b)) + } + return bs.MarshalJSON() +} + +// UnmarshalJSON implements json.Unmarshaler +func (s *Set) UnmarshalJSON(b []byte) error { + switch { + case len(b) == 0: + return io.EOF + + case b[0] == '[': + // Legacy decoding! + var caps []Capability + if err := json.Unmarshal(b, &caps); err != nil { + return err + } + for _, cap := range caps { + *s = append(*s, cap) + } + return nil + + default: + // Compact encoding + var bs bitset.BitSet + if err := json.Unmarshal(b, &bs); err != nil { + return err + } + for i := range Capability_name { + cap := Capability(i) //nolint: revive + if cap == Capability_UNKNOWN { + continue + } + bit, err := Bitify(cap) + if err != nil { + return err + } + if bs.Test(uint(bit)) { + *s = append(*s, cap) + // This ensures that our unit testing checks that no two + // enumeration values are assigned the same bit. + bs.Clear(uint(bit)) + } + } + sort.Slice(*s, func(i int, j int) bool { + return (*s)[i] < (*s)[j] + }) + return nil + } +} diff --git a/proto/capabilities/capabilities.pb.go b/proto/capabilities/capabilities.pb.go new file mode 100644 index 00000000..344a7418 --- /dev/null +++ b/proto/capabilities/capabilities.pb.go @@ -0,0 +1,661 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: capabilities.proto + +package capabilities + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Capability is an enumeration of the Chainguard IAM capabilities. +type Capability int32 + +const ( + Capability_UNKNOWN Capability = 0 + Capability_CAP_IAM_GROUPS_CREATE Capability = 101 + Capability_CAP_IAM_GROUPS_UPDATE Capability = 102 + Capability_CAP_IAM_GROUPS_LIST Capability = 103 + Capability_CAP_IAM_GROUPS_DELETE Capability = 104 + Capability_CAP_IAM_GROUP_INVITES_CREATE Capability = 201 + Capability_CAP_IAM_GROUP_INVITES_LIST Capability = 203 + Capability_CAP_IAM_GROUP_INVITES_DELETE Capability = 204 + Capability_CAP_IAM_ROLES_CREATE Capability = 301 + Capability_CAP_IAM_ROLES_UPDATE Capability = 302 + Capability_CAP_IAM_ROLES_LIST Capability = 303 + Capability_CAP_IAM_ROLES_DELETE Capability = 304 + Capability_CAP_IAM_ROLE_BINDINGS_CREATE Capability = 401 + Capability_CAP_IAM_ROLE_BINDINGS_UPDATE Capability = 402 + Capability_CAP_IAM_ROLE_BINDINGS_LIST Capability = 403 + Capability_CAP_IAM_ROLE_BINDINGS_DELETE Capability = 404 + Capability_CAP_TENANT_CLUSTERS_CREATE Capability = 501 + Capability_CAP_TENANT_CLUSTERS_UPDATE Capability = 502 + Capability_CAP_TENANT_CLUSTERS_LIST Capability = 503 + Capability_CAP_TENANT_CLUSTERS_DELETE Capability = 504 + Capability_CAP_TENANT_CLUSTERS_DISCOVER Capability = 505 + Capability_CAP_TENANT_RECORDS_LIST Capability = 603 + Capability_CAP_TENANT_RECORD_CONTEXTS_LIST Capability = 613 + Capability_CAP_TENANT_RECORD_SIGNATURES_LIST Capability = 623 + Capability_CAP_TENANT_RECORD_POLICY_RESULTS_LIST Capability = 633 + Capability_CAP_TENANT_RISKS_LIST Capability = 640 + Capability_CAP_TENANT_SBOMS_LIST Capability = 650 + Capability_CAP_TENANT_VULN_REPORTS_LIST Capability = 660 + Capability_CAP_TENANT_ATTESTATIONS_LIST Capability = 670 + Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE Capability = 701 + Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE Capability = 702 + Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST Capability = 703 + Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE Capability = 704 + Capability_CAP_IAM_POLICY_CREATE Capability = 801 + Capability_CAP_IAM_POLICY_UPDATE Capability = 802 + Capability_CAP_IAM_POLICY_LIST Capability = 803 + Capability_CAP_IAM_POLICY_DELETE Capability = 804 + Capability_CAP_IAM_IDENTITY_CREATE Capability = 901 + Capability_CAP_IAM_IDENTITY_UPDATE Capability = 902 + Capability_CAP_IAM_IDENTITY_LIST Capability = 903 + Capability_CAP_IAM_IDENTITY_DELETE Capability = 904 + Capability_CAP_TENANT_NODES_LIST Capability = 1003 + Capability_CAP_TENANT_NAMESPACES_LIST Capability = 1103 + Capability_CAP_TENANT_WORKLOADS_LIST Capability = 1203 + Capability_CAP_IAM_IDENTITY_PROVIDERS_CREATE Capability = 1301 + Capability_CAP_IAM_IDENTITY_PROVIDERS_UPDATE Capability = 1302 + Capability_CAP_IAM_IDENTITY_PROVIDERS_LIST Capability = 1303 + Capability_CAP_IAM_IDENTITY_PROVIDERS_DELETE Capability = 1304 + Capability_CAP_EVENTS_SUBSCRIPTION_CREATE Capability = 1501 + Capability_CAP_EVENTS_SUBSCRIPTION_UPDATE Capability = 1502 + Capability_CAP_EVENTS_SUBSCRIPTION_LIST Capability = 1503 + Capability_CAP_EVENTS_SUBSCRIPTION_DELETE Capability = 1504 + // TODO(jason): Remove these coarse-grained capabilities after they're removed from the roles. + Capability_CAP_REGISTRY_PULL Capability = 1601 // Can read tags, blobs, manifests. + Capability_CAP_REGISTRY_PUSH Capability = 1602 // Can create and update tags, blobs, manifests. + Capability_CAP_REPO_CREATE Capability = 1603 + Capability_CAP_REPO_UPDATE Capability = 1604 + Capability_CAP_REPO_LIST Capability = 1605 + Capability_CAP_REPO_DELETE Capability = 1606 + Capability_CAP_MANIFEST_CREATE Capability = 1607 + Capability_CAP_MANIFEST_UPDATE Capability = 1608 + Capability_CAP_MANIFEST_LIST Capability = 1609 + Capability_CAP_MANIFEST_DELETE Capability = 1610 + Capability_CAP_TAG_CREATE Capability = 1611 + Capability_CAP_TAG_UPDATE Capability = 1612 + Capability_CAP_TAG_LIST Capability = 1613 + Capability_CAP_TAG_DELETE Capability = 1614 + Capability_CAP_SIGSTORE_CREATE Capability = 1701 + Capability_CAP_SIGSTORE_UPDATE Capability = 1702 + Capability_CAP_SIGSTORE_LIST Capability = 1703 + Capability_CAP_SIGSTORE_DELETE Capability = 1704 + Capability_CAP_SIGSTORE_CERTIFICATE_CREATE Capability = 1705 + // This is orthogonal enough that we should leave + // it somewhat separate, so add new capabilities above. + // TODO(mattmoor): Think about whether we can encode specific + // controller capabilities into our access control here? + // e.g. could each logical controller/webhook be its own + // capability? + Capability_CAP_GULFSTREAM Capability = 10000 +) + +// Enum value maps for Capability. +var ( + Capability_name = map[int32]string{ + 0: "UNKNOWN", + 101: "CAP_IAM_GROUPS_CREATE", + 102: "CAP_IAM_GROUPS_UPDATE", + 103: "CAP_IAM_GROUPS_LIST", + 104: "CAP_IAM_GROUPS_DELETE", + 201: "CAP_IAM_GROUP_INVITES_CREATE", + 203: "CAP_IAM_GROUP_INVITES_LIST", + 204: "CAP_IAM_GROUP_INVITES_DELETE", + 301: "CAP_IAM_ROLES_CREATE", + 302: "CAP_IAM_ROLES_UPDATE", + 303: "CAP_IAM_ROLES_LIST", + 304: "CAP_IAM_ROLES_DELETE", + 401: "CAP_IAM_ROLE_BINDINGS_CREATE", + 402: "CAP_IAM_ROLE_BINDINGS_UPDATE", + 403: "CAP_IAM_ROLE_BINDINGS_LIST", + 404: "CAP_IAM_ROLE_BINDINGS_DELETE", + 501: "CAP_TENANT_CLUSTERS_CREATE", + 502: "CAP_TENANT_CLUSTERS_UPDATE", + 503: "CAP_TENANT_CLUSTERS_LIST", + 504: "CAP_TENANT_CLUSTERS_DELETE", + 505: "CAP_TENANT_CLUSTERS_DISCOVER", + 603: "CAP_TENANT_RECORDS_LIST", + 613: "CAP_TENANT_RECORD_CONTEXTS_LIST", + 623: "CAP_TENANT_RECORD_SIGNATURES_LIST", + 633: "CAP_TENANT_RECORD_POLICY_RESULTS_LIST", + 640: "CAP_TENANT_RISKS_LIST", + 650: "CAP_TENANT_SBOMS_LIST", + 660: "CAP_TENANT_VULN_REPORTS_LIST", + 670: "CAP_TENANT_ATTESTATIONS_LIST", + 701: "CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE", + 702: "CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE", + 703: "CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST", + 704: "CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE", + 801: "CAP_IAM_POLICY_CREATE", + 802: "CAP_IAM_POLICY_UPDATE", + 803: "CAP_IAM_POLICY_LIST", + 804: "CAP_IAM_POLICY_DELETE", + 901: "CAP_IAM_IDENTITY_CREATE", + 902: "CAP_IAM_IDENTITY_UPDATE", + 903: "CAP_IAM_IDENTITY_LIST", + 904: "CAP_IAM_IDENTITY_DELETE", + 1003: "CAP_TENANT_NODES_LIST", + 1103: "CAP_TENANT_NAMESPACES_LIST", + 1203: "CAP_TENANT_WORKLOADS_LIST", + 1301: "CAP_IAM_IDENTITY_PROVIDERS_CREATE", + 1302: "CAP_IAM_IDENTITY_PROVIDERS_UPDATE", + 1303: "CAP_IAM_IDENTITY_PROVIDERS_LIST", + 1304: "CAP_IAM_IDENTITY_PROVIDERS_DELETE", + 1501: "CAP_EVENTS_SUBSCRIPTION_CREATE", + 1502: "CAP_EVENTS_SUBSCRIPTION_UPDATE", + 1503: "CAP_EVENTS_SUBSCRIPTION_LIST", + 1504: "CAP_EVENTS_SUBSCRIPTION_DELETE", + 1601: "CAP_REGISTRY_PULL", + 1602: "CAP_REGISTRY_PUSH", + 1603: "CAP_REPO_CREATE", + 1604: "CAP_REPO_UPDATE", + 1605: "CAP_REPO_LIST", + 1606: "CAP_REPO_DELETE", + 1607: "CAP_MANIFEST_CREATE", + 1608: "CAP_MANIFEST_UPDATE", + 1609: "CAP_MANIFEST_LIST", + 1610: "CAP_MANIFEST_DELETE", + 1611: "CAP_TAG_CREATE", + 1612: "CAP_TAG_UPDATE", + 1613: "CAP_TAG_LIST", + 1614: "CAP_TAG_DELETE", + 1701: "CAP_SIGSTORE_CREATE", + 1702: "CAP_SIGSTORE_UPDATE", + 1703: "CAP_SIGSTORE_LIST", + 1704: "CAP_SIGSTORE_DELETE", + 1705: "CAP_SIGSTORE_CERTIFICATE_CREATE", + 10000: "CAP_GULFSTREAM", + } + Capability_value = map[string]int32{ + "UNKNOWN": 0, + "CAP_IAM_GROUPS_CREATE": 101, + "CAP_IAM_GROUPS_UPDATE": 102, + "CAP_IAM_GROUPS_LIST": 103, + "CAP_IAM_GROUPS_DELETE": 104, + "CAP_IAM_GROUP_INVITES_CREATE": 201, + "CAP_IAM_GROUP_INVITES_LIST": 203, + "CAP_IAM_GROUP_INVITES_DELETE": 204, + "CAP_IAM_ROLES_CREATE": 301, + "CAP_IAM_ROLES_UPDATE": 302, + "CAP_IAM_ROLES_LIST": 303, + "CAP_IAM_ROLES_DELETE": 304, + "CAP_IAM_ROLE_BINDINGS_CREATE": 401, + "CAP_IAM_ROLE_BINDINGS_UPDATE": 402, + "CAP_IAM_ROLE_BINDINGS_LIST": 403, + "CAP_IAM_ROLE_BINDINGS_DELETE": 404, + "CAP_TENANT_CLUSTERS_CREATE": 501, + "CAP_TENANT_CLUSTERS_UPDATE": 502, + "CAP_TENANT_CLUSTERS_LIST": 503, + "CAP_TENANT_CLUSTERS_DELETE": 504, + "CAP_TENANT_CLUSTERS_DISCOVER": 505, + "CAP_TENANT_RECORDS_LIST": 603, + "CAP_TENANT_RECORD_CONTEXTS_LIST": 613, + "CAP_TENANT_RECORD_SIGNATURES_LIST": 623, + "CAP_TENANT_RECORD_POLICY_RESULTS_LIST": 633, + "CAP_TENANT_RISKS_LIST": 640, + "CAP_TENANT_SBOMS_LIST": 650, + "CAP_TENANT_VULN_REPORTS_LIST": 660, + "CAP_TENANT_ATTESTATIONS_LIST": 670, + "CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE": 701, + "CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE": 702, + "CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST": 703, + "CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE": 704, + "CAP_IAM_POLICY_CREATE": 801, + "CAP_IAM_POLICY_UPDATE": 802, + "CAP_IAM_POLICY_LIST": 803, + "CAP_IAM_POLICY_DELETE": 804, + "CAP_IAM_IDENTITY_CREATE": 901, + "CAP_IAM_IDENTITY_UPDATE": 902, + "CAP_IAM_IDENTITY_LIST": 903, + "CAP_IAM_IDENTITY_DELETE": 904, + "CAP_TENANT_NODES_LIST": 1003, + "CAP_TENANT_NAMESPACES_LIST": 1103, + "CAP_TENANT_WORKLOADS_LIST": 1203, + "CAP_IAM_IDENTITY_PROVIDERS_CREATE": 1301, + "CAP_IAM_IDENTITY_PROVIDERS_UPDATE": 1302, + "CAP_IAM_IDENTITY_PROVIDERS_LIST": 1303, + "CAP_IAM_IDENTITY_PROVIDERS_DELETE": 1304, + "CAP_EVENTS_SUBSCRIPTION_CREATE": 1501, + "CAP_EVENTS_SUBSCRIPTION_UPDATE": 1502, + "CAP_EVENTS_SUBSCRIPTION_LIST": 1503, + "CAP_EVENTS_SUBSCRIPTION_DELETE": 1504, + "CAP_REGISTRY_PULL": 1601, + "CAP_REGISTRY_PUSH": 1602, + "CAP_REPO_CREATE": 1603, + "CAP_REPO_UPDATE": 1604, + "CAP_REPO_LIST": 1605, + "CAP_REPO_DELETE": 1606, + "CAP_MANIFEST_CREATE": 1607, + "CAP_MANIFEST_UPDATE": 1608, + "CAP_MANIFEST_LIST": 1609, + "CAP_MANIFEST_DELETE": 1610, + "CAP_TAG_CREATE": 1611, + "CAP_TAG_UPDATE": 1612, + "CAP_TAG_LIST": 1613, + "CAP_TAG_DELETE": 1614, + "CAP_SIGSTORE_CREATE": 1701, + "CAP_SIGSTORE_UPDATE": 1702, + "CAP_SIGSTORE_LIST": 1703, + "CAP_SIGSTORE_DELETE": 1704, + "CAP_SIGSTORE_CERTIFICATE_CREATE": 1705, + "CAP_GULFSTREAM": 10000, + } +) + +func (x Capability) Enum() *Capability { + p := new(Capability) + *p = x + return p +} + +func (x Capability) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Capability) Descriptor() protoreflect.EnumDescriptor { + return file_capabilities_proto_enumTypes[0].Descriptor() +} + +func (Capability) Type() protoreflect.EnumType { + return &file_capabilities_proto_enumTypes[0] +} + +func (x Capability) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Capability.Descriptor instead. +func (Capability) EnumDescriptor() ([]byte, []int) { + return file_capabilities_proto_rawDescGZIP(), []int{0} +} + +var file_capabilities_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.EnumValueOptions)(nil), + ExtensionType: (*string)(nil), + Field: 189350643, + Name: "chainguard.capabilities.name", + Tag: "bytes,189350643,opt,name=name", + Filename: "capabilities.proto", + }, + { + ExtendedType: (*descriptorpb.EnumValueOptions)(nil), + ExtensionType: (*uint32)(nil), + Field: 20221109, + Name: "chainguard.capabilities.bit", + Tag: "varint,20221109,opt,name=bit", + Filename: "capabilities.proto", + }, +} + +// Extension fields to descriptorpb.EnumValueOptions. +var ( + // This decorates our capability enumeration values with + // the friendly name to show to humans. + // + // optional string name = 189350643; + E_Name = &file_capabilities_proto_extTypes[0] + // This decorates our capability enumeration values with + // a bit index enabling compacted encodings. + // + // optional uint32 bit = 20221109; + E_Bit = &file_capabilities_proto_extTypes[1] +) + +var File_capabilities_proto protoreflect.FileDescriptor + +var file_capabilities_proto_rawDesc = []byte{ + 0x0a, 0x12, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x20, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, + 0x93, 0x21, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x33, 0x0a, 0x15, 0x43, + 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x43, 0x52, + 0x45, 0x41, 0x54, 0x45, 0x10, 0x65, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x01, + 0x12, 0x33, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, + 0x50, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x66, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0xa8, 0xcb, 0x91, 0x4d, 0x02, 0x12, 0x2f, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, + 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x67, 0x1a, 0x16, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x6c, 0x69, 0x73, + 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x03, 0x12, 0x33, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, + 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, + 0x68, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x04, 0x12, 0x42, 0x0a, 0x1c, 0x43, + 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x49, 0x4e, 0x56, + 0x49, 0x54, 0x45, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc9, 0x01, 0x1a, 0x1f, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x05, 0x12, + 0x3e, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, + 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcb, 0x01, + 0x1a, 0x1d, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x12, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x06, 0x12, + 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, + 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, + 0xcc, 0x01, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, + 0x91, 0x4d, 0x07, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, + 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xad, 0x02, 0x1a, 0x17, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x08, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x41, 0x50, 0x5f, 0x49, + 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, + 0xae, 0x02, 0x1a, 0x17, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x09, 0x12, 0x2e, 0x0a, 0x12, 0x43, + 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, + 0x54, 0x10, 0xaf, 0x02, 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x0a, 0x12, 0x32, 0x0a, 0x14, 0x43, + 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x10, 0xb0, 0x02, 0x1a, 0x17, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x0b, 0x12, + 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, + 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, + 0x91, 0x03, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, + 0x91, 0x4d, 0x0c, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, + 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x10, 0x92, 0x03, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, 0x6f, + 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x0d, 0x12, 0x3e, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x49, + 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x93, 0x03, 0x1a, 0x1d, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x12, + 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6c, 0x69, + 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x0e, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, + 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, + 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x94, 0x03, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, + 0x05, 0x14, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x0f, 0x12, 0x3b, 0x0a, 0x1a, 0x43, + 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, + 0x52, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xf5, 0x03, 0x1a, 0x1a, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x10, 0x12, 0x3b, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, + 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, + 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xf6, 0x03, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, + 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0xa8, 0xcb, 0x91, 0x4d, 0x11, 0x12, 0x37, 0x0a, 0x18, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, + 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, 0x4c, 0x49, 0x53, + 0x54, 0x10, 0xf7, 0x03, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x12, 0x12, 0x3b, + 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, + 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xf8, 0x03, 0x1a, + 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x13, 0x12, 0x3f, 0x0a, 0x1c, 0x43, + 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, + 0x52, 0x53, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x10, 0xf9, 0x03, 0x1a, 0x1c, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0xa8, 0xcb, 0x91, 0x4d, 0x33, 0x12, 0x35, 0x0a, 0x17, + 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, + 0x44, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x04, 0x1a, 0x17, 0x9a, 0xaf, 0xa8, 0xd2, + 0x05, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, + 0x91, 0x4d, 0x14, 0x12, 0x45, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, + 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, + 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe5, 0x04, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, + 0x14, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, + 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x30, 0x12, 0x49, 0x0a, 0x21, 0x43, 0x41, + 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, + 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, + 0xef, 0x04, 0x1a, 0x21, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x16, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, + 0xa8, 0xcb, 0x91, 0x4d, 0x31, 0x12, 0x51, 0x0a, 0x25, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, + 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, + 0x59, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf9, + 0x04, 0x1a, 0x25, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x6c, + 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x32, 0x12, 0x31, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, + 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x49, 0x53, 0x4b, 0x53, 0x5f, 0x4c, 0x49, 0x53, + 0x54, 0x10, 0x80, 0x05, 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x72, 0x69, 0x73, 0x6b, + 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x44, 0x12, 0x31, 0x0a, 0x15, 0x43, + 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x42, 0x4f, 0x4d, 0x53, 0x5f, + 0x4c, 0x49, 0x53, 0x54, 0x10, 0x8a, 0x05, 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x73, + 0x62, 0x6f, 0x6d, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x45, 0x12, 0x3f, + 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x56, 0x55, 0x4c, + 0x4e, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x94, + 0x05, 0x1a, 0x1c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x76, 0x75, 0x6c, 0x6e, 0x5f, 0x72, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x46, 0x12, + 0x3f, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x41, 0x54, + 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, + 0x9e, 0x05, 0x1a, 0x1c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x47, + 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, 0x43, 0x4f, + 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, + 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xbd, 0x05, 0x1a, 0x26, 0x9a, 0xaf, 0xa8, 0xd2, + 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, + 0x4d, 0x15, 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, + 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xbe, 0x05, 0x1a, 0x26, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, + 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, + 0xcb, 0x91, 0x4d, 0x16, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, + 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xbf, 0x05, 0x1a, 0x24, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x19, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, + 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, + 0x4d, 0x17, 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, + 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4f, + 0x4e, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xc0, 0x05, 0x1a, 0x26, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, + 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, + 0xcb, 0x91, 0x4d, 0x18, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, + 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xa1, 0x06, + 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x19, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, + 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x10, 0xa2, 0x06, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x1a, + 0x12, 0x30, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, 0x4c, 0x49, + 0x43, 0x59, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa3, 0x06, 0x1a, 0x16, 0x9a, 0xaf, 0xa8, 0xd2, + 0x05, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, + 0x4d, 0x1b, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, + 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xa4, 0x06, 0x1a, 0x18, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x1c, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, + 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x10, 0x85, 0x07, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, + 0x4d, 0x1d, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, + 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x86, 0x07, + 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x1e, 0x12, 0x34, 0x0a, 0x15, + 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x87, 0x07, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, + 0x4d, 0x1f, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, + 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x88, 0x07, + 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x20, 0x12, 0x31, 0x0a, 0x15, + 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x53, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xeb, 0x07, 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x21, 0x12, + 0x3b, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x4e, 0x41, + 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcf, 0x08, + 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x22, 0x12, 0x39, 0x0a, 0x19, + 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x4c, + 0x4f, 0x41, 0x44, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xb3, 0x09, 0x1a, 0x19, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2e, 0x6c, 0x69, + 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x23, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, + 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, + 0x49, 0x44, 0x45, 0x52, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x95, 0x0a, 0x1a, + 0x24, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0xa8, 0xcb, 0x91, 0x4d, 0x34, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, + 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, + 0x45, 0x52, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x96, 0x0a, 0x1a, 0x24, 0x9a, + 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, + 0x91, 0x4d, 0x35, 0x12, 0x48, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, + 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, + 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x97, 0x0a, 0x1a, 0x22, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, + 0x17, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x36, 0x12, 0x4c, 0x0a, + 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, + 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, + 0x54, 0x45, 0x10, 0x98, 0x0a, 0x1a, 0x24, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x37, 0x12, 0x44, 0x0a, 0x1e, 0x43, + 0x41, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, + 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xdd, 0x0b, + 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, + 0x24, 0x12, 0x44, 0x0a, 0x1e, 0x43, 0x41, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, + 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x25, 0x12, 0x40, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdf, 0x0b, 0x1a, 0x1d, 0x9a, 0xaf, 0xa8, 0xd2, + 0x05, 0x12, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x26, 0x12, 0x44, 0x0a, 0x1e, 0x43, 0x41, 0x50, + 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xe0, 0x0b, 0x1a, 0x1f, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x27, 0x12, + 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x59, 0x5f, + 0x50, 0x55, 0x4c, 0x4c, 0x10, 0xc1, 0x0c, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x75, 0x6c, 0x6c, 0xa8, 0xcb, 0x91, 0x4d, + 0x28, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, + 0x59, 0x5f, 0x50, 0x55, 0x53, 0x48, 0x10, 0xc2, 0x0c, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, + 0x0d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x75, 0x73, 0x68, 0xa8, 0xcb, + 0x91, 0x4d, 0x29, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, + 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc3, 0x0c, 0x1a, 0x16, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, + 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, + 0x38, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x10, 0xc4, 0x0c, 0x1a, 0x16, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x72, + 0x65, 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x39, 0x12, + 0x28, 0x0a, 0x0d, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x4c, 0x49, 0x53, 0x54, + 0x10, 0xc5, 0x0c, 0x1a, 0x14, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x2e, + 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x3a, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, + 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xc6, 0x0c, 0x1a, + 0x16, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x3b, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, + 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc7, + 0x0c, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, + 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x3c, 0x12, 0x34, 0x0a, + 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x10, 0xc8, 0x0c, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, + 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, + 0x91, 0x4d, 0x3d, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, + 0x45, 0x53, 0x54, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc9, 0x0c, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0d, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x6c, 0x69, 0x73, 0x74, + 0xa8, 0xcb, 0x91, 0x4d, 0x3e, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, + 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xca, 0x0c, 0x1a, + 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x3f, 0x12, 0x2a, 0x0a, 0x0e, 0x43, + 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xcb, 0x0c, + 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x40, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x54, + 0x41, 0x47, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xcc, 0x0c, 0x1a, 0x15, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, + 0x91, 0x4d, 0x41, 0x12, 0x26, 0x0a, 0x0c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x4c, + 0x49, 0x53, 0x54, 0x10, 0xcd, 0x0c, 0x1a, 0x13, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x74, 0x61, + 0x67, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x42, 0x12, 0x2a, 0x0a, 0x0e, 0x43, + 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xce, 0x0c, + 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x43, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, + 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xa5, + 0x0d, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x2a, 0x12, 0x34, 0x0a, + 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x10, 0xa6, 0x0d, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, + 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, + 0x91, 0x4d, 0x2b, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, + 0x4f, 0x52, 0x45, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, 0x0d, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0d, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x6c, 0x69, 0x73, 0x74, + 0xa8, 0xcb, 0x91, 0x4d, 0x2c, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, + 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xa8, 0x0d, 0x1a, + 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x2d, 0x12, 0x4c, 0x0a, 0x1f, 0x43, + 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, + 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xa9, + 0x0d, 0x1a, 0x26, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x2e, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, + 0x5f, 0x47, 0x55, 0x4c, 0x46, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x90, 0x4e, 0x1a, 0x15, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x67, 0x75, 0x6c, 0x66, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0xa8, 0xcb, 0x91, 0x4d, 0x2f, 0x3a, 0x38, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0xf3, 0x85, 0xa5, 0x5a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x3a, + 0x36, 0x0a, 0x03, 0x62, 0x69, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb5, 0x99, 0xd2, 0x09, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x03, 0x62, 0x69, 0x74, 0x42, 0x5d, 0x0a, 0x1f, 0x64, 0x65, 0x76, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x63, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0x11, 0x43, 0x61, 0x70, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x25, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, + 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_capabilities_proto_rawDescOnce sync.Once + file_capabilities_proto_rawDescData = file_capabilities_proto_rawDesc +) + +func file_capabilities_proto_rawDescGZIP() []byte { + file_capabilities_proto_rawDescOnce.Do(func() { + file_capabilities_proto_rawDescData = protoimpl.X.CompressGZIP(file_capabilities_proto_rawDescData) + }) + return file_capabilities_proto_rawDescData +} + +var file_capabilities_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_capabilities_proto_goTypes = []interface{}{ + (Capability)(0), // 0: chainguard.capabilities.Capability + (*descriptorpb.EnumValueOptions)(nil), // 1: google.protobuf.EnumValueOptions +} +var file_capabilities_proto_depIdxs = []int32{ + 1, // 0: chainguard.capabilities.name:extendee -> google.protobuf.EnumValueOptions + 1, // 1: chainguard.capabilities.bit:extendee -> google.protobuf.EnumValueOptions + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 0, // [0:2] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_capabilities_proto_init() } +func file_capabilities_proto_init() { + if File_capabilities_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_capabilities_proto_rawDesc, + NumEnums: 1, + NumMessages: 0, + NumExtensions: 2, + NumServices: 0, + }, + GoTypes: file_capabilities_proto_goTypes, + DependencyIndexes: file_capabilities_proto_depIdxs, + EnumInfos: file_capabilities_proto_enumTypes, + ExtensionInfos: file_capabilities_proto_extTypes, + }.Build() + File_capabilities_proto = out.File + file_capabilities_proto_rawDesc = nil + file_capabilities_proto_goTypes = nil + file_capabilities_proto_depIdxs = nil +} diff --git a/proto/capabilities/capabilities.proto b/proto/capabilities/capabilities.proto new file mode 100644 index 00000000..fdf23627 --- /dev/null +++ b/proto/capabilities/capabilities.proto @@ -0,0 +1,137 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/capabilities"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.capabilities"; +option java_outer_classname = "CapabilitiesProto"; + +package chainguard.capabilities; + +import "google/protobuf/descriptor.proto"; + +extend google.protobuf.EnumValueOptions { + // This decorates our capability enumeration values with + // the friendly name to show to humans. + string name = 189350643; + + // This decorates our capability enumeration values with + // a bit index enabling compacted encodings. + uint32 bit = 20221109; +} + +// Capability is an enumeration of the Chainguard IAM capabilities. +enum Capability { + UNKNOWN = 0; + + CAP_IAM_GROUPS_CREATE = 101 [(name) = "groups.create", (bit) = 1]; + CAP_IAM_GROUPS_UPDATE = 102 [(name) = "groups.update", (bit) = 2]; + CAP_IAM_GROUPS_LIST = 103 [(name) = "groups.list", (bit) = 3]; + CAP_IAM_GROUPS_DELETE = 104 [(name) = "groups.delete", (bit) = 4]; + + CAP_IAM_GROUP_INVITES_CREATE = 201 [(name) = "group_invites.create", (bit) = 5]; + CAP_IAM_GROUP_INVITES_LIST = 203 [(name) = "group_invites.list", (bit) = 6]; + CAP_IAM_GROUP_INVITES_DELETE = 204 [(name) = "group_invites.delete", (bit) = 7]; + + CAP_IAM_ROLES_CREATE = 301 [(name) = "roles.create", (bit) = 8]; + CAP_IAM_ROLES_UPDATE = 302 [(name) = "roles.update", (bit) = 9]; + CAP_IAM_ROLES_LIST = 303 [(name) = "roles.list", (bit) = 10]; + CAP_IAM_ROLES_DELETE = 304 [(name) = "roles.delete", (bit) = 11]; + + CAP_IAM_ROLE_BINDINGS_CREATE = 401 [(name) = "role_bindings.create", (bit) = 12]; + CAP_IAM_ROLE_BINDINGS_UPDATE = 402 [(name) = "role_bindings.update", (bit) = 13]; + CAP_IAM_ROLE_BINDINGS_LIST = 403 [(name) = "role_bindings.list", (bit) = 14]; + CAP_IAM_ROLE_BINDINGS_DELETE = 404 [(name) = "role_bindings.delete", (bit) = 15]; + + CAP_TENANT_CLUSTERS_CREATE = 501 [(name) = "clusters.create", (bit) = 16]; + CAP_TENANT_CLUSTERS_UPDATE = 502 [(name) = "clusters.update", (bit) = 17]; + CAP_TENANT_CLUSTERS_LIST = 503 [(name) = "clusters.list", (bit) = 18]; + CAP_TENANT_CLUSTERS_DELETE = 504 [(name) = "clusters.delete", (bit) = 19]; + CAP_TENANT_CLUSTERS_DISCOVER = 505 [(name) = "clusters.discover", (bit) = 51]; + + CAP_TENANT_RECORDS_LIST = 603 [(name) = "records.list", (bit) = 20]; + CAP_TENANT_RECORD_CONTEXTS_LIST = 613 [(name) = "record_contexts.list", (bit) = 48]; + CAP_TENANT_RECORD_SIGNATURES_LIST = 623 [(name) = "record_signatures.list", (bit) = 49]; + CAP_TENANT_RECORD_POLICY_RESULTS_LIST = 633 [(name) = "record_policy_results.list", (bit) = 50]; + + CAP_TENANT_RISKS_LIST = 640 [(name) = "risks.list", (bit) = 68]; + + CAP_TENANT_SBOMS_LIST = 650 [(name) = "sboms.list", (bit) = 69]; + + CAP_TENANT_VULN_REPORTS_LIST = 660 [(name) = "vuln_reports.list", (bit) = 70]; + + CAP_TENANT_ATTESTATIONS_LIST = 670 [(name) = "attestations.list", (bit) = 71]; + + CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE = 701 [(name) = "account_associations.create", (bit) = 21]; + CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE = 702 [(name) = "account_associations.update", (bit) = 22]; + CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST = 703 [(name) = "account_associations.list", (bit) = 23]; + CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE = 704 [(name) = "account_associations.delete", (bit) = 24]; + + CAP_IAM_POLICY_CREATE = 801 [(name) = "policy.create", (bit) = 25]; + CAP_IAM_POLICY_UPDATE = 802 [(name) = "policy.update", (bit) = 26]; + CAP_IAM_POLICY_LIST = 803 [(name) = "policy.list", (bit) = 27]; + CAP_IAM_POLICY_DELETE = 804 [(name) = "policy.delete", (bit) = 28]; + + CAP_IAM_IDENTITY_CREATE = 901 [(name) = "identity.create", (bit) = 29]; + CAP_IAM_IDENTITY_UPDATE = 902 [(name) = "identity.update", (bit) = 30]; + CAP_IAM_IDENTITY_LIST = 903 [(name) = "identity.list", (bit) = 31]; + CAP_IAM_IDENTITY_DELETE = 904 [(name) = "identity.delete", (bit) = 32]; + + CAP_TENANT_NODES_LIST = 1003 [(name) = "nodes.list", (bit) = 33]; + + CAP_TENANT_NAMESPACES_LIST = 1103 [(name) = "namespaces.list", (bit) = 34]; + + CAP_TENANT_WORKLOADS_LIST = 1203 [(name) = "workloads.list", (bit) = 35]; + + + CAP_IAM_IDENTITY_PROVIDERS_CREATE = 1301 [(name) = "identity_providers.create", (bit) = 52]; + CAP_IAM_IDENTITY_PROVIDERS_UPDATE = 1302 [(name) = "identity_providers.update", (bit) = 53]; + CAP_IAM_IDENTITY_PROVIDERS_LIST = 1303 [(name) = "identity_providers.list", (bit) = 54]; + CAP_IAM_IDENTITY_PROVIDERS_DELETE = 1304 [(name) = "identity_providers.delete", (bit) = 55]; + + // Events + + CAP_EVENTS_SUBSCRIPTION_CREATE = 1501 [(name) = "subscriptions.create", (bit) = 36]; + CAP_EVENTS_SUBSCRIPTION_UPDATE = 1502 [(name) = "subscriptions.update", (bit) = 37]; + CAP_EVENTS_SUBSCRIPTION_LIST = 1503 [(name) = "subscriptions.list", (bit) = 38]; + CAP_EVENTS_SUBSCRIPTION_DELETE = 1504 [(name) = "subscriptions.delete", (bit) = 39]; + + // Registry + + // TODO(jason): Remove these coarse-grained capabilities after they're removed from the roles. + CAP_REGISTRY_PULL = 1601 [(name) = "registry.pull", (bit) = 40]; // Can read tags, blobs, manifests. + CAP_REGISTRY_PUSH = 1602 [(name) = "registry.push", (bit) = 41]; // Can create and update tags, blobs, manifests. + + CAP_REPO_CREATE = 1603 [(name) = "repo.create", (bit) = 56]; + CAP_REPO_UPDATE = 1604 [(name) = "repo.update", (bit) = 57]; + CAP_REPO_LIST = 1605 [(name) = "repo.list", (bit) = 58]; + CAP_REPO_DELETE = 1606 [(name) = "repo.delete", (bit) = 59]; + + CAP_MANIFEST_CREATE = 1607 [(name) = "manifest.create", (bit) = 60]; + CAP_MANIFEST_UPDATE = 1608 [(name) = "manifest.update", (bit) = 61]; + CAP_MANIFEST_LIST = 1609 [(name) = "manifest.list", (bit) = 62]; + CAP_MANIFEST_DELETE = 1610 [(name) = "manifest.delete", (bit) = 63]; + + CAP_TAG_CREATE = 1611 [(name) = "tag.create", (bit) = 64]; + CAP_TAG_UPDATE = 1612 [(name) = "tag.update", (bit) = 65]; + CAP_TAG_LIST = 1613 [(name) = "tag.list", (bit) = 66]; + CAP_TAG_DELETE = 1614 [(name) = "tag.delete", (bit) = 67]; + + // Sigstore-aas + + CAP_SIGSTORE_CREATE = 1701 [(name) = "sigstore.create", (bit) = 42]; + CAP_SIGSTORE_UPDATE = 1702 [(name) = "sigstore.update", (bit) = 43]; + CAP_SIGSTORE_LIST = 1703 [(name) = "sigstore.list", (bit) = 44]; + CAP_SIGSTORE_DELETE = 1704 [(name) = "sigstore.delete", (bit) = 45]; + + CAP_SIGSTORE_CERTIFICATE_CREATE = 1705 [(name) = "sigstore.certificate.create", (bit) = 46]; + + // This is orthogonal enough that we should leave + // it somewhat separate, so add new capabilities above. + // TODO(mattmoor): Think about whether we can encode specific + // controller capabilities into our access control here? + // e.g. could each logical controller/webhook be its own + // capability? + CAP_GULFSTREAM = 10000 [(name) = "gulfstream", (bit) = 47]; + + // next bit: 70 +} diff --git a/proto/capabilities/capabilities_test.go b/proto/capabilities/capabilities_test.go new file mode 100644 index 00000000..8d230dcb --- /dev/null +++ b/proto/capabilities/capabilities_test.go @@ -0,0 +1,139 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package capabilities + +import ( + "encoding/json" + "testing" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func TestStringify(t *testing.T) { + tests := []struct { + name string + capability Capability + want string + wantErr error + }{{ + name: "no requirements", + }, { + name: "simple", + capability: Capability_CAP_EVENTS_SUBSCRIPTION_DELETE, + want: "subscriptions.delete", + }, { + name: "unknown", + capability: 0, + want: "", + }, { + name: "invalid", + capability: 1, + wantErr: status.Error(codes.Internal, `capability has no descriptor: 1`), + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + got, gotErr := Stringify(test.capability) + + switch { + case (gotErr != nil) != (test.wantErr != nil): + t.Fatalf("Stringify() = %v, %v, wanted %v, %v", got, gotErr, test.want, test.wantErr) + case gotErr != nil && gotErr.Error() != test.wantErr.Error(): + t.Fatalf("Stringify() = %v, wanted %v", gotErr, test.wantErr) + case gotErr == nil && got != test.want: + t.Fatalf("Stringify() = %v, wanted %v", got, test.want) + } + }) + } +} + +func TestRoundTrip(t *testing.T) { + for cap := range Capability_name { + scap, _ := Stringify(Capability(cap)) + got, _ := Parse(scap) + if Capability(cap) != got { + t.Fatalf("Parse(Stringify()) = %v, wanted %v", got, Capability(cap)) + } + } +} + +func TestEncoding(t *testing.T) { + all := make(Set, 0, len(Capability_name)) + for cap := range Capability_name { + if cap == int32(Capability_UNKNOWN) { + continue + } + all = append(all, Capability(cap)) + } + all = sortCaps(all) + + tests := []struct { + name string + caps Set + }{{ + name: "owner", + caps: OwnerCaps, + }, { + name: "editor", + caps: EditorCaps, + }, { + name: "viewer", + caps: ViewerCaps, + }, { + name: "gulfstream", + caps: Set{Capability_CAP_GULFSTREAM}, + }, { + name: "all", + caps: all, + }, { + // sortCaps removes duplicates. + name: "duplicates", + caps: sortCaps(Set{Capability_CAP_GULFSTREAM, Capability_CAP_GULFSTREAM, Capability_CAP_GULFSTREAM}), + }} + + for _, test := range tests { + t.Run(test.name+"-standard", func(t *testing.T) { + raw, err := json.Marshal(test.caps) + if err != nil { + t.Fatalf("json.Marshal() = %v", err) + } + + t.Logf("ENCODED: %s", raw) + + // Confirm that we decode it and get what we expect. + got := make(Set, 0, len(test.caps)) + if err := json.Unmarshal(raw, &got); err != nil { + t.Fatalf("json.Unmarshal() = %v", err) + } + if diff := cmp.Diff(got, test.caps); diff != "" { + t.Errorf("(-got +want) = %s", diff) + } + }) + + t.Run(test.name+"-legacy", func(t *testing.T) { + // Remove our type alias, so that we use the legacy encoding. + legacy := []Capability(test.caps) + raw, err := json.Marshal(legacy) + if err != nil { + t.Fatalf("json.Marshal() = %v", err) + } + + t.Logf("ENCODED: %s", raw) + + // Confirm that we decode it and get what we expect when coming from + // the legacy encoding. + got := make(Set, 0, len(test.caps)) + if err := json.Unmarshal(raw, &got); err != nil { + t.Fatalf("json.Unmarshal() = %v", err) + } + if diff := cmp.Diff(got, test.caps); diff != "" { + t.Errorf("(-got +want) = %s", diff) + } + }) + } +} diff --git a/proto/capabilities/doc.go b/proto/capabilities/doc.go new file mode 100644 index 00000000..5765d5b9 --- /dev/null +++ b/proto/capabilities/doc.go @@ -0,0 +1,9 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package capabilities contains the proto enum with our IAM capabilities. +// +//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. capabilities.proto +package capabilities diff --git a/proto/capabilities/roles.go b/proto/capabilities/roles.go new file mode 100644 index 00000000..4a76f7a6 --- /dev/null +++ b/proto/capabilities/roles.go @@ -0,0 +1,161 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package capabilities + +import ( + "golang.org/x/exp/maps" + "golang.org/x/exp/slices" +) + +var ( + // viewerCaps are read-only capabilities that do not affect state. + ViewerCaps = sortCaps(append([]Capability{ + Capability_CAP_EVENTS_SUBSCRIPTION_LIST, + + Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST, + Capability_CAP_IAM_GROUP_INVITES_LIST, + Capability_CAP_IAM_GROUPS_LIST, + Capability_CAP_IAM_ROLE_BINDINGS_LIST, + Capability_CAP_IAM_ROLES_LIST, + Capability_CAP_IAM_POLICY_LIST, + Capability_CAP_IAM_IDENTITY_LIST, + Capability_CAP_IAM_IDENTITY_PROVIDERS_LIST, + + Capability_CAP_TENANT_CLUSTERS_DISCOVER, + Capability_CAP_TENANT_CLUSTERS_LIST, + Capability_CAP_TENANT_NAMESPACES_LIST, + Capability_CAP_TENANT_NODES_LIST, + Capability_CAP_TENANT_RECORDS_LIST, + Capability_CAP_TENANT_RECORD_CONTEXTS_LIST, + Capability_CAP_TENANT_RECORD_SIGNATURES_LIST, + Capability_CAP_TENANT_RECORD_POLICY_RESULTS_LIST, + Capability_CAP_TENANT_RISKS_LIST, + Capability_CAP_TENANT_SBOMS_LIST, + Capability_CAP_TENANT_VULN_REPORTS_LIST, + Capability_CAP_TENANT_WORKLOADS_LIST, + + Capability_CAP_SIGSTORE_LIST, + }, + // Viewers can also list repos and tags, and pull images. + RegistryPullCaps...)) + + // editorCaps can modify state, but not grant roles/permissions. + EditorCaps = sortCaps(append([]Capability{ + Capability_CAP_EVENTS_SUBSCRIPTION_CREATE, + Capability_CAP_EVENTS_SUBSCRIPTION_DELETE, + Capability_CAP_EVENTS_SUBSCRIPTION_UPDATE, + + Capability_CAP_TENANT_CLUSTERS_CREATE, + Capability_CAP_TENANT_CLUSTERS_UPDATE, + Capability_CAP_TENANT_CLUSTERS_DELETE, + + Capability_CAP_SIGSTORE_CERTIFICATE_CREATE, + Capability_CAP_SIGSTORE_CREATE, + Capability_CAP_SIGSTORE_DELETE, + Capability_CAP_SIGSTORE_UPDATE, + }, ViewerCaps...)) + + // ownerCaps includes all capabilities possible by a user. + OwnerCaps = sortCaps(append([]Capability{ + Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE, + Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE, + Capability_CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE, + + Capability_CAP_IAM_GROUP_INVITES_CREATE, + Capability_CAP_IAM_GROUP_INVITES_DELETE, + + Capability_CAP_IAM_GROUPS_CREATE, + Capability_CAP_IAM_GROUPS_DELETE, + Capability_CAP_IAM_GROUPS_UPDATE, + + Capability_CAP_IAM_POLICY_CREATE, + Capability_CAP_IAM_POLICY_UPDATE, + Capability_CAP_IAM_POLICY_DELETE, + + Capability_CAP_IAM_IDENTITY_CREATE, + Capability_CAP_IAM_IDENTITY_DELETE, + Capability_CAP_IAM_IDENTITY_UPDATE, + + Capability_CAP_IAM_IDENTITY_PROVIDERS_CREATE, + Capability_CAP_IAM_IDENTITY_PROVIDERS_DELETE, + Capability_CAP_IAM_IDENTITY_PROVIDERS_UPDATE, + + Capability_CAP_IAM_ROLE_BINDINGS_CREATE, + Capability_CAP_IAM_ROLE_BINDINGS_DELETE, + Capability_CAP_IAM_ROLE_BINDINGS_UPDATE, + + Capability_CAP_IAM_ROLES_CREATE, + Capability_CAP_IAM_ROLES_DELETE, + Capability_CAP_IAM_ROLES_UPDATE, + + // Add gulfstream capability to owner so owners can rolebind + // identities to the gulfstream role. + Capability_CAP_GULFSTREAM, + }, append(EditorCaps, + // Owners can also push and delete images, subject to the identity allowlist. + RegistryPushCaps...)...)) + + RegistryPullCaps = sortCaps([]Capability{ + Capability_CAP_IAM_GROUPS_LIST, + + Capability_CAP_REPO_LIST, + Capability_CAP_MANIFEST_LIST, + Capability_CAP_TAG_LIST, + + Capability_CAP_TENANT_RECORD_SIGNATURES_LIST, + Capability_CAP_TENANT_SBOMS_LIST, + Capability_CAP_TENANT_VULN_REPORTS_LIST, + }) + + RegistryPushCaps = sortCaps(append([]Capability{ + Capability_CAP_REPO_CREATE, + Capability_CAP_REPO_UPDATE, + Capability_CAP_REPO_DELETE, + + Capability_CAP_MANIFEST_CREATE, + Capability_CAP_MANIFEST_UPDATE, + Capability_CAP_MANIFEST_DELETE, + + Capability_CAP_TAG_CREATE, + Capability_CAP_TAG_UPDATE, + Capability_CAP_TAG_DELETE, + + // To create nested groups as needed on push. + Capability_CAP_IAM_GROUPS_CREATE, + }, RegistryPullCaps...)) + + RegistryPullTokenCreatorCaps = sortCaps(append([]Capability{ + // Minimal set of capabilities to create a registry pull token. + Capability_CAP_IAM_ROLE_BINDINGS_CREATE, + Capability_CAP_IAM_IDENTITY_CREATE, + + Capability_CAP_IAM_ROLES_LIST, + }, RegistryPullCaps...)) + + SigningViewerCaps = sortCaps([]Capability{ + Capability_CAP_SIGSTORE_LIST, + }) + + SigningCertRequesterCaps = sortCaps(append([]Capability{ + Capability_CAP_SIGSTORE_CERTIFICATE_CREATE, + }, SigningViewerCaps...)) + + SigningEditorCaps = sortCaps(append([]Capability{ + Capability_CAP_SIGSTORE_CREATE, + Capability_CAP_SIGSTORE_DELETE, + Capability_CAP_SIGSTORE_UPDATE, + }, SigningCertRequesterCaps...)) +) + +func sortCaps(caps []Capability) []Capability { + uniq := map[Capability]struct{}{} + for _, c := range caps { + uniq[c] = struct{}{} + } + out := maps.Keys(uniq) + slices.Sort(out) + return out +} diff --git a/proto/google/api/annotations.proto b/proto/google/api/annotations.proto new file mode 100644 index 00000000..efdab3db --- /dev/null +++ b/proto/google/api/annotations.proto @@ -0,0 +1,31 @@ +// Copyright 2015 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/api/http.proto"; +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "AnnotationsProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.MethodOptions { + // See `HttpRule`. + HttpRule http = 72295728; +} diff --git a/proto/google/api/field_behavior.proto b/proto/google/api/field_behavior.proto new file mode 100644 index 00000000..c4abe3b6 --- /dev/null +++ b/proto/google/api/field_behavior.proto @@ -0,0 +1,90 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "FieldBehaviorProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.FieldOptions { + // A designation of a specific field behavior (required, output only, etc.) + // in protobuf messages. + // + // Examples: + // + // string name = 1 [(google.api.field_behavior) = REQUIRED]; + // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + // google.protobuf.Duration ttl = 1 + // [(google.api.field_behavior) = INPUT_ONLY]; + // google.protobuf.Timestamp expire_time = 1 + // [(google.api.field_behavior) = OUTPUT_ONLY, + // (google.api.field_behavior) = IMMUTABLE]; + repeated google.api.FieldBehavior field_behavior = 1052; +} + +// An indicator of the behavior of a given field (for example, that a field +// is required in requests, or given as output but ignored as input). +// This **does not** change the behavior in protocol buffers itself; it only +// denotes the behavior and may affect how API tooling handles the field. +// +// Note: This enum **may** receive new values in the future. +enum FieldBehavior { + // Conventional default for enums. Do not use this. + FIELD_BEHAVIOR_UNSPECIFIED = 0; + + // Specifically denotes a field as optional. + // While all fields in protocol buffers are optional, this may be specified + // for emphasis if appropriate. + OPTIONAL = 1; + + // Denotes a field as required. + // This indicates that the field **must** be provided as part of the request, + // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). + REQUIRED = 2; + + // Denotes a field as output only. + // This indicates that the field is provided in responses, but including the + // field in a request does nothing (the server *must* ignore it and + // *must not* throw an error as a result of the field's presence). + OUTPUT_ONLY = 3; + + // Denotes a field as input only. + // This indicates that the field is provided in requests, and the + // corresponding field is not included in output. + INPUT_ONLY = 4; + + // Denotes a field as immutable. + // This indicates that the field may be set once in a request to create a + // resource, but may not be changed thereafter. + IMMUTABLE = 5; + + // Denotes that a (repeated) field is an unordered list. + // This indicates that the service may provide the elements of the list + // in any arbitrary order, rather than the order the user originally + // provided. Additionally, the list's order may or may not be stable. + UNORDERED_LIST = 6; + + // Denotes that this field returns a non-empty default value if not set. + // This indicates that if the user provides the empty value in a request, + // a non-empty value will be returned. The user will not be aware of what + // non-empty value to expect. + NON_EMPTY_DEFAULT = 7; +} diff --git a/proto/google/api/http.proto b/proto/google/api/http.proto new file mode 100644 index 00000000..113fa936 --- /dev/null +++ b/proto/google/api/http.proto @@ -0,0 +1,375 @@ +// Copyright 2015 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "HttpProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +// Defines the HTTP configuration for an API service. It contains a list of +// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method +// to one or more HTTP REST API methods. +message Http { + // A list of HTTP configuration rules that apply to individual API methods. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + repeated HttpRule rules = 1; + + // When set to true, URL path parameters will be fully URI-decoded except in + // cases of single segment matches in reserved expansion, where "%2F" will be + // left encoded. + // + // The default behavior is to not decode RFC 6570 reserved characters in multi + // segment matches. + bool fully_decode_reserved_expansion = 2; +} + +// # gRPC Transcoding +// +// gRPC Transcoding is a feature for mapping between a gRPC method and one or +// more HTTP REST endpoints. It allows developers to build a single API service +// that supports both gRPC APIs and REST APIs. Many systems, including [Google +// APIs](https://github.com/googleapis/googleapis), +// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC +// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), +// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature +// and use it for large scale production services. +// +// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies +// how different portions of the gRPC request message are mapped to the URL +// path, URL query parameters, and HTTP request body. It also controls how the +// gRPC response message is mapped to the HTTP response body. `HttpRule` is +// typically specified as an `google.api.http` annotation on the gRPC method. +// +// Each mapping specifies a URL path template and an HTTP method. The path +// template may refer to one or more fields in the gRPC request message, as long +// as each field is a non-repeated field with a primitive (non-message) type. +// The path template controls how fields of the request message are mapped to +// the URL path. +// +// Example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get: "/v1/{name=messages/*}" +// }; +// } +// } +// message GetMessageRequest { +// string name = 1; // Mapped to URL path. +// } +// message Message { +// string text = 1; // The resource content. +// } +// +// This enables an HTTP REST to gRPC mapping as below: +// +// HTTP | gRPC +// -----|----- +// `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` +// +// Any fields in the request message which are not bound by the path template +// automatically become HTTP query parameters if there is no HTTP request body. +// For example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get:"/v1/messages/{message_id}" +// }; +// } +// } +// message GetMessageRequest { +// message SubMessage { +// string subfield = 1; +// } +// string message_id = 1; // Mapped to URL path. +// int64 revision = 2; // Mapped to URL query parameter `revision`. +// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. +// } +// +// This enables a HTTP JSON to RPC mapping as below: +// +// HTTP | gRPC +// -----|----- +// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | +// `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: +// "foo"))` +// +// Note that fields which are mapped to URL query parameters must have a +// primitive type or a repeated primitive type or a non-repeated message type. +// In the case of a repeated type, the parameter can be repeated in the URL +// as `...?param=A¶m=B`. In the case of a message type, each field of the +// message is mapped to a separate parameter, such as +// `...?foo.a=A&foo.b=B&foo.c=C`. +// +// For HTTP methods that allow a request body, the `body` field +// specifies the mapping. Consider a REST update method on the +// message resource collection: +// +// service Messaging { +// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { +// option (google.api.http) = { +// patch: "/v1/messages/{message_id}" +// body: "message" +// }; +// } +// } +// message UpdateMessageRequest { +// string message_id = 1; // mapped to the URL +// Message message = 2; // mapped to the body +// } +// +// The following HTTP JSON to RPC mapping is enabled, where the +// representation of the JSON in the request body is determined by +// protos JSON encoding: +// +// HTTP | gRPC +// -----|----- +// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: +// "123456" message { text: "Hi!" })` +// +// The special name `*` can be used in the body mapping to define that +// every field not bound by the path template should be mapped to the +// request body. This enables the following alternative definition of +// the update method: +// +// service Messaging { +// rpc UpdateMessage(Message) returns (Message) { +// option (google.api.http) = { +// patch: "/v1/messages/{message_id}" +// body: "*" +// }; +// } +// } +// message Message { +// string message_id = 1; +// string text = 2; +// } +// +// +// The following HTTP JSON to RPC mapping is enabled: +// +// HTTP | gRPC +// -----|----- +// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: +// "123456" text: "Hi!")` +// +// Note that when using `*` in the body mapping, it is not possible to +// have HTTP parameters, as all fields not bound by the path end in +// the body. This makes this option more rarely used in practice when +// defining REST APIs. The common usage of `*` is in custom methods +// which don't use the URL at all for transferring data. +// +// It is possible to define multiple HTTP methods for one RPC by using +// the `additional_bindings` option. Example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get: "/v1/messages/{message_id}" +// additional_bindings { +// get: "/v1/users/{user_id}/messages/{message_id}" +// } +// }; +// } +// } +// message GetMessageRequest { +// string message_id = 1; +// string user_id = 2; +// } +// +// This enables the following two alternative HTTP JSON to RPC mappings: +// +// HTTP | gRPC +// -----|----- +// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` +// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: +// "123456")` +// +// ## Rules for HTTP mapping +// +// 1. Leaf request fields (recursive expansion nested messages in the request +// message) are classified into three categories: +// - Fields referred by the path template. They are passed via the URL path. +// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP +// request body. +// - All other fields are passed via the URL query parameters, and the +// parameter name is the field path in the request message. A repeated +// field can be represented as multiple query parameters under the same +// name. +// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields +// are passed via URL path and HTTP request body. +// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all +// fields are passed via URL path and URL query parameters. +// +// ### Path template syntax +// +// Template = "/" Segments [ Verb ] ; +// Segments = Segment { "/" Segment } ; +// Segment = "*" | "**" | LITERAL | Variable ; +// Variable = "{" FieldPath [ "=" Segments ] "}" ; +// FieldPath = IDENT { "." IDENT } ; +// Verb = ":" LITERAL ; +// +// The syntax `*` matches a single URL path segment. The syntax `**` matches +// zero or more URL path segments, which must be the last part of the URL path +// except the `Verb`. +// +// The syntax `Variable` matches part of the URL path as specified by its +// template. A variable template must not contain other variables. If a variable +// matches a single path segment, its template may be omitted, e.g. `{var}` +// is equivalent to `{var=*}`. +// +// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` +// contains any reserved character, such characters should be percent-encoded +// before the matching. +// +// If a variable contains exactly one path segment, such as `"{var}"` or +// `"{var=*}"`, when such a variable is expanded into a URL path on the client +// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The +// server side does the reverse decoding. Such variables show up in the +// [Discovery +// Document](https://developers.google.com/discovery/v1/reference/apis) as +// `{var}`. +// +// If a variable contains multiple path segments, such as `"{var=foo/*}"` +// or `"{var=**}"`, when such a variable is expanded into a URL path on the +// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. +// The server side does the reverse decoding, except "%2F" and "%2f" are left +// unchanged. Such variables show up in the +// [Discovery +// Document](https://developers.google.com/discovery/v1/reference/apis) as +// `{+var}`. +// +// ## Using gRPC API Service Configuration +// +// gRPC API Service Configuration (service config) is a configuration language +// for configuring a gRPC service to become a user-facing product. The +// service config is simply the YAML representation of the `google.api.Service` +// proto message. +// +// As an alternative to annotating your proto file, you can configure gRPC +// transcoding in your service config YAML files. You do this by specifying a +// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same +// effect as the proto annotation. This can be particularly useful if you +// have a proto that is reused in multiple services. Note that any transcoding +// specified in the service config will override any matching transcoding +// configuration in the proto. +// +// Example: +// +// http: +// rules: +// # Selects a gRPC method and applies HttpRule to it. +// - selector: example.v1.Messaging.GetMessage +// get: /v1/messages/{message_id}/{sub.subfield} +// +// ## Special notes +// +// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the +// proto to JSON conversion must follow the [proto3 +// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). +// +// While the single segment variable follows the semantics of +// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String +// Expansion, the multi segment variable **does not** follow RFC 6570 Section +// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion +// does not expand special characters like `?` and `#`, which would lead +// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding +// for multi segment variables. +// +// The path variables **must not** refer to any repeated or mapped field, +// because client libraries are not capable of handling such variable expansion. +// +// The path variables **must not** capture the leading "/" character. The reason +// is that the most common use case "{var}" does not capture the leading "/" +// character. For consistency, all path variables must share the same behavior. +// +// Repeated message fields must not be mapped to URL query parameters, because +// no client library can support such complicated mapping. +// +// If an API needs to use a JSON array for request or response body, it can map +// the request or response body to a repeated field. However, some gRPC +// Transcoding implementations may not support this feature. +message HttpRule { + // Selects a method to which this rule applies. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. + string selector = 1; + + // Determines the URL pattern is matched by this rules. This pattern can be + // used with any of the {get|put|post|delete|patch} methods. A custom method + // can be defined using the 'custom' field. + oneof pattern { + // Maps to HTTP GET. Used for listing and getting information about + // resources. + string get = 2; + + // Maps to HTTP PUT. Used for replacing a resource. + string put = 3; + + // Maps to HTTP POST. Used for creating a resource or performing an action. + string post = 4; + + // Maps to HTTP DELETE. Used for deleting a resource. + string delete = 5; + + // Maps to HTTP PATCH. Used for updating a resource. + string patch = 6; + + // The custom pattern is used for specifying an HTTP method that is not + // included in the `pattern` field, such as HEAD, or "*" to leave the + // HTTP method unspecified for this rule. The wild-card rule is useful + // for services that provide content to Web (HTML) clients. + CustomHttpPattern custom = 8; + } + + // The name of the request field whose value is mapped to the HTTP request + // body, or `*` for mapping all request fields not captured by the path + // pattern to the HTTP body, or omitted for not having any HTTP request body. + // + // NOTE: the referred field must be present at the top-level of the request + // message type. + string body = 7; + + // Optional. The name of the response field whose value is mapped to the HTTP + // response body. When omitted, the entire response message will be used + // as the HTTP response body. + // + // NOTE: The referred field must be present at the top-level of the response + // message type. + string response_body = 12; + + // Additional HTTP bindings for the selector. Nested bindings must + // not contain an `additional_bindings` field themselves (that is, + // the nesting may only be one level deep). + repeated HttpRule additional_bindings = 11; +} + +// A custom pattern is used for defining custom HTTP verb. +message CustomHttpPattern { + // The name of this custom HTTP verb. + string kind = 1; + + // The path matched by this custom verb. + string path = 2; +} diff --git a/proto/google/api/httpbody.proto b/proto/google/api/httpbody.proto new file mode 100644 index 00000000..00c80aba --- /dev/null +++ b/proto/google/api/httpbody.proto @@ -0,0 +1,81 @@ +// Copyright 2015 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/any.proto"; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/httpbody;httpbody"; +option java_multiple_files = true; +option java_outer_classname = "HttpBodyProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +// Message that represents an arbitrary HTTP body. It should only be used for +// payload formats that can't be represented as JSON, such as raw binary or +// an HTML page. +// +// +// This message can be used both in streaming and non-streaming API methods in +// the request as well as the response. +// +// It can be used as a top-level request field, which is convenient if one +// wants to extract parameters from either the URL or HTTP template into the +// request fields and also want access to the raw HTTP body. +// +// Example: +// +// message GetResourceRequest { +// // A unique request id. +// string request_id = 1; +// +// // The raw HTTP body is bound to this field. +// google.api.HttpBody http_body = 2; +// +// } +// +// service ResourceService { +// rpc GetResource(GetResourceRequest) +// returns (google.api.HttpBody); +// rpc UpdateResource(google.api.HttpBody) +// returns (google.protobuf.Empty); +// +// } +// +// Example with streaming methods: +// +// service CaldavService { +// rpc GetCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// rpc UpdateCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// +// } +// +// Use of this type only changes how the request and response bodies are +// handled, all other features will continue to work unchanged. +message HttpBody { + // The HTTP Content-Type header value specifying the content type of the body. + string content_type = 1; + + // The HTTP request/response body as raw binary. + bytes data = 2; + + // Application specific response metadata. Must be set in the first response + // for streaming APIs. + repeated google.protobuf.Any extensions = 3; +} diff --git a/proto/google/api/resource.proto b/proto/google/api/resource.proto new file mode 100644 index 00000000..ab71d2b9 --- /dev/null +++ b/proto/google/api/resource.proto @@ -0,0 +1,239 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "ResourceProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.FieldOptions { + // An annotation that describes a resource reference, see + // [ResourceReference][]. + google.api.ResourceReference resource_reference = 1055; +} + +extend google.protobuf.FileOptions { + // An annotation that describes a resource definition without a corresponding + // message; see [ResourceDescriptor][]. + repeated google.api.ResourceDescriptor resource_definition = 1053; +} + +extend google.protobuf.MessageOptions { + // An annotation that describes a resource definition, see + // [ResourceDescriptor][]. + google.api.ResourceDescriptor resource = 1053; +} + +// A simple descriptor of a resource type. +// +// ResourceDescriptor annotates a resource message (either by means of a +// protobuf annotation or use in the service config), and associates the +// resource's schema, the resource type, and the pattern of the resource name. +// +// Example: +// +// message Topic { +// // Indicates this message defines a resource schema. +// // Declares the resource type in the format of {service}/{kind}. +// // For Kubernetes resources, the format is {api group}/{kind}. +// option (google.api.resource) = { +// type: "pubsub.googleapis.com/Topic" +// pattern: "projects/{project}/topics/{topic}" +// }; +// } +// +// The ResourceDescriptor Yaml config will look like: +// +// resources: +// - type: "pubsub.googleapis.com/Topic" +// pattern: "projects/{project}/topics/{topic}" +// +// Sometimes, resources have multiple patterns, typically because they can +// live under multiple parents. +// +// Example: +// +// message LogEntry { +// option (google.api.resource) = { +// type: "logging.googleapis.com/LogEntry" +// pattern: "projects/{project}/logs/{log}" +// pattern: "folders/{folder}/logs/{log}" +// pattern: "organizations/{organization}/logs/{log}" +// pattern: "billingAccounts/{billing_account}/logs/{log}" +// }; +// } +// +// The ResourceDescriptor Yaml config will look like: +// +// resources: +// - type: 'logging.googleapis.com/LogEntry' +// pattern: "projects/{project}/logs/{log}" +// pattern: "folders/{folder}/logs/{log}" +// pattern: "organizations/{organization}/logs/{log}" +// pattern: "billingAccounts/{billing_account}/logs/{log}" +message ResourceDescriptor { + // A description of the historical or future-looking state of the + // resource pattern. + enum History { + // The "unset" value. + HISTORY_UNSPECIFIED = 0; + + // The resource originally had one pattern and launched as such, and + // additional patterns were added later. + ORIGINALLY_SINGLE_PATTERN = 1; + + // The resource has one pattern, but the API owner expects to add more + // later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents + // that from being necessary once there are multiple patterns.) + FUTURE_MULTI_PATTERN = 2; + } + + // A flag representing a specific style that a resource claims to conform to. + enum Style { + // The unspecified value. Do not use. + STYLE_UNSPECIFIED = 0; + + // This resource is intended to be "declarative-friendly". + // + // Declarative-friendly resources must be more strictly consistent, and + // setting this to true communicates to tools that this resource should + // adhere to declarative-friendly expectations. + // + // Note: This is used by the API linter (linter.aip.dev) to enable + // additional checks. + DECLARATIVE_FRIENDLY = 1; + } + + // The resource type. It must be in the format of + // {service_name}/{resource_type_kind}. The `resource_type_kind` must be + // singular and must not include version numbers. + // + // Example: `storage.googleapis.com/Bucket` + // + // The value of the resource_type_kind must follow the regular expression + // /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and + // should use PascalCase (UpperCamelCase). The maximum number of + // characters allowed for the `resource_type_kind` is 100. + string type = 1; + + // Optional. The relative resource name pattern associated with this resource + // type. The DNS prefix of the full resource name shouldn't be specified here. + // + // The path pattern must follow the syntax, which aligns with HTTP binding + // syntax: + // + // Template = Segment { "/" Segment } ; + // Segment = LITERAL | Variable ; + // Variable = "{" LITERAL "}" ; + // + // Examples: + // + // - "projects/{project}/topics/{topic}" + // - "projects/{project}/knowledgeBases/{knowledge_base}" + // + // The components in braces correspond to the IDs for each resource in the + // hierarchy. It is expected that, if multiple patterns are provided, + // the same component name (e.g. "project") refers to IDs of the same + // type of resource. + repeated string pattern = 2; + + // Optional. The field on the resource that designates the resource name + // field. If omitted, this is assumed to be "name". + string name_field = 3; + + // Optional. The historical or future-looking state of the resource pattern. + // + // Example: + // + // // The InspectTemplate message originally only supported resource + // // names with organization, and project was added later. + // message InspectTemplate { + // option (google.api.resource) = { + // type: "dlp.googleapis.com/InspectTemplate" + // pattern: + // "organizations/{organization}/inspectTemplates/{inspect_template}" + // pattern: "projects/{project}/inspectTemplates/{inspect_template}" + // history: ORIGINALLY_SINGLE_PATTERN + // }; + // } + History history = 4; + + // The plural name used in the resource name and permission names, such as + // 'projects' for the resource name of 'projects/{project}' and the permission + // name of 'cloudresourcemanager.googleapis.com/projects.get'. It is the same + // concept of the `plural` field in k8s CRD spec + // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ + // + // Note: The plural form is required even for singleton resources. See + // https://aip.dev/156 + string plural = 5; + + // The same concept of the `singular` field in k8s CRD spec + // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ + // Such as "project" for the `resourcemanager.googleapis.com/Project` type. + string singular = 6; + + // Style flag(s) for this resource. + // These indicate that a resource is expected to conform to a given + // style. See the specific style flags for additional information. + repeated Style style = 10; +} + +// Defines a proto annotation that describes a string field that refers to +// an API resource. +message ResourceReference { + // The resource type that the annotated field references. + // + // Example: + // + // message Subscription { + // string topic = 2 [(google.api.resource_reference) = { + // type: "pubsub.googleapis.com/Topic" + // }]; + // } + // + // Occasionally, a field may reference an arbitrary resource. In this case, + // APIs use the special value * in their resource reference. + // + // Example: + // + // message GetIamPolicyRequest { + // string resource = 2 [(google.api.resource_reference) = { + // type: "*" + // }]; + // } + string type = 1; + + // The resource type of a child collection that the annotated field + // references. This is useful for annotating the `parent` field that + // doesn't have a fixed resource type. + // + // Example: + // + // message ListLogEntriesRequest { + // string parent = 1 [(google.api.resource_reference) = { + // child_type: "logging.googleapis.com/LogEntry" + // }; + // } + string child_type = 2; +} + diff --git a/proto/platform/advisory/v1/advisory.platform.pb.go b/proto/platform/advisory/v1/advisory.platform.pb.go new file mode 100644 index 00000000..bbf57c45 --- /dev/null +++ b/proto/platform/advisory/v1/advisory.platform.pb.go @@ -0,0 +1,1936 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: advisory.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Reference_Type int32 + +const ( + // The "unset" value. + Reference_UNSPECIFIED Reference_Type = 0 + // Published security advisory for the vulnerability. + Reference_ADVISORY Reference_Type = 1 + // Article or blog post describing the vulnerability. + Reference_ARTICLE Reference_Type = 2 + // Scanner or tool that allows detection in prod environments. + Reference_DETECTION Reference_Type = 3 + // Social media discussion about vuln. + Reference_DISCUSSION Reference_Type = 4 + // Report on vuln. + Reference_REPORT Reference_Type = 5 + // Source code browser link to fix. + Reference_FIX Reference_Type = 6 + // Source code browser link to introduction of vuln. + Reference_INTRODUCED Reference_Type = 7 + // Home web page for package. + Reference_PACKAGE Reference_Type = 8 + // Demonstration of validity of vuln claim. + Reference_EVIDENCE Reference_Type = 9 + // Web page of unspecified kind. + Reference_WEB Reference_Type = 10 +) + +// Enum value maps for Reference_Type. +var ( + Reference_Type_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "ADVISORY", + 2: "ARTICLE", + 3: "DETECTION", + 4: "DISCUSSION", + 5: "REPORT", + 6: "FIX", + 7: "INTRODUCED", + 8: "PACKAGE", + 9: "EVIDENCE", + 10: "WEB", + } + Reference_Type_value = map[string]int32{ + "UNSPECIFIED": 0, + "ADVISORY": 1, + "ARTICLE": 2, + "DETECTION": 3, + "DISCUSSION": 4, + "REPORT": 5, + "FIX": 6, + "INTRODUCED": 7, + "PACKAGE": 8, + "EVIDENCE": 9, + "WEB": 10, + } +) + +func (x Reference_Type) Enum() *Reference_Type { + p := new(Reference_Type) + *p = x + return p +} + +func (x Reference_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Reference_Type) Descriptor() protoreflect.EnumDescriptor { + return file_advisory_platform_proto_enumTypes[0].Descriptor() +} + +func (Reference_Type) Type() protoreflect.EnumType { + return &file_advisory_platform_proto_enumTypes[0] +} + +func (x Reference_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Reference_Type.Descriptor instead. +func (Reference_Type) EnumDescriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{1, 0} +} + +type Severity_Type int32 + +const ( + // The "unset" value. + Severity_UNSPECIFIED Severity_Type = 0 + // CVSS v2 + Severity_CVSS_V2 Severity_Type = 1 + // CVSS >= 3.0 and < 4.0 + Severity_CVSS_V3 Severity_Type = 2 + // CVSS >= 4.0 and < 5.0 + Severity_CVSS_V4 Severity_Type = 3 +) + +// Enum value maps for Severity_Type. +var ( + Severity_Type_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "CVSS_V2", + 2: "CVSS_V3", + 3: "CVSS_V4", + } + Severity_Type_value = map[string]int32{ + "UNSPECIFIED": 0, + "CVSS_V2": 1, + "CVSS_V3": 2, + "CVSS_V4": 3, + } +) + +func (x Severity_Type) Enum() *Severity_Type { + p := new(Severity_Type) + *p = x + return p +} + +func (x Severity_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Severity_Type) Descriptor() protoreflect.EnumDescriptor { + return file_advisory_platform_proto_enumTypes[1].Descriptor() +} + +func (Severity_Type) Type() protoreflect.EnumType { + return &file_advisory_platform_proto_enumTypes[1] +} + +func (x Severity_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Severity_Type.Descriptor instead. +func (Severity_Type) EnumDescriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{2, 0} +} + +type FalsePositiveDetermination_Type int32 + +const ( + // The "unset" value. + FalsePositiveDetermination_FPT_TYPE_UNSPECIFIED FalsePositiveDetermination_Type = 0 + // VEX: vulnerable_code_not_present. + FalsePositiveDetermination_FPT_TYPE_VULNERABILITY_RECORD_ANALYSIS_CONTESTED FalsePositiveDetermination_Type = 1 + // VEX: component_not_present. + FalsePositiveDetermination_FPT_TYPE_COMPONENT_VULNERABILITY_MISMATCH FalsePositiveDetermination_Type = 2 + // VEX: vulnerable_code_not_present. + FalsePositiveDetermination_FPT_TYPE_VULNERABLE_CODE_VERSION_NOT_USED FalsePositiveDetermination_Type = 3 + // VEX: vulnerable_code_not_present. + FalsePositiveDetermination_FPT_TYPE_VULNERABLE_CODE_NOT_INCLUDED_IN_PACKAGE FalsePositiveDetermination_Type = 4 + // VEX: vulnerable_code_not_in_execute_path. + FalsePositiveDetermination_FPT_TYPE_VULNERABLE_CODE_NOT_IN_EXECUTION_PATH FalsePositiveDetermination_Type = 5 + // VEX: vulnerable_code_cannot_be_controlled_by_adversary. + FalsePositiveDetermination_FPT_TYPE_VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY FalsePositiveDetermination_Type = 6 + // VEX: inline_mitigations_already_exist. + FalsePositiveDetermination_FPT_TYPE_INLINE_MITIGATIONS_EXIST FalsePositiveDetermination_Type = 7 +) + +// Enum value maps for FalsePositiveDetermination_Type. +var ( + FalsePositiveDetermination_Type_name = map[int32]string{ + 0: "FPT_TYPE_UNSPECIFIED", + 1: "FPT_TYPE_VULNERABILITY_RECORD_ANALYSIS_CONTESTED", + 2: "FPT_TYPE_COMPONENT_VULNERABILITY_MISMATCH", + 3: "FPT_TYPE_VULNERABLE_CODE_VERSION_NOT_USED", + 4: "FPT_TYPE_VULNERABLE_CODE_NOT_INCLUDED_IN_PACKAGE", + 5: "FPT_TYPE_VULNERABLE_CODE_NOT_IN_EXECUTION_PATH", + 6: "FPT_TYPE_VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY", + 7: "FPT_TYPE_INLINE_MITIGATIONS_EXIST", + } + FalsePositiveDetermination_Type_value = map[string]int32{ + "FPT_TYPE_UNSPECIFIED": 0, + "FPT_TYPE_VULNERABILITY_RECORD_ANALYSIS_CONTESTED": 1, + "FPT_TYPE_COMPONENT_VULNERABILITY_MISMATCH": 2, + "FPT_TYPE_VULNERABLE_CODE_VERSION_NOT_USED": 3, + "FPT_TYPE_VULNERABLE_CODE_NOT_INCLUDED_IN_PACKAGE": 4, + "FPT_TYPE_VULNERABLE_CODE_NOT_IN_EXECUTION_PATH": 5, + "FPT_TYPE_VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY": 6, + "FPT_TYPE_INLINE_MITIGATIONS_EXIST": 7, + } +) + +func (x FalsePositiveDetermination_Type) Enum() *FalsePositiveDetermination_Type { + p := new(FalsePositiveDetermination_Type) + *p = x + return p +} + +func (x FalsePositiveDetermination_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FalsePositiveDetermination_Type) Descriptor() protoreflect.EnumDescriptor { + return file_advisory_platform_proto_enumTypes[2].Descriptor() +} + +func (FalsePositiveDetermination_Type) Type() protoreflect.EnumType { + return &file_advisory_platform_proto_enumTypes[2] +} + +func (x FalsePositiveDetermination_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use FalsePositiveDetermination_Type.Descriptor instead. +func (FalsePositiveDetermination_Type) EnumDescriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{7, 0} +} + +type VulnerabilityMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the identifier of this specific vuln. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` + Details string `protobuf:"bytes,3,opt,name=details,proto3" json:"details,omitempty"` + References []*Reference `protobuf:"bytes,4,rep,name=references,proto3" json:"references,omitempty"` + Severity []*Severity `protobuf:"bytes,5,rep,name=severity,proto3" json:"severity,omitempty"` +} + +func (x *VulnerabilityMetadata) Reset() { + *x = VulnerabilityMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnerabilityMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnerabilityMetadata) ProtoMessage() {} + +func (x *VulnerabilityMetadata) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VulnerabilityMetadata.ProtoReflect.Descriptor instead. +func (*VulnerabilityMetadata) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *VulnerabilityMetadata) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VulnerabilityMetadata) GetSummary() string { + if x != nil { + return x.Summary + } + return "" +} + +func (x *VulnerabilityMetadata) GetDetails() string { + if x != nil { + return x.Details + } + return "" +} + +func (x *VulnerabilityMetadata) GetReferences() []*Reference { + if x != nil { + return x.References + } + return nil +} + +func (x *VulnerabilityMetadata) GetSeverity() []*Severity { + if x != nil { + return x.Severity + } + return nil +} + +type Reference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type Reference_Type `protobuf:"varint,1,opt,name=type,proto3,enum=chainguard.platform.advisory.Reference_Type" json:"type,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` +} + +func (x *Reference) Reset() { + *x = Reference{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Reference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Reference) ProtoMessage() {} + +func (x *Reference) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Reference.ProtoReflect.Descriptor instead. +func (*Reference) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *Reference) GetType() Reference_Type { + if x != nil { + return x.Type + } + return Reference_UNSPECIFIED +} + +func (x *Reference) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +type Severity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // CVSS version standard. + Type Severity_Type `protobuf:"varint,1,opt,name=type,proto3,enum=chainguard.platform.advisory.Severity_Type" json:"type,omitempty"` + // Vector string representing CVSS score based on type. + Score string `protobuf:"bytes,2,opt,name=score,proto3" json:"score,omitempty"` +} + +func (x *Severity) Reset() { + *x = Severity{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Severity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Severity) ProtoMessage() {} + +func (x *Severity) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Severity.ProtoReflect.Descriptor instead. +func (*Severity) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *Severity) GetType() Severity_Type { + if x != nil { + return x.Type + } + return Severity_UNSPECIFIED +} + +func (x *Severity) GetScore() string { + if x != nil { + return x.Score + } + return "" +} + +type Advisory struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the identifier of this specific advisory. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Events []*Event `protobuf:"bytes,2,rep,name=events,proto3" json:"events,omitempty"` + Aliases []string `protobuf:"bytes,3,rep,name=aliases,proto3" json:"aliases,omitempty"` +} + +func (x *Advisory) Reset() { + *x = Advisory{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Advisory) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Advisory) ProtoMessage() {} + +func (x *Advisory) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_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 Advisory.ProtoReflect.Descriptor instead. +func (*Advisory) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *Advisory) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Advisory) GetEvents() []*Event { + if x != nil { + return x.Events + } + return nil +} + +func (x *Advisory) GetAliases() []string { + if x != nil { + return x.Aliases + } + return nil +} + +type Document struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Advisories []*Advisory `protobuf:"bytes,2,rep,name=advisories,proto3" json:"advisories,omitempty"` +} + +func (x *Document) Reset() { + *x = Document{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Document) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Document) ProtoMessage() {} + +func (x *Document) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Document.ProtoReflect.Descriptor instead. +func (*Document) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *Document) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Document) GetAdvisories() []*Advisory { + if x != nil { + return x.Advisories + } + return nil +} + +type Event struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Types that are assignable to Data: + // + // *Event_TruePositiveDetermination + // *Event_FalsePositiveDetermination + // *Event_Fixed + // *Event_Detection + // *Event_AnalysisNotPlanned + // *Event_FixNotPlanned + // *Event_PendingUpstreamFix + Data isEvent_Data `protobuf_oneof:"data"` +} + +func (x *Event) Reset() { + *x = Event{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Event) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Event) ProtoMessage() {} + +func (x *Event) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Event.ProtoReflect.Descriptor instead. +func (*Event) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *Event) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (m *Event) GetData() isEvent_Data { + if m != nil { + return m.Data + } + return nil +} + +func (x *Event) GetTruePositiveDetermination() *TruePositiveDetermination { + if x, ok := x.GetData().(*Event_TruePositiveDetermination); ok { + return x.TruePositiveDetermination + } + return nil +} + +func (x *Event) GetFalsePositiveDetermination() *FalsePositiveDetermination { + if x, ok := x.GetData().(*Event_FalsePositiveDetermination); ok { + return x.FalsePositiveDetermination + } + return nil +} + +func (x *Event) GetFixed() *Fixed { + if x, ok := x.GetData().(*Event_Fixed); ok { + return x.Fixed + } + return nil +} + +func (x *Event) GetDetection() *Detection { + if x, ok := x.GetData().(*Event_Detection); ok { + return x.Detection + } + return nil +} + +func (x *Event) GetAnalysisNotPlanned() *AnalysisNotPlanned { + if x, ok := x.GetData().(*Event_AnalysisNotPlanned); ok { + return x.AnalysisNotPlanned + } + return nil +} + +func (x *Event) GetFixNotPlanned() *FixNotPlanned { + if x, ok := x.GetData().(*Event_FixNotPlanned); ok { + return x.FixNotPlanned + } + return nil +} + +func (x *Event) GetPendingUpstreamFix() *PendingUpstreamFix { + if x, ok := x.GetData().(*Event_PendingUpstreamFix); ok { + return x.PendingUpstreamFix + } + return nil +} + +type isEvent_Data interface { + isEvent_Data() +} + +type Event_TruePositiveDetermination struct { + TruePositiveDetermination *TruePositiveDetermination `protobuf:"bytes,10,opt,name=true_positive_determination,json=truePositiveDetermination,proto3,oneof"` +} + +type Event_FalsePositiveDetermination struct { + FalsePositiveDetermination *FalsePositiveDetermination `protobuf:"bytes,11,opt,name=false_positive_determination,json=falsePositiveDetermination,proto3,oneof"` +} + +type Event_Fixed struct { + Fixed *Fixed `protobuf:"bytes,12,opt,name=fixed,proto3,oneof"` +} + +type Event_Detection struct { + Detection *Detection `protobuf:"bytes,13,opt,name=detection,proto3,oneof"` +} + +type Event_AnalysisNotPlanned struct { + AnalysisNotPlanned *AnalysisNotPlanned `protobuf:"bytes,14,opt,name=analysis_not_planned,json=analysisNotPlanned,proto3,oneof"` +} + +type Event_FixNotPlanned struct { + FixNotPlanned *FixNotPlanned `protobuf:"bytes,15,opt,name=fix_not_planned,json=fixNotPlanned,proto3,oneof"` +} + +type Event_PendingUpstreamFix struct { + PendingUpstreamFix *PendingUpstreamFix `protobuf:"bytes,16,opt,name=pending_upstream_fix,json=pendingUpstreamFix,proto3,oneof"` +} + +func (*Event_TruePositiveDetermination) isEvent_Data() {} + +func (*Event_FalsePositiveDetermination) isEvent_Data() {} + +func (*Event_Fixed) isEvent_Data() {} + +func (*Event_Detection) isEvent_Data() {} + +func (*Event_AnalysisNotPlanned) isEvent_Data() {} + +func (*Event_FixNotPlanned) isEvent_Data() {} + +func (*Event_PendingUpstreamFix) isEvent_Data() {} + +type TruePositiveDetermination struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Note string `protobuf:"bytes,1,opt,name=note,proto3" json:"note,omitempty"` +} + +func (x *TruePositiveDetermination) Reset() { + *x = TruePositiveDetermination{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TruePositiveDetermination) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TruePositiveDetermination) ProtoMessage() {} + +func (x *TruePositiveDetermination) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TruePositiveDetermination.ProtoReflect.Descriptor instead. +func (*TruePositiveDetermination) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{6} +} + +func (x *TruePositiveDetermination) GetNote() string { + if x != nil { + return x.Note + } + return "" +} + +type FalsePositiveDetermination struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type FalsePositiveDetermination_Type `protobuf:"varint,1,opt,name=type,proto3,enum=chainguard.platform.advisory.FalsePositiveDetermination_Type" json:"type,omitempty"` + Note string `protobuf:"bytes,2,opt,name=note,proto3" json:"note,omitempty"` +} + +func (x *FalsePositiveDetermination) Reset() { + *x = FalsePositiveDetermination{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FalsePositiveDetermination) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FalsePositiveDetermination) ProtoMessage() {} + +func (x *FalsePositiveDetermination) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FalsePositiveDetermination.ProtoReflect.Descriptor instead. +func (*FalsePositiveDetermination) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{7} +} + +func (x *FalsePositiveDetermination) GetType() FalsePositiveDetermination_Type { + if x != nil { + return x.Type + } + return FalsePositiveDetermination_FPT_TYPE_UNSPECIFIED +} + +func (x *FalsePositiveDetermination) GetNote() string { + if x != nil { + return x.Note + } + return "" +} + +type Fixed struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FixedVersion string `protobuf:"bytes,1,opt,name=fixed_version,json=fixedVersion,proto3" json:"fixed_version,omitempty"` +} + +func (x *Fixed) Reset() { + *x = Fixed{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Fixed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Fixed) ProtoMessage() {} + +func (x *Fixed) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Fixed.ProtoReflect.Descriptor instead. +func (*Fixed) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{8} +} + +func (x *Fixed) GetFixedVersion() string { + if x != nil { + return x.FixedVersion + } + return "" +} + +type Detection struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *Detection_Nvdapi + // *Detection_Manual + Type isDetection_Type `protobuf_oneof:"type"` +} + +func (x *Detection) Reset() { + *x = Detection{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Detection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Detection) ProtoMessage() {} + +func (x *Detection) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Detection.ProtoReflect.Descriptor instead. +func (*Detection) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{9} +} + +func (m *Detection) GetType() isDetection_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *Detection) GetNvdapi() *Detection_DetectionTypeNVDAPI { + if x, ok := x.GetType().(*Detection_Nvdapi); ok { + return x.Nvdapi + } + return nil +} + +func (x *Detection) GetManual() *Detection_DetectionTypeManual { + if x, ok := x.GetType().(*Detection_Manual); ok { + return x.Manual + } + return nil +} + +type isDetection_Type interface { + isDetection_Type() +} + +type Detection_Nvdapi struct { + Nvdapi *Detection_DetectionTypeNVDAPI `protobuf:"bytes,1,opt,name=nvdapi,proto3,oneof"` +} + +type Detection_Manual struct { + Manual *Detection_DetectionTypeManual `protobuf:"bytes,2,opt,name=manual,proto3,oneof"` +} + +func (*Detection_Nvdapi) isDetection_Type() {} + +func (*Detection_Manual) isDetection_Type() {} + +type AnalysisNotPlanned struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Note string `protobuf:"bytes,1,opt,name=note,proto3" json:"note,omitempty"` +} + +func (x *AnalysisNotPlanned) Reset() { + *x = AnalysisNotPlanned{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AnalysisNotPlanned) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AnalysisNotPlanned) ProtoMessage() {} + +func (x *AnalysisNotPlanned) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AnalysisNotPlanned.ProtoReflect.Descriptor instead. +func (*AnalysisNotPlanned) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{10} +} + +func (x *AnalysisNotPlanned) GetNote() string { + if x != nil { + return x.Note + } + return "" +} + +type FixNotPlanned struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Note string `protobuf:"bytes,1,opt,name=note,proto3" json:"note,omitempty"` +} + +func (x *FixNotPlanned) Reset() { + *x = FixNotPlanned{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FixNotPlanned) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FixNotPlanned) ProtoMessage() {} + +func (x *FixNotPlanned) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FixNotPlanned.ProtoReflect.Descriptor instead. +func (*FixNotPlanned) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{11} +} + +func (x *FixNotPlanned) GetNote() string { + if x != nil { + return x.Note + } + return "" +} + +type PendingUpstreamFix struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Note string `protobuf:"bytes,1,opt,name=note,proto3" json:"note,omitempty"` +} + +func (x *PendingUpstreamFix) Reset() { + *x = PendingUpstreamFix{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PendingUpstreamFix) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PendingUpstreamFix) ProtoMessage() {} + +func (x *PendingUpstreamFix) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PendingUpstreamFix.ProtoReflect.Descriptor instead. +func (*PendingUpstreamFix) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{12} +} + +func (x *PendingUpstreamFix) GetNote() string { + if x != nil { + return x.Note + } + return "" +} + +type DocumentFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the id of a package. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Cves []string `protobuf:"bytes,2,rep,name=cves,proto3" json:"cves,omitempty"` +} + +func (x *DocumentFilter) Reset() { + *x = DocumentFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DocumentFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DocumentFilter) ProtoMessage() {} + +func (x *DocumentFilter) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DocumentFilter.ProtoReflect.Descriptor instead. +func (*DocumentFilter) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{13} +} + +func (x *DocumentFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *DocumentFilter) GetCves() []string { + if x != nil { + return x.Cves + } + return nil +} + +type DocumentList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Document `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *DocumentList) Reset() { + *x = DocumentList{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DocumentList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DocumentList) ProtoMessage() {} + +func (x *DocumentList) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DocumentList.ProtoReflect.Descriptor instead. +func (*DocumentList) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{14} +} + +func (x *DocumentList) GetItems() []*Document { + if x != nil { + return x.Items + } + return nil +} + +type VulnerabilityMetadataFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the id of a vuln. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *VulnerabilityMetadataFilter) Reset() { + *x = VulnerabilityMetadataFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnerabilityMetadataFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnerabilityMetadataFilter) ProtoMessage() {} + +func (x *VulnerabilityMetadataFilter) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VulnerabilityMetadataFilter.ProtoReflect.Descriptor instead. +func (*VulnerabilityMetadataFilter) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{15} +} + +func (x *VulnerabilityMetadataFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type VulnerabilityMetadataList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*VulnerabilityMetadata `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *VulnerabilityMetadataList) Reset() { + *x = VulnerabilityMetadataList{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnerabilityMetadataList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnerabilityMetadataList) ProtoMessage() {} + +func (x *VulnerabilityMetadataList) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VulnerabilityMetadataList.ProtoReflect.Descriptor instead. +func (*VulnerabilityMetadataList) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{16} +} + +func (x *VulnerabilityMetadataList) GetItems() []*VulnerabilityMetadata { + if x != nil { + return x.Items + } + return nil +} + +type Detection_DetectionTypeNVDAPI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CpeSearched string `protobuf:"bytes,1,opt,name=cpe_searched,json=cpeSearched,proto3" json:"cpe_searched,omitempty"` + CpeFound string `protobuf:"bytes,2,opt,name=cpe_found,json=cpeFound,proto3" json:"cpe_found,omitempty"` +} + +func (x *Detection_DetectionTypeNVDAPI) Reset() { + *x = Detection_DetectionTypeNVDAPI{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Detection_DetectionTypeNVDAPI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Detection_DetectionTypeNVDAPI) ProtoMessage() {} + +func (x *Detection_DetectionTypeNVDAPI) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Detection_DetectionTypeNVDAPI.ProtoReflect.Descriptor instead. +func (*Detection_DetectionTypeNVDAPI) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{9, 0} +} + +func (x *Detection_DetectionTypeNVDAPI) GetCpeSearched() string { + if x != nil { + return x.CpeSearched + } + return "" +} + +func (x *Detection_DetectionTypeNVDAPI) GetCpeFound() string { + if x != nil { + return x.CpeFound + } + return "" +} + +type Detection_DetectionTypeManual struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Detection_DetectionTypeManual) Reset() { + *x = Detection_DetectionTypeManual{} + if protoimpl.UnsafeEnabled { + mi := &file_advisory_platform_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Detection_DetectionTypeManual) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Detection_DetectionTypeManual) ProtoMessage() {} + +func (x *Detection_DetectionTypeManual) ProtoReflect() protoreflect.Message { + mi := &file_advisory_platform_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Detection_DetectionTypeManual.ProtoReflect.Descriptor instead. +func (*Detection_DetectionTypeManual) Descriptor() ([]byte, []int) { + return file_advisory_platform_proto_rawDescGZIP(), []int{9, 1} +} + +var File_advisory_platform_proto protoreflect.FileDescriptor + +var file_advisory_platform_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, + 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe8, + 0x01, 0x0a, 0x15, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, + 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, + 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x47, 0x0a, 0x0a, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, + 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, + 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x52, + 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0xfc, 0x01, 0x0a, 0x09, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, + 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x9a, 0x01, 0x0a, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x44, 0x56, 0x49, 0x53, 0x4f, 0x52, + 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x52, 0x54, 0x49, 0x43, 0x4c, 0x45, 0x10, 0x02, + 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x54, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, + 0x0e, 0x0a, 0x0a, 0x44, 0x49, 0x53, 0x43, 0x55, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, + 0x0a, 0x0a, 0x06, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x46, + 0x49, 0x58, 0x10, 0x06, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4e, 0x54, 0x52, 0x4f, 0x44, 0x55, 0x43, + 0x45, 0x44, 0x10, 0x07, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x10, + 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x56, 0x49, 0x44, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x09, 0x12, + 0x07, 0x0a, 0x03, 0x57, 0x45, 0x42, 0x10, 0x0a, 0x22, 0xa1, 0x01, 0x0a, 0x08, 0x53, 0x65, 0x76, + 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, + 0x72, 0x79, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x3e, 0x0a, 0x04, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x56, 0x53, 0x53, 0x5f, 0x56, 0x32, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x56, 0x53, 0x53, 0x5f, 0x56, 0x33, 0x10, 0x02, 0x12, + 0x0b, 0x0a, 0x07, 0x43, 0x56, 0x53, 0x53, 0x5f, 0x56, 0x34, 0x10, 0x03, 0x22, 0x71, 0x0a, 0x08, + 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, + 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x22, + 0x62, 0x0a, 0x08, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x0a, 0x61, + 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x41, + 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, + 0x69, 0x65, 0x73, 0x22, 0xeb, 0x05, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x38, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x79, 0x0a, 0x1b, 0x74, 0x72, 0x75, 0x65, 0x5f, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x75, 0x65, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x19, 0x74, 0x72, 0x75, 0x65, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x7c, 0x0a, 0x1c, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, + 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x1a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x3b, 0x0a, 0x05, 0x66, 0x69, 0x78, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x46, + 0x69, 0x78, 0x65, 0x64, 0x48, 0x00, 0x52, 0x05, 0x66, 0x69, 0x78, 0x65, 0x64, 0x12, 0x47, 0x0a, + 0x09, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, + 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x14, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, + 0x69, 0x73, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, + 0x6f, 0x72, 0x79, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4e, 0x6f, 0x74, 0x50, + 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x48, 0x00, 0x52, 0x12, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, + 0x69, 0x73, 0x4e, 0x6f, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x55, 0x0a, 0x0f, + 0x66, 0x69, 0x78, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, + 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x78, 0x4e, 0x6f, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, + 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x66, 0x69, 0x78, 0x4e, 0x6f, 0x74, 0x50, 0x6c, 0x61, 0x6e, + 0x6e, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x14, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x75, + 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x66, 0x69, 0x78, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, + 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x46, 0x69, 0x78, 0x48, 0x00, 0x52, 0x12, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x55, 0x70, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x46, 0x69, 0x78, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x2f, 0x0a, 0x19, 0x54, 0x72, 0x75, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, + 0x74, 0x65, 0x22, 0x8b, 0x04, 0x0a, 0x1a, 0x46, 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x51, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x3d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x46, + 0x61, 0x6c, 0x73, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x85, 0x03, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x34, 0x0a, 0x30, 0x46, + 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, + 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x41, 0x4e, 0x41, + 0x4c, 0x59, 0x53, 0x49, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x53, 0x54, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, + 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, + 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x02, + 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x55, 0x4c, + 0x4e, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x56, 0x45, 0x52, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x53, 0x45, 0x44, 0x10, 0x03, 0x12, + 0x34, 0x0a, 0x30, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x55, 0x4c, 0x4e, + 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, + 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x41, 0x43, 0x4b, + 0x41, 0x47, 0x45, 0x10, 0x04, 0x12, 0x32, 0x0a, 0x2e, 0x46, 0x50, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, + 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x54, 0x48, 0x10, 0x05, 0x12, 0x3e, 0x0a, 0x3a, 0x46, 0x50, 0x54, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, + 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f, 0x42, 0x45, 0x5f, + 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x5f, 0x42, 0x59, 0x5f, 0x41, 0x44, + 0x56, 0x45, 0x52, 0x53, 0x41, 0x52, 0x59, 0x10, 0x06, 0x12, 0x25, 0x0a, 0x21, 0x46, 0x50, 0x54, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x4d, 0x49, 0x54, + 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x07, + 0x22, 0x2c, 0x0a, 0x05, 0x46, 0x69, 0x78, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x78, + 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x66, 0x69, 0x78, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xaf, + 0x02, 0x0a, 0x09, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x55, 0x0a, 0x06, + 0x6e, 0x76, 0x64, 0x61, 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x4e, 0x56, 0x44, 0x41, 0x50, 0x49, 0x48, 0x00, 0x52, 0x06, 0x6e, 0x76, 0x64, + 0x61, 0x70, 0x69, 0x12, 0x55, 0x0a, 0x06, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, + 0x72, 0x79, 0x2e, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x74, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, + 0x48, 0x00, 0x52, 0x06, 0x6d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x1a, 0x55, 0x0a, 0x13, 0x44, 0x65, + 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x56, 0x44, 0x41, 0x50, + 0x49, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x70, 0x65, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x70, 0x65, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x65, 0x5f, 0x66, 0x6f, 0x75, 0x6e, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x70, 0x65, 0x46, 0x6f, 0x75, 0x6e, + 0x64, 0x1a, 0x15, 0x0a, 0x13, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, + 0x70, 0x65, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x28, 0x0a, 0x12, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x4e, 0x6f, 0x74, 0x50, + 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x23, 0x0a, 0x0d, 0x46, 0x69, + 0x78, 0x4e, 0x6f, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, + 0x28, 0x0a, 0x12, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x46, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x22, 0x34, 0x0a, 0x0e, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x76, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x63, 0x76, 0x65, 0x73, 0x22, + 0x4c, 0x0a, 0x0c, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x3c, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x44, 0x6f, + 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x2d, 0x0a, + 0x1b, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x66, 0x0a, 0x19, + 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, + 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x32, 0xdf, 0x02, 0x0a, 0x10, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x12, 0x91, 0x01, 0x0a, 0x0d, 0x4c, 0x69, + 0x73, 0x74, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, + 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x0a, 0x00, 0x12, 0xb6, 0x01, + 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, + 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, + 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x02, 0x0a, 0x00, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2e, 0x76, + 0x31, 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x41, 0x64, 0x76, 0x69, 0x73, + 0x6f, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x64, + 0x76, 0x69, 0x73, 0x6f, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_advisory_platform_proto_rawDescOnce sync.Once + file_advisory_platform_proto_rawDescData = file_advisory_platform_proto_rawDesc +) + +func file_advisory_platform_proto_rawDescGZIP() []byte { + file_advisory_platform_proto_rawDescOnce.Do(func() { + file_advisory_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_advisory_platform_proto_rawDescData) + }) + return file_advisory_platform_proto_rawDescData +} + +var file_advisory_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_advisory_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 19) +var file_advisory_platform_proto_goTypes = []interface{}{ + (Reference_Type)(0), // 0: chainguard.platform.advisory.Reference.Type + (Severity_Type)(0), // 1: chainguard.platform.advisory.Severity.Type + (FalsePositiveDetermination_Type)(0), // 2: chainguard.platform.advisory.FalsePositiveDetermination.Type + (*VulnerabilityMetadata)(nil), // 3: chainguard.platform.advisory.VulnerabilityMetadata + (*Reference)(nil), // 4: chainguard.platform.advisory.Reference + (*Severity)(nil), // 5: chainguard.platform.advisory.Severity + (*Advisory)(nil), // 6: chainguard.platform.advisory.Advisory + (*Document)(nil), // 7: chainguard.platform.advisory.Document + (*Event)(nil), // 8: chainguard.platform.advisory.Event + (*TruePositiveDetermination)(nil), // 9: chainguard.platform.advisory.TruePositiveDetermination + (*FalsePositiveDetermination)(nil), // 10: chainguard.platform.advisory.FalsePositiveDetermination + (*Fixed)(nil), // 11: chainguard.platform.advisory.Fixed + (*Detection)(nil), // 12: chainguard.platform.advisory.Detection + (*AnalysisNotPlanned)(nil), // 13: chainguard.platform.advisory.AnalysisNotPlanned + (*FixNotPlanned)(nil), // 14: chainguard.platform.advisory.FixNotPlanned + (*PendingUpstreamFix)(nil), // 15: chainguard.platform.advisory.PendingUpstreamFix + (*DocumentFilter)(nil), // 16: chainguard.platform.advisory.DocumentFilter + (*DocumentList)(nil), // 17: chainguard.platform.advisory.DocumentList + (*VulnerabilityMetadataFilter)(nil), // 18: chainguard.platform.advisory.VulnerabilityMetadataFilter + (*VulnerabilityMetadataList)(nil), // 19: chainguard.platform.advisory.VulnerabilityMetadataList + (*Detection_DetectionTypeNVDAPI)(nil), // 20: chainguard.platform.advisory.Detection.DetectionTypeNVDAPI + (*Detection_DetectionTypeManual)(nil), // 21: chainguard.platform.advisory.Detection.DetectionTypeManual + (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp +} +var file_advisory_platform_proto_depIdxs = []int32{ + 4, // 0: chainguard.platform.advisory.VulnerabilityMetadata.references:type_name -> chainguard.platform.advisory.Reference + 5, // 1: chainguard.platform.advisory.VulnerabilityMetadata.severity:type_name -> chainguard.platform.advisory.Severity + 0, // 2: chainguard.platform.advisory.Reference.type:type_name -> chainguard.platform.advisory.Reference.Type + 1, // 3: chainguard.platform.advisory.Severity.type:type_name -> chainguard.platform.advisory.Severity.Type + 8, // 4: chainguard.platform.advisory.Advisory.events:type_name -> chainguard.platform.advisory.Event + 6, // 5: chainguard.platform.advisory.Document.advisories:type_name -> chainguard.platform.advisory.Advisory + 22, // 6: chainguard.platform.advisory.Event.timestamp:type_name -> google.protobuf.Timestamp + 9, // 7: chainguard.platform.advisory.Event.true_positive_determination:type_name -> chainguard.platform.advisory.TruePositiveDetermination + 10, // 8: chainguard.platform.advisory.Event.false_positive_determination:type_name -> chainguard.platform.advisory.FalsePositiveDetermination + 11, // 9: chainguard.platform.advisory.Event.fixed:type_name -> chainguard.platform.advisory.Fixed + 12, // 10: chainguard.platform.advisory.Event.detection:type_name -> chainguard.platform.advisory.Detection + 13, // 11: chainguard.platform.advisory.Event.analysis_not_planned:type_name -> chainguard.platform.advisory.AnalysisNotPlanned + 14, // 12: chainguard.platform.advisory.Event.fix_not_planned:type_name -> chainguard.platform.advisory.FixNotPlanned + 15, // 13: chainguard.platform.advisory.Event.pending_upstream_fix:type_name -> chainguard.platform.advisory.PendingUpstreamFix + 2, // 14: chainguard.platform.advisory.FalsePositiveDetermination.type:type_name -> chainguard.platform.advisory.FalsePositiveDetermination.Type + 20, // 15: chainguard.platform.advisory.Detection.nvdapi:type_name -> chainguard.platform.advisory.Detection.DetectionTypeNVDAPI + 21, // 16: chainguard.platform.advisory.Detection.manual:type_name -> chainguard.platform.advisory.Detection.DetectionTypeManual + 7, // 17: chainguard.platform.advisory.DocumentList.items:type_name -> chainguard.platform.advisory.Document + 3, // 18: chainguard.platform.advisory.VulnerabilityMetadataList.items:type_name -> chainguard.platform.advisory.VulnerabilityMetadata + 16, // 19: chainguard.platform.advisory.SecurityAdvisory.ListDocuments:input_type -> chainguard.platform.advisory.DocumentFilter + 18, // 20: chainguard.platform.advisory.SecurityAdvisory.ListVulnerabilityMetadata:input_type -> chainguard.platform.advisory.VulnerabilityMetadataFilter + 17, // 21: chainguard.platform.advisory.SecurityAdvisory.ListDocuments:output_type -> chainguard.platform.advisory.DocumentList + 19, // 22: chainguard.platform.advisory.SecurityAdvisory.ListVulnerabilityMetadata:output_type -> chainguard.platform.advisory.VulnerabilityMetadataList + 21, // [21:23] is the sub-list for method output_type + 19, // [19:21] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name +} + +func init() { file_advisory_platform_proto_init() } +func file_advisory_platform_proto_init() { + if File_advisory_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_advisory_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnerabilityMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Reference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Severity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Advisory); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Document); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Event); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TruePositiveDetermination); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FalsePositiveDetermination); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Fixed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Detection); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AnalysisNotPlanned); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FixNotPlanned); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PendingUpstreamFix); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DocumentFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DocumentList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnerabilityMetadataFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnerabilityMetadataList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Detection_DetectionTypeNVDAPI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_advisory_platform_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Detection_DetectionTypeManual); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_advisory_platform_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*Event_TruePositiveDetermination)(nil), + (*Event_FalsePositiveDetermination)(nil), + (*Event_Fixed)(nil), + (*Event_Detection)(nil), + (*Event_AnalysisNotPlanned)(nil), + (*Event_FixNotPlanned)(nil), + (*Event_PendingUpstreamFix)(nil), + } + file_advisory_platform_proto_msgTypes[9].OneofWrappers = []interface{}{ + (*Detection_Nvdapi)(nil), + (*Detection_Manual)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_advisory_platform_proto_rawDesc, + NumEnums: 3, + NumMessages: 19, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_advisory_platform_proto_goTypes, + DependencyIndexes: file_advisory_platform_proto_depIdxs, + EnumInfos: file_advisory_platform_proto_enumTypes, + MessageInfos: file_advisory_platform_proto_msgTypes, + }.Build() + File_advisory_platform_proto = out.File + file_advisory_platform_proto_rawDesc = nil + file_advisory_platform_proto_goTypes = nil + file_advisory_platform_proto_depIdxs = nil +} diff --git a/proto/platform/advisory/v1/advisory.platform.pb.gw.go b/proto/platform/advisory/v1/advisory.platform.pb.gw.go new file mode 100644 index 00000000..a6d9166b --- /dev/null +++ b/proto/platform/advisory/v1/advisory.platform.pb.gw.go @@ -0,0 +1,256 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: advisory.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_SecurityAdvisory_ListDocuments_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_SecurityAdvisory_ListDocuments_0(ctx context.Context, marshaler runtime.Marshaler, client SecurityAdvisoryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DocumentFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityAdvisory_ListDocuments_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListDocuments(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SecurityAdvisory_ListDocuments_0(ctx context.Context, marshaler runtime.Marshaler, server SecurityAdvisoryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DocumentFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityAdvisory_ListDocuments_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListDocuments(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_SecurityAdvisory_ListVulnerabilityMetadata_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client SecurityAdvisoryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VulnerabilityMetadataFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityAdvisory_ListVulnerabilityMetadata_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListVulnerabilityMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server SecurityAdvisoryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VulnerabilityMetadataFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityAdvisory_ListVulnerabilityMetadata_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListVulnerabilityMetadata(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterSecurityAdvisoryHandlerServer registers the http handlers for service SecurityAdvisory to "mux". +// UnaryRPC :call SecurityAdvisoryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSecurityAdvisoryHandlerFromEndpoint instead. +func RegisterSecurityAdvisoryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SecurityAdvisoryServer) error { + + mux.Handle("GET", pattern_SecurityAdvisory_ListDocuments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.advisory.SecurityAdvisory/ListDocuments", runtime.WithHTTPPathPattern("/advisory/v1/documents")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SecurityAdvisory_ListDocuments_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityAdvisory_ListDocuments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_SecurityAdvisory_ListVulnerabilityMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.advisory.SecurityAdvisory/ListVulnerabilityMetadata", runtime.WithHTTPPathPattern("/advisory/v1/metadata")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterSecurityAdvisoryHandlerFromEndpoint is same as RegisterSecurityAdvisoryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterSecurityAdvisoryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterSecurityAdvisoryHandler(ctx, mux, conn) +} + +// RegisterSecurityAdvisoryHandler registers the http handlers for service SecurityAdvisory to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterSecurityAdvisoryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterSecurityAdvisoryHandlerClient(ctx, mux, NewSecurityAdvisoryClient(conn)) +} + +// RegisterSecurityAdvisoryHandlerClient registers the http handlers for service SecurityAdvisory +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SecurityAdvisoryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SecurityAdvisoryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "SecurityAdvisoryClient" to call the correct interceptors. +func RegisterSecurityAdvisoryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SecurityAdvisoryClient) error { + + mux.Handle("GET", pattern_SecurityAdvisory_ListDocuments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.advisory.SecurityAdvisory/ListDocuments", runtime.WithHTTPPathPattern("/advisory/v1/documents")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SecurityAdvisory_ListDocuments_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityAdvisory_ListDocuments_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_SecurityAdvisory_ListVulnerabilityMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.advisory.SecurityAdvisory/ListVulnerabilityMetadata", runtime.WithHTTPPathPattern("/advisory/v1/metadata")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityAdvisory_ListVulnerabilityMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_SecurityAdvisory_ListDocuments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"advisory", "v1", "documents"}, "")) + + pattern_SecurityAdvisory_ListVulnerabilityMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"advisory", "v1", "metadata"}, "")) +) + +var ( + forward_SecurityAdvisory_ListDocuments_0 = runtime.ForwardResponseMessage + + forward_SecurityAdvisory_ListVulnerabilityMetadata_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/advisory/v1/advisory.platform.proto b/proto/platform/advisory/v1/advisory.platform.proto new file mode 100644 index 00000000..9c79b371 --- /dev/null +++ b/proto/platform/advisory/v1/advisory.platform.proto @@ -0,0 +1,233 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/advisory/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.advisory.v1"; +option java_outer_classname = "PlatformAdvisoryProto"; + +package chainguard.platform.advisory; + +import "google/api/annotations.proto"; +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; + +service SecurityAdvisory { + rpc ListDocuments(DocumentFilter) returns (DocumentList) { + option (google.api.http) = { + get: "/advisory/v1/documents" + }; + option (chainguard.annotations.iam) = { + // This method doesn't require authentication. + disabled: {} + }; + } + + rpc ListVulnerabilityMetadata(VulnerabilityMetadataFilter) returns (VulnerabilityMetadataList) { + option (google.api.http) = { + get: "/advisory/v1/metadata" + }; + option (chainguard.annotations.iam) = { + // This method doesn't require authentication. + disabled: {} + }; + } +} + +message VulnerabilityMetadata { + // id is the identifier of this specific vuln. + string id = 1; + + string summary = 2; + + string details = 3; + + repeated Reference references = 4; + + repeated Severity severity = 5; +} + +message Reference { + Type type = 1; + + string url = 2; + + enum Type { + // The "unset" value. + UNSPECIFIED = 0; + + // Published security advisory for the vulnerability. + ADVISORY = 1; + + // Article or blog post describing the vulnerability. + ARTICLE = 2; + + // Scanner or tool that allows detection in prod environments. + DETECTION = 3; + + // Social media discussion about vuln. + DISCUSSION = 4; + + // Report on vuln. + REPORT = 5; + + // Source code browser link to fix. + FIX = 6; + + // Source code browser link to introduction of vuln. + INTRODUCED = 7; + + // Home web page for package. + PACKAGE = 8; + + // Demonstration of validity of vuln claim. + EVIDENCE = 9; + + // Web page of unspecified kind. + WEB = 10; + } +} + +message Severity { + // CVSS version standard. + Type type = 1; + + // Vector string representing CVSS score based on type. + string score = 2; + + enum Type { + // The "unset" value. + UNSPECIFIED = 0; + + // CVSS v2 + CVSS_V2 = 1; + + // CVSS >= 3.0 and < 4.0 + CVSS_V3 = 2; + + // CVSS >= 4.0 and < 5.0 + CVSS_V4 = 3; + } +} + +message Advisory { + // id is the identifier of this specific advisory. + string id = 1; + + repeated Event events = 2; + + repeated string aliases = 3; +} + +message Document { + string id = 1; + + repeated Advisory advisories = 2; +} + +message Event { + google.protobuf.Timestamp timestamp = 1; + + oneof data { + TruePositiveDetermination true_positive_determination = 10; + + FalsePositiveDetermination false_positive_determination = 11; + + Fixed fixed = 12; + + Detection detection = 13; + + AnalysisNotPlanned analysis_not_planned = 14; + + FixNotPlanned fix_not_planned = 15; + + PendingUpstreamFix pending_upstream_fix = 16; + } +} + +message TruePositiveDetermination { + string note = 1; +} + +message FalsePositiveDetermination { + Type type = 1; + + string note = 2; + + enum Type { + // The "unset" value. + FPT_TYPE_UNSPECIFIED = 0; + + // VEX: vulnerable_code_not_present. + FPT_TYPE_VULNERABILITY_RECORD_ANALYSIS_CONTESTED = 1; + + // VEX: component_not_present. + FPT_TYPE_COMPONENT_VULNERABILITY_MISMATCH = 2; + + // VEX: vulnerable_code_not_present. + FPT_TYPE_VULNERABLE_CODE_VERSION_NOT_USED = 3; + + // VEX: vulnerable_code_not_present. + FPT_TYPE_VULNERABLE_CODE_NOT_INCLUDED_IN_PACKAGE = 4; + + // VEX: vulnerable_code_not_in_execute_path. + FPT_TYPE_VULNERABLE_CODE_NOT_IN_EXECUTION_PATH = 5; + + // VEX: vulnerable_code_cannot_be_controlled_by_adversary. + FPT_TYPE_VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY = 6; + + // VEX: inline_mitigations_already_exist. + FPT_TYPE_INLINE_MITIGATIONS_EXIST = 7; + } +} + +message Fixed { + string fixed_version = 1; +} + +message Detection { + oneof type { + DetectionTypeNVDAPI nvdapi = 1; + + DetectionTypeManual manual = 2; + } + + message DetectionTypeNVDAPI { + string cpe_searched = 1; + + string cpe_found = 2; + } + + message DetectionTypeManual {} +} + +message AnalysisNotPlanned { + string note = 1; +} + +message FixNotPlanned { + string note = 1; +} + +message PendingUpstreamFix { + string note = 1; +} + +message DocumentFilter { + // id is the id of a package. + string id = 1; + + repeated string cves = 2; +} + +message DocumentList { + repeated Document items = 1; +} + +message VulnerabilityMetadataFilter { + // id is the id of a vuln. + string id = 1; +} + +message VulnerabilityMetadataList { + repeated VulnerabilityMetadata items = 1; +} diff --git a/proto/platform/advisory/v1/advisory.platform_grpc.pb.go b/proto/platform/advisory/v1/advisory.platform_grpc.pb.go new file mode 100644 index 00000000..a5657e05 --- /dev/null +++ b/proto/platform/advisory/v1/advisory.platform_grpc.pb.go @@ -0,0 +1,146 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: advisory.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + SecurityAdvisory_ListDocuments_FullMethodName = "/chainguard.platform.advisory.SecurityAdvisory/ListDocuments" + SecurityAdvisory_ListVulnerabilityMetadata_FullMethodName = "/chainguard.platform.advisory.SecurityAdvisory/ListVulnerabilityMetadata" +) + +// SecurityAdvisoryClient is the client API for SecurityAdvisory service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SecurityAdvisoryClient interface { + ListDocuments(ctx context.Context, in *DocumentFilter, opts ...grpc.CallOption) (*DocumentList, error) + ListVulnerabilityMetadata(ctx context.Context, in *VulnerabilityMetadataFilter, opts ...grpc.CallOption) (*VulnerabilityMetadataList, error) +} + +type securityAdvisoryClient struct { + cc grpc.ClientConnInterface +} + +func NewSecurityAdvisoryClient(cc grpc.ClientConnInterface) SecurityAdvisoryClient { + return &securityAdvisoryClient{cc} +} + +func (c *securityAdvisoryClient) ListDocuments(ctx context.Context, in *DocumentFilter, opts ...grpc.CallOption) (*DocumentList, error) { + out := new(DocumentList) + err := c.cc.Invoke(ctx, SecurityAdvisory_ListDocuments_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *securityAdvisoryClient) ListVulnerabilityMetadata(ctx context.Context, in *VulnerabilityMetadataFilter, opts ...grpc.CallOption) (*VulnerabilityMetadataList, error) { + out := new(VulnerabilityMetadataList) + err := c.cc.Invoke(ctx, SecurityAdvisory_ListVulnerabilityMetadata_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SecurityAdvisoryServer is the server API for SecurityAdvisory service. +// All implementations must embed UnimplementedSecurityAdvisoryServer +// for forward compatibility +type SecurityAdvisoryServer interface { + ListDocuments(context.Context, *DocumentFilter) (*DocumentList, error) + ListVulnerabilityMetadata(context.Context, *VulnerabilityMetadataFilter) (*VulnerabilityMetadataList, error) + mustEmbedUnimplementedSecurityAdvisoryServer() +} + +// UnimplementedSecurityAdvisoryServer must be embedded to have forward compatible implementations. +type UnimplementedSecurityAdvisoryServer struct { +} + +func (UnimplementedSecurityAdvisoryServer) ListDocuments(context.Context, *DocumentFilter) (*DocumentList, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListDocuments not implemented") +} +func (UnimplementedSecurityAdvisoryServer) ListVulnerabilityMetadata(context.Context, *VulnerabilityMetadataFilter) (*VulnerabilityMetadataList, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListVulnerabilityMetadata not implemented") +} +func (UnimplementedSecurityAdvisoryServer) mustEmbedUnimplementedSecurityAdvisoryServer() {} + +// UnsafeSecurityAdvisoryServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SecurityAdvisoryServer will +// result in compilation errors. +type UnsafeSecurityAdvisoryServer interface { + mustEmbedUnimplementedSecurityAdvisoryServer() +} + +func RegisterSecurityAdvisoryServer(s grpc.ServiceRegistrar, srv SecurityAdvisoryServer) { + s.RegisterService(&SecurityAdvisory_ServiceDesc, srv) +} + +func _SecurityAdvisory_ListDocuments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DocumentFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecurityAdvisoryServer).ListDocuments(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecurityAdvisory_ListDocuments_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecurityAdvisoryServer).ListDocuments(ctx, req.(*DocumentFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecurityAdvisory_ListVulnerabilityMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VulnerabilityMetadataFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecurityAdvisoryServer).ListVulnerabilityMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecurityAdvisory_ListVulnerabilityMetadata_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecurityAdvisoryServer).ListVulnerabilityMetadata(ctx, req.(*VulnerabilityMetadataFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// SecurityAdvisory_ServiceDesc is the grpc.ServiceDesc for SecurityAdvisory service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SecurityAdvisory_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.advisory.SecurityAdvisory", + HandlerType: (*SecurityAdvisoryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ListDocuments", + Handler: _SecurityAdvisory_ListDocuments_Handler, + }, + { + MethodName: "ListVulnerabilityMetadata", + Handler: _SecurityAdvisory_ListVulnerabilityMetadata_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "advisory.platform.proto", +} diff --git a/proto/platform/advisory/v1/clients.go b/proto/platform/advisory/v1/clients.go new file mode 100644 index 00000000..cdabef5b --- /dev/null +++ b/proto/platform/advisory/v1/clients.go @@ -0,0 +1,81 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "context" + "fmt" + "net/url" + "time" + + delegate "chainguard.dev/go-grpc-kit/pkg/options" + "github.com/chainguard-dev/clog" + "google.golang.org/grpc" + + "chainguard.dev/sdk/auth" +) + +type Clients interface { + SecurityAdvisory() SecurityAdvisoryClient + + Close() error +} + +func NewClients(ctx context.Context, addr string, token string) (Clients, error) { + uri, err := url.Parse(addr) + if err != nil { + return nil, fmt.Errorf("failed to parse advisory service address, must be a url: %w", err) + } + + target, opts := delegate.GRPCOptions(*uri) + + // TODO: we may want to require transport security at some future point. + if cred := auth.NewFromToken(ctx, token, false); cred != nil { + opts = append(opts, grpc.WithPerRPCCredentials(cred)) + } else { + clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") + } + + var cancel context.CancelFunc + if _, timeoutSet := ctx.Deadline(); !timeoutSet { + ctx, cancel = context.WithTimeout(ctx, 300*time.Second) + defer cancel() + } + conn, err := grpc.DialContext(ctx, target, opts...) + if err != nil { + return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + } + + return &clients{ + advisory: NewSecurityAdvisoryClient(conn), + + conn: conn, + }, nil +} + +func NewClientsFromConnection(conn *grpc.ClientConn) Clients { + return &clients{ + advisory: NewSecurityAdvisoryClient(conn), + // conn is not set, this client struct does not own closing it. + } +} + +type clients struct { + advisory SecurityAdvisoryClient + + conn *grpc.ClientConn +} + +func (c *clients) SecurityAdvisory() SecurityAdvisoryClient { + return c.advisory +} + +func (c *clients) Close() error { + if c.conn != nil { + return c.conn.Close() + } + return nil +} diff --git a/proto/platform/advisory/v1/doc.go b/proto/platform/advisory/v1/doc.go new file mode 100644 index 00000000..df562690 --- /dev/null +++ b/proto/platform/advisory/v1/doc.go @@ -0,0 +1,10 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package v1 contains the v1 GRPC client and server definitions +// for implementing Advisory interactions. +// +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. advisory.platform.proto +package v1 diff --git a/proto/platform/advisory/v1/test/advisory.go b/proto/platform/advisory/v1/test/advisory.go new file mode 100644 index 00000000..34cd2f6e --- /dev/null +++ b/proto/platform/advisory/v1/test/advisory.go @@ -0,0 +1,70 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + advisory "chainguard.dev/sdk/proto/platform/advisory/v1" +) + +var _ advisory.Clients = (*MockSecurityAdvisoryClients)(nil) + +type MockSecurityAdvisoryClients struct { + OnClose error + + SecurityAdvisoryClient MockSecurityAdvisoryClient +} + +func (m MockSecurityAdvisoryClients) SecurityAdvisory() advisory.SecurityAdvisoryClient { + return &m.SecurityAdvisoryClient +} + +func (m MockSecurityAdvisoryClients) Close() error { + return m.OnClose +} + +var _ advisory.SecurityAdvisoryClient = (*MockSecurityAdvisoryClient)(nil) + +type MockSecurityAdvisoryClient struct { + OnListDocuments []DocumentsOnList + OnListVulnerabilityMetadata []VulnerabilityMetadataOnList +} + +type DocumentsOnList struct { + Given *advisory.DocumentFilter + List *advisory.DocumentList + Error error +} + +type VulnerabilityMetadataOnList struct { + Given *advisory.VulnerabilityMetadataFilter + List *advisory.VulnerabilityMetadataList + Error error +} + +func (m MockSecurityAdvisoryClient) ListDocuments(_ context.Context, given *advisory.DocumentFilter, _ ...grpc.CallOption) (*advisory.DocumentList, error) { //nolint: revive + for _, o := range m.OnListDocuments { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockSecurityAdvisoryClient) ListVulnerabilityMetadata(_ context.Context, given *advisory.VulnerabilityMetadataFilter, _ ...grpc.CallOption) (*advisory.VulnerabilityMetadataList, error) { //nolint: revive + for _, o := range m.OnListVulnerabilityMetadata { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/auth/v1/auth.platform.event.go b/proto/platform/auth/v1/auth.platform.event.go new file mode 100644 index 00000000..c770ef4b --- /dev/null +++ b/proto/platform/auth/v1/auth.platform.event.go @@ -0,0 +1,21 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *Session) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return x.GetGroup(), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *Session) CloudEventsSubject() string { + return "" +} diff --git a/proto/platform/auth/v1/auth.platform.pb.go b/proto/platform/auth/v1/auth.platform.pb.go new file mode 100644 index 00000000..45718d3f --- /dev/null +++ b/proto/platform/auth/v1/auth.platform.pb.go @@ -0,0 +1,562 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: auth.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v11 "chainguard.dev/sdk/proto/platform/iam/v1" + v1 "chainguard.dev/sdk/proto/platform/tenant/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RegistrationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // code is an optional encoded invite code, which allows us to register + // the caller's identity as a member of a particular group as a particular + // role. + // +optional + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + // cluster_id is an optional cluster id, which simultaneously registers + // a Cluster with the Identity. This path must specify an invite code, so + // we know where in the IAM hierarchy to link the cluster. + ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` + // identity_id is an optional identity id. If the user already exists, this + // by-passes identity registration and continues on to cluster registration + // (if applicable) + IdentityId string `protobuf:"bytes,3,opt,name=identity_id,json=identityId,proto3" json:"identity_id,omitempty"` + // cluster_name is an optional name to give the cluster when one is + // registered as part of the registration flow. + ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` + // cluster_description is an optional description to give the cluster + // when one is registered as part of the registration flow. + ClusterDescription string `protobuf:"bytes,5,opt,name=cluster_description,json=clusterDescription,proto3" json:"cluster_description,omitempty"` + // enforcer_options defines the enforcer options. + EnforcerOptions *v1.Cluster_EnforcerOptions `protobuf:"bytes,6,opt,name=enforcer_options,json=enforcerOptions,proto3" json:"enforcer_options,omitempty"` +} + +func (x *RegistrationRequest) Reset() { + *x = RegistrationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_auth_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegistrationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegistrationRequest) ProtoMessage() {} + +func (x *RegistrationRequest) ProtoReflect() protoreflect.Message { + mi := &file_auth_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegistrationRequest.ProtoReflect.Descriptor instead. +func (*RegistrationRequest) Descriptor() ([]byte, []int) { + return file_auth_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *RegistrationRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *RegistrationRequest) GetClusterId() string { + if x != nil { + return x.ClusterId + } + return "" +} + +func (x *RegistrationRequest) GetIdentityId() string { + if x != nil { + return x.IdentityId + } + return "" +} + +func (x *RegistrationRequest) GetClusterName() string { + if x != nil { + return x.ClusterName + } + return "" +} + +func (x *RegistrationRequest) GetClusterDescription() string { + if x != nil { + return x.ClusterDescription + } + return "" +} + +func (x *RegistrationRequest) GetEnforcerOptions() *v1.Cluster_EnforcerOptions { + if x != nil { + return x.EnforcerOptions + } + return nil +} + +type Session struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // identity, the Chainguard identity id. + Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + // group, the group this identity has joined by invitation, when an invite + // code was supplied. + Group string `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"` +} + +func (x *Session) Reset() { + *x = Session{} + if protoimpl.UnsafeEnabled { + mi := &file_auth_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Session) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Session) ProtoMessage() {} + +func (x *Session) ProtoReflect() protoreflect.Message { + mi := &file_auth_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Session.ProtoReflect.Descriptor instead. +func (*Session) Descriptor() ([]byte, []int) { + return file_auth_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *Session) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" +} + +func (x *Session) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +type WhoAmI struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Issuer is the issuer of the token. + Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` + // The subject of the token. + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + // Audience is who the token is intended for. + Audience []string `protobuf:"bytes,3,rep,name=audience,proto3" json:"audience,omitempty"` + // When the token expires. + Expiry *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expiry,proto3" json:"expiry,omitempty"` + // With the token was issued. + IssuedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=issued_at,json=issuedAt,proto3" json:"issued_at,omitempty"` + // The capabilities referenced in the token. + Capabilities []*WhoAmI_Capability `protobuf:"bytes,101,rep,name=capabilities,proto3" json:"capabilities,omitempty"` + // The upstream email for this token. + Email string `protobuf:"bytes,102,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *WhoAmI) Reset() { + *x = WhoAmI{} + if protoimpl.UnsafeEnabled { + mi := &file_auth_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WhoAmI) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WhoAmI) ProtoMessage() {} + +func (x *WhoAmI) ProtoReflect() protoreflect.Message { + mi := &file_auth_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WhoAmI.ProtoReflect.Descriptor instead. +func (*WhoAmI) Descriptor() ([]byte, []int) { + return file_auth_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *WhoAmI) GetIssuer() string { + if x != nil { + return x.Issuer + } + return "" +} + +func (x *WhoAmI) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *WhoAmI) GetAudience() []string { + if x != nil { + return x.Audience + } + return nil +} + +func (x *WhoAmI) GetExpiry() *timestamppb.Timestamp { + if x != nil { + return x.Expiry + } + return nil +} + +func (x *WhoAmI) GetIssuedAt() *timestamppb.Timestamp { + if x != nil { + return x.IssuedAt + } + return nil +} + +func (x *WhoAmI) GetCapabilities() []*WhoAmI_Capability { + if x != nil { + return x.Capabilities + } + return nil +} + +func (x *WhoAmI) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +// --- Upstream fields --- +type WhoAmI_Capability struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // group of the bound role. + Group *v11.Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // role of the bound identity. + Role *v11.Role `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` +} + +func (x *WhoAmI_Capability) Reset() { + *x = WhoAmI_Capability{} + if protoimpl.UnsafeEnabled { + mi := &file_auth_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WhoAmI_Capability) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WhoAmI_Capability) ProtoMessage() {} + +func (x *WhoAmI_Capability) ProtoReflect() protoreflect.Message { + mi := &file_auth_platform_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 WhoAmI_Capability.ProtoReflect.Descriptor instead. +func (*WhoAmI_Capability) Descriptor() ([]byte, []int) { + return file_auth_platform_proto_rawDescGZIP(), []int{2, 0} +} + +func (x *WhoAmI_Capability) GetGroup() *v11.Group { + if x != nil { + return x.Group + } + return nil +} + +func (x *WhoAmI_Capability) GetRole() *v11.Role { + if x != nil { + return x.Role + } + return nil +} + +var File_auth_platform_proto protoreflect.FileDescriptor + +var file_auth_platform_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x23, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x9d, 0x02, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, + 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x10, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x5f, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x2e, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x0f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x3b, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x22, 0xa1, 0x03, 0x0a, 0x06, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x12, 0x16, 0x0a, 0x06, 0x69, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x37, 0x0a, + 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x69, 0x73, + 0x73, 0x75, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4f, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x65, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x2e, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x66, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x1a, 0x75, 0x0a, + 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x32, 0xa4, 0x02, 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x61, 0x0a, + 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x20, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x57, 0x68, 0x6f, + 0x41, 0x6d, 0x49, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x61, 0x75, + 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x6b, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x12, 0x00, + 0x12, 0xb8, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2d, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x02, 0x0a, 0x00, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x30, 0x0a, 0x25, 0x64, 0x65, 0x76, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x65, 0x0a, 0x23, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, + 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x42, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x41, 0x75, 0x74, 0x68, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_auth_platform_proto_rawDescOnce sync.Once + file_auth_platform_proto_rawDescData = file_auth_platform_proto_rawDesc +) + +func file_auth_platform_proto_rawDescGZIP() []byte { + file_auth_platform_proto_rawDescOnce.Do(func() { + file_auth_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_auth_platform_proto_rawDescData) + }) + return file_auth_platform_proto_rawDescData +} + +var file_auth_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_auth_platform_proto_goTypes = []interface{}{ + (*RegistrationRequest)(nil), // 0: chainguard.platform.auth.RegistrationRequest + (*Session)(nil), // 1: chainguard.platform.auth.Session + (*WhoAmI)(nil), // 2: chainguard.platform.auth.WhoAmI + (*WhoAmI_Capability)(nil), // 3: chainguard.platform.auth.WhoAmI.Capability + (*v1.Cluster_EnforcerOptions)(nil), // 4: chainguard.platform.tenant.Cluster.EnforcerOptions + (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp + (*v11.Group)(nil), // 6: chainguard.platform.iam.Group + (*v11.Role)(nil), // 7: chainguard.platform.iam.Role + (*emptypb.Empty)(nil), // 8: google.protobuf.Empty +} +var file_auth_platform_proto_depIdxs = []int32{ + 4, // 0: chainguard.platform.auth.RegistrationRequest.enforcer_options:type_name -> chainguard.platform.tenant.Cluster.EnforcerOptions + 5, // 1: chainguard.platform.auth.WhoAmI.expiry:type_name -> google.protobuf.Timestamp + 5, // 2: chainguard.platform.auth.WhoAmI.issued_at:type_name -> google.protobuf.Timestamp + 3, // 3: chainguard.platform.auth.WhoAmI.capabilities:type_name -> chainguard.platform.auth.WhoAmI.Capability + 6, // 4: chainguard.platform.auth.WhoAmI.Capability.group:type_name -> chainguard.platform.iam.Group + 7, // 5: chainguard.platform.auth.WhoAmI.Capability.role:type_name -> chainguard.platform.iam.Role + 8, // 6: chainguard.platform.auth.Auth.Validate:input_type -> google.protobuf.Empty + 0, // 7: chainguard.platform.auth.Auth.Register:input_type -> chainguard.platform.auth.RegistrationRequest + 2, // 8: chainguard.platform.auth.Auth.Validate:output_type -> chainguard.platform.auth.WhoAmI + 1, // 9: chainguard.platform.auth.Auth.Register:output_type -> chainguard.platform.auth.Session + 8, // [8:10] is the sub-list for method output_type + 6, // [6:8] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_auth_platform_proto_init() } +func file_auth_platform_proto_init() { + if File_auth_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_auth_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistrationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_auth_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Session); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_auth_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WhoAmI); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_auth_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WhoAmI_Capability); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_auth_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_auth_platform_proto_goTypes, + DependencyIndexes: file_auth_platform_proto_depIdxs, + MessageInfos: file_auth_platform_proto_msgTypes, + }.Build() + File_auth_platform_proto = out.File + file_auth_platform_proto_rawDesc = nil + file_auth_platform_proto_goTypes = nil + file_auth_platform_proto_depIdxs = nil +} diff --git a/proto/platform/auth/v1/auth.platform.pb.gw.go b/proto/platform/auth/v1/auth.platform.pb.gw.go new file mode 100644 index 00000000..0257f6a2 --- /dev/null +++ b/proto/platform/auth/v1/auth.platform.pb.gw.go @@ -0,0 +1,237 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: auth.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/emptypb" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Auth_Validate_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq emptypb.Empty + var metadata runtime.ServerMetadata + + msg, err := client.Validate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Auth_Validate_0(ctx context.Context, marshaler runtime.Marshaler, server AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq emptypb.Empty + var metadata runtime.ServerMetadata + + msg, err := server.Validate(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Auth_Register_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RegistrationRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Register(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Auth_Register_0(ctx context.Context, marshaler runtime.Marshaler, server AuthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RegistrationRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Register(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterAuthHandlerServer registers the http handlers for service Auth to "mux". +// UnaryRPC :call AuthServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthHandlerFromEndpoint instead. +func RegisterAuthHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthServer) error { + + mux.Handle("GET", pattern_Auth_Validate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.auth.Auth/Validate", runtime.WithHTTPPathPattern("/auth/v1/ok")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Auth_Validate_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Auth_Validate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_Register_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.auth.Auth/Register", runtime.WithHTTPPathPattern("/auth/v1/register")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Auth_Register_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Auth_Register_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterAuthHandlerFromEndpoint is same as RegisterAuthHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterAuthHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterAuthHandler(ctx, mux, conn) +} + +// RegisterAuthHandler registers the http handlers for service Auth to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterAuthHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterAuthHandlerClient(ctx, mux, NewAuthClient(conn)) +} + +// RegisterAuthHandlerClient registers the http handlers for service Auth +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AuthClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AuthClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "AuthClient" to call the correct interceptors. +func RegisterAuthHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthClient) error { + + mux.Handle("GET", pattern_Auth_Validate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.auth.Auth/Validate", runtime.WithHTTPPathPattern("/auth/v1/ok")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Auth_Validate_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Auth_Validate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_Register_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.auth.Auth/Register", runtime.WithHTTPPathPattern("/auth/v1/register")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Auth_Register_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Auth_Register_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Auth_Validate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"auth", "v1", "ok"}, "")) + + pattern_Auth_Register_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"auth", "v1", "register"}, "")) +) + +var ( + forward_Auth_Validate_0 = runtime.ForwardResponseMessage + + forward_Auth_Register_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/auth/v1/auth.platform.proto b/proto/platform/auth/v1/auth.platform.proto new file mode 100644 index 00000000..40b20e45 --- /dev/null +++ b/proto/platform/auth/v1/auth.platform.proto @@ -0,0 +1,111 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/auth/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.auth.v1"; +option java_outer_classname = "PlatformAuthProto"; + +package chainguard.platform.auth; + +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "platform/iam/v1/group.platform.proto"; +import "platform/iam/v1/role.platform.proto"; +import "platform/tenant/v1/cluster.platform.proto"; +import "google/protobuf/timestamp.proto"; + +service Auth { + rpc Validate(google.protobuf.Empty) returns (WhoAmI) { + option (google.api.http) = { + get: "/auth/v1/ok" + }; + option (chainguard.annotations.iam) = { + enabled: { + // This API requires no capabilities, it simply + // validates the token. + } + }; + } + + rpc Register(RegistrationRequest) returns (Session) { + option (google.api.http) = { + post: "/auth/v1/register" + body: "*" + }; + option (chainguard.annotations.iam) = { + // This method accepts non-Chainguard tokens and + // uses them to register a new user so that the + // tokens can be sent through our STS. + disabled: {} + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.auth.registered.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } +} + +message RegistrationRequest { + // code is an optional encoded invite code, which allows us to register + // the caller's identity as a member of a particular group as a particular + // role. + // +optional + string code = 1; + + // cluster_id is an optional cluster id, which simultaneously registers + // a Cluster with the Identity. This path must specify an invite code, so + // we know where in the IAM hierarchy to link the cluster. + string cluster_id = 2; + + // identity_id is an optional identity id. If the user already exists, this + // by-passes identity registration and continues on to cluster registration + // (if applicable) + string identity_id = 3; + + // cluster_name is an optional name to give the cluster when one is + // registered as part of the registration flow. + string cluster_name = 4; + + // cluster_description is an optional description to give the cluster + // when one is registered as part of the registration flow. + string cluster_description = 5; + + // enforcer_options defines the enforcer options. + chainguard.platform.tenant.Cluster.EnforcerOptions enforcer_options = 6; +} + +message Session { + // identity, the Chainguard identity id. + string identity = 1; + // group, the group this identity has joined by invitation, when an invite + // code was supplied. + string group = 2; +} + +message WhoAmI { + // Issuer is the issuer of the token. + string issuer = 1; + // The subject of the token. + string subject = 2; + // Audience is who the token is intended for. + repeated string audience = 3; + // When the token expires. + google.protobuf.Timestamp expiry = 4; + // With the token was issued. + google.protobuf.Timestamp issued_at = 5; + + // --- Upstream fields --- + message Capability { + // group of the bound role. + chainguard.platform.iam.Group group = 1; + // role of the bound identity. + chainguard.platform.iam.Role role = 2; + } + // The capabilities referenced in the token. + repeated Capability capabilities = 101; + // The upstream email for this token. + string email = 102; +} diff --git a/proto/platform/auth/v1/auth.platform_grpc.pb.go b/proto/platform/auth/v1/auth.platform_grpc.pb.go new file mode 100644 index 00000000..17053a34 --- /dev/null +++ b/proto/platform/auth/v1/auth.platform_grpc.pb.go @@ -0,0 +1,147 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: auth.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Auth_Validate_FullMethodName = "/chainguard.platform.auth.Auth/Validate" + Auth_Register_FullMethodName = "/chainguard.platform.auth.Auth/Register" +) + +// AuthClient is the client API for Auth service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type AuthClient interface { + Validate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*WhoAmI, error) + Register(ctx context.Context, in *RegistrationRequest, opts ...grpc.CallOption) (*Session, error) +} + +type authClient struct { + cc grpc.ClientConnInterface +} + +func NewAuthClient(cc grpc.ClientConnInterface) AuthClient { + return &authClient{cc} +} + +func (c *authClient) Validate(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*WhoAmI, error) { + out := new(WhoAmI) + err := c.cc.Invoke(ctx, Auth_Validate_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) Register(ctx context.Context, in *RegistrationRequest, opts ...grpc.CallOption) (*Session, error) { + out := new(Session) + err := c.cc.Invoke(ctx, Auth_Register_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// AuthServer is the server API for Auth service. +// All implementations must embed UnimplementedAuthServer +// for forward compatibility +type AuthServer interface { + Validate(context.Context, *emptypb.Empty) (*WhoAmI, error) + Register(context.Context, *RegistrationRequest) (*Session, error) + mustEmbedUnimplementedAuthServer() +} + +// UnimplementedAuthServer must be embedded to have forward compatible implementations. +type UnimplementedAuthServer struct { +} + +func (UnimplementedAuthServer) Validate(context.Context, *emptypb.Empty) (*WhoAmI, error) { + return nil, status.Errorf(codes.Unimplemented, "method Validate not implemented") +} +func (UnimplementedAuthServer) Register(context.Context, *RegistrationRequest) (*Session, error) { + return nil, status.Errorf(codes.Unimplemented, "method Register not implemented") +} +func (UnimplementedAuthServer) mustEmbedUnimplementedAuthServer() {} + +// UnsafeAuthServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to AuthServer will +// result in compilation errors. +type UnsafeAuthServer interface { + mustEmbedUnimplementedAuthServer() +} + +func RegisterAuthServer(s grpc.ServiceRegistrar, srv AuthServer) { + s.RegisterService(&Auth_ServiceDesc, srv) +} + +func _Auth_Validate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(emptypb.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).Validate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Auth_Validate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).Validate(ctx, req.(*emptypb.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_Register_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RegistrationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).Register(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Auth_Register_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).Register(ctx, req.(*RegistrationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Auth_ServiceDesc is the grpc.ServiceDesc for Auth service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Auth_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.auth.Auth", + HandlerType: (*AuthServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Validate", + Handler: _Auth_Validate_Handler, + }, + { + MethodName: "Register", + Handler: _Auth_Register_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "auth.platform.proto", +} diff --git a/proto/platform/auth/v1/doc.go b/proto/platform/auth/v1/doc.go new file mode 100644 index 00000000..409f9974 --- /dev/null +++ b/proto/platform/auth/v1/doc.go @@ -0,0 +1,10 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package v1 contains the v1 GRPC client and server definitions +// for implementing Auth interactions for the Console. +// +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. auth.platform.proto +package v1 diff --git a/proto/platform/auth/v1/test/mock_auth.go b/proto/platform/auth/v1/test/mock_auth.go new file mode 100644 index 00000000..a62ebe20 --- /dev/null +++ b/proto/platform/auth/v1/test/mock_auth.go @@ -0,0 +1,75 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + auth "chainguard.dev/sdk/proto/platform/auth/v1" +) + +var _ auth.AuthClient = (*MockAuthClient)(nil) + +type MockAuthClient struct { + OnValidate []AuthOnValidate + OnRegister []AuthOnRegister +} + +type FromContextFn func(context.Context) bool + +type AuthOnValidate struct { + Given FromContextFn + Validate *auth.WhoAmI + Error error +} + +type AuthOnRegister struct { + Given *auth.RegistrationRequest + Created *auth.Session + CheckContext FromContextFn + Error error +} + +func (m MockAuthClient) Validate(ctx context.Context, _ *emptypb.Empty, _ ...grpc.CallOption) (*auth.WhoAmI, error) { + for _, o := range m.OnValidate { + if o.Given(ctx) { + return o.Validate, o.Error + } + } + return nil, fmt.Errorf("mock not found for context: %v", ctx) +} + +func (m MockAuthClient) Register(ctx context.Context, given *auth.RegistrationRequest, _ ...grpc.CallOption) (*auth.Session, error) { + for _, o := range m.OnRegister { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + if o.CheckContext == nil || o.CheckContext(ctx) { + return o.Created, o.Error + } + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +// --- Server --- + +type MockAuthServer struct { + auth.UnimplementedAuthServer + Client MockAuthClient +} + +func (m MockAuthServer) Validate(ctx context.Context, empty *emptypb.Empty) (*auth.WhoAmI, error) { + return m.Client.Validate(ctx, empty) +} + +func (m MockAuthServer) Register(ctx context.Context, req *auth.RegistrationRequest) (*auth.Session, error) { + return m.Client.Register(ctx, req) +} diff --git a/proto/platform/clients.go b/proto/platform/clients.go new file mode 100644 index 00000000..8241bba2 --- /dev/null +++ b/proto/platform/clients.go @@ -0,0 +1,195 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package platform + +import ( + "context" + "fmt" + "net/url" + "time" + + delegate "chainguard.dev/go-grpc-kit/pkg/options" + advisory "chainguard.dev/sdk/proto/platform/advisory/v1" + platformauth "chainguard.dev/sdk/proto/platform/auth/v1" + iam "chainguard.dev/sdk/proto/platform/iam/v1" + platformoidc "chainguard.dev/sdk/proto/platform/oidc/v1" + ping "chainguard.dev/sdk/proto/platform/ping/v1" + registry "chainguard.dev/sdk/proto/platform/registry/v1" + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" + "github.com/chainguard-dev/clog" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" +) + +type userAgentString struct{} + +type Clients interface { + IAM() iam.Clients + Tenant() tenant.Clients + Registry() registry.Clients + Advisory() advisory.Clients + Ping() ping.Clients + + Close() error +} + +func NewPlatformClients(ctx context.Context, apiURL string, cred credentials.PerRPCCredentials, addlOpts ...grpc.DialOption) (Clients, error) { + apiURI, err := url.Parse(apiURL) + if err != nil { + return nil, fmt.Errorf("failed to parse iam service address, must be a url: %w", err) + } + + target, opts := delegate.GRPCOptions(*apiURI) + + // TODO: we may want to require transport security at some future point. + if cred != nil { + opts = append(opts, grpc.WithPerRPCCredentials(cred)) + } else { + clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") + } + if ua := GetUserAgent(ctx); ua != "" { + opts = append(opts, grpc.WithUserAgent(ua)) + } + opts = append(opts, addlOpts...) + + var cancel context.CancelFunc + if _, timeoutSet := ctx.Deadline(); !timeoutSet { + ctx, cancel = context.WithTimeout(ctx, 300*time.Second) + defer cancel() + } + conn, err := grpc.DialContext(ctx, target, opts...) + if err != nil { + return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + } + + return &clients{ + iam: iam.NewClientsFromConnection(conn), + tenant: tenant.NewClientsFromConnection(conn), + registry: registry.NewClientsFromConnection(conn), + advisory: advisory.NewClientsFromConnection(conn), + ping: ping.NewClientsFromConnection(conn), + conn: conn, + }, nil +} + +type clients struct { + iam iam.Clients + tenant tenant.Clients + registry registry.Clients + advisory advisory.Clients + ping ping.Clients + + conn *grpc.ClientConn +} + +func (c *clients) IAM() iam.Clients { + return c.iam +} + +func (c *clients) Tenant() tenant.Clients { + return c.tenant +} + +func (c *clients) Registry() registry.Clients { + return c.registry +} + +func (c *clients) Advisory() advisory.Clients { + return c.advisory +} + +func (c *clients) Ping() ping.Clients { + return c.ping +} + +func (c *clients) Close() error { + return c.conn.Close() +} + +type OIDCClients interface { + Auth() platformauth.AuthClient + OIDC() platformoidc.Clients + OIDCPing() ping.Clients + + Close() error +} + +func NewOIDCClients(ctx context.Context, issuerURL string, cred credentials.PerRPCCredentials) (OIDCClients, error) { + issuerURI, err := url.Parse(issuerURL) + if err != nil { + return nil, fmt.Errorf("failed to parse issuer URL: %w", err) + } + + target, opts := delegate.GRPCOptions(*issuerURI) + + // TODO: we may want to require transport security at some future point. + if cred != nil { + opts = append(opts, grpc.WithPerRPCCredentials(cred)) + } else { + clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") + } + if ua := GetUserAgent(ctx); ua != "" { + opts = append(opts, grpc.WithUserAgent(ua)) + } + + var cancel context.CancelFunc + if _, timeoutSet := ctx.Deadline(); !timeoutSet { + ctx, cancel = context.WithTimeout(ctx, 300*time.Second) + defer cancel() + } + conn, err := grpc.DialContext(ctx, target, opts...) + if err != nil { + return nil, fmt.Errorf("failed to connect to the OIDC issuer: %w", err) + } + + return &oidcClients{ + auth: platformauth.NewAuthClient(conn), + oidc: platformoidc.NewClientsFromConnection(conn), + ping: ping.NewClientsFromConnection(conn), + conn: conn, + }, nil +} + +type oidcClients struct { + auth platformauth.AuthClient + oidc platformoidc.Clients + ping ping.Clients + + conn *grpc.ClientConn +} + +func (c *oidcClients) Auth() platformauth.AuthClient { + return c.auth +} + +func (c *oidcClients) OIDC() platformoidc.Clients { + return c.oidc +} + +func (c *oidcClients) OIDCPing() ping.Clients { + return c.ping +} + +func (c *oidcClients) Close() error { + return c.conn.Close() +} + +// WithUserAgent adds a UserAgent string to the context +// passed to the GRPC client +func WithUserAgent(ctx context.Context, userAgent string) context.Context { + if userAgent == "" { + return ctx + } + return context.WithValue(ctx, userAgentString{}, userAgent) +} + +// GetUserAgent extracts the user agent string from the context +func GetUserAgent(ctx context.Context) string { + if ua := ctx.Value(userAgentString{}); ua != nil { + return ua.(string) + } + return "" +} diff --git a/proto/platform/common/v1/doc.go b/proto/platform/common/v1/doc.go new file mode 100644 index 00000000..96d90e89 --- /dev/null +++ b/proto/platform/common/v1/doc.go @@ -0,0 +1,9 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. uidp.platform.proto + +// Package common contains Chainguard shared types exposed to the console. +package v1 diff --git a/proto/platform/common/v1/uidp.platform.pb.go b/proto/platform/common/v1/uidp.platform.pb.go new file mode 100644 index 00000000..626ce861 --- /dev/null +++ b/proto/platform/common/v1/uidp.platform.pb.go @@ -0,0 +1,184 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: uidp.platform.proto + +package v1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type UIDPFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ancestors_of are groups reachable by repeated proceeding from child to parent. + AncestorsOf string `protobuf:"bytes,1,opt,name=ancestors_of,json=ancestorsOf,proto3" json:"ancestors_of,omitempty"` + // descendants_of are groups reachable by repeated proceeding from parent to child. + DescendantsOf string `protobuf:"bytes,2,opt,name=descendants_of,json=descendantsOf,proto3" json:"descendants_of,omitempty"` + // children_of are groups reachable by directly proceeding from parent to children. + ChildrenOf string `protobuf:"bytes,3,opt,name=children_of,json=childrenOf,proto3" json:"children_of,omitempty"` + // in_root resticts responses to root level resources (organizations, user identities) + InRoot bool `protobuf:"varint,4,opt,name=in_root,json=inRoot,proto3" json:"in_root,omitempty"` +} + +func (x *UIDPFilter) Reset() { + *x = UIDPFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_uidp_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UIDPFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UIDPFilter) ProtoMessage() {} + +func (x *UIDPFilter) ProtoReflect() protoreflect.Message { + mi := &file_uidp_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UIDPFilter.ProtoReflect.Descriptor instead. +func (*UIDPFilter) Descriptor() ([]byte, []int) { + return file_uidp_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *UIDPFilter) GetAncestorsOf() string { + if x != nil { + return x.AncestorsOf + } + return "" +} + +func (x *UIDPFilter) GetDescendantsOf() string { + if x != nil { + return x.DescendantsOf + } + return "" +} + +func (x *UIDPFilter) GetChildrenOf() string { + if x != nil { + return x.ChildrenOf + } + return "" +} + +func (x *UIDPFilter) GetInRoot() bool { + if x != nil { + return x.InRoot + } + return false +} + +var File_uidp_platform_proto protoreflect.FileDescriptor + +var file_uidp_platform_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x22, 0x90, 0x01, 0x0a, 0x0a, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x73, 0x5f, 0x6f, 0x66, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x73, 0x4f, 0x66, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x61, 0x6e, + 0x74, 0x73, 0x5f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x73, + 0x63, 0x65, 0x6e, 0x64, 0x61, 0x6e, 0x74, 0x73, 0x4f, 0x66, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, + 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x5f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x4f, 0x66, 0x12, 0x17, 0x0a, 0x07, 0x69, + 0x6e, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x6e, + 0x52, 0x6f, 0x6f, 0x74, 0x42, 0x6f, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x55, 0x49, 0x44, + 0x50, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_uidp_platform_proto_rawDescOnce sync.Once + file_uidp_platform_proto_rawDescData = file_uidp_platform_proto_rawDesc +) + +func file_uidp_platform_proto_rawDescGZIP() []byte { + file_uidp_platform_proto_rawDescOnce.Do(func() { + file_uidp_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_uidp_platform_proto_rawDescData) + }) + return file_uidp_platform_proto_rawDescData +} + +var file_uidp_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_uidp_platform_proto_goTypes = []interface{}{ + (*UIDPFilter)(nil), // 0: chainguard.platform.common.UIDPFilter +} +var file_uidp_platform_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_uidp_platform_proto_init() } +func file_uidp_platform_proto_init() { + if File_uidp_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_uidp_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UIDPFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_uidp_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_uidp_platform_proto_goTypes, + DependencyIndexes: file_uidp_platform_proto_depIdxs, + MessageInfos: file_uidp_platform_proto_msgTypes, + }.Build() + File_uidp_platform_proto = out.File + file_uidp_platform_proto_rawDesc = nil + file_uidp_platform_proto_goTypes = nil + file_uidp_platform_proto_depIdxs = nil +} diff --git a/proto/platform/common/v1/uidp.platform.proto b/proto/platform/common/v1/uidp.platform.proto new file mode 100644 index 00000000..54f4539c --- /dev/null +++ b/proto/platform/common/v1/uidp.platform.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/common/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.common.v1"; +option java_outer_classname = "PlatformCommonUIDPProto"; + +package chainguard.platform.common; + +message UIDPFilter { + // ancestors_of are groups reachable by repeated proceeding from child to parent. + string ancestors_of = 1; + // descendants_of are groups reachable by repeated proceeding from parent to child. + string descendants_of = 2; + // children_of are groups reachable by directly proceeding from parent to children. + string children_of = 3; + // in_root resticts responses to root level resources (organizations, user identities) + bool in_root = 4; +} diff --git a/proto/platform/events/v1/doc.go b/proto/platform/events/v1/doc.go new file mode 100644 index 00000000..8e031d9d --- /dev/null +++ b/proto/platform/events/v1/doc.go @@ -0,0 +1,12 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Generate the proto definitions +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. subscriptions.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. identities.platform.proto + +// Package events contains the GRPC client and server definitions +// for implementing eventing interactions for the Console. +package v1 diff --git a/proto/platform/events/v1/identities.platform.event.go b/proto/platform/events/v1/identities.platform.event.go new file mode 100644 index 00000000..3b45f452 --- /dev/null +++ b/proto/platform/events/v1/identities.platform.event.go @@ -0,0 +1,16 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *IdentityMetadata) CloudEventsExtension(key string) (string, bool) { //nolint: revive + return "", false +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *IdentityMetadata) CloudEventsSubject() string { + return "" +} diff --git a/proto/platform/events/v1/identities.platform.pb.go b/proto/platform/events/v1/identities.platform.pb.go new file mode 100644 index 00000000..3a5a7e04 --- /dev/null +++ b/proto/platform/events/v1/identities.platform.pb.go @@ -0,0 +1,416 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: identities.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Identity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is unique identifier of this specific identity. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // subject of OIDC ID tokens issued for this identity. Matchs the `sub` + // claim. + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + // issuer of the OIDC ID tokens issued for this identity. Matches the `iss` + // claim. + Issuer string `protobuf:"bytes,3,opt,name=issuer,proto3" json:"issuer,omitempty"` + // Optional JWKS formatted public keys for the issuer. If supplied + // verification of ID tokens is attempted using these keys instead of the + // normal OIDC discovery path. This enables e.g clusters behing NAT to + // authenticate. + IssuerKeys string `protobuf:"bytes,4,opt,name=issuer_keys,json=issuerKeys,proto3" json:"issuer_keys,omitempty"` + // Expiration of identity / issuer keys. After this date /time the issuer + // keys will not be trusted. Defaults / maximum of 30 days after creation + // time. + Expiration *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=expiration,proto3" json:"expiration,omitempty"` +} + +func (x *Identity) Reset() { + *x = Identity{} + if protoimpl.UnsafeEnabled { + mi := &file_identities_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Identity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Identity) ProtoMessage() {} + +func (x *Identity) ProtoReflect() protoreflect.Message { + mi := &file_identities_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Identity.ProtoReflect.Descriptor instead. +func (*Identity) Descriptor() ([]byte, []int) { + return file_identities_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Identity) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Identity) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *Identity) GetIssuer() string { + if x != nil { + return x.Issuer + } + return "" +} + +func (x *Identity) GetIssuerKeys() string { + if x != nil { + return x.IssuerKeys + } + return "" +} + +func (x *Identity) GetExpiration() *timestamppb.Timestamp { + if x != nil { + return x.Expiration + } + return nil +} + +type IdentityMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OnboardingQuestions *IdentityMetadata_OnboardingQuestions `protobuf:"bytes,1,opt,name=onboarding_questions,json=onboardingQuestions,proto3" json:"onboarding_questions,omitempty"` + // Output only. This is the name of the user. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Whether the user has opted to receive updates from Chainguard. + UpdatesOptIn bool `protobuf:"varint,3,opt,name=updatesOptIn,proto3" json:"updatesOptIn,omitempty"` +} + +func (x *IdentityMetadata) Reset() { + *x = IdentityMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_identities_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityMetadata) ProtoMessage() {} + +func (x *IdentityMetadata) ProtoReflect() protoreflect.Message { + mi := &file_identities_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IdentityMetadata.ProtoReflect.Descriptor instead. +func (*IdentityMetadata) Descriptor() ([]byte, []int) { + return file_identities_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *IdentityMetadata) GetOnboardingQuestions() *IdentityMetadata_OnboardingQuestions { + if x != nil { + return x.OnboardingQuestions + } + return nil +} + +func (x *IdentityMetadata) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *IdentityMetadata) GetUpdatesOptIn() bool { + if x != nil { + return x.UpdatesOptIn + } + return false +} + +type IdentityMetadata_OnboardingQuestions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CompanyName string `protobuf:"bytes,1,opt,name=company_name,json=companyName,proto3" json:"company_name,omitempty"` + Providers []string `protobuf:"bytes,2,rep,name=providers,proto3" json:"providers,omitempty"` + Product string `protobuf:"bytes,3,opt,name=product,proto3" json:"product,omitempty"` +} + +func (x *IdentityMetadata_OnboardingQuestions) Reset() { + *x = IdentityMetadata_OnboardingQuestions{} + if protoimpl.UnsafeEnabled { + mi := &file_identities_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityMetadata_OnboardingQuestions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityMetadata_OnboardingQuestions) ProtoMessage() {} + +func (x *IdentityMetadata_OnboardingQuestions) ProtoReflect() protoreflect.Message { + mi := &file_identities_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IdentityMetadata_OnboardingQuestions.ProtoReflect.Descriptor instead. +func (*IdentityMetadata_OnboardingQuestions) Descriptor() ([]byte, []int) { + return file_identities_platform_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *IdentityMetadata_OnboardingQuestions) GetCompanyName() string { + if x != nil { + return x.CompanyName + } + return "" +} + +func (x *IdentityMetadata_OnboardingQuestions) GetProviders() []string { + if x != nil { + return x.Providers + } + return nil +} + +func (x *IdentityMetadata_OnboardingQuestions) GetProduct() string { + if x != nil { + return x.Product + } + return "" +} + +var File_identities_platform_proto protoreflect.FileDescriptor + +var file_identities_platform_proto_rawDesc = []byte{ + 0x0a, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa9, 0x01, 0x0a, 0x08, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x73, 0x75, 0x65, + 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x73, + 0x73, 0x75, 0x65, 0x72, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb1, 0x02, 0x0a, 0x10, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x73, 0x0a, 0x14, 0x6f, 0x6e, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, + 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x6f, 0x6e, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x4f, 0x70, 0x74, + 0x49, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x73, 0x4f, 0x70, 0x74, 0x49, 0x6e, 0x1a, 0x70, 0x0a, 0x13, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x67, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x18, + 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x32, 0xec, 0x02, 0x0a, 0x0a, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x81, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x85, 0x07, 0x10, 0x01, 0x12, 0xd9, 0x01, 0x0a, 0x0e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x2c, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x20, 0x32, 0x1b, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, + 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x04, 0x12, 0x02, 0x10, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, + 0x0b, 0x35, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x42, 0x75, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x31, + 0x42, 0x1d, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, + 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_identities_platform_proto_rawDescOnce sync.Once + file_identities_platform_proto_rawDescData = file_identities_platform_proto_rawDesc +) + +func file_identities_platform_proto_rawDescGZIP() []byte { + file_identities_platform_proto_rawDescOnce.Do(func() { + file_identities_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_identities_platform_proto_rawDescData) + }) + return file_identities_platform_proto_rawDescData +} + +var file_identities_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_identities_platform_proto_goTypes = []interface{}{ + (*Identity)(nil), // 0: chainguard.platform.events.Identity + (*IdentityMetadata)(nil), // 1: chainguard.platform.events.IdentityMetadata + (*IdentityMetadata_OnboardingQuestions)(nil), // 2: chainguard.platform.events.IdentityMetadata.OnboardingQuestions + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp +} +var file_identities_platform_proto_depIdxs = []int32{ + 3, // 0: chainguard.platform.events.Identity.expiration:type_name -> google.protobuf.Timestamp + 2, // 1: chainguard.platform.events.IdentityMetadata.onboarding_questions:type_name -> chainguard.platform.events.IdentityMetadata.OnboardingQuestions + 0, // 2: chainguard.platform.events.Identities.Create:input_type -> chainguard.platform.events.Identity + 1, // 3: chainguard.platform.events.Identities.UpdateMetadata:input_type -> chainguard.platform.events.IdentityMetadata + 0, // 4: chainguard.platform.events.Identities.Create:output_type -> chainguard.platform.events.Identity + 1, // 5: chainguard.platform.events.Identities.UpdateMetadata:output_type -> chainguard.platform.events.IdentityMetadata + 4, // [4:6] is the sub-list for method output_type + 2, // [2:4] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_identities_platform_proto_init() } +func file_identities_platform_proto_init() { + if File_identities_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_identities_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Identity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identities_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identities_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityMetadata_OnboardingQuestions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_identities_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_identities_platform_proto_goTypes, + DependencyIndexes: file_identities_platform_proto_depIdxs, + MessageInfos: file_identities_platform_proto_msgTypes, + }.Build() + File_identities_platform_proto = out.File + file_identities_platform_proto_rawDesc = nil + file_identities_platform_proto_goTypes = nil + file_identities_platform_proto_depIdxs = nil +} diff --git a/proto/platform/events/v1/identities.platform.pb.gw.go b/proto/platform/events/v1/identities.platform.pb.gw.go new file mode 100644 index 00000000..e20b6a68 --- /dev/null +++ b/proto/platform/events/v1/identities.platform.pb.gw.go @@ -0,0 +1,252 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: identities.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Identities_Create_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Identity + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Identities_Create_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Identity + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Identities_UpdateMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq IdentityMetadata + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Identities_UpdateMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq IdentityMetadata + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateMetadata(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterIdentitiesHandlerServer registers the http handlers for service Identities to "mux". +// UnaryRPC :call IdentitiesServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterIdentitiesHandlerFromEndpoint instead. +func RegisterIdentitiesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server IdentitiesServer) error { + + mux.Handle("POST", pattern_Identities_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Identities/Create", runtime.WithHTTPPathPattern("/iam/v1/identities")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Identities_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_Identities_UpdateMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Identities/UpdateMetadata", runtime.WithHTTPPathPattern("/iam/v1/identities/metadata")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Identities_UpdateMetadata_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_UpdateMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterIdentitiesHandlerFromEndpoint is same as RegisterIdentitiesHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterIdentitiesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterIdentitiesHandler(ctx, mux, conn) +} + +// RegisterIdentitiesHandler registers the http handlers for service Identities to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterIdentitiesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterIdentitiesHandlerClient(ctx, mux, NewIdentitiesClient(conn)) +} + +// RegisterIdentitiesHandlerClient registers the http handlers for service Identities +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "IdentitiesClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "IdentitiesClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "IdentitiesClient" to call the correct interceptors. +func RegisterIdentitiesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client IdentitiesClient) error { + + mux.Handle("POST", pattern_Identities_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Identities/Create", runtime.WithHTTPPathPattern("/iam/v1/identities")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Identities_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PATCH", pattern_Identities_UpdateMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Identities/UpdateMetadata", runtime.WithHTTPPathPattern("/iam/v1/identities/metadata")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Identities_UpdateMetadata_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_UpdateMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Identities_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "identities"}, "")) + + pattern_Identities_UpdateMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"iam", "v1", "identities", "metadata"}, "")) +) + +var ( + forward_Identities_Create_0 = runtime.ForwardResponseMessage + + forward_Identities_UpdateMetadata_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/events/v1/identities.platform.proto b/proto/platform/events/v1/identities.platform.proto new file mode 100644 index 00000000..de4f96be --- /dev/null +++ b/proto/platform/events/v1/identities.platform.proto @@ -0,0 +1,97 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/events/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.events.v1"; +option java_outer_classname = "PlatformEventsIdentitiesProto"; + +package chainguard.platform.events; + +import "google/protobuf/timestamp.proto"; +import "google/api/annotations.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; + +service Identities { + rpc Create(Identity) returns (Identity) { + option (google.api.http) = { + post: "/iam/v1/identities" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + // TODO(nsmith): The authentications story here is pretty rough. This + // identity creation must be an unscoped permission because they aren't + // nested under IAM groups.... we need a better scoping story here. Is + // there any reason we can't nest these under a group? + capabilities: [CAP_IAM_IDENTITY_CREATE] + unscoped: true + } + }; + } + + rpc UpdateMetadata(IdentityMetadata) returns (IdentityMetadata) { + option (google.api.http) = { + patch: "/iam/v1/identities/metadata" + body: "*" + }; + option (chainguard.annotations.iam) = { + // Authentication will be implicit in the handler - the updated identity + // is the one from the token. + enabled: { + capabilities: [] + unscoped: true + } + }; + option (chainguard.annotations.events) = { + // Emit an internal event to track user onboarding. + type: "dev.chainguard.api.iam.identity.metadata.updated.v1" + audience: INTERNAL + }; + } + + // NB: List, Update and Delete unimplemented here as its unclear how + // permissions would work. Like how do we scope list to the identities a user + // _should_ have access to instead of the global set of all identities + // (insert yikes energy). +} + +message Identity { + // id is unique identifier of this specific identity. + string id = 1; + + // subject of OIDC ID tokens issued for this identity. Matchs the `sub` + // claim. + string subject = 2; + + // issuer of the OIDC ID tokens issued for this identity. Matches the `iss` + // claim. + string issuer = 3; + + // Optional JWKS formatted public keys for the issuer. If supplied + // verification of ID tokens is attempted using these keys instead of the + // normal OIDC discovery path. This enables e.g clusters behing NAT to + // authenticate. + string issuer_keys = 4; + + // Expiration of identity / issuer keys. After this date /time the issuer + // keys will not be trusted. Defaults / maximum of 30 days after creation + // time. + google.protobuf.Timestamp expiration = 5; +} + +message IdentityMetadata { + OnboardingQuestions onboarding_questions = 1; + + // Output only. This is the name of the user. + string name = 2; + + // Whether the user has opted to receive updates from Chainguard. + bool updatesOptIn = 3; + + message OnboardingQuestions { + string company_name = 1; + repeated string providers = 2; + string product = 3; + } +} diff --git a/proto/platform/events/v1/identities.platform_grpc.pb.go b/proto/platform/events/v1/identities.platform_grpc.pb.go new file mode 100644 index 00000000..4ca37918 --- /dev/null +++ b/proto/platform/events/v1/identities.platform_grpc.pb.go @@ -0,0 +1,146 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: identities.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Identities_Create_FullMethodName = "/chainguard.platform.events.Identities/Create" + Identities_UpdateMetadata_FullMethodName = "/chainguard.platform.events.Identities/UpdateMetadata" +) + +// IdentitiesClient is the client API for Identities service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type IdentitiesClient interface { + Create(ctx context.Context, in *Identity, opts ...grpc.CallOption) (*Identity, error) + UpdateMetadata(ctx context.Context, in *IdentityMetadata, opts ...grpc.CallOption) (*IdentityMetadata, error) +} + +type identitiesClient struct { + cc grpc.ClientConnInterface +} + +func NewIdentitiesClient(cc grpc.ClientConnInterface) IdentitiesClient { + return &identitiesClient{cc} +} + +func (c *identitiesClient) Create(ctx context.Context, in *Identity, opts ...grpc.CallOption) (*Identity, error) { + out := new(Identity) + err := c.cc.Invoke(ctx, Identities_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identitiesClient) UpdateMetadata(ctx context.Context, in *IdentityMetadata, opts ...grpc.CallOption) (*IdentityMetadata, error) { + out := new(IdentityMetadata) + err := c.cc.Invoke(ctx, Identities_UpdateMetadata_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// IdentitiesServer is the server API for Identities service. +// All implementations must embed UnimplementedIdentitiesServer +// for forward compatibility +type IdentitiesServer interface { + Create(context.Context, *Identity) (*Identity, error) + UpdateMetadata(context.Context, *IdentityMetadata) (*IdentityMetadata, error) + mustEmbedUnimplementedIdentitiesServer() +} + +// UnimplementedIdentitiesServer must be embedded to have forward compatible implementations. +type UnimplementedIdentitiesServer struct { +} + +func (UnimplementedIdentitiesServer) Create(context.Context, *Identity) (*Identity, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedIdentitiesServer) UpdateMetadata(context.Context, *IdentityMetadata) (*IdentityMetadata, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateMetadata not implemented") +} +func (UnimplementedIdentitiesServer) mustEmbedUnimplementedIdentitiesServer() {} + +// UnsafeIdentitiesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to IdentitiesServer will +// result in compilation errors. +type UnsafeIdentitiesServer interface { + mustEmbedUnimplementedIdentitiesServer() +} + +func RegisterIdentitiesServer(s grpc.ServiceRegistrar, srv IdentitiesServer) { + s.RegisterService(&Identities_ServiceDesc, srv) +} + +func _Identities_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Identity) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentitiesServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Identities_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentitiesServer).Create(ctx, req.(*Identity)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identities_UpdateMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IdentityMetadata) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentitiesServer).UpdateMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Identities_UpdateMetadata_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentitiesServer).UpdateMetadata(ctx, req.(*IdentityMetadata)) + } + return interceptor(ctx, in, info, handler) +} + +// Identities_ServiceDesc is the grpc.ServiceDesc for Identities service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Identities_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.events.Identities", + HandlerType: (*IdentitiesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _Identities_Create_Handler, + }, + { + MethodName: "UpdateMetadata", + Handler: _Identities_UpdateMetadata_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "identities.platform.proto", +} diff --git a/proto/platform/events/v1/subscriptions.platform.event.go b/proto/platform/events/v1/subscriptions.platform.event.go new file mode 100644 index 00000000..a2eda990 --- /dev/null +++ b/proto/platform/events/v1/subscriptions.platform.event.go @@ -0,0 +1,45 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "chainguard.dev/sdk/uidp" +) + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *Subscription) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *Subscription) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *DeleteSubscriptionRequest) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *DeleteSubscriptionRequest) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.Redact. +func (x *DeleteSubscriptionRequest) CloudEventsRedact() interface{} { + return nil +} diff --git a/proto/platform/events/v1/subscriptions.platform.pb.go b/proto/platform/events/v1/subscriptions.platform.pb.go new file mode 100644 index 00000000..98103c93 --- /dev/null +++ b/proto/platform/events/v1/subscriptions.platform.pb.go @@ -0,0 +1,510 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: subscriptions.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CreateSubscriptionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // parent_id, The Group UIDP path under which the new subscription is associated. + ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + // Subscription is the subscription to create; + Subscription *Subscription `protobuf:"bytes,2,opt,name=subscription,proto3" json:"subscription,omitempty"` +} + +func (x *CreateSubscriptionRequest) Reset() { + *x = CreateSubscriptionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_subscriptions_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateSubscriptionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateSubscriptionRequest) ProtoMessage() {} + +func (x *CreateSubscriptionRequest) ProtoReflect() protoreflect.Message { + mi := &file_subscriptions_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateSubscriptionRequest.ProtoReflect.Descriptor instead. +func (*CreateSubscriptionRequest) Descriptor() ([]byte, []int) { + return file_subscriptions_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *CreateSubscriptionRequest) GetParentId() string { + if x != nil { + return x.ParentId + } + return "" +} + +func (x *CreateSubscriptionRequest) GetSubscription() *Subscription { + if x != nil { + return x.Subscription + } + return nil +} + +type Subscription struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is identifier of this specific subscription. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // sink is the address to which events shall be delivered using the selected protocol. + Sink string `protobuf:"bytes,2,opt,name=sink,proto3" json:"sink,omitempty"` +} + +func (x *Subscription) Reset() { + *x = Subscription{} + if protoimpl.UnsafeEnabled { + mi := &file_subscriptions_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Subscription) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Subscription) ProtoMessage() {} + +func (x *Subscription) ProtoReflect() protoreflect.Message { + mi := &file_subscriptions_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Subscription.ProtoReflect.Descriptor instead. +func (*Subscription) Descriptor() ([]byte, []int) { + return file_subscriptions_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *Subscription) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Subscription) GetSink() string { + if x != nil { + return x.Sink + } + return "" +} + +type SubscriptionList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Subscription `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *SubscriptionList) Reset() { + *x = SubscriptionList{} + if protoimpl.UnsafeEnabled { + mi := &file_subscriptions_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscriptionList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionList) ProtoMessage() {} + +func (x *SubscriptionList) ProtoReflect() protoreflect.Message { + mi := &file_subscriptions_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionList.ProtoReflect.Descriptor instead. +func (*SubscriptionList) Descriptor() ([]byte, []int) { + return file_subscriptions_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *SubscriptionList) GetItems() []*Subscription { + if x != nil { + return x.Items + } + return nil +} + +type SubscriptionFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // uidp filers records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` +} + +func (x *SubscriptionFilter) Reset() { + *x = SubscriptionFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_subscriptions_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscriptionFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionFilter) ProtoMessage() {} + +func (x *SubscriptionFilter) ProtoReflect() protoreflect.Message { + mi := &file_subscriptions_platform_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 SubscriptionFilter.ProtoReflect.Descriptor instead. +func (*SubscriptionFilter) Descriptor() ([]byte, []int) { + return file_subscriptions_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *SubscriptionFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *SubscriptionFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +type DeleteSubscriptionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteSubscriptionRequest) Reset() { + *x = DeleteSubscriptionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_subscriptions_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteSubscriptionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteSubscriptionRequest) ProtoMessage() {} + +func (x *DeleteSubscriptionRequest) ProtoReflect() protoreflect.Message { + mi := &file_subscriptions_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteSubscriptionRequest.ProtoReflect.Descriptor instead. +func (*DeleteSubscriptionRequest) Descriptor() ([]byte, []int) { + return file_subscriptions_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *DeleteSubscriptionRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +var File_subscriptions_platform_proto protoreflect.FileDescriptor + +var file_subscriptions_platform_proto_rawDesc = []byte{ + 0x0a, 0x1c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0x8e, 0x01, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, + 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x22, 0x3a, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, + 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x6e, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x69, 0x6e, 0x6b, 0x22, 0x52, 0x0a, 0x10, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x22, 0x60, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, + 0x64, 0x70, 0x22, 0x33, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, 0xf2, 0x04, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xf7, 0x01, 0x0a, 0x06, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x22, 0x27, + 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xdd, + 0x0b, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3c, 0x0a, 0x31, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0x94, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xdf, 0x0b, 0x10, 0x01, 0x12, 0xcf, 0x01, 0x0a, 0x06, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x2a, 0x20, 0x2f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xe0, 0x0b, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3c, + 0x0a, 0x31, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x77, 0x0a, 0x25, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, + 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x76, 0x31, 0x42, 0x1f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_subscriptions_platform_proto_rawDescOnce sync.Once + file_subscriptions_platform_proto_rawDescData = file_subscriptions_platform_proto_rawDesc +) + +func file_subscriptions_platform_proto_rawDescGZIP() []byte { + file_subscriptions_platform_proto_rawDescOnce.Do(func() { + file_subscriptions_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_subscriptions_platform_proto_rawDescData) + }) + return file_subscriptions_platform_proto_rawDescData +} + +var file_subscriptions_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_subscriptions_platform_proto_goTypes = []interface{}{ + (*CreateSubscriptionRequest)(nil), // 0: chainguard.platform.events.CreateSubscriptionRequest + (*Subscription)(nil), // 1: chainguard.platform.events.Subscription + (*SubscriptionList)(nil), // 2: chainguard.platform.events.SubscriptionList + (*SubscriptionFilter)(nil), // 3: chainguard.platform.events.SubscriptionFilter + (*DeleteSubscriptionRequest)(nil), // 4: chainguard.platform.events.DeleteSubscriptionRequest + (*v1.UIDPFilter)(nil), // 5: chainguard.platform.common.UIDPFilter + (*emptypb.Empty)(nil), // 6: google.protobuf.Empty +} +var file_subscriptions_platform_proto_depIdxs = []int32{ + 1, // 0: chainguard.platform.events.CreateSubscriptionRequest.subscription:type_name -> chainguard.platform.events.Subscription + 1, // 1: chainguard.platform.events.SubscriptionList.items:type_name -> chainguard.platform.events.Subscription + 5, // 2: chainguard.platform.events.SubscriptionFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 0, // 3: chainguard.platform.events.Subscriptions.Create:input_type -> chainguard.platform.events.CreateSubscriptionRequest + 3, // 4: chainguard.platform.events.Subscriptions.List:input_type -> chainguard.platform.events.SubscriptionFilter + 4, // 5: chainguard.platform.events.Subscriptions.Delete:input_type -> chainguard.platform.events.DeleteSubscriptionRequest + 1, // 6: chainguard.platform.events.Subscriptions.Create:output_type -> chainguard.platform.events.Subscription + 2, // 7: chainguard.platform.events.Subscriptions.List:output_type -> chainguard.platform.events.SubscriptionList + 6, // 8: chainguard.platform.events.Subscriptions.Delete:output_type -> google.protobuf.Empty + 6, // [6:9] is the sub-list for method output_type + 3, // [3:6] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_subscriptions_platform_proto_init() } +func file_subscriptions_platform_proto_init() { + if File_subscriptions_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_subscriptions_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateSubscriptionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subscriptions_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Subscription); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subscriptions_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscriptionList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subscriptions_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscriptionFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_subscriptions_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteSubscriptionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_subscriptions_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_subscriptions_platform_proto_goTypes, + DependencyIndexes: file_subscriptions_platform_proto_depIdxs, + MessageInfos: file_subscriptions_platform_proto_msgTypes, + }.Build() + File_subscriptions_platform_proto = out.File + file_subscriptions_platform_proto_rawDesc = nil + file_subscriptions_platform_proto_goTypes = nil + file_subscriptions_platform_proto_depIdxs = nil +} diff --git a/proto/platform/events/v1/subscriptions.platform.pb.gw.go b/proto/platform/events/v1/subscriptions.platform.pb.gw.go new file mode 100644 index 00000000..6fa11eee --- /dev/null +++ b/proto/platform/events/v1/subscriptions.platform.pb.gw.go @@ -0,0 +1,389 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: subscriptions.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Subscriptions_Create_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateSubscriptionRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Subscription); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Subscriptions_Create_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateSubscriptionRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Subscription); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Subscriptions_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Subscriptions_List_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SubscriptionFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Subscriptions_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Subscriptions_List_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SubscriptionFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Subscriptions_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Subscriptions_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client SubscriptionsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteSubscriptionRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Subscriptions_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server SubscriptionsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteSubscriptionRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterSubscriptionsHandlerServer registers the http handlers for service Subscriptions to "mux". +// UnaryRPC :call SubscriptionsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSubscriptionsHandlerFromEndpoint instead. +func RegisterSubscriptionsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SubscriptionsServer) error { + + mux.Handle("POST", pattern_Subscriptions_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/Create", runtime.WithHTTPPathPattern("/events/v1/subscriptions/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Subscriptions_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Subscriptions_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Subscriptions_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/List", runtime.WithHTTPPathPattern("/events/v1/subscriptions")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Subscriptions_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Subscriptions_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Subscriptions_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/Delete", runtime.WithHTTPPathPattern("/events/v1/subscriptions/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Subscriptions_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Subscriptions_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterSubscriptionsHandlerFromEndpoint is same as RegisterSubscriptionsHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterSubscriptionsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterSubscriptionsHandler(ctx, mux, conn) +} + +// RegisterSubscriptionsHandler registers the http handlers for service Subscriptions to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterSubscriptionsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterSubscriptionsHandlerClient(ctx, mux, NewSubscriptionsClient(conn)) +} + +// RegisterSubscriptionsHandlerClient registers the http handlers for service Subscriptions +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SubscriptionsClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SubscriptionsClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "SubscriptionsClient" to call the correct interceptors. +func RegisterSubscriptionsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SubscriptionsClient) error { + + mux.Handle("POST", pattern_Subscriptions_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/Create", runtime.WithHTTPPathPattern("/events/v1/subscriptions/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Subscriptions_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Subscriptions_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Subscriptions_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/List", runtime.WithHTTPPathPattern("/events/v1/subscriptions")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Subscriptions_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Subscriptions_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Subscriptions_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.events.Subscriptions/Delete", runtime.WithHTTPPathPattern("/events/v1/subscriptions/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Subscriptions_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Subscriptions_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Subscriptions_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"events", "v1", "subscriptions", "parent_id"}, "")) + + pattern_Subscriptions_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"events", "v1", "subscriptions"}, "")) + + pattern_Subscriptions_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"events", "v1", "subscriptions", "id"}, "")) +) + +var ( + forward_Subscriptions_Create_0 = runtime.ForwardResponseMessage + + forward_Subscriptions_List_0 = runtime.ForwardResponseMessage + + forward_Subscriptions_Delete_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/events/v1/subscriptions.platform.proto b/proto/platform/events/v1/subscriptions.platform.proto new file mode 100644 index 00000000..c105890b --- /dev/null +++ b/proto/platform/events/v1/subscriptions.platform.proto @@ -0,0 +1,92 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/events/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.events.v1"; +option java_outer_classname = "PlatformEventsSubscriptionProto"; + +package chainguard.platform.events; + +import "google/protobuf/empty.proto"; +import "google/api/annotations.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Subscriptions { + rpc Create(CreateSubscriptionRequest) returns (Subscription) { + option (google.api.http) = { + post: "/events/v1/subscriptions/{parent_id=**}" + body: "subscription" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_EVENTS_SUBSCRIPTION_CREATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.events.subscription.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc List(SubscriptionFilter) returns (SubscriptionList) { + option (google.api.http) = { + get: "/events/v1/subscriptions" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_EVENTS_SUBSCRIPTION_LIST] + unscoped: true + } + }; + } + + rpc Delete(DeleteSubscriptionRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/events/v1/subscriptions/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_EVENTS_SUBSCRIPTION_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.events.subscription.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } +} + +message CreateSubscriptionRequest { + // parent_id, The Group UIDP path under which the new subscription is associated. + string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; + // Subscription is the subscription to create; + Subscription subscription = 2; +} + +message Subscription { + // id is identifier of this specific subscription. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + // sink is the address to which events shall be delivered using the selected protocol. + string sink = 2; +} + +message SubscriptionList { + repeated Subscription items = 1; +} + +message SubscriptionFilter { + // id is the exact UIDP of the record. + string id = 1; + + // uidp filers records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 2; +} + +message DeleteSubscriptionRequest { + // id is the exact UIDP of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} diff --git a/proto/platform/events/v1/subscriptions.platform_grpc.pb.go b/proto/platform/events/v1/subscriptions.platform_grpc.pb.go new file mode 100644 index 00000000..54ba9058 --- /dev/null +++ b/proto/platform/events/v1/subscriptions.platform_grpc.pb.go @@ -0,0 +1,184 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: subscriptions.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Subscriptions_Create_FullMethodName = "/chainguard.platform.events.Subscriptions/Create" + Subscriptions_List_FullMethodName = "/chainguard.platform.events.Subscriptions/List" + Subscriptions_Delete_FullMethodName = "/chainguard.platform.events.Subscriptions/Delete" +) + +// SubscriptionsClient is the client API for Subscriptions service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SubscriptionsClient interface { + Create(ctx context.Context, in *CreateSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) + List(ctx context.Context, in *SubscriptionFilter, opts ...grpc.CallOption) (*SubscriptionList, error) + Delete(ctx context.Context, in *DeleteSubscriptionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) +} + +type subscriptionsClient struct { + cc grpc.ClientConnInterface +} + +func NewSubscriptionsClient(cc grpc.ClientConnInterface) SubscriptionsClient { + return &subscriptionsClient{cc} +} + +func (c *subscriptionsClient) Create(ctx context.Context, in *CreateSubscriptionRequest, opts ...grpc.CallOption) (*Subscription, error) { + out := new(Subscription) + err := c.cc.Invoke(ctx, Subscriptions_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriptionsClient) List(ctx context.Context, in *SubscriptionFilter, opts ...grpc.CallOption) (*SubscriptionList, error) { + out := new(SubscriptionList) + err := c.cc.Invoke(ctx, Subscriptions_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *subscriptionsClient) Delete(ctx context.Context, in *DeleteSubscriptionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, Subscriptions_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SubscriptionsServer is the server API for Subscriptions service. +// All implementations must embed UnimplementedSubscriptionsServer +// for forward compatibility +type SubscriptionsServer interface { + Create(context.Context, *CreateSubscriptionRequest) (*Subscription, error) + List(context.Context, *SubscriptionFilter) (*SubscriptionList, error) + Delete(context.Context, *DeleteSubscriptionRequest) (*emptypb.Empty, error) + mustEmbedUnimplementedSubscriptionsServer() +} + +// UnimplementedSubscriptionsServer must be embedded to have forward compatible implementations. +type UnimplementedSubscriptionsServer struct { +} + +func (UnimplementedSubscriptionsServer) Create(context.Context, *CreateSubscriptionRequest) (*Subscription, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedSubscriptionsServer) List(context.Context, *SubscriptionFilter) (*SubscriptionList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedSubscriptionsServer) Delete(context.Context, *DeleteSubscriptionRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedSubscriptionsServer) mustEmbedUnimplementedSubscriptionsServer() {} + +// UnsafeSubscriptionsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SubscriptionsServer will +// result in compilation errors. +type UnsafeSubscriptionsServer interface { + mustEmbedUnimplementedSubscriptionsServer() +} + +func RegisterSubscriptionsServer(s grpc.ServiceRegistrar, srv SubscriptionsServer) { + s.RegisterService(&Subscriptions_ServiceDesc, srv) +} + +func _Subscriptions_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSubscriptionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriptionsServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Subscriptions_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriptionsServer).Create(ctx, req.(*CreateSubscriptionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriptions_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SubscriptionFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriptionsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Subscriptions_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriptionsServer).List(ctx, req.(*SubscriptionFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Subscriptions_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSubscriptionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SubscriptionsServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Subscriptions_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SubscriptionsServer).Delete(ctx, req.(*DeleteSubscriptionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Subscriptions_ServiceDesc is the grpc.ServiceDesc for Subscriptions service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Subscriptions_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.events.Subscriptions", + HandlerType: (*SubscriptionsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _Subscriptions_Create_Handler, + }, + { + MethodName: "List", + Handler: _Subscriptions_List_Handler, + }, + { + MethodName: "Delete", + Handler: _Subscriptions_Delete_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "subscriptions.platform.proto", +} diff --git a/proto/platform/iam/v1/account_associations.platform.event.go b/proto/platform/iam/v1/account_associations.platform.event.go new file mode 100644 index 00000000..c336f7e9 --- /dev/null +++ b/proto/platform/iam/v1/account_associations.platform.event.go @@ -0,0 +1,41 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *AccountAssociations) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return x.GetGroup(), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *AccountAssociations) CloudEventsSubject() string { + return x.Group +} + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *DeleteAccountAssociationsRequest) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return x.GetGroup(), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *DeleteAccountAssociationsRequest) CloudEventsSubject() string { + return x.Group +} + +// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.Redact. +func (x *DeleteAccountAssociationsRequest) CloudEventsRedact() interface{} { + return nil +} diff --git a/proto/platform/iam/v1/account_associations.platform.pb.go b/proto/platform/iam/v1/account_associations.platform.pb.go new file mode 100644 index 00000000..3be34195 --- /dev/null +++ b/proto/platform/iam/v1/account_associations.platform.pb.go @@ -0,0 +1,1120 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: account_associations.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type AccountAssociationsStatus_State int32 + +const ( + AccountAssociationsStatus_UNKNOWN AccountAssociationsStatus_State = 0 + AccountAssociationsStatus_Ready AccountAssociationsStatus_State = 1 + AccountAssociationsStatus_NotReady AccountAssociationsStatus_State = 2 +) + +// Enum value maps for AccountAssociationsStatus_State. +var ( + AccountAssociationsStatus_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "Ready", + 2: "NotReady", + } + AccountAssociationsStatus_State_value = map[string]int32{ + "UNKNOWN": 0, + "Ready": 1, + "NotReady": 2, + } +) + +func (x AccountAssociationsStatus_State) Enum() *AccountAssociationsStatus_State { + p := new(AccountAssociationsStatus_State) + *p = x + return p +} + +func (x AccountAssociationsStatus_State) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AccountAssociationsStatus_State) Descriptor() protoreflect.EnumDescriptor { + return file_account_associations_platform_proto_enumTypes[0].Descriptor() +} + +func (AccountAssociationsStatus_State) Type() protoreflect.EnumType { + return &file_account_associations_platform_proto_enumTypes[0] +} + +func (x AccountAssociationsStatus_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AccountAssociationsStatus_State.Descriptor instead. +func (AccountAssociationsStatus_State) EnumDescriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{4, 0} +} + +type AccountAssociationsCheckRequest_AccountType int32 + +const ( + AccountAssociationsCheckRequest_UNKNOWN AccountAssociationsCheckRequest_AccountType = 0 + AccountAssociationsCheckRequest_GOOGLE AccountAssociationsCheckRequest_AccountType = 1 + AccountAssociationsCheckRequest_AMAZON AccountAssociationsCheckRequest_AccountType = 2 +) + +// Enum value maps for AccountAssociationsCheckRequest_AccountType. +var ( + AccountAssociationsCheckRequest_AccountType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "GOOGLE", + 2: "AMAZON", + } + AccountAssociationsCheckRequest_AccountType_value = map[string]int32{ + "UNKNOWN": 0, + "GOOGLE": 1, + "AMAZON": 2, + } +) + +func (x AccountAssociationsCheckRequest_AccountType) Enum() *AccountAssociationsCheckRequest_AccountType { + p := new(AccountAssociationsCheckRequest_AccountType) + *p = x + return p +} + +func (x AccountAssociationsCheckRequest_AccountType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AccountAssociationsCheckRequest_AccountType) Descriptor() protoreflect.EnumDescriptor { + return file_account_associations_platform_proto_enumTypes[1].Descriptor() +} + +func (AccountAssociationsCheckRequest_AccountType) Type() protoreflect.EnumType { + return &file_account_associations_platform_proto_enumTypes[1] +} + +func (x AccountAssociationsCheckRequest_AccountType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AccountAssociationsCheckRequest_AccountType.Descriptor instead. +func (AccountAssociationsCheckRequest_AccountType) EnumDescriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{5, 0} +} + +type AccountAssociations struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // group is the group with which this account information is associated. + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // amazon holds information associating an Amazon account with the group. + Amazon *AccountAssociations_Amazon `protobuf:"bytes,2,opt,name=amazon,proto3" json:"amazon,omitempty"` + // google holds information associating a Google project with the group. + Google *AccountAssociations_Google `protobuf:"bytes,3,opt,name=google,proto3" json:"google,omitempty"` + // github holds information associating a GitHub installation with the group. + // Note: this AccountAssociation type is EXPERIMENTAL. + Github *AccountAssociations_GitHubInstallation `protobuf:"bytes,6,opt,name=github,proto3" json:"github,omitempty"` + Chainguard *AccountAssociations_Chainguard `protobuf:"bytes,7,opt,name=chainguard,proto3" json:"chainguard,omitempty"` + // name of the association. + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + // a short description of this association. + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *AccountAssociations) Reset() { + *x = AccountAssociations{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountAssociations) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountAssociations) ProtoMessage() {} + +func (x *AccountAssociations) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountAssociations.ProtoReflect.Descriptor instead. +func (*AccountAssociations) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *AccountAssociations) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *AccountAssociations) GetAmazon() *AccountAssociations_Amazon { + if x != nil { + return x.Amazon + } + return nil +} + +func (x *AccountAssociations) GetGoogle() *AccountAssociations_Google { + if x != nil { + return x.Google + } + return nil +} + +func (x *AccountAssociations) GetGithub() *AccountAssociations_GitHubInstallation { + if x != nil { + return x.Github + } + return nil +} + +func (x *AccountAssociations) GetChainguard() *AccountAssociations_Chainguard { + if x != nil { + return x.Chainguard + } + return nil +} + +func (x *AccountAssociations) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AccountAssociations) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +type AccountAssociationsList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*AccountAssociations `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *AccountAssociationsList) Reset() { + *x = AccountAssociationsList{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountAssociationsList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountAssociationsList) ProtoMessage() {} + +func (x *AccountAssociationsList) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountAssociationsList.ProtoReflect.Descriptor instead. +func (*AccountAssociationsList) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *AccountAssociationsList) GetItems() []*AccountAssociations { + if x != nil { + return x.Items + } + return nil +} + +type AccountAssociationsFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // group is the exact UIDP of the group whose associations we want to list. + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // name is the exact name of the association. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *AccountAssociationsFilter) Reset() { + *x = AccountAssociationsFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountAssociationsFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountAssociationsFilter) ProtoMessage() {} + +func (x *AccountAssociationsFilter) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountAssociationsFilter.ProtoReflect.Descriptor instead. +func (*AccountAssociationsFilter) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *AccountAssociationsFilter) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *AccountAssociationsFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type DeleteAccountAssociationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // group is the exact UIDP of the group whose associations we want to delete. + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` +} + +func (x *DeleteAccountAssociationsRequest) Reset() { + *x = DeleteAccountAssociationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteAccountAssociationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteAccountAssociationsRequest) ProtoMessage() {} + +func (x *DeleteAccountAssociationsRequest) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_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 DeleteAccountAssociationsRequest.ProtoReflect.Descriptor instead. +func (*DeleteAccountAssociationsRequest) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *DeleteAccountAssociationsRequest) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +type AccountAssociationsStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ready AccountAssociationsStatus_State `protobuf:"varint,1,opt,name=ready,proto3,enum=chainguard.platform.iam.AccountAssociationsStatus_State" json:"ready,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *AccountAssociationsStatus) Reset() { + *x = AccountAssociationsStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountAssociationsStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountAssociationsStatus) ProtoMessage() {} + +func (x *AccountAssociationsStatus) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountAssociationsStatus.ProtoReflect.Descriptor instead. +func (*AccountAssociationsStatus) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *AccountAssociationsStatus) GetReady() AccountAssociationsStatus_State { + if x != nil { + return x.Ready + } + return AccountAssociationsStatus_UNKNOWN +} + +func (x *AccountAssociationsStatus) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *AccountAssociationsStatus) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +type AccountAssociationsCheckRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // group is the exact UIDP of the group whose associations we want to check + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + AccountType AccountAssociationsCheckRequest_AccountType `protobuf:"varint,2,opt,name=account_type,json=accountType,proto3,enum=chainguard.platform.iam.AccountAssociationsCheckRequest_AccountType" json:"account_type,omitempty"` +} + +func (x *AccountAssociationsCheckRequest) Reset() { + *x = AccountAssociationsCheckRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountAssociationsCheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountAssociationsCheckRequest) ProtoMessage() {} + +func (x *AccountAssociationsCheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountAssociationsCheckRequest.ProtoReflect.Descriptor instead. +func (*AccountAssociationsCheckRequest) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *AccountAssociationsCheckRequest) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *AccountAssociationsCheckRequest) GetAccountType() AccountAssociationsCheckRequest_AccountType { + if x != nil { + return x.AccountType + } + return AccountAssociationsCheckRequest_UNKNOWN +} + +type AccountAssociations_Amazon struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Account string `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` +} + +func (x *AccountAssociations_Amazon) Reset() { + *x = AccountAssociations_Amazon{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountAssociations_Amazon) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountAssociations_Amazon) ProtoMessage() {} + +func (x *AccountAssociations_Amazon) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountAssociations_Amazon.ProtoReflect.Descriptor instead. +func (*AccountAssociations_Amazon) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *AccountAssociations_Amazon) GetAccount() string { + if x != nil { + return x.Account + } + return "" +} + +type AccountAssociations_Google struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ProjectId string `protobuf:"bytes,1,opt,name=project_id,json=projectId,proto3" json:"project_id,omitempty"` + ProjectNumber string `protobuf:"bytes,2,opt,name=project_number,json=projectNumber,proto3" json:"project_number,omitempty"` +} + +func (x *AccountAssociations_Google) Reset() { + *x = AccountAssociations_Google{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountAssociations_Google) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountAssociations_Google) ProtoMessage() {} + +func (x *AccountAssociations_Google) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountAssociations_Google.ProtoReflect.Descriptor instead. +func (*AccountAssociations_Google) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *AccountAssociations_Google) GetProjectId() string { + if x != nil { + return x.ProjectId + } + return "" +} + +func (x *AccountAssociations_Google) GetProjectNumber() string { + if x != nil { + return x.ProjectNumber + } + return "" +} + +type AccountAssociations_GitHubInstallation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // GitHub hostname app is associated with. Output only. + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` + // GitHub App ID. Output only. + AppId int64 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + // GitHub App Installation ID. Takes precedence over name. + InstallationId int64 `protobuf:"varint,3,opt,name=installation_id,json=installationId,proto3" json:"installation_id,omitempty"` + // GitHub user/org name the installation is installed on. + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *AccountAssociations_GitHubInstallation) Reset() { + *x = AccountAssociations_GitHubInstallation{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountAssociations_GitHubInstallation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountAssociations_GitHubInstallation) ProtoMessage() {} + +func (x *AccountAssociations_GitHubInstallation) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountAssociations_GitHubInstallation.ProtoReflect.Descriptor instead. +func (*AccountAssociations_GitHubInstallation) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *AccountAssociations_GitHubInstallation) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (x *AccountAssociations_GitHubInstallation) GetAppId() int64 { + if x != nil { + return x.AppId + } + return 0 +} + +func (x *AccountAssociations_GitHubInstallation) GetInstallationId() int64 { + if x != nil { + return x.InstallationId + } + return 0 +} + +func (x *AccountAssociations_GitHubInstallation) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type AccountAssociations_Chainguard struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // service_bindings map from the Chainguard service principal to the + // UIDP of the identity that service should assume. Constraints: + // - The identity must live directly under "group", + // - The identity must be a service_principal, + // - The service_principal of the identity must match the key of this map. + // Note that the key space of this must match the ServicePrincipal enum, + // but the enum type itself cannot be used here because of: + // https://groups.google.com/g/protobuf/c/ikeldBe60eI + ServiceBindings map[string]string `protobuf:"bytes,1,rep,name=service_bindings,json=serviceBindings,proto3" json:"service_bindings,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountAssociations_Chainguard) Reset() { + *x = AccountAssociations_Chainguard{} + if protoimpl.UnsafeEnabled { + mi := &file_account_associations_platform_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountAssociations_Chainguard) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountAssociations_Chainguard) ProtoMessage() {} + +func (x *AccountAssociations_Chainguard) ProtoReflect() protoreflect.Message { + mi := &file_account_associations_platform_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountAssociations_Chainguard.ProtoReflect.Descriptor instead. +func (*AccountAssociations_Chainguard) Descriptor() ([]byte, []int) { + return file_account_associations_platform_proto_rawDescGZIP(), []int{0, 3} +} + +func (x *AccountAssociations_Chainguard) GetServiceBindings() map[string]string { + if x != nil { + return x.ServiceBindings + } + return nil +} + +var File_account_associations_platform_proto protoreflect.FileDescriptor + +var file_account_associations_platform_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1b, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x06, 0x0a, 0x13, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x4b, 0x0a, 0x06, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x12, 0x4b, + 0x0a, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x52, 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x12, 0x57, 0x0a, 0x06, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, + 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x12, 0x57, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x1a, 0x22, 0x0a, 0x06, 0x41, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x4e, 0x0a, 0x06, 0x47, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, + 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x1a, 0x7c, 0x0a, 0x12, 0x47, 0x69, 0x74, 0x48, 0x75, + 0x62, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, + 0x74, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0xc9, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x12, 0x77, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4c, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x42, 0x0a, + 0x14, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x5d, 0x0a, 0x17, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, + 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, + 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x22, 0x45, 0x0a, 0x19, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, + 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x40, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, + 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xcc, 0x01, 0x0a, 0x19, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4e, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, + 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x0a, 0x05, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x09, 0x0a, 0x05, 0x52, 0x65, 0x61, 0x64, 0x79, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, + 0x74, 0x52, 0x65, 0x61, 0x64, 0x79, 0x10, 0x02, 0x22, 0xdc, 0x01, 0x0a, 0x1f, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x67, 0x0a, 0x0c, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x44, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x22, 0x32, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, + 0x4d, 0x41, 0x5a, 0x4f, 0x4e, 0x10, 0x02, 0x32, 0xbc, 0x08, 0x0a, 0x18, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xec, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, + 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x2c, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, + 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x85, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2c, 0x22, 0x27, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xbd, 0x05, 0xc2, 0xf0, 0x8e, 0xfc, + 0x0b, 0x41, 0x0a, 0x36, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0xec, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2c, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x2c, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, + 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x85, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2c, 0x1a, 0x27, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xbe, 0x05, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, + 0x41, 0x0a, 0x36, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x01, 0x12, 0xa0, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, + 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, + 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x69, 0x61, 0x6d, 0x2f, + 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, + 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, + 0x02, 0xbf, 0x05, 0x10, 0x01, 0x12, 0xe0, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x82, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x2a, 0x27, 0x2f, 0x69, + 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, + 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc0, + 0x05, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x41, 0x0a, 0x36, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xbb, 0x01, 0x0a, 0x05, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x12, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, + 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x22, 0x2d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, + 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, + 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, + 0x12, 0x04, 0x0a, 0x02, 0xbf, 0x05, 0x42, 0x75, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x23, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_account_associations_platform_proto_rawDescOnce sync.Once + file_account_associations_platform_proto_rawDescData = file_account_associations_platform_proto_rawDesc +) + +func file_account_associations_platform_proto_rawDescGZIP() []byte { + file_account_associations_platform_proto_rawDescOnce.Do(func() { + file_account_associations_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_account_associations_platform_proto_rawDescData) + }) + return file_account_associations_platform_proto_rawDescData +} + +var file_account_associations_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_account_associations_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_account_associations_platform_proto_goTypes = []interface{}{ + (AccountAssociationsStatus_State)(0), // 0: chainguard.platform.iam.AccountAssociationsStatus.State + (AccountAssociationsCheckRequest_AccountType)(0), // 1: chainguard.platform.iam.AccountAssociationsCheckRequest.AccountType + (*AccountAssociations)(nil), // 2: chainguard.platform.iam.AccountAssociations + (*AccountAssociationsList)(nil), // 3: chainguard.platform.iam.AccountAssociationsList + (*AccountAssociationsFilter)(nil), // 4: chainguard.platform.iam.AccountAssociationsFilter + (*DeleteAccountAssociationsRequest)(nil), // 5: chainguard.platform.iam.DeleteAccountAssociationsRequest + (*AccountAssociationsStatus)(nil), // 6: chainguard.platform.iam.AccountAssociationsStatus + (*AccountAssociationsCheckRequest)(nil), // 7: chainguard.platform.iam.AccountAssociationsCheckRequest + (*AccountAssociations_Amazon)(nil), // 8: chainguard.platform.iam.AccountAssociations.Amazon + (*AccountAssociations_Google)(nil), // 9: chainguard.platform.iam.AccountAssociations.Google + (*AccountAssociations_GitHubInstallation)(nil), // 10: chainguard.platform.iam.AccountAssociations.GitHubInstallation + (*AccountAssociations_Chainguard)(nil), // 11: chainguard.platform.iam.AccountAssociations.Chainguard + nil, // 12: chainguard.platform.iam.AccountAssociations.Chainguard.ServiceBindingsEntry + (*emptypb.Empty)(nil), // 13: google.protobuf.Empty +} +var file_account_associations_platform_proto_depIdxs = []int32{ + 8, // 0: chainguard.platform.iam.AccountAssociations.amazon:type_name -> chainguard.platform.iam.AccountAssociations.Amazon + 9, // 1: chainguard.platform.iam.AccountAssociations.google:type_name -> chainguard.platform.iam.AccountAssociations.Google + 10, // 2: chainguard.platform.iam.AccountAssociations.github:type_name -> chainguard.platform.iam.AccountAssociations.GitHubInstallation + 11, // 3: chainguard.platform.iam.AccountAssociations.chainguard:type_name -> chainguard.platform.iam.AccountAssociations.Chainguard + 2, // 4: chainguard.platform.iam.AccountAssociationsList.items:type_name -> chainguard.platform.iam.AccountAssociations + 0, // 5: chainguard.platform.iam.AccountAssociationsStatus.ready:type_name -> chainguard.platform.iam.AccountAssociationsStatus.State + 1, // 6: chainguard.platform.iam.AccountAssociationsCheckRequest.account_type:type_name -> chainguard.platform.iam.AccountAssociationsCheckRequest.AccountType + 12, // 7: chainguard.platform.iam.AccountAssociations.Chainguard.service_bindings:type_name -> chainguard.platform.iam.AccountAssociations.Chainguard.ServiceBindingsEntry + 2, // 8: chainguard.platform.iam.GroupAccountAssociations.Create:input_type -> chainguard.platform.iam.AccountAssociations + 2, // 9: chainguard.platform.iam.GroupAccountAssociations.Update:input_type -> chainguard.platform.iam.AccountAssociations + 4, // 10: chainguard.platform.iam.GroupAccountAssociations.List:input_type -> chainguard.platform.iam.AccountAssociationsFilter + 5, // 11: chainguard.platform.iam.GroupAccountAssociations.Delete:input_type -> chainguard.platform.iam.DeleteAccountAssociationsRequest + 7, // 12: chainguard.platform.iam.GroupAccountAssociations.Check:input_type -> chainguard.platform.iam.AccountAssociationsCheckRequest + 2, // 13: chainguard.platform.iam.GroupAccountAssociations.Create:output_type -> chainguard.platform.iam.AccountAssociations + 2, // 14: chainguard.platform.iam.GroupAccountAssociations.Update:output_type -> chainguard.platform.iam.AccountAssociations + 3, // 15: chainguard.platform.iam.GroupAccountAssociations.List:output_type -> chainguard.platform.iam.AccountAssociationsList + 13, // 16: chainguard.platform.iam.GroupAccountAssociations.Delete:output_type -> google.protobuf.Empty + 6, // 17: chainguard.platform.iam.GroupAccountAssociations.Check:output_type -> chainguard.platform.iam.AccountAssociationsStatus + 13, // [13:18] is the sub-list for method output_type + 8, // [8:13] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_account_associations_platform_proto_init() } +func file_account_associations_platform_proto_init() { + if File_account_associations_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_account_associations_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountAssociations); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_account_associations_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountAssociationsList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_account_associations_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountAssociationsFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_account_associations_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteAccountAssociationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_account_associations_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountAssociationsStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_account_associations_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountAssociationsCheckRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_account_associations_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountAssociations_Amazon); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_account_associations_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountAssociations_Google); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_account_associations_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountAssociations_GitHubInstallation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_account_associations_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountAssociations_Chainguard); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_account_associations_platform_proto_rawDesc, + NumEnums: 2, + NumMessages: 11, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_account_associations_platform_proto_goTypes, + DependencyIndexes: file_account_associations_platform_proto_depIdxs, + EnumInfos: file_account_associations_platform_proto_enumTypes, + MessageInfos: file_account_associations_platform_proto_msgTypes, + }.Build() + File_account_associations_platform_proto = out.File + file_account_associations_platform_proto_rawDesc = nil + file_account_associations_platform_proto_goTypes = nil + file_account_associations_platform_proto_depIdxs = nil +} diff --git a/proto/platform/iam/v1/account_associations.platform.pb.gw.go b/proto/platform/iam/v1/account_associations.platform.pb.gw.go new file mode 100644 index 00000000..090915e1 --- /dev/null +++ b/proto/platform/iam/v1/account_associations.platform.pb.gw.go @@ -0,0 +1,623 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: account_associations.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_GroupAccountAssociations_Create_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountAssociations + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GroupAccountAssociations_Create_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountAssociations + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +func request_GroupAccountAssociations_Update_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountAssociations + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GroupAccountAssociations_Update_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountAssociations + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_GroupAccountAssociations_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_GroupAccountAssociations_List_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountAssociationsFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GroupAccountAssociations_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GroupAccountAssociations_List_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountAssociationsFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GroupAccountAssociations_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_GroupAccountAssociations_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteAccountAssociationsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GroupAccountAssociations_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteAccountAssociationsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +func request_GroupAccountAssociations_Check_0(ctx context.Context, marshaler runtime.Marshaler, client GroupAccountAssociationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountAssociationsCheckRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := client.Check(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GroupAccountAssociations_Check_0(ctx context.Context, marshaler runtime.Marshaler, server GroupAccountAssociationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountAssociationsCheckRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := server.Check(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterGroupAccountAssociationsHandlerServer registers the http handlers for service GroupAccountAssociations to "mux". +// UnaryRPC :call GroupAccountAssociationsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterGroupAccountAssociationsHandlerFromEndpoint instead. +func RegisterGroupAccountAssociationsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GroupAccountAssociationsServer) error { + + mux.Handle("POST", pattern_GroupAccountAssociations_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Create", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GroupAccountAssociations_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_GroupAccountAssociations_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Update", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GroupAccountAssociations_Update_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_GroupAccountAssociations_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/List", runtime.WithHTTPPathPattern("/iam/v1/account_associations")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GroupAccountAssociations_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_GroupAccountAssociations_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Delete", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GroupAccountAssociations_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_GroupAccountAssociations_Check_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Check", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}:check")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GroupAccountAssociations_Check_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_Check_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterGroupAccountAssociationsHandlerFromEndpoint is same as RegisterGroupAccountAssociationsHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterGroupAccountAssociationsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterGroupAccountAssociationsHandler(ctx, mux, conn) +} + +// RegisterGroupAccountAssociationsHandler registers the http handlers for service GroupAccountAssociations to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterGroupAccountAssociationsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterGroupAccountAssociationsHandlerClient(ctx, mux, NewGroupAccountAssociationsClient(conn)) +} + +// RegisterGroupAccountAssociationsHandlerClient registers the http handlers for service GroupAccountAssociations +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "GroupAccountAssociationsClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "GroupAccountAssociationsClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "GroupAccountAssociationsClient" to call the correct interceptors. +func RegisterGroupAccountAssociationsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client GroupAccountAssociationsClient) error { + + mux.Handle("POST", pattern_GroupAccountAssociations_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Create", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GroupAccountAssociations_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_GroupAccountAssociations_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Update", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GroupAccountAssociations_Update_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_GroupAccountAssociations_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/List", runtime.WithHTTPPathPattern("/iam/v1/account_associations")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GroupAccountAssociations_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_GroupAccountAssociations_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Delete", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GroupAccountAssociations_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_GroupAccountAssociations_Check_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupAccountAssociations/Check", runtime.WithHTTPPathPattern("/iam/v1/account_associations/{group=**}:check")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GroupAccountAssociations_Check_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupAccountAssociations_Check_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_GroupAccountAssociations_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "account_associations", "group"}, "")) + + pattern_GroupAccountAssociations_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "account_associations", "group"}, "")) + + pattern_GroupAccountAssociations_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "account_associations"}, "")) + + pattern_GroupAccountAssociations_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "account_associations", "group"}, "")) + + pattern_GroupAccountAssociations_Check_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "account_associations", "group"}, "check")) +) + +var ( + forward_GroupAccountAssociations_Create_0 = runtime.ForwardResponseMessage + + forward_GroupAccountAssociations_Update_0 = runtime.ForwardResponseMessage + + forward_GroupAccountAssociations_List_0 = runtime.ForwardResponseMessage + + forward_GroupAccountAssociations_Delete_0 = runtime.ForwardResponseMessage + + forward_GroupAccountAssociations_Check_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/iam/v1/account_associations.platform.proto b/proto/platform/iam/v1/account_associations.platform.proto new file mode 100644 index 00000000..b6ca2756 --- /dev/null +++ b/proto/platform/iam/v1/account_associations.platform.proto @@ -0,0 +1,192 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.iam.v1"; +option java_outer_classname = "PlatformIAMAccountAssociationsProto"; + +package chainguard.platform.iam; + +import "google/protobuf/empty.proto"; +import "google/api/annotations.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; + +service GroupAccountAssociations { + rpc Create(AccountAssociations) returns (AccountAssociations) { + option (google.api.http) = { + post: "/iam/v1/account_associations/{group=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_CREATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.account_associations.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Update(AccountAssociations) returns (AccountAssociations) { + option (google.api.http) = { + put: "/iam/v1/account_associations/{group=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_UPDATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.account_associations.updated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc List(AccountAssociationsFilter) returns (AccountAssociationsList) { + option (google.api.http) = { + get: "/iam/v1/account_associations" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST] + unscoped: true + } + }; + } + + rpc Delete(DeleteAccountAssociationsRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/iam/v1/account_associations/{group=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.account_associations.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Check(AccountAssociationsCheckRequest) returns (AccountAssociationsStatus) { + option (google.api.http) = { + post: "/iam/v1/account_associations/{group=**}:check" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ACCOUNT_ASSOCIATIONS_LIST] + } + }; + } +} + +message AccountAssociations { + // group is the group with which this account information is associated. + string group = 1 [(chainguard.annotations.iam_scope) = true]; + + // amazon holds information associating an Amazon account with the group. + Amazon amazon = 2; + + // google holds information associating a Google project with the group. + Google google = 3; + + // github holds information associating a GitHub installation with the group. + // Note: this AccountAssociation type is EXPERIMENTAL. + GitHubInstallation github = 6; + + Chainguard chainguard = 7; + + // name of the association. + string name = 4; + + // a short description of this association. + string description = 5; + + // TODO(#617): Azure + + message Amazon { + string account = 1; + } + + message Google { + string project_id = 1; + string project_number = 2; + } + + message GitHubInstallation { + // GitHub hostname app is associated with. Output only. + string host = 1; + + // GitHub App ID. Output only. + int64 app_id = 2; + + // GitHub App Installation ID. Takes precedence over name. + int64 installation_id = 3; + + // GitHub user/org name the installation is installed on. + string name = 4; + } + + message Chainguard { + // service_bindings map from the Chainguard service principal to the + // UIDP of the identity that service should assume. Constraints: + // - The identity must live directly under "group", + // - The identity must be a service_principal, + // - The service_principal of the identity must match the key of this map. + // Note that the key space of this must match the ServicePrincipal enum, + // but the enum type itself cannot be used here because of: + // https://groups.google.com/g/protobuf/c/ikeldBe60eI + map service_bindings = 1; + } + + // next id: 8 +} + +message AccountAssociationsList { + repeated AccountAssociations items = 1; +} + +message AccountAssociationsFilter { + // group is the exact UIDP of the group whose associations we want to list. + string group = 1; + // name is the exact name of the association. + string name = 2; +} + +message DeleteAccountAssociationsRequest { + // group is the exact UIDP of the group whose associations we want to delete. + string group = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message AccountAssociationsStatus { + enum State { + UNKNOWN = 0; + Ready = 1; + NotReady = 2; + } + + State ready = 1; + string reason = 2; + string message = 3; +} + +message AccountAssociationsCheckRequest { + // group is the exact UIDP of the group whose associations we want to check + string group = 1 [(chainguard.annotations.iam_scope) = true]; + + AccountType account_type = 2; + + enum AccountType { + UNKNOWN = 0; + GOOGLE = 1; + AMAZON = 2; + } +} diff --git a/proto/platform/iam/v1/account_associations.platform_grpc.pb.go b/proto/platform/iam/v1/account_associations.platform_grpc.pb.go new file mode 100644 index 00000000..195b4de6 --- /dev/null +++ b/proto/platform/iam/v1/account_associations.platform_grpc.pb.go @@ -0,0 +1,259 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: account_associations.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + GroupAccountAssociations_Create_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/Create" + GroupAccountAssociations_Update_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/Update" + GroupAccountAssociations_List_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/List" + GroupAccountAssociations_Delete_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/Delete" + GroupAccountAssociations_Check_FullMethodName = "/chainguard.platform.iam.GroupAccountAssociations/Check" +) + +// GroupAccountAssociationsClient is the client API for GroupAccountAssociations service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type GroupAccountAssociationsClient interface { + Create(ctx context.Context, in *AccountAssociations, opts ...grpc.CallOption) (*AccountAssociations, error) + Update(ctx context.Context, in *AccountAssociations, opts ...grpc.CallOption) (*AccountAssociations, error) + List(ctx context.Context, in *AccountAssociationsFilter, opts ...grpc.CallOption) (*AccountAssociationsList, error) + Delete(ctx context.Context, in *DeleteAccountAssociationsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Check(ctx context.Context, in *AccountAssociationsCheckRequest, opts ...grpc.CallOption) (*AccountAssociationsStatus, error) +} + +type groupAccountAssociationsClient struct { + cc grpc.ClientConnInterface +} + +func NewGroupAccountAssociationsClient(cc grpc.ClientConnInterface) GroupAccountAssociationsClient { + return &groupAccountAssociationsClient{cc} +} + +func (c *groupAccountAssociationsClient) Create(ctx context.Context, in *AccountAssociations, opts ...grpc.CallOption) (*AccountAssociations, error) { + out := new(AccountAssociations) + err := c.cc.Invoke(ctx, GroupAccountAssociations_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupAccountAssociationsClient) Update(ctx context.Context, in *AccountAssociations, opts ...grpc.CallOption) (*AccountAssociations, error) { + out := new(AccountAssociations) + err := c.cc.Invoke(ctx, GroupAccountAssociations_Update_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupAccountAssociationsClient) List(ctx context.Context, in *AccountAssociationsFilter, opts ...grpc.CallOption) (*AccountAssociationsList, error) { + out := new(AccountAssociationsList) + err := c.cc.Invoke(ctx, GroupAccountAssociations_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupAccountAssociationsClient) Delete(ctx context.Context, in *DeleteAccountAssociationsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, GroupAccountAssociations_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupAccountAssociationsClient) Check(ctx context.Context, in *AccountAssociationsCheckRequest, opts ...grpc.CallOption) (*AccountAssociationsStatus, error) { + out := new(AccountAssociationsStatus) + err := c.cc.Invoke(ctx, GroupAccountAssociations_Check_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// GroupAccountAssociationsServer is the server API for GroupAccountAssociations service. +// All implementations must embed UnimplementedGroupAccountAssociationsServer +// for forward compatibility +type GroupAccountAssociationsServer interface { + Create(context.Context, *AccountAssociations) (*AccountAssociations, error) + Update(context.Context, *AccountAssociations) (*AccountAssociations, error) + List(context.Context, *AccountAssociationsFilter) (*AccountAssociationsList, error) + Delete(context.Context, *DeleteAccountAssociationsRequest) (*emptypb.Empty, error) + Check(context.Context, *AccountAssociationsCheckRequest) (*AccountAssociationsStatus, error) + mustEmbedUnimplementedGroupAccountAssociationsServer() +} + +// UnimplementedGroupAccountAssociationsServer must be embedded to have forward compatible implementations. +type UnimplementedGroupAccountAssociationsServer struct { +} + +func (UnimplementedGroupAccountAssociationsServer) Create(context.Context, *AccountAssociations) (*AccountAssociations, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedGroupAccountAssociationsServer) Update(context.Context, *AccountAssociations) (*AccountAssociations, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedGroupAccountAssociationsServer) List(context.Context, *AccountAssociationsFilter) (*AccountAssociationsList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedGroupAccountAssociationsServer) Delete(context.Context, *DeleteAccountAssociationsRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedGroupAccountAssociationsServer) Check(context.Context, *AccountAssociationsCheckRequest) (*AccountAssociationsStatus, error) { + return nil, status.Errorf(codes.Unimplemented, "method Check not implemented") +} +func (UnimplementedGroupAccountAssociationsServer) mustEmbedUnimplementedGroupAccountAssociationsServer() { +} + +// UnsafeGroupAccountAssociationsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to GroupAccountAssociationsServer will +// result in compilation errors. +type UnsafeGroupAccountAssociationsServer interface { + mustEmbedUnimplementedGroupAccountAssociationsServer() +} + +func RegisterGroupAccountAssociationsServer(s grpc.ServiceRegistrar, srv GroupAccountAssociationsServer) { + s.RegisterService(&GroupAccountAssociations_ServiceDesc, srv) +} + +func _GroupAccountAssociations_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AccountAssociations) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupAccountAssociationsServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GroupAccountAssociations_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupAccountAssociationsServer).Create(ctx, req.(*AccountAssociations)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupAccountAssociations_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AccountAssociations) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupAccountAssociationsServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GroupAccountAssociations_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupAccountAssociationsServer).Update(ctx, req.(*AccountAssociations)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupAccountAssociations_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AccountAssociationsFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupAccountAssociationsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GroupAccountAssociations_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupAccountAssociationsServer).List(ctx, req.(*AccountAssociationsFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupAccountAssociations_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteAccountAssociationsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupAccountAssociationsServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GroupAccountAssociations_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupAccountAssociationsServer).Delete(ctx, req.(*DeleteAccountAssociationsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupAccountAssociations_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AccountAssociationsCheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupAccountAssociationsServer).Check(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GroupAccountAssociations_Check_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupAccountAssociationsServer).Check(ctx, req.(*AccountAssociationsCheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// GroupAccountAssociations_ServiceDesc is the grpc.ServiceDesc for GroupAccountAssociations service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var GroupAccountAssociations_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.iam.GroupAccountAssociations", + HandlerType: (*GroupAccountAssociationsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _GroupAccountAssociations_Create_Handler, + }, + { + MethodName: "Update", + Handler: _GroupAccountAssociations_Update_Handler, + }, + { + MethodName: "List", + Handler: _GroupAccountAssociations_List_Handler, + }, + { + MethodName: "Delete", + Handler: _GroupAccountAssociations_Delete_Handler, + }, + { + MethodName: "Check", + Handler: _GroupAccountAssociations_Check_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "account_associations.platform.proto", +} diff --git a/proto/platform/iam/v1/clients.go b/proto/platform/iam/v1/clients.go new file mode 100644 index 00000000..1e1986c7 --- /dev/null +++ b/proto/platform/iam/v1/clients.go @@ -0,0 +1,179 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "context" + "fmt" + "net/url" + "time" + + delegate "chainguard.dev/go-grpc-kit/pkg/options" + "github.com/chainguard-dev/clog" + "google.golang.org/grpc" + + "chainguard.dev/sdk/auth" + events "chainguard.dev/sdk/proto/platform/events/v1" +) + +type Clients interface { + Groups() GroupsClient + GroupInvites() GroupInvitesClient + Roles() RolesClient + RoleBindings() RoleBindingsClient + + Identities() IdentitiesClient + DeprecatedIdentities() events.IdentitiesClient + IdentityProviders() IdentityProvidersClient + + AccountAssociations() GroupAccountAssociationsClient + + Subscriptions() events.SubscriptionsClient + + Policies() PoliciesClient + + Sigstore() SigstoreServiceClient + + Close() error +} + +func NewClients(ctx context.Context, iamURL string, token string) (Clients, error) { + iamURI, err := url.Parse(iamURL) + if err != nil { + return nil, fmt.Errorf("failed to parse iam service address, must be a url: %w", err) + } + + target, opts := delegate.GRPCOptions(*iamURI) + + // TODO: we may want to require transport security at some future point. + if cred := auth.NewFromToken(ctx, token, false); cred != nil { + opts = append(opts, grpc.WithPerRPCCredentials(cred)) + } else { + clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") + } + + var cancel context.CancelFunc + if _, timeoutSet := ctx.Deadline(); !timeoutSet { + ctx, cancel = context.WithTimeout(ctx, 300*time.Second) + defer cancel() + } + conn, err := grpc.DialContext(ctx, target, opts...) + if err != nil { + return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + } + + return &clients{ + group: NewGroupsClient(conn), + groupInvite: NewGroupInvitesClient(conn), + role: NewRolesClient(conn), + roleBinding: NewRoleBindingsClient(conn), + identities: NewIdentitiesClient(conn), + deprecatedIdentities: events.NewIdentitiesClient(conn), + identityProviders: NewIdentityProvidersClient(conn), + + accountAssociations: NewGroupAccountAssociationsClient(conn), + + subscription: events.NewSubscriptionsClient(conn), + + policy: NewPoliciesClient(conn), + + sigstore: NewSigstoreServiceClient(conn), + + conn: conn, + }, nil +} + +func NewClientsFromConnection(conn *grpc.ClientConn) Clients { + return &clients{ + group: NewGroupsClient(conn), + groupInvite: NewGroupInvitesClient(conn), + role: NewRolesClient(conn), + roleBinding: NewRoleBindingsClient(conn), + identities: NewIdentitiesClient(conn), + deprecatedIdentities: events.NewIdentitiesClient(conn), + identityProviders: NewIdentityProvidersClient(conn), + + accountAssociations: NewGroupAccountAssociationsClient(conn), + + subscription: events.NewSubscriptionsClient(conn), + + policy: NewPoliciesClient(conn), + sigstore: NewSigstoreServiceClient(conn), + + // conn is not set, this client struct does not own closing it. + } +} + +type clients struct { + group GroupsClient + groupInvite GroupInvitesClient + role RolesClient + roleBinding RoleBindingsClient + identities IdentitiesClient + deprecatedIdentities events.IdentitiesClient + identityProviders IdentityProvidersClient + + accountAssociations GroupAccountAssociationsClient + + subscription events.SubscriptionsClient + + policy PoliciesClient + + sigstore SigstoreServiceClient + + conn *grpc.ClientConn +} + +func (c *clients) Groups() GroupsClient { + return c.group +} + +func (c *clients) GroupInvites() GroupInvitesClient { + return c.groupInvite +} + +func (c *clients) Roles() RolesClient { + return c.role +} + +func (c *clients) RoleBindings() RoleBindingsClient { + return c.roleBinding +} + +func (c *clients) Identities() IdentitiesClient { + return c.identities +} + +func (c *clients) DeprecatedIdentities() events.IdentitiesClient { + return c.deprecatedIdentities +} + +func (c *clients) IdentityProviders() IdentityProvidersClient { + return c.identityProviders +} + +func (c *clients) AccountAssociations() GroupAccountAssociationsClient { + return c.accountAssociations +} + +func (c *clients) Subscriptions() events.SubscriptionsClient { + return c.subscription +} + +func (c *clients) Policies() PoliciesClient { + return c.policy +} + +func (c *clients) Sigstore() SigstoreServiceClient { + return c.sigstore +} + +func (c *clients) Close() error { + if c.conn != nil { + return c.conn.Close() + } + return nil +} diff --git a/proto/platform/iam/v1/doc.go b/proto/platform/iam/v1/doc.go new file mode 100644 index 00000000..413894e6 --- /dev/null +++ b/proto/platform/iam/v1/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Generate the proto definitions +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. group.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. group_invites.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. role.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. role_binding.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. identity.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. account_associations.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. policies.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. identity_providers.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. sigstore.platform.proto + +// Package v1 contains the v1 GRPC client and server definitions +// for implementing IAM interactions for the Console. +package v1 diff --git a/proto/platform/iam/v1/group.platform.event.go b/proto/platform/iam/v1/group.platform.event.go new file mode 100644 index 00000000..fba1b291 --- /dev/null +++ b/proto/platform/iam/v1/group.platform.event.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import "chainguard.dev/sdk/uidp" + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *Group) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return x.GetId(), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *Group) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *DeleteGroupRequest) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *DeleteGroupRequest) CloudEventsSubject() string { + return x.GetId() +} diff --git a/proto/platform/iam/v1/group.platform.pb.go b/proto/platform/iam/v1/group.platform.pb.go new file mode 100644 index 00000000..f93c1668 --- /dev/null +++ b/proto/platform/iam/v1/group.platform.pb.go @@ -0,0 +1,570 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: group.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Group struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The group UIDP under which this group resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name, human readable name of group. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // description, human readable of group. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // resource_limits indicate the maximum number of resources allowed for this group by type. + ResourceLimits map[string]int32 `protobuf:"bytes,4,rep,name=resource_limits,json=resourceLimits,proto3" json:"resource_limits,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // verified means we've verified the owners of this organization. Restrictions include: + // - Only organizations (root groups) can be verified + // - Property can only be set by manually by Chainguardians + // - If verified is set, the organizations name field must be globally unique + // - If verified is set the organizations name should be a domain name + Verified bool `protobuf:"varint,5,opt,name=verified,proto3" json:"verified,omitempty"` +} + +func (x *Group) Reset() { + *x = Group{} + if protoimpl.UnsafeEnabled { + mi := &file_group_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Group) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Group) ProtoMessage() {} + +func (x *Group) ProtoReflect() protoreflect.Message { + mi := &file_group_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Group.ProtoReflect.Descriptor instead. +func (*Group) Descriptor() ([]byte, []int) { + return file_group_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Group) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Group) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Group) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Group) GetResourceLimits() map[string]int32 { + if x != nil { + return x.ResourceLimits + } + return nil +} + +func (x *Group) GetVerified() bool { + if x != nil { + return x.Verified + } + return false +} + +type GroupList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Group `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *GroupList) Reset() { + *x = GroupList{} + if protoimpl.UnsafeEnabled { + mi := &file_group_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupList) ProtoMessage() {} + +func (x *GroupList) ProtoReflect() protoreflect.Message { + mi := &file_group_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupList.ProtoReflect.Descriptor instead. +func (*GroupList) Descriptor() ([]byte, []int) { + return file_group_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *GroupList) GetItems() []*Group { + if x != nil { + return x.Items + } + return nil +} + +type GroupFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // uidp filters records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` + // name is the exact name of the record. + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GroupFilter) Reset() { + *x = GroupFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_group_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupFilter) ProtoMessage() {} + +func (x *GroupFilter) ProtoReflect() protoreflect.Message { + mi := &file_group_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupFilter.ProtoReflect.Descriptor instead. +func (*GroupFilter) Descriptor() ([]byte, []int) { + return file_group_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *GroupFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *GroupFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *GroupFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type CreateGroupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // parent, The Group UIDP path under which the new Group resides. + // This is effectively the iam_scope for Create requests, but because + // we also allow users to create new "root" groups, we check the scoping + // manually. Parent is allowed to be a prefix of a UIDP of a Group within + // scope, or the name of a Group in scope. + Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` + // Group to create. + Group *Group `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"` +} + +func (x *CreateGroupRequest) Reset() { + *x = CreateGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_group_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateGroupRequest) ProtoMessage() {} + +func (x *CreateGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_group_platform_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 CreateGroupRequest.ProtoReflect.Descriptor instead. +func (*CreateGroupRequest) Descriptor() ([]byte, []int) { + return file_group_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *CreateGroupRequest) GetParent() string { + if x != nil { + return x.Parent + } + return "" +} + +func (x *CreateGroupRequest) GetGroup() *Group { + if x != nil { + return x.Group + } + return nil +} + +type DeleteGroupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteGroupRequest) Reset() { + *x = DeleteGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_group_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteGroupRequest) ProtoMessage() {} + +func (x *DeleteGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_group_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteGroupRequest.ProtoReflect.Descriptor instead. +func (*DeleteGroupRequest) Descriptor() ([]byte, []int) { + return file_group_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *DeleteGroupRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +var File_group_platform_proto protoreflect.FileDescriptor + +var file_group_platform_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, + 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x91, 0x02, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x16, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, + 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x0f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x69, 0x65, 0x64, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 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, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x41, 0x0a, 0x09, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6d, 0x0a, 0x0b, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, + 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x12, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2c, + 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, 0xab, 0x05, 0x0a, + 0x06, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0xc5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, + 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1a, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, + 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, + 0x2a, 0x2a, 0x7d, 0x3a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x07, + 0x12, 0x05, 0x0a, 0x01, 0x65, 0x10, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x32, 0x0a, 0x27, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, + 0xae, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x1e, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x64, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1b, 0x1a, 0x16, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x05, 0x12, 0x03, 0x0a, 0x01, 0x66, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x32, 0x0a, 0x27, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, + 0x12, 0x75, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x22, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x69, 0x61, 0x6d, + 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x07, + 0x12, 0x05, 0x0a, 0x01, 0x67, 0x10, 0x01, 0x12, 0xb0, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, + 0x16, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, + 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x05, 0x12, 0x03, 0x0a, + 0x01, 0x68, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x32, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, + 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, + 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x67, 0x0a, 0x22, 0x64, 0x65, + 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, + 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, + 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_group_platform_proto_rawDescOnce sync.Once + file_group_platform_proto_rawDescData = file_group_platform_proto_rawDesc +) + +func file_group_platform_proto_rawDescGZIP() []byte { + file_group_platform_proto_rawDescOnce.Do(func() { + file_group_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_group_platform_proto_rawDescData) + }) + return file_group_platform_proto_rawDescData +} + +var file_group_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_group_platform_proto_goTypes = []interface{}{ + (*Group)(nil), // 0: chainguard.platform.iam.Group + (*GroupList)(nil), // 1: chainguard.platform.iam.GroupList + (*GroupFilter)(nil), // 2: chainguard.platform.iam.GroupFilter + (*CreateGroupRequest)(nil), // 3: chainguard.platform.iam.CreateGroupRequest + (*DeleteGroupRequest)(nil), // 4: chainguard.platform.iam.DeleteGroupRequest + nil, // 5: chainguard.platform.iam.Group.ResourceLimitsEntry + (*v1.UIDPFilter)(nil), // 6: chainguard.platform.common.UIDPFilter + (*emptypb.Empty)(nil), // 7: google.protobuf.Empty +} +var file_group_platform_proto_depIdxs = []int32{ + 5, // 0: chainguard.platform.iam.Group.resource_limits:type_name -> chainguard.platform.iam.Group.ResourceLimitsEntry + 0, // 1: chainguard.platform.iam.GroupList.items:type_name -> chainguard.platform.iam.Group + 6, // 2: chainguard.platform.iam.GroupFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 0, // 3: chainguard.platform.iam.CreateGroupRequest.group:type_name -> chainguard.platform.iam.Group + 3, // 4: chainguard.platform.iam.Groups.Create:input_type -> chainguard.platform.iam.CreateGroupRequest + 0, // 5: chainguard.platform.iam.Groups.Update:input_type -> chainguard.platform.iam.Group + 2, // 6: chainguard.platform.iam.Groups.List:input_type -> chainguard.platform.iam.GroupFilter + 4, // 7: chainguard.platform.iam.Groups.Delete:input_type -> chainguard.platform.iam.DeleteGroupRequest + 0, // 8: chainguard.platform.iam.Groups.Create:output_type -> chainguard.platform.iam.Group + 0, // 9: chainguard.platform.iam.Groups.Update:output_type -> chainguard.platform.iam.Group + 1, // 10: chainguard.platform.iam.Groups.List:output_type -> chainguard.platform.iam.GroupList + 7, // 11: chainguard.platform.iam.Groups.Delete:output_type -> google.protobuf.Empty + 8, // [8:12] is the sub-list for method output_type + 4, // [4:8] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_group_platform_proto_init() } +func file_group_platform_proto_init() { + if File_group_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_group_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Group); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_group_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_group_platform_proto_goTypes, + DependencyIndexes: file_group_platform_proto_depIdxs, + MessageInfos: file_group_platform_proto_msgTypes, + }.Build() + File_group_platform_proto = out.File + file_group_platform_proto_rawDesc = nil + file_group_platform_proto_goTypes = nil + file_group_platform_proto_depIdxs = nil +} diff --git a/proto/platform/iam/v1/group.platform.pb.gw.go b/proto/platform/iam/v1/group.platform.pb.gw.go new file mode 100644 index 00000000..7152a1c9 --- /dev/null +++ b/proto/platform/iam/v1/group.platform.pb.gw.go @@ -0,0 +1,506 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: group.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Groups_Create_0(ctx context.Context, marshaler runtime.Marshaler, client GroupsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateGroupRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Group); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent") + } + + protoReq.Parent, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Groups_Create_0(ctx context.Context, marshaler runtime.Marshaler, server GroupsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateGroupRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Group); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent") + } + + protoReq.Parent, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Groups_Update_0(ctx context.Context, marshaler runtime.Marshaler, client GroupsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Group + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Groups_Update_0(ctx context.Context, marshaler runtime.Marshaler, server GroupsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Group + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Groups_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Groups_List_0(ctx context.Context, marshaler runtime.Marshaler, client GroupsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GroupFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Groups_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Groups_List_0(ctx context.Context, marshaler runtime.Marshaler, server GroupsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GroupFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Groups_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Groups_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client GroupsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteGroupRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Groups_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server GroupsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteGroupRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterGroupsHandlerServer registers the http handlers for service Groups to "mux". +// UnaryRPC :call GroupsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterGroupsHandlerFromEndpoint instead. +func RegisterGroupsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GroupsServer) error { + + mux.Handle("POST", pattern_Groups_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Create", runtime.WithHTTPPathPattern("/iam/v1/groups/{parent=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Groups_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Groups_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Groups_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Update", runtime.WithHTTPPathPattern("/iam/v1/groups/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Groups_Update_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Groups_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Groups_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Groups/List", runtime.WithHTTPPathPattern("/iam/v1/groups")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Groups_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Groups_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Groups_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Delete", runtime.WithHTTPPathPattern("/iam/v1/groups/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Groups_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Groups_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterGroupsHandlerFromEndpoint is same as RegisterGroupsHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterGroupsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterGroupsHandler(ctx, mux, conn) +} + +// RegisterGroupsHandler registers the http handlers for service Groups to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterGroupsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterGroupsHandlerClient(ctx, mux, NewGroupsClient(conn)) +} + +// RegisterGroupsHandlerClient registers the http handlers for service Groups +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "GroupsClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "GroupsClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "GroupsClient" to call the correct interceptors. +func RegisterGroupsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client GroupsClient) error { + + mux.Handle("POST", pattern_Groups_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Create", runtime.WithHTTPPathPattern("/iam/v1/groups/{parent=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Groups_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Groups_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Groups_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Update", runtime.WithHTTPPathPattern("/iam/v1/groups/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Groups_Update_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Groups_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Groups_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Groups/List", runtime.WithHTTPPathPattern("/iam/v1/groups")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Groups_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Groups_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Groups_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Groups/Delete", runtime.WithHTTPPathPattern("/iam/v1/groups/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Groups_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Groups_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Groups_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "groups", "parent"}, "")) + + pattern_Groups_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "groups", "id"}, "")) + + pattern_Groups_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "groups"}, "")) + + pattern_Groups_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "groups", "id"}, "")) +) + +var ( + forward_Groups_Create_0 = runtime.ForwardResponseMessage + + forward_Groups_Update_0 = runtime.ForwardResponseMessage + + forward_Groups_List_0 = runtime.ForwardResponseMessage + + forward_Groups_Delete_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/iam/v1/group.platform.proto b/proto/platform/iam/v1/group.platform.proto new file mode 100644 index 00000000..d354c74f --- /dev/null +++ b/proto/platform/iam/v1/group.platform.proto @@ -0,0 +1,127 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.iam.v1"; +option java_outer_classname = "PlatformIAMGroupProto"; + +package chainguard.platform.iam; + +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Groups { + rpc Create(CreateGroupRequest) returns (Group) { + option (google.api.http) = { + post: "/iam/v1/groups/{parent=**}" + body: "group" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_GROUPS_CREATE] + // We treat group creation as unscoped in order + // to allow users to create new root groups. + unscoped: true + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.group.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Update(Group) returns (Group) { + option (google.api.http) = { + put: "/iam/v1/groups/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_GROUPS_UPDATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.group.updated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc List(GroupFilter) returns (GroupList) { + option (google.api.http) = { + get: "/iam/v1/groups" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_GROUPS_LIST] + unscoped: true + } + }; + } + + rpc Delete(DeleteGroupRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/iam/v1/groups/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_GROUPS_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.group.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } +} + +message Group { + // id, The group UIDP under which this group resides. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + // name, human readable name of group. + string name = 2; + // description, human readable of group. + string description = 3; + // resource_limits indicate the maximum number of resources allowed for this group by type. + map resource_limits = 4; + // verified means we've verified the owners of this organization. Restrictions include: + // - Only organizations (root groups) can be verified + // - Property can only be set by manually by Chainguardians + // - If verified is set, the organizations name field must be globally unique + // - If verified is set the organizations name should be a domain name + bool verified = 5; +} + +message GroupList { + repeated Group items = 1; +} + +message GroupFilter { + // id is the exact UID of the record. + string id = 1; + // uidp filters records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 2; + // name is the exact name of the record. + string name = 3; +} + +message CreateGroupRequest { + // parent, The Group UIDP path under which the new Group resides. + // This is effectively the iam_scope for Create requests, but because + // we also allow users to create new "root" groups, we check the scoping + // manually. Parent is allowed to be a prefix of a UIDP of a Group within + // scope, or the name of a Group in scope. + string parent = 1; + // Group to create. + Group group = 2; +} + +message DeleteGroupRequest { + // id is the exact UIDP of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} diff --git a/proto/platform/iam/v1/group.platform_grpc.pb.go b/proto/platform/iam/v1/group.platform_grpc.pb.go new file mode 100644 index 00000000..94c10942 --- /dev/null +++ b/proto/platform/iam/v1/group.platform_grpc.pb.go @@ -0,0 +1,221 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: group.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Groups_Create_FullMethodName = "/chainguard.platform.iam.Groups/Create" + Groups_Update_FullMethodName = "/chainguard.platform.iam.Groups/Update" + Groups_List_FullMethodName = "/chainguard.platform.iam.Groups/List" + Groups_Delete_FullMethodName = "/chainguard.platform.iam.Groups/Delete" +) + +// GroupsClient is the client API for Groups service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type GroupsClient interface { + Create(ctx context.Context, in *CreateGroupRequest, opts ...grpc.CallOption) (*Group, error) + Update(ctx context.Context, in *Group, opts ...grpc.CallOption) (*Group, error) + List(ctx context.Context, in *GroupFilter, opts ...grpc.CallOption) (*GroupList, error) + Delete(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) +} + +type groupsClient struct { + cc grpc.ClientConnInterface +} + +func NewGroupsClient(cc grpc.ClientConnInterface) GroupsClient { + return &groupsClient{cc} +} + +func (c *groupsClient) Create(ctx context.Context, in *CreateGroupRequest, opts ...grpc.CallOption) (*Group, error) { + out := new(Group) + err := c.cc.Invoke(ctx, Groups_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupsClient) Update(ctx context.Context, in *Group, opts ...grpc.CallOption) (*Group, error) { + out := new(Group) + err := c.cc.Invoke(ctx, Groups_Update_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupsClient) List(ctx context.Context, in *GroupFilter, opts ...grpc.CallOption) (*GroupList, error) { + out := new(GroupList) + err := c.cc.Invoke(ctx, Groups_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupsClient) Delete(ctx context.Context, in *DeleteGroupRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, Groups_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// GroupsServer is the server API for Groups service. +// All implementations must embed UnimplementedGroupsServer +// for forward compatibility +type GroupsServer interface { + Create(context.Context, *CreateGroupRequest) (*Group, error) + Update(context.Context, *Group) (*Group, error) + List(context.Context, *GroupFilter) (*GroupList, error) + Delete(context.Context, *DeleteGroupRequest) (*emptypb.Empty, error) + mustEmbedUnimplementedGroupsServer() +} + +// UnimplementedGroupsServer must be embedded to have forward compatible implementations. +type UnimplementedGroupsServer struct { +} + +func (UnimplementedGroupsServer) Create(context.Context, *CreateGroupRequest) (*Group, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedGroupsServer) Update(context.Context, *Group) (*Group, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedGroupsServer) List(context.Context, *GroupFilter) (*GroupList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedGroupsServer) Delete(context.Context, *DeleteGroupRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedGroupsServer) mustEmbedUnimplementedGroupsServer() {} + +// UnsafeGroupsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to GroupsServer will +// result in compilation errors. +type UnsafeGroupsServer interface { + mustEmbedUnimplementedGroupsServer() +} + +func RegisterGroupsServer(s grpc.ServiceRegistrar, srv GroupsServer) { + s.RegisterService(&Groups_ServiceDesc, srv) +} + +func _Groups_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateGroupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupsServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Groups_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupsServer).Create(ctx, req.(*CreateGroupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Groups_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Group) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupsServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Groups_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupsServer).Update(ctx, req.(*Group)) + } + return interceptor(ctx, in, info, handler) +} + +func _Groups_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GroupFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Groups_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupsServer).List(ctx, req.(*GroupFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Groups_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteGroupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupsServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Groups_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupsServer).Delete(ctx, req.(*DeleteGroupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Groups_ServiceDesc is the grpc.ServiceDesc for Groups service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Groups_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.iam.Groups", + HandlerType: (*GroupsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _Groups_Create_Handler, + }, + { + MethodName: "Update", + Handler: _Groups_Update_Handler, + }, + { + MethodName: "List", + Handler: _Groups_List_Handler, + }, + { + MethodName: "Delete", + Handler: _Groups_Delete_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "group.platform.proto", +} diff --git a/proto/platform/iam/v1/group_invites.platform.event.go b/proto/platform/iam/v1/group_invites.platform.event.go new file mode 100644 index 00000000..7526996c --- /dev/null +++ b/proto/platform/iam/v1/group_invites.platform.event.go @@ -0,0 +1,48 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "chainguard.dev/sdk/uidp" +) + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *GroupInvite) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *GroupInvite) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.CloudEventsRedact. +func (x *GroupInvite) CloudEventsRedact() interface{} { + return &GroupInvite{ + Id: x.Id, + Expiration: x.Expiration, + } +} + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *DeleteGroupInviteRequest) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *DeleteGroupInviteRequest) CloudEventsSubject() string { + return x.GetId() +} diff --git a/proto/platform/iam/v1/group_invites.platform.pb.go b/proto/platform/iam/v1/group_invites.platform.pb.go new file mode 100644 index 00000000..43ee8f1f --- /dev/null +++ b/proto/platform/iam/v1/group_invites.platform.pb.go @@ -0,0 +1,934 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: group_invites.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RegistrationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Kind: + // + // *RegistrationRequest_Human_ + // *RegistrationRequest_Cluster_ + Kind isRegistrationRequest_Kind `protobuf_oneof:"kind"` +} + +func (x *RegistrationRequest) Reset() { + *x = RegistrationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_group_invites_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegistrationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegistrationRequest) ProtoMessage() {} + +func (x *RegistrationRequest) ProtoReflect() protoreflect.Message { + mi := &file_group_invites_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegistrationRequest.ProtoReflect.Descriptor instead. +func (*RegistrationRequest) Descriptor() ([]byte, []int) { + return file_group_invites_platform_proto_rawDescGZIP(), []int{0} +} + +func (m *RegistrationRequest) GetKind() isRegistrationRequest_Kind { + if m != nil { + return m.Kind + } + return nil +} + +func (x *RegistrationRequest) GetHuman() *RegistrationRequest_Human { + if x, ok := x.GetKind().(*RegistrationRequest_Human_); ok { + return x.Human + } + return nil +} + +func (x *RegistrationRequest) GetCluster() *RegistrationRequest_Cluster { + if x, ok := x.GetKind().(*RegistrationRequest_Cluster_); ok { + return x.Cluster + } + return nil +} + +type isRegistrationRequest_Kind interface { + isRegistrationRequest_Kind() +} + +type RegistrationRequest_Human_ struct { + Human *RegistrationRequest_Human `protobuf:"bytes,1,opt,name=human,proto3,oneof"` +} + +type RegistrationRequest_Cluster_ struct { + Cluster *RegistrationRequest_Cluster `protobuf:"bytes,2,opt,name=cluster,proto3,oneof"` +} + +func (*RegistrationRequest_Human_) isRegistrationRequest_Kind() {} + +func (*RegistrationRequest_Cluster_) isRegistrationRequest_Kind() {} + +type GroupInvite struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The group UIDP under which this invite resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // expiration, timestamp this invite becomes no longer valid. + Expiration *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration,proto3" json:"expiration,omitempty"` + // key_id is used to identify the verification key for this code. + KeyId string `protobuf:"bytes,3,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` + // role is the role the invited identity will be role-bound to the group with. + Role *Role `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` + // code is the json-encoded authentication code. + Code string `protobuf:"bytes,5,opt,name=code,proto3" json:"code,omitempty"` +} + +func (x *GroupInvite) Reset() { + *x = GroupInvite{} + if protoimpl.UnsafeEnabled { + mi := &file_group_invites_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupInvite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupInvite) ProtoMessage() {} + +func (x *GroupInvite) ProtoReflect() protoreflect.Message { + mi := &file_group_invites_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupInvite.ProtoReflect.Descriptor instead. +func (*GroupInvite) Descriptor() ([]byte, []int) { + return file_group_invites_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *GroupInvite) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *GroupInvite) GetExpiration() *timestamppb.Timestamp { + if x != nil { + return x.Expiration + } + return nil +} + +func (x *GroupInvite) GetKeyId() string { + if x != nil { + return x.KeyId + } + return "" +} + +func (x *GroupInvite) GetRole() *Role { + if x != nil { + return x.Role + } + return nil +} + +func (x *GroupInvite) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +type StoredGroupInvite struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The group UIDP under which this invite resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // expiration, timestamp this invite becomes no longer valid. + Expiration *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration,proto3" json:"expiration,omitempty"` + // key_id is used to identify the verification key for this code. + KeyId string `protobuf:"bytes,3,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` + // role is the role the invited identity will be role-bound to the group with. + Role *Role `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` +} + +func (x *StoredGroupInvite) Reset() { + *x = StoredGroupInvite{} + if protoimpl.UnsafeEnabled { + mi := &file_group_invites_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StoredGroupInvite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StoredGroupInvite) ProtoMessage() {} + +func (x *StoredGroupInvite) ProtoReflect() protoreflect.Message { + mi := &file_group_invites_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StoredGroupInvite.ProtoReflect.Descriptor instead. +func (*StoredGroupInvite) Descriptor() ([]byte, []int) { + return file_group_invites_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *StoredGroupInvite) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *StoredGroupInvite) GetExpiration() *timestamppb.Timestamp { + if x != nil { + return x.Expiration + } + return nil +} + +func (x *StoredGroupInvite) GetKeyId() string { + if x != nil { + return x.KeyId + } + return "" +} + +func (x *StoredGroupInvite) GetRole() *Role { + if x != nil { + return x.Role + } + return nil +} + +type GroupInviteList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*StoredGroupInvite `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *GroupInviteList) Reset() { + *x = GroupInviteList{} + if protoimpl.UnsafeEnabled { + mi := &file_group_invites_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupInviteList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupInviteList) ProtoMessage() {} + +func (x *GroupInviteList) ProtoReflect() protoreflect.Message { + mi := &file_group_invites_platform_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 GroupInviteList.ProtoReflect.Descriptor instead. +func (*GroupInviteList) Descriptor() ([]byte, []int) { + return file_group_invites_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *GroupInviteList) GetItems() []*StoredGroupInvite { + if x != nil { + return x.Items + } + return nil +} + +type GroupInviteRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // group, The Group UIDP path under which the new group Invite targets. + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // expiration, timestamp this invite becomes no longer valid. + Ttl *durationpb.Duration `protobuf:"bytes,2,opt,name=ttl,proto3" json:"ttl,omitempty"` + // role is the Role UIDP the invited identity will be role-bound to the group with. + Role string `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` + // email is the exact email address that may accept this invite code, if specified. + Email string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *GroupInviteRequest) Reset() { + *x = GroupInviteRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_group_invites_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupInviteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupInviteRequest) ProtoMessage() {} + +func (x *GroupInviteRequest) ProtoReflect() protoreflect.Message { + mi := &file_group_invites_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupInviteRequest.ProtoReflect.Descriptor instead. +func (*GroupInviteRequest) Descriptor() ([]byte, []int) { + return file_group_invites_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *GroupInviteRequest) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *GroupInviteRequest) GetTtl() *durationpb.Duration { + if x != nil { + return x.Ttl + } + return nil +} + +func (x *GroupInviteRequest) GetRole() string { + if x != nil { + return x.Role + } + return "" +} + +func (x *GroupInviteRequest) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +type DeleteGroupInviteRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteGroupInviteRequest) Reset() { + *x = DeleteGroupInviteRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_group_invites_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteGroupInviteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteGroupInviteRequest) ProtoMessage() {} + +func (x *DeleteGroupInviteRequest) ProtoReflect() protoreflect.Message { + mi := &file_group_invites_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteGroupInviteRequest.ProtoReflect.Descriptor instead. +func (*DeleteGroupInviteRequest) Descriptor() ([]byte, []int) { + return file_group_invites_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *DeleteGroupInviteRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type GroupInviteFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // group is used to identify the group this record is rooted under. + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // id is the exact UID of the record. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + // key_id is the identify the verification key for this code. + KeyId string `protobuf:"bytes,3,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` +} + +func (x *GroupInviteFilter) Reset() { + *x = GroupInviteFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_group_invites_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupInviteFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupInviteFilter) ProtoMessage() {} + +func (x *GroupInviteFilter) ProtoReflect() protoreflect.Message { + mi := &file_group_invites_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupInviteFilter.ProtoReflect.Descriptor instead. +func (*GroupInviteFilter) Descriptor() ([]byte, []int) { + return file_group_invites_platform_proto_rawDescGZIP(), []int{6} +} + +func (x *GroupInviteFilter) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *GroupInviteFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *GroupInviteFilter) GetKeyId() string { + if x != nil { + return x.KeyId + } + return "" +} + +type RegistrationRequest_Human struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // code is the json-encoded authentication code. + // +optional + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` +} + +func (x *RegistrationRequest_Human) Reset() { + *x = RegistrationRequest_Human{} + if protoimpl.UnsafeEnabled { + mi := &file_group_invites_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegistrationRequest_Human) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegistrationRequest_Human) ProtoMessage() {} + +func (x *RegistrationRequest_Human) ProtoReflect() protoreflect.Message { + mi := &file_group_invites_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegistrationRequest_Human.ProtoReflect.Descriptor instead. +func (*RegistrationRequest_Human) Descriptor() ([]byte, []int) { + return file_group_invites_platform_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *RegistrationRequest_Human) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +type RegistrationRequest_Cluster struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // code is the json-encoded authentication code. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + // cluster_id is an optional cluster id if registering a cluster. + ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` +} + +func (x *RegistrationRequest_Cluster) Reset() { + *x = RegistrationRequest_Cluster{} + if protoimpl.UnsafeEnabled { + mi := &file_group_invites_platform_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegistrationRequest_Cluster) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegistrationRequest_Cluster) ProtoMessage() {} + +func (x *RegistrationRequest_Cluster) ProtoReflect() protoreflect.Message { + mi := &file_group_invites_platform_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegistrationRequest_Cluster.ProtoReflect.Descriptor instead. +func (*RegistrationRequest_Cluster) Descriptor() ([]byte, []int) { + return file_group_invites_platform_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *RegistrationRequest_Cluster) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *RegistrationRequest_Cluster) GetClusterId() string { + if x != nil { + return x.ClusterId + } + return "" +} + +var File_group_invites_platform_proto protoreflect.FileDescriptor + +var file_group_invites_platform_proto_rawDesc = []byte{ + 0x0a, 0x1c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x02, 0x0a, 0x13, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x05, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x05, 0x68, 0x75, 0x6d, 0x61, 0x6e, 0x12, 0x50, + 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x1a, 0x1b, 0x0a, 0x05, 0x48, 0x75, 0x6d, 0x61, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x1a, 0x3c, 0x0a, + 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x42, 0x06, 0x0a, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x22, 0xb7, 0x01, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xa9, 0x01, + 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x53, 0x0a, 0x0f, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x89, + 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, + 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x32, 0x0a, 0x18, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x50, + 0x0a, 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, + 0x32, 0xb2, 0x05, 0x0a, 0x0c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, + 0x78, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, + 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, + 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, + 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x76, 0x0a, 0x0f, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, + 0x10, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0x10, + 0x01, 0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, + 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, + 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcb, 0x01, 0x10, 0x01, 0x12, 0xc5, 0x01, + 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, + 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, + 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_group_invites_platform_proto_rawDescOnce sync.Once + file_group_invites_platform_proto_rawDescData = file_group_invites_platform_proto_rawDesc +) + +func file_group_invites_platform_proto_rawDescGZIP() []byte { + file_group_invites_platform_proto_rawDescOnce.Do(func() { + file_group_invites_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_group_invites_platform_proto_rawDescData) + }) + return file_group_invites_platform_proto_rawDescData +} + +var file_group_invites_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_group_invites_platform_proto_goTypes = []interface{}{ + (*RegistrationRequest)(nil), // 0: chainguard.platform.iam.RegistrationRequest + (*GroupInvite)(nil), // 1: chainguard.platform.iam.GroupInvite + (*StoredGroupInvite)(nil), // 2: chainguard.platform.iam.StoredGroupInvite + (*GroupInviteList)(nil), // 3: chainguard.platform.iam.GroupInviteList + (*GroupInviteRequest)(nil), // 4: chainguard.platform.iam.GroupInviteRequest + (*DeleteGroupInviteRequest)(nil), // 5: chainguard.platform.iam.DeleteGroupInviteRequest + (*GroupInviteFilter)(nil), // 6: chainguard.platform.iam.GroupInviteFilter + (*RegistrationRequest_Human)(nil), // 7: chainguard.platform.iam.RegistrationRequest.Human + (*RegistrationRequest_Cluster)(nil), // 8: chainguard.platform.iam.RegistrationRequest.Cluster + (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp + (*Role)(nil), // 10: chainguard.platform.iam.Role + (*durationpb.Duration)(nil), // 11: google.protobuf.Duration + (*emptypb.Empty)(nil), // 12: google.protobuf.Empty +} +var file_group_invites_platform_proto_depIdxs = []int32{ + 7, // 0: chainguard.platform.iam.RegistrationRequest.human:type_name -> chainguard.platform.iam.RegistrationRequest.Human + 8, // 1: chainguard.platform.iam.RegistrationRequest.cluster:type_name -> chainguard.platform.iam.RegistrationRequest.Cluster + 9, // 2: chainguard.platform.iam.GroupInvite.expiration:type_name -> google.protobuf.Timestamp + 10, // 3: chainguard.platform.iam.GroupInvite.role:type_name -> chainguard.platform.iam.Role + 9, // 4: chainguard.platform.iam.StoredGroupInvite.expiration:type_name -> google.protobuf.Timestamp + 10, // 5: chainguard.platform.iam.StoredGroupInvite.role:type_name -> chainguard.platform.iam.Role + 2, // 6: chainguard.platform.iam.GroupInviteList.items:type_name -> chainguard.platform.iam.StoredGroupInvite + 11, // 7: chainguard.platform.iam.GroupInviteRequest.ttl:type_name -> google.protobuf.Duration + 4, // 8: chainguard.platform.iam.GroupInvites.Create:input_type -> chainguard.platform.iam.GroupInviteRequest + 4, // 9: chainguard.platform.iam.GroupInvites.CreateWithGroup:input_type -> chainguard.platform.iam.GroupInviteRequest + 6, // 10: chainguard.platform.iam.GroupInvites.List:input_type -> chainguard.platform.iam.GroupInviteFilter + 5, // 11: chainguard.platform.iam.GroupInvites.Delete:input_type -> chainguard.platform.iam.DeleteGroupInviteRequest + 1, // 12: chainguard.platform.iam.GroupInvites.Create:output_type -> chainguard.platform.iam.GroupInvite + 1, // 13: chainguard.platform.iam.GroupInvites.CreateWithGroup:output_type -> chainguard.platform.iam.GroupInvite + 3, // 14: chainguard.platform.iam.GroupInvites.List:output_type -> chainguard.platform.iam.GroupInviteList + 12, // 15: chainguard.platform.iam.GroupInvites.Delete:output_type -> google.protobuf.Empty + 12, // [12:16] is the sub-list for method output_type + 8, // [8:12] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_group_invites_platform_proto_init() } +func file_group_invites_platform_proto_init() { + if File_group_invites_platform_proto != nil { + return + } + file_role_platform_proto_init() + if !protoimpl.UnsafeEnabled { + file_group_invites_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistrationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_invites_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupInvite); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_invites_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StoredGroupInvite); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_invites_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupInviteList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_invites_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupInviteRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_invites_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteGroupInviteRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_invites_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupInviteFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_invites_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistrationRequest_Human); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_group_invites_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistrationRequest_Cluster); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_group_invites_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*RegistrationRequest_Human_)(nil), + (*RegistrationRequest_Cluster_)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_group_invites_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 9, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_group_invites_platform_proto_goTypes, + DependencyIndexes: file_group_invites_platform_proto_depIdxs, + MessageInfos: file_group_invites_platform_proto_msgTypes, + }.Build() + File_group_invites_platform_proto = out.File + file_group_invites_platform_proto_rawDesc = nil + file_group_invites_platform_proto_goTypes = nil + file_group_invites_platform_proto_depIdxs = nil +} diff --git a/proto/platform/iam/v1/group_invites.platform.pb.gw.go b/proto/platform/iam/v1/group_invites.platform.pb.gw.go new file mode 100644 index 00000000..d1994fca --- /dev/null +++ b/proto/platform/iam/v1/group_invites.platform.pb.gw.go @@ -0,0 +1,472 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: group_invites.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_GroupInvites_Create_0(ctx context.Context, marshaler runtime.Marshaler, client GroupInvitesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GroupInviteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GroupInvites_Create_0(ctx context.Context, marshaler runtime.Marshaler, server GroupInvitesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GroupInviteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["group"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "group") + } + + protoReq.Group, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "group", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +func request_GroupInvites_CreateWithGroup_0(ctx context.Context, marshaler runtime.Marshaler, client GroupInvitesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GroupInviteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CreateWithGroup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GroupInvites_CreateWithGroup_0(ctx context.Context, marshaler runtime.Marshaler, server GroupInvitesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GroupInviteRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CreateWithGroup(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_GroupInvites_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_GroupInvites_List_0(ctx context.Context, marshaler runtime.Marshaler, client GroupInvitesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GroupInviteFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GroupInvites_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GroupInvites_List_0(ctx context.Context, marshaler runtime.Marshaler, server GroupInvitesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GroupInviteFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_GroupInvites_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_GroupInvites_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client GroupInvitesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteGroupInviteRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GroupInvites_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server GroupInvitesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteGroupInviteRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterGroupInvitesHandlerServer registers the http handlers for service GroupInvites to "mux". +// UnaryRPC :call GroupInvitesServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterGroupInvitesHandlerFromEndpoint instead. +func RegisterGroupInvitesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server GroupInvitesServer) error { + + mux.Handle("POST", pattern_GroupInvites_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/Create", runtime.WithHTTPPathPattern("/iam/v1/group_invites/{group=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GroupInvites_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupInvites_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_GroupInvites_CreateWithGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/CreateWithGroup", runtime.WithHTTPPathPattern("/chainguard.platform.iam.GroupInvites/CreateWithGroup")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GroupInvites_CreateWithGroup_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupInvites_CreateWithGroup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_GroupInvites_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/List", runtime.WithHTTPPathPattern("/iam/v1/group_invites")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GroupInvites_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupInvites_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_GroupInvites_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/Delete", runtime.WithHTTPPathPattern("/iam/v1/group_invites/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GroupInvites_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupInvites_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterGroupInvitesHandlerFromEndpoint is same as RegisterGroupInvitesHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterGroupInvitesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterGroupInvitesHandler(ctx, mux, conn) +} + +// RegisterGroupInvitesHandler registers the http handlers for service GroupInvites to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterGroupInvitesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterGroupInvitesHandlerClient(ctx, mux, NewGroupInvitesClient(conn)) +} + +// RegisterGroupInvitesHandlerClient registers the http handlers for service GroupInvites +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "GroupInvitesClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "GroupInvitesClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "GroupInvitesClient" to call the correct interceptors. +func RegisterGroupInvitesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client GroupInvitesClient) error { + + mux.Handle("POST", pattern_GroupInvites_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/Create", runtime.WithHTTPPathPattern("/iam/v1/group_invites/{group=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GroupInvites_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupInvites_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_GroupInvites_CreateWithGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/CreateWithGroup", runtime.WithHTTPPathPattern("/chainguard.platform.iam.GroupInvites/CreateWithGroup")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GroupInvites_CreateWithGroup_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupInvites_CreateWithGroup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_GroupInvites_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/List", runtime.WithHTTPPathPattern("/iam/v1/group_invites")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GroupInvites_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupInvites_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_GroupInvites_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.GroupInvites/Delete", runtime.WithHTTPPathPattern("/iam/v1/group_invites/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GroupInvites_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GroupInvites_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_GroupInvites_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "group_invites", "group"}, "")) + + pattern_GroupInvites_CreateWithGroup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.iam.GroupInvites", "CreateWithGroup"}, "")) + + pattern_GroupInvites_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "group_invites"}, "")) + + pattern_GroupInvites_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "group_invites", "id"}, "")) +) + +var ( + forward_GroupInvites_Create_0 = runtime.ForwardResponseMessage + + forward_GroupInvites_CreateWithGroup_0 = runtime.ForwardResponseMessage + + forward_GroupInvites_List_0 = runtime.ForwardResponseMessage + + forward_GroupInvites_Delete_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/iam/v1/group_invites.platform.proto b/proto/platform/iam/v1/group_invites.platform.proto new file mode 100644 index 00000000..f3234539 --- /dev/null +++ b/proto/platform/iam/v1/group_invites.platform.proto @@ -0,0 +1,165 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.iam.v1"; +option java_outer_classname = "PlatformIAMGroupInviteProto"; + +package chainguard.platform.iam; + +import "google/api/annotations.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/empty.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "role.platform.proto"; + +service GroupInvites { + rpc Create(GroupInviteRequest) returns (GroupInvite) { + option (google.api.http) = { + post: "/iam/v1/group_invites/{group=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [ + CAP_IAM_GROUP_INVITES_CREATE, + // Creating a Group Invite is effectively a RoleBinding + // promise, so check that the caller has permission to + // create RoleBindings as well. + CAP_IAM_ROLE_BINDINGS_CREATE + ] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.group_invite.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + // CreateWithGroup is an internal API for creating a new root group + // where the caller is NOT added as an Owner, but an invite code to + // become the owner of the group is returned. This is not intended + // for external consumption, and will not be supported. + // Do not use this! + rpc CreateWithGroup(GroupInviteRequest) returns (GroupInvite) { + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [ + CAP_IAM_GROUP_INVITES_CREATE, + // Creating a Group Invite is effectively a RoleBinding + // promise, so check that the caller has permission to + // create RoleBindings as well. + CAP_IAM_ROLE_BINDINGS_CREATE + ] + // We check for the capabilities above in the token, but + // this method has special undocumented authentication + // semantics since it is not intended to external consumption. + unscoped: true + } + }; + } + + rpc List(GroupInviteFilter) returns (GroupInviteList) { + option (google.api.http) = { + get: "/iam/v1/group_invites" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_GROUP_INVITES_LIST] + unscoped: true + } + }; + } + + rpc Delete(DeleteGroupInviteRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/iam/v1/group_invites/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_GROUP_INVITES_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.group_invite.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } +} + +message RegistrationRequest { + oneof kind { + Human human = 1; + Cluster cluster = 2; + } + + message Human { + // code is the json-encoded authentication code. + // +optional + string code = 1; + } + + message Cluster { + // code is the json-encoded authentication code. + string code = 1; + // cluster_id is an optional cluster id if registering a cluster. + string cluster_id = 2; + } +} + +message GroupInvite { + // id, The group UIDP under which this invite resides. + string id = 1; + // expiration, timestamp this invite becomes no longer valid. + google.protobuf.Timestamp expiration = 2; + // key_id is used to identify the verification key for this code. + string key_id = 3; + // role is the role the invited identity will be role-bound to the group with. + chainguard.platform.iam.Role role = 4; + // code is the json-encoded authentication code. + string code = 5; +} + +message StoredGroupInvite { + // id, The group UIDP under which this invite resides. + string id = 1; + // expiration, timestamp this invite becomes no longer valid. + google.protobuf.Timestamp expiration = 2; + // key_id is used to identify the verification key for this code. + string key_id = 3; + // role is the role the invited identity will be role-bound to the group with. + chainguard.platform.iam.Role role = 4; +} + +message GroupInviteList { + repeated StoredGroupInvite items = 1; +} + +message GroupInviteRequest { + // group, The Group UIDP path under which the new group Invite targets. + string group = 1 [(chainguard.annotations.iam_scope) = true]; + // expiration, timestamp this invite becomes no longer valid. + google.protobuf.Duration ttl = 2; + // role is the Role UIDP the invited identity will be role-bound to the group with. + string role = 3; + // email is the exact email address that may accept this invite code, if specified. + string email = 4; +} + +message DeleteGroupInviteRequest { + // id is the exact UIDP of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message GroupInviteFilter { + // group is used to identify the group this record is rooted under. + string group = 1; + // id is the exact UID of the record. + string id = 2; + // key_id is the identify the verification key for this code. + string key_id = 3; +} diff --git a/proto/platform/iam/v1/group_invites.platform_grpc.pb.go b/proto/platform/iam/v1/group_invites.platform_grpc.pb.go new file mode 100644 index 00000000..13dcbff8 --- /dev/null +++ b/proto/platform/iam/v1/group_invites.platform_grpc.pb.go @@ -0,0 +1,231 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: group_invites.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + GroupInvites_Create_FullMethodName = "/chainguard.platform.iam.GroupInvites/Create" + GroupInvites_CreateWithGroup_FullMethodName = "/chainguard.platform.iam.GroupInvites/CreateWithGroup" + GroupInvites_List_FullMethodName = "/chainguard.platform.iam.GroupInvites/List" + GroupInvites_Delete_FullMethodName = "/chainguard.platform.iam.GroupInvites/Delete" +) + +// GroupInvitesClient is the client API for GroupInvites service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type GroupInvitesClient interface { + Create(ctx context.Context, in *GroupInviteRequest, opts ...grpc.CallOption) (*GroupInvite, error) + // CreateWithGroup is an internal API for creating a new root group + // where the caller is NOT added as an Owner, but an invite code to + // become the owner of the group is returned. This is not intended + // for external consumption, and will not be supported. + // Do not use this! + CreateWithGroup(ctx context.Context, in *GroupInviteRequest, opts ...grpc.CallOption) (*GroupInvite, error) + List(ctx context.Context, in *GroupInviteFilter, opts ...grpc.CallOption) (*GroupInviteList, error) + Delete(ctx context.Context, in *DeleteGroupInviteRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) +} + +type groupInvitesClient struct { + cc grpc.ClientConnInterface +} + +func NewGroupInvitesClient(cc grpc.ClientConnInterface) GroupInvitesClient { + return &groupInvitesClient{cc} +} + +func (c *groupInvitesClient) Create(ctx context.Context, in *GroupInviteRequest, opts ...grpc.CallOption) (*GroupInvite, error) { + out := new(GroupInvite) + err := c.cc.Invoke(ctx, GroupInvites_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupInvitesClient) CreateWithGroup(ctx context.Context, in *GroupInviteRequest, opts ...grpc.CallOption) (*GroupInvite, error) { + out := new(GroupInvite) + err := c.cc.Invoke(ctx, GroupInvites_CreateWithGroup_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupInvitesClient) List(ctx context.Context, in *GroupInviteFilter, opts ...grpc.CallOption) (*GroupInviteList, error) { + out := new(GroupInviteList) + err := c.cc.Invoke(ctx, GroupInvites_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *groupInvitesClient) Delete(ctx context.Context, in *DeleteGroupInviteRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, GroupInvites_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// GroupInvitesServer is the server API for GroupInvites service. +// All implementations must embed UnimplementedGroupInvitesServer +// for forward compatibility +type GroupInvitesServer interface { + Create(context.Context, *GroupInviteRequest) (*GroupInvite, error) + // CreateWithGroup is an internal API for creating a new root group + // where the caller is NOT added as an Owner, but an invite code to + // become the owner of the group is returned. This is not intended + // for external consumption, and will not be supported. + // Do not use this! + CreateWithGroup(context.Context, *GroupInviteRequest) (*GroupInvite, error) + List(context.Context, *GroupInviteFilter) (*GroupInviteList, error) + Delete(context.Context, *DeleteGroupInviteRequest) (*emptypb.Empty, error) + mustEmbedUnimplementedGroupInvitesServer() +} + +// UnimplementedGroupInvitesServer must be embedded to have forward compatible implementations. +type UnimplementedGroupInvitesServer struct { +} + +func (UnimplementedGroupInvitesServer) Create(context.Context, *GroupInviteRequest) (*GroupInvite, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedGroupInvitesServer) CreateWithGroup(context.Context, *GroupInviteRequest) (*GroupInvite, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateWithGroup not implemented") +} +func (UnimplementedGroupInvitesServer) List(context.Context, *GroupInviteFilter) (*GroupInviteList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedGroupInvitesServer) Delete(context.Context, *DeleteGroupInviteRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedGroupInvitesServer) mustEmbedUnimplementedGroupInvitesServer() {} + +// UnsafeGroupInvitesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to GroupInvitesServer will +// result in compilation errors. +type UnsafeGroupInvitesServer interface { + mustEmbedUnimplementedGroupInvitesServer() +} + +func RegisterGroupInvitesServer(s grpc.ServiceRegistrar, srv GroupInvitesServer) { + s.RegisterService(&GroupInvites_ServiceDesc, srv) +} + +func _GroupInvites_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GroupInviteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupInvitesServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GroupInvites_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupInvitesServer).Create(ctx, req.(*GroupInviteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupInvites_CreateWithGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GroupInviteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupInvitesServer).CreateWithGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GroupInvites_CreateWithGroup_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupInvitesServer).CreateWithGroup(ctx, req.(*GroupInviteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupInvites_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GroupInviteFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupInvitesServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GroupInvites_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupInvitesServer).List(ctx, req.(*GroupInviteFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _GroupInvites_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteGroupInviteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GroupInvitesServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: GroupInvites_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GroupInvitesServer).Delete(ctx, req.(*DeleteGroupInviteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// GroupInvites_ServiceDesc is the grpc.ServiceDesc for GroupInvites service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var GroupInvites_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.iam.GroupInvites", + HandlerType: (*GroupInvitesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _GroupInvites_Create_Handler, + }, + { + MethodName: "CreateWithGroup", + Handler: _GroupInvites_CreateWithGroup_Handler, + }, + { + MethodName: "List", + Handler: _GroupInvites_List_Handler, + }, + { + MethodName: "Delete", + Handler: _GroupInvites_Delete_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "group_invites.platform.proto", +} diff --git a/proto/platform/iam/v1/identity.platform.event.go b/proto/platform/iam/v1/identity.platform.event.go new file mode 100644 index 00000000..12152a4d --- /dev/null +++ b/proto/platform/iam/v1/identity.platform.event.go @@ -0,0 +1,40 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "chainguard.dev/sdk/uidp" +) + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *Identity) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *Identity) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *DeleteIdentityRequest) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *DeleteIdentityRequest) CloudEventsSubject() string { + return x.GetId() +} diff --git a/proto/platform/iam/v1/identity.platform.pb.go b/proto/platform/iam/v1/identity.platform.pb.go new file mode 100644 index 00000000..94d24e99 --- /dev/null +++ b/proto/platform/iam/v1/identity.platform.pb.go @@ -0,0 +1,1357 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: identity.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ServicePrincipal int32 + +const ( + ServicePrincipal_UNKNOWN ServicePrincipal = 0 + ServicePrincipal_COSIGNED ServicePrincipal = 1 + ServicePrincipal_INGESTER ServicePrincipal = 2 + ServicePrincipal_CATALOG_SYNCER ServicePrincipal = 3 +) + +// Enum value maps for ServicePrincipal. +var ( + ServicePrincipal_name = map[int32]string{ + 0: "UNKNOWN", + 1: "COSIGNED", + 2: "INGESTER", + 3: "CATALOG_SYNCER", + } + ServicePrincipal_value = map[string]int32{ + "UNKNOWN": 0, + "COSIGNED": 1, + "INGESTER": 2, + "CATALOG_SYNCER": 3, + } +) + +func (x ServicePrincipal) Enum() *ServicePrincipal { + p := new(ServicePrincipal) + *p = x + return p +} + +func (x ServicePrincipal) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ServicePrincipal) Descriptor() protoreflect.EnumDescriptor { + return file_identity_platform_proto_enumTypes[0].Descriptor() +} + +func (ServicePrincipal) Type() protoreflect.EnumType { + return &file_identity_platform_proto_enumTypes[0] +} + +func (x ServicePrincipal) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ServicePrincipal.Descriptor instead. +func (ServicePrincipal) EnumDescriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{0} +} + +type Identity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is unique identifier of this specific identity. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name, human readable name of identity. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // description, human readable of identity. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // created_at is the timestamp for when the identity was created. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // updated_at is the timestamp for when the identity was last updated. + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + // relationship is used to describe how this identity relates to + // identities coming from 3rd party Identity Providers (IdPs) + // + // Types that are assignable to Relationship: + // + // *Identity_ClaimMatch_ + // *Identity_Static + // *Identity_ServicePrincipal + // *Identity_AwsIdentity + Relationship isIdentity_Relationship `protobuf_oneof:"relationship"` +} + +func (x *Identity) Reset() { + *x = Identity{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Identity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Identity) ProtoMessage() {} + +func (x *Identity) ProtoReflect() protoreflect.Message { + mi := &file_identity_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Identity.ProtoReflect.Descriptor instead. +func (*Identity) Descriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Identity) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Identity) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Identity) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Identity) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Identity) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +func (m *Identity) GetRelationship() isIdentity_Relationship { + if m != nil { + return m.Relationship + } + return nil +} + +func (x *Identity) GetClaimMatch() *Identity_ClaimMatch { + if x, ok := x.GetRelationship().(*Identity_ClaimMatch_); ok { + return x.ClaimMatch + } + return nil +} + +func (x *Identity) GetStatic() *Identity_StaticKeys { + if x, ok := x.GetRelationship().(*Identity_Static); ok { + return x.Static + } + return nil +} + +func (x *Identity) GetServicePrincipal() ServicePrincipal { + if x, ok := x.GetRelationship().(*Identity_ServicePrincipal); ok { + return x.ServicePrincipal + } + return ServicePrincipal_UNKNOWN +} + +func (x *Identity) GetAwsIdentity() *Identity_AWSIdentity { + if x, ok := x.GetRelationship().(*Identity_AwsIdentity); ok { + return x.AwsIdentity + } + return nil +} + +type isIdentity_Relationship interface { + isIdentity_Relationship() +} + +type Identity_ClaimMatch_ struct { + // claim_match checks the third party IdP token's claims against one + // or more configured patterns. + ClaimMatch *Identity_ClaimMatch `protobuf:"bytes,10,opt,name=claim_match,json=claimMatch,proto3,oneof"` +} + +type Identity_Static struct { + // static is equivalent to literal, but instead of discovering the + // IdP's verification keys we verify the identity using pre-registered + // verification keys. This is intended for use with identities from + // providers without an "online" issuer (network accessible to our IdP), + // such as a KinD/minikube cluster. + // NOTE: because this path does not have a mechanism for key rotation + // the identity will expire, with a maximum lifetime of 30d. + Static *Identity_StaticKeys `protobuf:"bytes,11,opt,name=static,proto3,oneof"` +} + +type Identity_ServicePrincipal struct { + // service_principal is the name of the Chainguard service that is + // allowed to assume this identity. These names correlate with the + // service names used in impersonation with account associations. + ServicePrincipal ServicePrincipal `protobuf:"varint,12,opt,name=service_principal,json=servicePrincipal,proto3,enum=chainguard.platform.iam.ServicePrincipal,oneof"` +} + +type Identity_AwsIdentity struct { + // aws_identity matches AWS IAM users and roles to an identity + AwsIdentity *Identity_AWSIdentity `protobuf:"bytes,13,opt,name=aws_identity,json=awsIdentity,proto3,oneof"` +} + +func (*Identity_ClaimMatch_) isIdentity_Relationship() {} + +func (*Identity_Static) isIdentity_Relationship() {} + +func (*Identity_ServicePrincipal) isIdentity_Relationship() {} + +func (*Identity_AwsIdentity) isIdentity_Relationship() {} + +type CreateIdentityRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // parent_id, The Group UIDP path under which the new Identity resides. + ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + // Identity to create. + Identity *Identity `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` +} + +func (x *CreateIdentityRequest) Reset() { + *x = CreateIdentityRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateIdentityRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateIdentityRequest) ProtoMessage() {} + +func (x *CreateIdentityRequest) ProtoReflect() protoreflect.Message { + mi := &file_identity_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateIdentityRequest.ProtoReflect.Descriptor instead. +func (*CreateIdentityRequest) Descriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateIdentityRequest) GetParentId() string { + if x != nil { + return x.ParentId + } + return "" +} + +func (x *CreateIdentityRequest) GetIdentity() *Identity { + if x != nil { + return x.Identity + } + return nil +} + +type DeleteIdentityRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID, UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteIdentityRequest) Reset() { + *x = DeleteIdentityRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteIdentityRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteIdentityRequest) ProtoMessage() {} + +func (x *DeleteIdentityRequest) ProtoReflect() protoreflect.Message { + mi := &file_identity_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteIdentityRequest.ProtoReflect.Descriptor instead. +func (*DeleteIdentityRequest) Descriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *DeleteIdentityRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type IdentityList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Identity `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *IdentityList) Reset() { + *x = IdentityList{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityList) ProtoMessage() {} + +func (x *IdentityList) ProtoReflect() protoreflect.Message { + mi := &file_identity_platform_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 IdentityList.ProtoReflect.Descriptor instead. +func (*IdentityList) Descriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *IdentityList) GetItems() []*Identity { + if x != nil { + return x.Items + } + return nil +} + +type IdentityFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // uidp filters records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` + // id is unique identifier to look up. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *IdentityFilter) Reset() { + *x = IdentityFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityFilter) ProtoMessage() {} + +func (x *IdentityFilter) ProtoReflect() protoreflect.Message { + mi := &file_identity_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IdentityFilter.ProtoReflect.Descriptor instead. +func (*IdentityFilter) Descriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *IdentityFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *IdentityFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type LookupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // issuer is the oidc issuer to look up. + Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` + // subject is the subject to look up. + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` +} + +func (x *LookupRequest) Reset() { + *x = LookupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LookupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LookupRequest) ProtoMessage() {} + +func (x *LookupRequest) ProtoReflect() protoreflect.Message { + mi := &file_identity_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LookupRequest.ProtoReflect.Descriptor instead. +func (*LookupRequest) Descriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *LookupRequest) GetIssuer() string { + if x != nil { + return x.Issuer + } + return "" +} + +func (x *LookupRequest) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +type Identity_ClaimMatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required, matches the `iss` claim. + // + // Types that are assignable to Iss: + // + // *Identity_ClaimMatch_Issuer + // *Identity_ClaimMatch_IssuerPattern + Iss isIdentity_ClaimMatch_Iss `protobuf_oneof:"iss"` + // Required, matches the `sub` claim. + // + // Types that are assignable to Sub: + // + // *Identity_ClaimMatch_Subject + // *Identity_ClaimMatch_SubjectPattern + Sub isIdentity_ClaimMatch_Sub `protobuf_oneof:"sub"` + // Optional, matches the `aud` claim. + // When unspecified, this defaults to the hostname of the SaaS + // environment's issuer. + // + // Types that are assignable to Aud: + // + // *Identity_ClaimMatch_Audience + // *Identity_ClaimMatch_AudiencePattern + Aud isIdentity_ClaimMatch_Aud `protobuf_oneof:"aud"` + // claims is a mapping from the name of a custom claim + // to a literal matching that claim's value. + Claims map[string]string `protobuf:"bytes,7,rep,name=claims,proto3" json:"claims,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // claim_patterns is a mapping from the name of a custom claim + // to a regular expression for matching that claim's value. + ClaimPatterns map[string]string `protobuf:"bytes,8,rep,name=claim_patterns,json=claimPatterns,proto3" json:"claim_patterns,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Identity_ClaimMatch) Reset() { + *x = Identity_ClaimMatch{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Identity_ClaimMatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Identity_ClaimMatch) ProtoMessage() {} + +func (x *Identity_ClaimMatch) ProtoReflect() protoreflect.Message { + mi := &file_identity_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Identity_ClaimMatch.ProtoReflect.Descriptor instead. +func (*Identity_ClaimMatch) Descriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{0, 0} +} + +func (m *Identity_ClaimMatch) GetIss() isIdentity_ClaimMatch_Iss { + if m != nil { + return m.Iss + } + return nil +} + +func (x *Identity_ClaimMatch) GetIssuer() string { + if x, ok := x.GetIss().(*Identity_ClaimMatch_Issuer); ok { + return x.Issuer + } + return "" +} + +func (x *Identity_ClaimMatch) GetIssuerPattern() string { + if x, ok := x.GetIss().(*Identity_ClaimMatch_IssuerPattern); ok { + return x.IssuerPattern + } + return "" +} + +func (m *Identity_ClaimMatch) GetSub() isIdentity_ClaimMatch_Sub { + if m != nil { + return m.Sub + } + return nil +} + +func (x *Identity_ClaimMatch) GetSubject() string { + if x, ok := x.GetSub().(*Identity_ClaimMatch_Subject); ok { + return x.Subject + } + return "" +} + +func (x *Identity_ClaimMatch) GetSubjectPattern() string { + if x, ok := x.GetSub().(*Identity_ClaimMatch_SubjectPattern); ok { + return x.SubjectPattern + } + return "" +} + +func (m *Identity_ClaimMatch) GetAud() isIdentity_ClaimMatch_Aud { + if m != nil { + return m.Aud + } + return nil +} + +func (x *Identity_ClaimMatch) GetAudience() string { + if x, ok := x.GetAud().(*Identity_ClaimMatch_Audience); ok { + return x.Audience + } + return "" +} + +func (x *Identity_ClaimMatch) GetAudiencePattern() string { + if x, ok := x.GetAud().(*Identity_ClaimMatch_AudiencePattern); ok { + return x.AudiencePattern + } + return "" +} + +func (x *Identity_ClaimMatch) GetClaims() map[string]string { + if x != nil { + return x.Claims + } + return nil +} + +func (x *Identity_ClaimMatch) GetClaimPatterns() map[string]string { + if x != nil { + return x.ClaimPatterns + } + return nil +} + +type isIdentity_ClaimMatch_Iss interface { + isIdentity_ClaimMatch_Iss() +} + +type Identity_ClaimMatch_Issuer struct { + // issuer of the OIDC ID tokens issued for this identity. + Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3,oneof"` +} + +type Identity_ClaimMatch_IssuerPattern struct { + // issuer_pattern is a regular expression for matching the + // token's issuer claim. + IssuerPattern string `protobuf:"bytes,2,opt,name=issuer_pattern,json=issuerPattern,proto3,oneof"` +} + +func (*Identity_ClaimMatch_Issuer) isIdentity_ClaimMatch_Iss() {} + +func (*Identity_ClaimMatch_IssuerPattern) isIdentity_ClaimMatch_Iss() {} + +type isIdentity_ClaimMatch_Sub interface { + isIdentity_ClaimMatch_Sub() +} + +type Identity_ClaimMatch_Subject struct { + // subject of OIDC ID tokens issued for this identity. + Subject string `protobuf:"bytes,3,opt,name=subject,proto3,oneof"` +} + +type Identity_ClaimMatch_SubjectPattern struct { + // subject_pattern is a regular expression for matching the + // token's subject claim. + SubjectPattern string `protobuf:"bytes,4,opt,name=subject_pattern,json=subjectPattern,proto3,oneof"` +} + +func (*Identity_ClaimMatch_Subject) isIdentity_ClaimMatch_Sub() {} + +func (*Identity_ClaimMatch_SubjectPattern) isIdentity_ClaimMatch_Sub() {} + +type isIdentity_ClaimMatch_Aud interface { + isIdentity_ClaimMatch_Aud() +} + +type Identity_ClaimMatch_Audience struct { + // audience of OIDC ID tokens issued for this identity. + Audience string `protobuf:"bytes,5,opt,name=audience,proto3,oneof"` +} + +type Identity_ClaimMatch_AudiencePattern struct { + // audience_pattern is a regular expression for matching the + // token's audience claim. + AudiencePattern string `protobuf:"bytes,6,opt,name=audience_pattern,json=audiencePattern,proto3,oneof"` +} + +func (*Identity_ClaimMatch_Audience) isIdentity_ClaimMatch_Aud() {} + +func (*Identity_ClaimMatch_AudiencePattern) isIdentity_ClaimMatch_Aud() {} + +type Identity_StaticKeys struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // issuer of the OIDC ID tokens issued for this identity. + // Matches the `iss` claim. + Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` + // subject of OIDC ID tokens issued for this identity. + // Matches the `sub` claim. + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + // issuer_keys is JWKS-formatted public keys for the issuer. + // Required, otherwise use Literal. + IssuerKeys string `protobuf:"bytes,4,opt,name=issuer_keys,json=issuerKeys,proto3" json:"issuer_keys,omitempty"` + // expiration is the time when the issuer_keys will expire. + // Defaults to / Maximum of 30 days after creation time. + Expiration *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=expiration,proto3" json:"expiration,omitempty"` +} + +func (x *Identity_StaticKeys) Reset() { + *x = Identity_StaticKeys{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Identity_StaticKeys) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Identity_StaticKeys) ProtoMessage() {} + +func (x *Identity_StaticKeys) ProtoReflect() protoreflect.Message { + mi := &file_identity_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Identity_StaticKeys.ProtoReflect.Descriptor instead. +func (*Identity_StaticKeys) Descriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *Identity_StaticKeys) GetIssuer() string { + if x != nil { + return x.Issuer + } + return "" +} + +func (x *Identity_StaticKeys) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *Identity_StaticKeys) GetIssuerKeys() string { + if x != nil { + return x.IssuerKeys + } + return "" +} + +func (x *Identity_StaticKeys) GetExpiration() *timestamppb.Timestamp { + if x != nil { + return x.Expiration + } + return nil +} + +type Identity_AWSIdentity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required, matches the `Account` field in the GetCallerID AWS IAM + // response + AwsAccount string `protobuf:"bytes,1,opt,name=aws_account,json=awsAccount,proto3" json:"aws_account,omitempty"` + // Required, matches the `Arn` field in the GetCallerID AWS IAM response + // + // Types that are assignable to AwsArn: + // + // *Identity_AWSIdentity_Arn + // *Identity_AWSIdentity_ArnPattern + AwsArn isIdentity_AWSIdentity_AwsArn `protobuf_oneof:"aws_arn"` + // Required, matches the `UserId` field of th GetCallerID AWS IAM response + // + // Types that are assignable to AwsUserId: + // + // *Identity_AWSIdentity_UserId + // *Identity_AWSIdentity_UserIdPattern + AwsUserId isIdentity_AWSIdentity_AwsUserId `protobuf_oneof:"aws_user_id"` +} + +func (x *Identity_AWSIdentity) Reset() { + *x = Identity_AWSIdentity{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_platform_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Identity_AWSIdentity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Identity_AWSIdentity) ProtoMessage() {} + +func (x *Identity_AWSIdentity) ProtoReflect() protoreflect.Message { + mi := &file_identity_platform_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Identity_AWSIdentity.ProtoReflect.Descriptor instead. +func (*Identity_AWSIdentity) Descriptor() ([]byte, []int) { + return file_identity_platform_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *Identity_AWSIdentity) GetAwsAccount() string { + if x != nil { + return x.AwsAccount + } + return "" +} + +func (m *Identity_AWSIdentity) GetAwsArn() isIdentity_AWSIdentity_AwsArn { + if m != nil { + return m.AwsArn + } + return nil +} + +func (x *Identity_AWSIdentity) GetArn() string { + if x, ok := x.GetAwsArn().(*Identity_AWSIdentity_Arn); ok { + return x.Arn + } + return "" +} + +func (x *Identity_AWSIdentity) GetArnPattern() string { + if x, ok := x.GetAwsArn().(*Identity_AWSIdentity_ArnPattern); ok { + return x.ArnPattern + } + return "" +} + +func (m *Identity_AWSIdentity) GetAwsUserId() isIdentity_AWSIdentity_AwsUserId { + if m != nil { + return m.AwsUserId + } + return nil +} + +func (x *Identity_AWSIdentity) GetUserId() string { + if x, ok := x.GetAwsUserId().(*Identity_AWSIdentity_UserId); ok { + return x.UserId + } + return "" +} + +func (x *Identity_AWSIdentity) GetUserIdPattern() string { + if x, ok := x.GetAwsUserId().(*Identity_AWSIdentity_UserIdPattern); ok { + return x.UserIdPattern + } + return "" +} + +type isIdentity_AWSIdentity_AwsArn interface { + isIdentity_AWSIdentity_AwsArn() +} + +type Identity_AWSIdentity_Arn struct { + // Exact match to Arn of AWS Identity + Arn string `protobuf:"bytes,3,opt,name=arn,proto3,oneof"` +} + +type Identity_AWSIdentity_ArnPattern struct { + // Regular expression for matching Arn + ArnPattern string `protobuf:"bytes,4,opt,name=arn_pattern,json=arnPattern,proto3,oneof"` +} + +func (*Identity_AWSIdentity_Arn) isIdentity_AWSIdentity_AwsArn() {} + +func (*Identity_AWSIdentity_ArnPattern) isIdentity_AWSIdentity_AwsArn() {} + +type isIdentity_AWSIdentity_AwsUserId interface { + isIdentity_AWSIdentity_AwsUserId() +} + +type Identity_AWSIdentity_UserId struct { + // Exacty match of the UserID field + UserId string `protobuf:"bytes,5,opt,name=user_id,json=userId,proto3,oneof"` +} + +type Identity_AWSIdentity_UserIdPattern struct { + // Regular expression for UserId field + UserIdPattern string `protobuf:"bytes,6,opt,name=user_id_pattern,json=userIdPattern,proto3,oneof"` +} + +func (*Identity_AWSIdentity_UserId) isIdentity_AWSIdentity_AwsUserId() {} + +func (*Identity_AWSIdentity_UserIdPattern) isIdentity_AWSIdentity_AwsUserId() {} + +var File_identity_platform_proto protoreflect.FileDescriptor + +var file_identity_platform_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xba, 0x0b, 0x0a, 0x08, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, + 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4f, 0x0a, 0x0b, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x0a, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x46, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x63, 0x12, 0x58, 0x0a, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, + 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, + 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x12, 0x52, 0x0a, 0x0c, + 0x61, 0x77, 0x73, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x41, 0x57, 0x53, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x77, 0x73, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x1a, 0xad, 0x04, 0x0a, 0x0a, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x18, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0e, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x12, 0x1a, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x29, + 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1c, 0x0a, 0x08, 0x61, 0x75, 0x64, + 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x08, 0x61, + 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x10, 0x61, 0x75, 0x64, 0x69, 0x65, + 0x6e, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x02, 0x52, 0x0f, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x12, 0x50, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x66, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, + 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0d, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x1a, 0x39, + 0x0a, 0x0b, 0x43, 0x6c, 0x61, 0x69, 0x6d, 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, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x69, + 0x73, 0x73, 0x42, 0x05, 0x0a, 0x03, 0x73, 0x75, 0x62, 0x42, 0x05, 0x0a, 0x03, 0x61, 0x75, 0x64, + 0x1a, 0x9b, 0x01, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x4b, 0x65, + 0x79, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xc4, + 0x01, 0x0a, 0x0b, 0x41, 0x57, 0x53, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1f, + 0x0a, 0x0b, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x77, 0x73, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x12, 0x0a, 0x03, 0x61, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, + 0x61, 0x72, 0x6e, 0x12, 0x21, 0x0a, 0x0b, 0x61, 0x72, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x72, 0x6e, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x19, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0d, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x61, + 0x77, 0x73, 0x5f, 0x61, 0x72, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x61, 0x77, 0x73, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x42, 0x0e, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x68, 0x69, 0x70, 0x22, 0x7b, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, + 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x22, 0x2f, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, + 0x02, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x0c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x5c, 0x0a, 0x0e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, + 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x41, 0x0a, 0x0d, 0x4c, 0x6f, + 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2a, 0x4f, 0x0a, + 0x10, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, + 0x6c, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, + 0x0a, 0x08, 0x43, 0x4f, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, + 0x49, 0x4e, 0x47, 0x45, 0x53, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x41, + 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x45, 0x52, 0x10, 0x03, 0x32, 0xe9, + 0x06, 0x0a, 0x0a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0xd7, 0x01, + 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x7a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2d, 0x22, 0x21, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x85, 0x07, 0xc2, 0xf0, 0x8e, 0xfc, + 0x0b, 0x35, 0x0a, 0x2a, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xbc, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, + 0x1a, 0x1a, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x86, 0x07, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, + 0x35, 0x0a, 0x2a, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x80, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, + 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x08, 0x12, 0x06, 0x0a, 0x02, 0x87, 0x07, 0x10, 0x01, 0x12, 0x80, 0x01, 0x0a, 0x06, 0x4c, 0x6f, + 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x4c, + 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, + 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, + 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x6f, 0x6f, 0x6b, + 0x75, 0x70, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x04, 0x12, 0x02, 0x10, 0x01, 0x12, 0xbb, 0x01, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x69, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, + 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x88, 0x07, 0xc2, + 0xf0, 0x8e, 0xfc, 0x0b, 0x35, 0x0a, 0x2a, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, + 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6c, 0x0a, 0x22, 0x64, 0x65, + 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, + 0x42, 0x1a, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, + 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_identity_platform_proto_rawDescOnce sync.Once + file_identity_platform_proto_rawDescData = file_identity_platform_proto_rawDesc +) + +func file_identity_platform_proto_rawDescGZIP() []byte { + file_identity_platform_proto_rawDescOnce.Do(func() { + file_identity_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_identity_platform_proto_rawDescData) + }) + return file_identity_platform_proto_rawDescData +} + +var file_identity_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_identity_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_identity_platform_proto_goTypes = []interface{}{ + (ServicePrincipal)(0), // 0: chainguard.platform.iam.ServicePrincipal + (*Identity)(nil), // 1: chainguard.platform.iam.Identity + (*CreateIdentityRequest)(nil), // 2: chainguard.platform.iam.CreateIdentityRequest + (*DeleteIdentityRequest)(nil), // 3: chainguard.platform.iam.DeleteIdentityRequest + (*IdentityList)(nil), // 4: chainguard.platform.iam.IdentityList + (*IdentityFilter)(nil), // 5: chainguard.platform.iam.IdentityFilter + (*LookupRequest)(nil), // 6: chainguard.platform.iam.LookupRequest + (*Identity_ClaimMatch)(nil), // 7: chainguard.platform.iam.Identity.ClaimMatch + (*Identity_StaticKeys)(nil), // 8: chainguard.platform.iam.Identity.StaticKeys + (*Identity_AWSIdentity)(nil), // 9: chainguard.platform.iam.Identity.AWSIdentity + nil, // 10: chainguard.platform.iam.Identity.ClaimMatch.ClaimsEntry + nil, // 11: chainguard.platform.iam.Identity.ClaimMatch.ClaimPatternsEntry + (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 13: chainguard.platform.common.UIDPFilter + (*emptypb.Empty)(nil), // 14: google.protobuf.Empty +} +var file_identity_platform_proto_depIdxs = []int32{ + 12, // 0: chainguard.platform.iam.Identity.created_at:type_name -> google.protobuf.Timestamp + 12, // 1: chainguard.platform.iam.Identity.updated_at:type_name -> google.protobuf.Timestamp + 7, // 2: chainguard.platform.iam.Identity.claim_match:type_name -> chainguard.platform.iam.Identity.ClaimMatch + 8, // 3: chainguard.platform.iam.Identity.static:type_name -> chainguard.platform.iam.Identity.StaticKeys + 0, // 4: chainguard.platform.iam.Identity.service_principal:type_name -> chainguard.platform.iam.ServicePrincipal + 9, // 5: chainguard.platform.iam.Identity.aws_identity:type_name -> chainguard.platform.iam.Identity.AWSIdentity + 1, // 6: chainguard.platform.iam.CreateIdentityRequest.identity:type_name -> chainguard.platform.iam.Identity + 1, // 7: chainguard.platform.iam.IdentityList.items:type_name -> chainguard.platform.iam.Identity + 13, // 8: chainguard.platform.iam.IdentityFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 10, // 9: chainguard.platform.iam.Identity.ClaimMatch.claims:type_name -> chainguard.platform.iam.Identity.ClaimMatch.ClaimsEntry + 11, // 10: chainguard.platform.iam.Identity.ClaimMatch.claim_patterns:type_name -> chainguard.platform.iam.Identity.ClaimMatch.ClaimPatternsEntry + 12, // 11: chainguard.platform.iam.Identity.StaticKeys.expiration:type_name -> google.protobuf.Timestamp + 2, // 12: chainguard.platform.iam.Identities.Create:input_type -> chainguard.platform.iam.CreateIdentityRequest + 1, // 13: chainguard.platform.iam.Identities.Update:input_type -> chainguard.platform.iam.Identity + 5, // 14: chainguard.platform.iam.Identities.List:input_type -> chainguard.platform.iam.IdentityFilter + 6, // 15: chainguard.platform.iam.Identities.Lookup:input_type -> chainguard.platform.iam.LookupRequest + 3, // 16: chainguard.platform.iam.Identities.Delete:input_type -> chainguard.platform.iam.DeleteIdentityRequest + 1, // 17: chainguard.platform.iam.Identities.Create:output_type -> chainguard.platform.iam.Identity + 1, // 18: chainguard.platform.iam.Identities.Update:output_type -> chainguard.platform.iam.Identity + 4, // 19: chainguard.platform.iam.Identities.List:output_type -> chainguard.platform.iam.IdentityList + 1, // 20: chainguard.platform.iam.Identities.Lookup:output_type -> chainguard.platform.iam.Identity + 14, // 21: chainguard.platform.iam.Identities.Delete:output_type -> google.protobuf.Empty + 17, // [17:22] is the sub-list for method output_type + 12, // [12:17] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name +} + +func init() { file_identity_platform_proto_init() } +func file_identity_platform_proto_init() { + if File_identity_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_identity_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Identity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateIdentityRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteIdentityRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LookupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Identity_ClaimMatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Identity_StaticKeys); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Identity_AWSIdentity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_identity_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Identity_ClaimMatch_)(nil), + (*Identity_Static)(nil), + (*Identity_ServicePrincipal)(nil), + (*Identity_AwsIdentity)(nil), + } + file_identity_platform_proto_msgTypes[6].OneofWrappers = []interface{}{ + (*Identity_ClaimMatch_Issuer)(nil), + (*Identity_ClaimMatch_IssuerPattern)(nil), + (*Identity_ClaimMatch_Subject)(nil), + (*Identity_ClaimMatch_SubjectPattern)(nil), + (*Identity_ClaimMatch_Audience)(nil), + (*Identity_ClaimMatch_AudiencePattern)(nil), + } + file_identity_platform_proto_msgTypes[8].OneofWrappers = []interface{}{ + (*Identity_AWSIdentity_Arn)(nil), + (*Identity_AWSIdentity_ArnPattern)(nil), + (*Identity_AWSIdentity_UserId)(nil), + (*Identity_AWSIdentity_UserIdPattern)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_identity_platform_proto_rawDesc, + NumEnums: 1, + NumMessages: 11, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_identity_platform_proto_goTypes, + DependencyIndexes: file_identity_platform_proto_depIdxs, + EnumInfos: file_identity_platform_proto_enumTypes, + MessageInfos: file_identity_platform_proto_msgTypes, + }.Build() + File_identity_platform_proto = out.File + file_identity_platform_proto_rawDesc = nil + file_identity_platform_proto_goTypes = nil + file_identity_platform_proto_depIdxs = nil +} diff --git a/proto/platform/iam/v1/identity.platform.pb.gw.go b/proto/platform/iam/v1/identity.platform.pb.gw.go new file mode 100644 index 00000000..78f1d948 --- /dev/null +++ b/proto/platform/iam/v1/identity.platform.pb.gw.go @@ -0,0 +1,591 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: identity.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Identities_Create_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateIdentityRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Identity); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Identities_Create_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateIdentityRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Identity); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Identities_Update_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Identity + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Identities_Update_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Identity + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Identities_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Identities_List_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq IdentityFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Identities_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Identities_List_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq IdentityFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Identities_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Identities_Lookup_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Identities_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LookupRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Identities_Lookup_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Lookup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Identities_Lookup_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LookupRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Identities_Lookup_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Lookup(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Identities_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client IdentitiesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteIdentityRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Identities_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server IdentitiesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteIdentityRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterIdentitiesHandlerServer registers the http handlers for service Identities to "mux". +// UnaryRPC :call IdentitiesServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterIdentitiesHandlerFromEndpoint instead. +func RegisterIdentitiesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server IdentitiesServer) error { + + mux.Handle("POST", pattern_Identities_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Create", runtime.WithHTTPPathPattern("/iam/v1/identities/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Identities_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Identities_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Update", runtime.WithHTTPPathPattern("/iam/v1/identities/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Identities_Update_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Identities_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/List", runtime.WithHTTPPathPattern("/iam/v1/identities")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Identities_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Identities_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Lookup", runtime.WithHTTPPathPattern("/iam/v1/identities/lookup")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Identities_Lookup_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Lookup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Identities_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Delete", runtime.WithHTTPPathPattern("/iam/v1/identities/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Identities_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterIdentitiesHandlerFromEndpoint is same as RegisterIdentitiesHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterIdentitiesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterIdentitiesHandler(ctx, mux, conn) +} + +// RegisterIdentitiesHandler registers the http handlers for service Identities to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterIdentitiesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterIdentitiesHandlerClient(ctx, mux, NewIdentitiesClient(conn)) +} + +// RegisterIdentitiesHandlerClient registers the http handlers for service Identities +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "IdentitiesClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "IdentitiesClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "IdentitiesClient" to call the correct interceptors. +func RegisterIdentitiesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client IdentitiesClient) error { + + mux.Handle("POST", pattern_Identities_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Create", runtime.WithHTTPPathPattern("/iam/v1/identities/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Identities_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Identities_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Update", runtime.WithHTTPPathPattern("/iam/v1/identities/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Identities_Update_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Identities_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/List", runtime.WithHTTPPathPattern("/iam/v1/identities")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Identities_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Identities_Lookup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Lookup", runtime.WithHTTPPathPattern("/iam/v1/identities/lookup")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Identities_Lookup_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Lookup_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Identities_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Identities/Delete", runtime.WithHTTPPathPattern("/iam/v1/identities/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Identities_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Identities_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Identities_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identities", "parent_id"}, "")) + + pattern_Identities_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identities", "id"}, "")) + + pattern_Identities_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "identities"}, "")) + + pattern_Identities_Lookup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"iam", "v1", "identities", "lookup"}, "")) + + pattern_Identities_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identities", "id"}, "")) +) + +var ( + forward_Identities_Create_0 = runtime.ForwardResponseMessage + + forward_Identities_Update_0 = runtime.ForwardResponseMessage + + forward_Identities_List_0 = runtime.ForwardResponseMessage + + forward_Identities_Lookup_0 = runtime.ForwardResponseMessage + + forward_Identities_Delete_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/iam/v1/identity.platform.proto b/proto/platform/iam/v1/identity.platform.proto new file mode 100644 index 00000000..48dfbeef --- /dev/null +++ b/proto/platform/iam/v1/identity.platform.proto @@ -0,0 +1,251 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.iam.v1"; +option java_outer_classname = "PlatformIAMIdentitiesProto"; + +package chainguard.platform.iam; + +import "google/protobuf/timestamp.proto"; +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Identities { + rpc Create(CreateIdentityRequest) returns (Identity) { + option (google.api.http) = { + post: "/iam/v1/identities/{parent_id=**}" + body: "identity" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_IDENTITY_CREATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.identity.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Update(Identity) returns (Identity) { + option (google.api.http) = { + put: "/iam/v1/identities/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_IDENTITY_UPDATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.identity.updated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc List(IdentityFilter) returns (IdentityList) { + option (google.api.http) = { + get: "/iam/v1/identities" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_IDENTITY_LIST] + unscoped: true + } + }; + } + + rpc Lookup(LookupRequest) returns (Identity) { + option (google.api.http) = { + get: "/iam/v1/identities/lookup" + }; + option (chainguard.annotations.iam) = { + enabled: { + unscoped: true + } + }; + } + + rpc Delete(DeleteIdentityRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/iam/v1/identities/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_IDENTITY_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.identity.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } +} + +enum ServicePrincipal { + UNKNOWN = 0; + + COSIGNED = 1; + INGESTER = 2; + CATALOG_SYNCER = 3; +} + +message Identity { + // id is unique identifier of this specific identity. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + // name, human readable name of identity. + string name = 2; + // description, human readable of identity. + string description = 3; + // created_at is the timestamp for when the identity was created. + google.protobuf.Timestamp created_at = 4; + // updated_at is the timestamp for when the identity was last updated. + google.protobuf.Timestamp updated_at = 5; + + // relationship is used to describe how this identity relates to + // identities coming from 3rd party Identity Providers (IdPs) + oneof relationship { + // claim_match checks the third party IdP token's claims against one + // or more configured patterns. + ClaimMatch claim_match = 10; + + // static is equivalent to literal, but instead of discovering the + // IdP's verification keys we verify the identity using pre-registered + // verification keys. This is intended for use with identities from + // providers without an "online" issuer (network accessible to our IdP), + // such as a KinD/minikube cluster. + // NOTE: because this path does not have a mechanism for key rotation + // the identity will expire, with a maximum lifetime of 30d. + StaticKeys static = 11; + + // service_principal is the name of the Chainguard service that is + // allowed to assume this identity. These names correlate with the + // service names used in impersonation with account associations. + ServicePrincipal service_principal = 12; + + // aws_identity matches AWS IAM users and roles to an identity + AWSIdentity aws_identity = 13; + } + + message ClaimMatch { + // Required, matches the `iss` claim. + oneof iss { + // issuer of the OIDC ID tokens issued for this identity. + string issuer = 1; + // issuer_pattern is a regular expression for matching the + // token's issuer claim. + string issuer_pattern = 2; + } + + // Required, matches the `sub` claim. + oneof sub { + // subject of OIDC ID tokens issued for this identity. + string subject = 3; + + // subject_pattern is a regular expression for matching the + // token's subject claim. + string subject_pattern = 4; + } + + // Optional, matches the `aud` claim. + // When unspecified, this defaults to the hostname of the SaaS + // environment's issuer. + oneof aud { + // audience of OIDC ID tokens issued for this identity. + string audience = 5; + + // audience_pattern is a regular expression for matching the + // token's audience claim. + string audience_pattern = 6; + } + + // claims is a mapping from the name of a custom claim + // to a literal matching that claim's value. + map claims = 7; + + // claim_patterns is a mapping from the name of a custom claim + // to a regular expression for matching that claim's value. + map claim_patterns = 8; + } + + message StaticKeys { + // issuer of the OIDC ID tokens issued for this identity. + // Matches the `iss` claim. + string issuer = 1; + + // subject of OIDC ID tokens issued for this identity. + // Matches the `sub` claim. + string subject = 2; + + // issuer_keys is JWKS-formatted public keys for the issuer. + // Required, otherwise use Literal. + string issuer_keys = 4; + + // expiration is the time when the issuer_keys will expire. + // Defaults to / Maximum of 30 days after creation time. + google.protobuf.Timestamp expiration = 5; + } + + message AWSIdentity { + // Required, matches the `Account` field in the GetCallerID AWS IAM + // response + string aws_account = 1; + + // Required, matches the `Arn` field in the GetCallerID AWS IAM response + oneof aws_arn { + // Exact match to Arn of AWS Identity + string arn = 3; + + // Regular expression for matching Arn + string arn_pattern = 4; + } + + // Required, matches the `UserId` field of th GetCallerID AWS IAM response + oneof aws_user_id { + // Exacty match of the UserID field + string user_id = 5; + + // Regular expression for UserId field + string user_id_pattern = 6; + } + } +} + +message CreateIdentityRequest { + // parent_id, The Group UIDP path under which the new Identity resides. + string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; + // Identity to create. + Identity identity = 2; +} + +message DeleteIdentityRequest { + // ID, UIDP of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message IdentityList { + repeated Identity items = 1; +} + +message IdentityFilter { + // uidp filters records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 1; + + // id is unique identifier to look up. + string id = 2; +} + +message LookupRequest { + // issuer is the oidc issuer to look up. + string issuer = 1; + + // subject is the subject to look up. + string subject = 2; +} diff --git a/proto/platform/iam/v1/identity.platform_grpc.pb.go b/proto/platform/iam/v1/identity.platform_grpc.pb.go new file mode 100644 index 00000000..7dfa1065 --- /dev/null +++ b/proto/platform/iam/v1/identity.platform_grpc.pb.go @@ -0,0 +1,258 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: identity.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Identities_Create_FullMethodName = "/chainguard.platform.iam.Identities/Create" + Identities_Update_FullMethodName = "/chainguard.platform.iam.Identities/Update" + Identities_List_FullMethodName = "/chainguard.platform.iam.Identities/List" + Identities_Lookup_FullMethodName = "/chainguard.platform.iam.Identities/Lookup" + Identities_Delete_FullMethodName = "/chainguard.platform.iam.Identities/Delete" +) + +// IdentitiesClient is the client API for Identities service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type IdentitiesClient interface { + Create(ctx context.Context, in *CreateIdentityRequest, opts ...grpc.CallOption) (*Identity, error) + Update(ctx context.Context, in *Identity, opts ...grpc.CallOption) (*Identity, error) + List(ctx context.Context, in *IdentityFilter, opts ...grpc.CallOption) (*IdentityList, error) + Lookup(ctx context.Context, in *LookupRequest, opts ...grpc.CallOption) (*Identity, error) + Delete(ctx context.Context, in *DeleteIdentityRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) +} + +type identitiesClient struct { + cc grpc.ClientConnInterface +} + +func NewIdentitiesClient(cc grpc.ClientConnInterface) IdentitiesClient { + return &identitiesClient{cc} +} + +func (c *identitiesClient) Create(ctx context.Context, in *CreateIdentityRequest, opts ...grpc.CallOption) (*Identity, error) { + out := new(Identity) + err := c.cc.Invoke(ctx, Identities_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identitiesClient) Update(ctx context.Context, in *Identity, opts ...grpc.CallOption) (*Identity, error) { + out := new(Identity) + err := c.cc.Invoke(ctx, Identities_Update_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identitiesClient) List(ctx context.Context, in *IdentityFilter, opts ...grpc.CallOption) (*IdentityList, error) { + out := new(IdentityList) + err := c.cc.Invoke(ctx, Identities_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identitiesClient) Lookup(ctx context.Context, in *LookupRequest, opts ...grpc.CallOption) (*Identity, error) { + out := new(Identity) + err := c.cc.Invoke(ctx, Identities_Lookup_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identitiesClient) Delete(ctx context.Context, in *DeleteIdentityRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, Identities_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// IdentitiesServer is the server API for Identities service. +// All implementations must embed UnimplementedIdentitiesServer +// for forward compatibility +type IdentitiesServer interface { + Create(context.Context, *CreateIdentityRequest) (*Identity, error) + Update(context.Context, *Identity) (*Identity, error) + List(context.Context, *IdentityFilter) (*IdentityList, error) + Lookup(context.Context, *LookupRequest) (*Identity, error) + Delete(context.Context, *DeleteIdentityRequest) (*emptypb.Empty, error) + mustEmbedUnimplementedIdentitiesServer() +} + +// UnimplementedIdentitiesServer must be embedded to have forward compatible implementations. +type UnimplementedIdentitiesServer struct { +} + +func (UnimplementedIdentitiesServer) Create(context.Context, *CreateIdentityRequest) (*Identity, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedIdentitiesServer) Update(context.Context, *Identity) (*Identity, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedIdentitiesServer) List(context.Context, *IdentityFilter) (*IdentityList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedIdentitiesServer) Lookup(context.Context, *LookupRequest) (*Identity, error) { + return nil, status.Errorf(codes.Unimplemented, "method Lookup not implemented") +} +func (UnimplementedIdentitiesServer) Delete(context.Context, *DeleteIdentityRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedIdentitiesServer) mustEmbedUnimplementedIdentitiesServer() {} + +// UnsafeIdentitiesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to IdentitiesServer will +// result in compilation errors. +type UnsafeIdentitiesServer interface { + mustEmbedUnimplementedIdentitiesServer() +} + +func RegisterIdentitiesServer(s grpc.ServiceRegistrar, srv IdentitiesServer) { + s.RegisterService(&Identities_ServiceDesc, srv) +} + +func _Identities_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateIdentityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentitiesServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Identities_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentitiesServer).Create(ctx, req.(*CreateIdentityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identities_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Identity) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentitiesServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Identities_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentitiesServer).Update(ctx, req.(*Identity)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identities_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IdentityFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentitiesServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Identities_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentitiesServer).List(ctx, req.(*IdentityFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identities_Lookup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LookupRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentitiesServer).Lookup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Identities_Lookup_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentitiesServer).Lookup(ctx, req.(*LookupRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Identities_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteIdentityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentitiesServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Identities_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentitiesServer).Delete(ctx, req.(*DeleteIdentityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Identities_ServiceDesc is the grpc.ServiceDesc for Identities service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Identities_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.iam.Identities", + HandlerType: (*IdentitiesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _Identities_Create_Handler, + }, + { + MethodName: "Update", + Handler: _Identities_Update_Handler, + }, + { + MethodName: "List", + Handler: _Identities_List_Handler, + }, + { + MethodName: "Lookup", + Handler: _Identities_Lookup_Handler, + }, + { + MethodName: "Delete", + Handler: _Identities_Delete_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "identity.platform.proto", +} diff --git a/proto/platform/iam/v1/identity_providers.platform.event.go b/proto/platform/iam/v1/identity_providers.platform.event.go new file mode 100644 index 00000000..c3a344ec --- /dev/null +++ b/proto/platform/iam/v1/identity_providers.platform.event.go @@ -0,0 +1,40 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "chainguard.dev/sdk/uidp" +) + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *IdentityProvider) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *IdentityProvider) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *DeleteIdentityProviderRequest) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *DeleteIdentityProviderRequest) CloudEventsSubject() string { + return x.GetId() +} diff --git a/proto/platform/iam/v1/identity_providers.platform.pb.go b/proto/platform/iam/v1/identity_providers.platform.pb.go new file mode 100644 index 00000000..eba96e4e --- /dev/null +++ b/proto/platform/iam/v1/identity_providers.platform.pb.go @@ -0,0 +1,693 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: identity_providers.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type IdentityProvider struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is unique identifier of this specific identity provider + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // default_role is the UIDP of an optional default role + // to grant users of this identity provider. + DefaultRole string `protobuf:"bytes,4,opt,name=default_role,json=defaultRole,proto3" json:"default_role,omitempty"` + // Types that are assignable to Configuration: + // + // *IdentityProvider_Oidc + Configuration isIdentityProvider_Configuration `protobuf_oneof:"configuration"` +} + +func (x *IdentityProvider) Reset() { + *x = IdentityProvider{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_providers_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityProvider) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityProvider) ProtoMessage() {} + +func (x *IdentityProvider) ProtoReflect() protoreflect.Message { + mi := &file_identity_providers_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IdentityProvider.ProtoReflect.Descriptor instead. +func (*IdentityProvider) Descriptor() ([]byte, []int) { + return file_identity_providers_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *IdentityProvider) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *IdentityProvider) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *IdentityProvider) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *IdentityProvider) GetDefaultRole() string { + if x != nil { + return x.DefaultRole + } + return "" +} + +func (m *IdentityProvider) GetConfiguration() isIdentityProvider_Configuration { + if m != nil { + return m.Configuration + } + return nil +} + +func (x *IdentityProvider) GetOidc() *IdentityProvider_OIDC { + if x, ok := x.GetConfiguration().(*IdentityProvider_Oidc); ok { + return x.Oidc + } + return nil +} + +type isIdentityProvider_Configuration interface { + isIdentityProvider_Configuration() +} + +type IdentityProvider_Oidc struct { + Oidc *IdentityProvider_OIDC `protobuf:"bytes,20,opt,name=oidc,proto3,oneof"` +} + +func (*IdentityProvider_Oidc) isIdentityProvider_Configuration() {} + +type CreateIdentityProviderRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // parent_id is the exact UIDP of the IAM group to nest this identity provider under + ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + IdentityProvider *IdentityProvider `protobuf:"bytes,2,opt,name=identity_provider,json=identityProvider,proto3" json:"identity_provider,omitempty"` +} + +func (x *CreateIdentityProviderRequest) Reset() { + *x = CreateIdentityProviderRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_providers_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateIdentityProviderRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateIdentityProviderRequest) ProtoMessage() {} + +func (x *CreateIdentityProviderRequest) ProtoReflect() protoreflect.Message { + mi := &file_identity_providers_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateIdentityProviderRequest.ProtoReflect.Descriptor instead. +func (*CreateIdentityProviderRequest) Descriptor() ([]byte, []int) { + return file_identity_providers_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *CreateIdentityProviderRequest) GetParentId() string { + if x != nil { + return x.ParentId + } + return "" +} + +func (x *CreateIdentityProviderRequest) GetIdentityProvider() *IdentityProvider { + if x != nil { + return x.IdentityProvider + } + return nil +} + +type DeleteIdentityProviderRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the IdP + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteIdentityProviderRequest) Reset() { + *x = DeleteIdentityProviderRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_providers_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteIdentityProviderRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteIdentityProviderRequest) ProtoMessage() {} + +func (x *DeleteIdentityProviderRequest) ProtoReflect() protoreflect.Message { + mi := &file_identity_providers_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteIdentityProviderRequest.ProtoReflect.Descriptor instead. +func (*DeleteIdentityProviderRequest) Descriptor() ([]byte, []int) { + return file_identity_providers_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *DeleteIdentityProviderRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type IdentityProviderFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Exact match on identity provider UIDP + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Exact match on identity provider name + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // uidp filers records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,3,opt,name=uidp,proto3" json:"uidp,omitempty"` +} + +func (x *IdentityProviderFilter) Reset() { + *x = IdentityProviderFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_providers_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityProviderFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityProviderFilter) ProtoMessage() {} + +func (x *IdentityProviderFilter) ProtoReflect() protoreflect.Message { + mi := &file_identity_providers_platform_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 IdentityProviderFilter.ProtoReflect.Descriptor instead. +func (*IdentityProviderFilter) Descriptor() ([]byte, []int) { + return file_identity_providers_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *IdentityProviderFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *IdentityProviderFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *IdentityProviderFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +type IdentityProviderList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*IdentityProvider `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *IdentityProviderList) Reset() { + *x = IdentityProviderList{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_providers_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityProviderList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityProviderList) ProtoMessage() {} + +func (x *IdentityProviderList) ProtoReflect() protoreflect.Message { + mi := &file_identity_providers_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IdentityProviderList.ProtoReflect.Descriptor instead. +func (*IdentityProviderList) Descriptor() ([]byte, []int) { + return file_identity_providers_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *IdentityProviderList) GetItems() []*IdentityProvider { + if x != nil { + return x.Items + } + return nil +} + +type IdentityProvider_OIDC struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Issuer URL (e.g https://accounts.google.com) + Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` + ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + ClientSecret string `protobuf:"bytes,3,opt,name=client_secret,json=clientSecret,proto3" json:"client_secret,omitempty"` + // Additional scopes to request for ID tokens + AdditionalScopes []string `protobuf:"bytes,4,rep,name=additional_scopes,json=additionalScopes,proto3" json:"additional_scopes,omitempty"` +} + +func (x *IdentityProvider_OIDC) Reset() { + *x = IdentityProvider_OIDC{} + if protoimpl.UnsafeEnabled { + mi := &file_identity_providers_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityProvider_OIDC) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityProvider_OIDC) ProtoMessage() {} + +func (x *IdentityProvider_OIDC) ProtoReflect() protoreflect.Message { + mi := &file_identity_providers_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IdentityProvider_OIDC.ProtoReflect.Descriptor instead. +func (*IdentityProvider_OIDC) Descriptor() ([]byte, []int) { + return file_identity_providers_platform_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *IdentityProvider_OIDC) GetIssuer() string { + if x != nil { + return x.Issuer + } + return "" +} + +func (x *IdentityProvider_OIDC) GetClientId() string { + if x != nil { + return x.ClientId + } + return "" +} + +func (x *IdentityProvider_OIDC) GetClientSecret() string { + if x != nil { + return x.ClientSecret + } + return "" +} + +func (x *IdentityProvider_OIDC) GetAdditionalScopes() []string { + if x != nil { + return x.AdditionalScopes + } + return nil +} + +var File_identity_providers_platform_proto protoreflect.FileDescriptor + +var file_identity_providers_platform_proto_rawDesc = []byte{ + 0x0a, 0x21, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1c, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, + 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xea, 0x02, 0x0a, 0x10, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x44, 0x0a, 0x04, 0x6f, 0x69, 0x64, 0x63, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x2e, 0x4f, 0x49, 0x44, 0x43, 0x48, 0x00, 0x52, 0x04, 0x6f, 0x69, 0x64, 0x63, 0x1a, 0x8d, 0x01, + 0x0a, 0x04, 0x4f, 0x49, 0x44, 0x43, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x1b, + 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x61, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x42, 0x0f, 0x0a, + 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9c, + 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x56, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x10, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x37, 0x0a, + 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, + 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x78, 0x0a, 0x16, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, + 0x22, 0x57, 0x0a, 0x14, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x32, 0xed, 0x06, 0x0a, 0x11, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, + 0x84, 0x02, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x36, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x96, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x28, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, + 0x3a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0x95, 0x0a, 0x91, + 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdf, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x1a, 0x29, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x1a, + 0x21, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0x96, + 0x0a, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x97, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x1a, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x69, 0x61, 0x6d, 0x2f, + 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x97, 0x0a, + 0x10, 0x01, 0x12, 0xd4, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x36, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x7a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x2a, 0x21, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0x98, 0x0a, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, + 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x72, 0x0a, 0x22, 0x64, 0x65, 0x76, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, + 0x20, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_identity_providers_platform_proto_rawDescOnce sync.Once + file_identity_providers_platform_proto_rawDescData = file_identity_providers_platform_proto_rawDesc +) + +func file_identity_providers_platform_proto_rawDescGZIP() []byte { + file_identity_providers_platform_proto_rawDescOnce.Do(func() { + file_identity_providers_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_identity_providers_platform_proto_rawDescData) + }) + return file_identity_providers_platform_proto_rawDescData +} + +var file_identity_providers_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_identity_providers_platform_proto_goTypes = []interface{}{ + (*IdentityProvider)(nil), // 0: chainguard.platform.iam.IdentityProvider + (*CreateIdentityProviderRequest)(nil), // 1: chainguard.platform.iam.CreateIdentityProviderRequest + (*DeleteIdentityProviderRequest)(nil), // 2: chainguard.platform.iam.DeleteIdentityProviderRequest + (*IdentityProviderFilter)(nil), // 3: chainguard.platform.iam.IdentityProviderFilter + (*IdentityProviderList)(nil), // 4: chainguard.platform.iam.IdentityProviderList + (*IdentityProvider_OIDC)(nil), // 5: chainguard.platform.iam.IdentityProvider.OIDC + (*v1.UIDPFilter)(nil), // 6: chainguard.platform.common.UIDPFilter + (*emptypb.Empty)(nil), // 7: google.protobuf.Empty +} +var file_identity_providers_platform_proto_depIdxs = []int32{ + 5, // 0: chainguard.platform.iam.IdentityProvider.oidc:type_name -> chainguard.platform.iam.IdentityProvider.OIDC + 0, // 1: chainguard.platform.iam.CreateIdentityProviderRequest.identity_provider:type_name -> chainguard.platform.iam.IdentityProvider + 6, // 2: chainguard.platform.iam.IdentityProviderFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 0, // 3: chainguard.platform.iam.IdentityProviderList.items:type_name -> chainguard.platform.iam.IdentityProvider + 1, // 4: chainguard.platform.iam.IdentityProviders.Create:input_type -> chainguard.platform.iam.CreateIdentityProviderRequest + 0, // 5: chainguard.platform.iam.IdentityProviders.Update:input_type -> chainguard.platform.iam.IdentityProvider + 3, // 6: chainguard.platform.iam.IdentityProviders.List:input_type -> chainguard.platform.iam.IdentityProviderFilter + 2, // 7: chainguard.platform.iam.IdentityProviders.Delete:input_type -> chainguard.platform.iam.DeleteIdentityProviderRequest + 0, // 8: chainguard.platform.iam.IdentityProviders.Create:output_type -> chainguard.platform.iam.IdentityProvider + 0, // 9: chainguard.platform.iam.IdentityProviders.Update:output_type -> chainguard.platform.iam.IdentityProvider + 4, // 10: chainguard.platform.iam.IdentityProviders.List:output_type -> chainguard.platform.iam.IdentityProviderList + 7, // 11: chainguard.platform.iam.IdentityProviders.Delete:output_type -> google.protobuf.Empty + 8, // [8:12] is the sub-list for method output_type + 4, // [4:8] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_identity_providers_platform_proto_init() } +func file_identity_providers_platform_proto_init() { + if File_identity_providers_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_identity_providers_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityProvider); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_providers_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateIdentityProviderRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_providers_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteIdentityProviderRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_providers_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityProviderFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_providers_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityProviderList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_identity_providers_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityProvider_OIDC); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_identity_providers_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*IdentityProvider_Oidc)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_identity_providers_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_identity_providers_platform_proto_goTypes, + DependencyIndexes: file_identity_providers_platform_proto_depIdxs, + MessageInfos: file_identity_providers_platform_proto_msgTypes, + }.Build() + File_identity_providers_platform_proto = out.File + file_identity_providers_platform_proto_rawDesc = nil + file_identity_providers_platform_proto_goTypes = nil + file_identity_providers_platform_proto_depIdxs = nil +} diff --git a/proto/platform/iam/v1/identity_providers.platform.pb.gw.go b/proto/platform/iam/v1/identity_providers.platform.pb.gw.go new file mode 100644 index 00000000..6ac2c190 --- /dev/null +++ b/proto/platform/iam/v1/identity_providers.platform.pb.gw.go @@ -0,0 +1,506 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: identity_providers.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_IdentityProviders_Create_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProvidersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateIdentityProviderRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.IdentityProvider); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_IdentityProviders_Create_0(ctx context.Context, marshaler runtime.Marshaler, server IdentityProvidersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateIdentityProviderRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.IdentityProvider); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +func request_IdentityProviders_Update_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProvidersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq IdentityProvider + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_IdentityProviders_Update_0(ctx context.Context, marshaler runtime.Marshaler, server IdentityProvidersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq IdentityProvider + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_IdentityProviders_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_IdentityProviders_List_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProvidersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq IdentityProviderFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_IdentityProviders_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_IdentityProviders_List_0(ctx context.Context, marshaler runtime.Marshaler, server IdentityProvidersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq IdentityProviderFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_IdentityProviders_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_IdentityProviders_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client IdentityProvidersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteIdentityProviderRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_IdentityProviders_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server IdentityProvidersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteIdentityProviderRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterIdentityProvidersHandlerServer registers the http handlers for service IdentityProviders to "mux". +// UnaryRPC :call IdentityProvidersServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterIdentityProvidersHandlerFromEndpoint instead. +func RegisterIdentityProvidersHandlerServer(ctx context.Context, mux *runtime.ServeMux, server IdentityProvidersServer) error { + + mux.Handle("POST", pattern_IdentityProviders_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Create", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_IdentityProviders_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_IdentityProviders_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_IdentityProviders_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Update", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_IdentityProviders_Update_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_IdentityProviders_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_IdentityProviders_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/List", runtime.WithHTTPPathPattern("/iam/v1/identityProviders")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_IdentityProviders_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_IdentityProviders_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_IdentityProviders_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Delete", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_IdentityProviders_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_IdentityProviders_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterIdentityProvidersHandlerFromEndpoint is same as RegisterIdentityProvidersHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterIdentityProvidersHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterIdentityProvidersHandler(ctx, mux, conn) +} + +// RegisterIdentityProvidersHandler registers the http handlers for service IdentityProviders to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterIdentityProvidersHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterIdentityProvidersHandlerClient(ctx, mux, NewIdentityProvidersClient(conn)) +} + +// RegisterIdentityProvidersHandlerClient registers the http handlers for service IdentityProviders +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "IdentityProvidersClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "IdentityProvidersClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "IdentityProvidersClient" to call the correct interceptors. +func RegisterIdentityProvidersHandlerClient(ctx context.Context, mux *runtime.ServeMux, client IdentityProvidersClient) error { + + mux.Handle("POST", pattern_IdentityProviders_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Create", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_IdentityProviders_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_IdentityProviders_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_IdentityProviders_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Update", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_IdentityProviders_Update_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_IdentityProviders_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_IdentityProviders_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/List", runtime.WithHTTPPathPattern("/iam/v1/identityProviders")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_IdentityProviders_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_IdentityProviders_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_IdentityProviders_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.IdentityProviders/Delete", runtime.WithHTTPPathPattern("/iam/v1/identityProviders/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_IdentityProviders_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_IdentityProviders_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_IdentityProviders_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identityProviders", "parent_id"}, "")) + + pattern_IdentityProviders_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identityProviders", "id"}, "")) + + pattern_IdentityProviders_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "identityProviders"}, "")) + + pattern_IdentityProviders_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "identityProviders", "id"}, "")) +) + +var ( + forward_IdentityProviders_Create_0 = runtime.ForwardResponseMessage + + forward_IdentityProviders_Update_0 = runtime.ForwardResponseMessage + + forward_IdentityProviders_List_0 = runtime.ForwardResponseMessage + + forward_IdentityProviders_Delete_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/iam/v1/identity_providers.platform.proto b/proto/platform/iam/v1/identity_providers.platform.proto new file mode 100644 index 00000000..d74e65a7 --- /dev/null +++ b/proto/platform/iam/v1/identity_providers.platform.proto @@ -0,0 +1,149 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.iam.v1"; +option java_outer_classname = "PlatformIAMIdentityProviderProto"; + +package chainguard.platform.iam; + +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service IdentityProviders { + rpc Create(CreateIdentityProviderRequest) returns (IdentityProvider) { + option (google.api.http) = { + post: "/iam/v1/identityProviders/{parent_id=**}" + body: "identity_provider" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [ + CAP_IAM_IDENTITY_PROVIDERS_CREATE, + // Creating an IdentityProvider provides to option of choosing + // a default role, which makes it effectively a RoleBinding + // promise, so check that the caller has permission to + // create RoleBindings as well. + CAP_IAM_ROLE_BINDINGS_CREATE + ] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.identity_providers.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Update(IdentityProvider) returns (IdentityProvider) { + option (google.api.http) = { + put: "/iam/v1/identityProviders/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [ + CAP_IAM_IDENTITY_PROVIDERS_UPDATE, + // Updating an IdentityProvider provides to option of choosing + // a default role, which makes it effectively a RoleBinding + // promise, so check that the caller has permission to + // create RoleBindings as well. + CAP_IAM_ROLE_BINDINGS_CREATE + ] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.identity_providers.updated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc List(IdentityProviderFilter) returns (IdentityProviderList) { + option (google.api.http) = { + get: "/iam/v1/identityProviders" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_IDENTITY_PROVIDERS_LIST] + unscoped: true + } + }; + } + + rpc Delete(DeleteIdentityProviderRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/iam/v1/identityProviders/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_IDENTITY_PROVIDERS_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.identity_providers.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + +} + +message IdentityProvider { + // id is unique identifier of this specific identity provider + string id = 1 [(chainguard.annotations.iam_scope) = true]; + + string name = 2; + string description = 3; + + // default_role is the UIDP of an optional default role + // to grant users of this identity provider. + string default_role = 4; + + oneof configuration { + OIDC oidc = 20; + + // TODO: SAML, LDAP etc; + } + + message OIDC { + // Issuer URL (e.g https://accounts.google.com) + string issuer = 1; + + string client_id = 2; + string client_secret = 3; + + // Additional scopes to request for ID tokens + repeated string additional_scopes = 4; + } +} + +message CreateIdentityProviderRequest { + // parent_id is the exact UIDP of the IAM group to nest this identity provider under + string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; + + IdentityProvider identity_provider = 2; +} + +message DeleteIdentityProviderRequest { + // id is the exact UIDP of the IdP + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message IdentityProviderFilter { + // Exact match on identity provider UIDP + string id = 1; + + // Exact match on identity provider name + string name = 2; + + // uidp filers records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 3; +} + +message IdentityProviderList { + repeated IdentityProvider items = 1; +} diff --git a/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go b/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go new file mode 100644 index 00000000..63930595 --- /dev/null +++ b/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go @@ -0,0 +1,221 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: identity_providers.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + IdentityProviders_Create_FullMethodName = "/chainguard.platform.iam.IdentityProviders/Create" + IdentityProviders_Update_FullMethodName = "/chainguard.platform.iam.IdentityProviders/Update" + IdentityProviders_List_FullMethodName = "/chainguard.platform.iam.IdentityProviders/List" + IdentityProviders_Delete_FullMethodName = "/chainguard.platform.iam.IdentityProviders/Delete" +) + +// IdentityProvidersClient is the client API for IdentityProviders service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type IdentityProvidersClient interface { + Create(ctx context.Context, in *CreateIdentityProviderRequest, opts ...grpc.CallOption) (*IdentityProvider, error) + Update(ctx context.Context, in *IdentityProvider, opts ...grpc.CallOption) (*IdentityProvider, error) + List(ctx context.Context, in *IdentityProviderFilter, opts ...grpc.CallOption) (*IdentityProviderList, error) + Delete(ctx context.Context, in *DeleteIdentityProviderRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) +} + +type identityProvidersClient struct { + cc grpc.ClientConnInterface +} + +func NewIdentityProvidersClient(cc grpc.ClientConnInterface) IdentityProvidersClient { + return &identityProvidersClient{cc} +} + +func (c *identityProvidersClient) Create(ctx context.Context, in *CreateIdentityProviderRequest, opts ...grpc.CallOption) (*IdentityProvider, error) { + out := new(IdentityProvider) + err := c.cc.Invoke(ctx, IdentityProviders_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identityProvidersClient) Update(ctx context.Context, in *IdentityProvider, opts ...grpc.CallOption) (*IdentityProvider, error) { + out := new(IdentityProvider) + err := c.cc.Invoke(ctx, IdentityProviders_Update_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identityProvidersClient) List(ctx context.Context, in *IdentityProviderFilter, opts ...grpc.CallOption) (*IdentityProviderList, error) { + out := new(IdentityProviderList) + err := c.cc.Invoke(ctx, IdentityProviders_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *identityProvidersClient) Delete(ctx context.Context, in *DeleteIdentityProviderRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, IdentityProviders_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// IdentityProvidersServer is the server API for IdentityProviders service. +// All implementations must embed UnimplementedIdentityProvidersServer +// for forward compatibility +type IdentityProvidersServer interface { + Create(context.Context, *CreateIdentityProviderRequest) (*IdentityProvider, error) + Update(context.Context, *IdentityProvider) (*IdentityProvider, error) + List(context.Context, *IdentityProviderFilter) (*IdentityProviderList, error) + Delete(context.Context, *DeleteIdentityProviderRequest) (*emptypb.Empty, error) + mustEmbedUnimplementedIdentityProvidersServer() +} + +// UnimplementedIdentityProvidersServer must be embedded to have forward compatible implementations. +type UnimplementedIdentityProvidersServer struct { +} + +func (UnimplementedIdentityProvidersServer) Create(context.Context, *CreateIdentityProviderRequest) (*IdentityProvider, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedIdentityProvidersServer) Update(context.Context, *IdentityProvider) (*IdentityProvider, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedIdentityProvidersServer) List(context.Context, *IdentityProviderFilter) (*IdentityProviderList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedIdentityProvidersServer) Delete(context.Context, *DeleteIdentityProviderRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedIdentityProvidersServer) mustEmbedUnimplementedIdentityProvidersServer() {} + +// UnsafeIdentityProvidersServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to IdentityProvidersServer will +// result in compilation errors. +type UnsafeIdentityProvidersServer interface { + mustEmbedUnimplementedIdentityProvidersServer() +} + +func RegisterIdentityProvidersServer(s grpc.ServiceRegistrar, srv IdentityProvidersServer) { + s.RegisterService(&IdentityProviders_ServiceDesc, srv) +} + +func _IdentityProviders_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateIdentityProviderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityProvidersServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: IdentityProviders_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityProvidersServer).Create(ctx, req.(*CreateIdentityProviderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _IdentityProviders_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IdentityProvider) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityProvidersServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: IdentityProviders_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityProvidersServer).Update(ctx, req.(*IdentityProvider)) + } + return interceptor(ctx, in, info, handler) +} + +func _IdentityProviders_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(IdentityProviderFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityProvidersServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: IdentityProviders_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityProvidersServer).List(ctx, req.(*IdentityProviderFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _IdentityProviders_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteIdentityProviderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(IdentityProvidersServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: IdentityProviders_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(IdentityProvidersServer).Delete(ctx, req.(*DeleteIdentityProviderRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// IdentityProviders_ServiceDesc is the grpc.ServiceDesc for IdentityProviders service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var IdentityProviders_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.iam.IdentityProviders", + HandlerType: (*IdentityProvidersServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _IdentityProviders_Create_Handler, + }, + { + MethodName: "Update", + Handler: _IdentityProviders_Update_Handler, + }, + { + MethodName: "List", + Handler: _IdentityProviders_List_Handler, + }, + { + MethodName: "Delete", + Handler: _IdentityProviders_Delete_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "identity_providers.platform.proto", +} diff --git a/proto/platform/iam/v1/policies.platform.event.go b/proto/platform/iam/v1/policies.platform.event.go new file mode 100644 index 00000000..b34d781a --- /dev/null +++ b/proto/platform/iam/v1/policies.platform.event.go @@ -0,0 +1,45 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "chainguard.dev/sdk/uidp" +) + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *Policy) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *Policy) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *DeletePolicyRequest) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *DeletePolicyRequest) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.Redact. +func (x *DeletePolicyRequest) CloudEventsRedact() interface{} { + return nil +} diff --git a/proto/platform/iam/v1/policies.platform.pb.go b/proto/platform/iam/v1/policies.platform.pb.go new file mode 100644 index 00000000..d93a6671 --- /dev/null +++ b/proto/platform/iam/v1/policies.platform.pb.go @@ -0,0 +1,1027 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: policies.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CreatePolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // parent_id, The Group UIDP path under which the new policy is associated. + ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + // Policy is the policy to create; + Policy *Policy `protobuf:"bytes,2,opt,name=policy,proto3" json:"policy,omitempty"` +} + +func (x *CreatePolicyRequest) Reset() { + *x = CreatePolicyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreatePolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreatePolicyRequest) ProtoMessage() {} + +func (x *CreatePolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreatePolicyRequest.ProtoReflect.Descriptor instead. +func (*CreatePolicyRequest) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *CreatePolicyRequest) GetParentId() string { + if x != nil { + return x.ParentId + } + return "" +} + +func (x *CreatePolicyRequest) GetPolicy() *Policy { + if x != nil { + return x.Policy + } + return nil +} + +type Policy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is identifier of this specific policy. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name, human readable name of policy. + // This field is populated from the document and any existing value will be ignored for Create/Update. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // description, human readable description of policy. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // document, YAML encoded policy document. + Document string `protobuf:"bytes,4,opt,name=document,proto3" json:"document,omitempty"` + // created_at is the timestamp for when the policy was created. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // updated_at is the timestamp when the current version of the policy was last updated. + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + // enforced_version contains information about the enforced version of this policy. + // When used as a return value, Policy.name, Policy.description, and Policy.document are all copies of + // the respective fields in enforced_version for backwards compatibility. enforced_version may be empty for + // legacy policies without versions. + // When used for Create or Update, set enforced_version.label to set an optional version label. + EnforcedVersion *PolicyVersion `protobuf:"bytes,7,opt,name=enforced_version,json=enforcedVersion,proto3" json:"enforced_version,omitempty"` +} + +func (x *Policy) Reset() { + *x = Policy{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Policy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Policy) ProtoMessage() {} + +func (x *Policy) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Policy.ProtoReflect.Descriptor instead. +func (*Policy) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *Policy) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Policy) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Policy) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Policy) GetDocument() string { + if x != nil { + return x.Document + } + return "" +} + +func (x *Policy) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Policy) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +func (x *Policy) GetEnforcedVersion() *PolicyVersion { + if x != nil { + return x.EnforcedVersion + } + return nil +} + +type PolicyAuthor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the UID of the author identity. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // email is the email address of the author, if known. + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` +} + +func (x *PolicyAuthor) Reset() { + *x = PolicyAuthor{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyAuthor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyAuthor) ProtoMessage() {} + +func (x *PolicyAuthor) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyAuthor.ProtoReflect.Descriptor instead. +func (*PolicyAuthor) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *PolicyAuthor) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PolicyAuthor) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +type PolicyList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Policy `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *PolicyList) Reset() { + *x = PolicyList{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyList) ProtoMessage() {} + +func (x *PolicyList) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_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 PolicyList.ProtoReflect.Descriptor instead. +func (*PolicyList) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *PolicyList) GetItems() []*Policy { + if x != nil { + return x.Items + } + return nil +} + +type PolicyFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // uidp filers records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` + // name is the exact name of the record. + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *PolicyFilter) Reset() { + *x = PolicyFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyFilter) ProtoMessage() {} + +func (x *PolicyFilter) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyFilter.ProtoReflect.Descriptor instead. +func (*PolicyFilter) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *PolicyFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PolicyFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *PolicyFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type DeletePolicyRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeletePolicyRequest) Reset() { + *x = DeletePolicyRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeletePolicyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeletePolicyRequest) ProtoMessage() {} + +func (x *DeletePolicyRequest) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeletePolicyRequest.ProtoReflect.Descriptor instead. +func (*DeletePolicyRequest) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *DeletePolicyRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type PolicyVersion struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the identifier of this specific policy version. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name, human-readable name of policy. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // description, human-readable description of policy. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // document, YAML encoded policy document. + Document string `protobuf:"bytes,4,opt,name=document,proto3" json:"document,omitempty"` + // author is information about the identity that created/updated this version of the policy, if known. + Author *PolicyAuthor `protobuf:"bytes,5,opt,name=author,proto3" json:"author,omitempty"` + // created_at is the timestamp from when this version was created. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // label is a human-readable identifier for this version of the policy. + Label string `protobuf:"bytes,7,opt,name=label,proto3" json:"label,omitempty"` +} + +func (x *PolicyVersion) Reset() { + *x = PolicyVersion{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyVersion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyVersion) ProtoMessage() {} + +func (x *PolicyVersion) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyVersion.ProtoReflect.Descriptor instead. +func (*PolicyVersion) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{6} +} + +func (x *PolicyVersion) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PolicyVersion) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PolicyVersion) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *PolicyVersion) GetDocument() string { + if x != nil { + return x.Document + } + return "" +} + +func (x *PolicyVersion) GetAuthor() *PolicyAuthor { + if x != nil { + return x.Author + } + return nil +} + +func (x *PolicyVersion) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *PolicyVersion) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +type ActivateVersionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // version_id is the identifier of the policy version to enforce. + VersionId string `protobuf:"bytes,1,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` +} + +func (x *ActivateVersionRequest) Reset() { + *x = ActivateVersionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActivateVersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActivateVersionRequest) ProtoMessage() {} + +func (x *ActivateVersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActivateVersionRequest.ProtoReflect.Descriptor instead. +func (*ActivateVersionRequest) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{7} +} + +func (x *ActivateVersionRequest) GetVersionId() string { + if x != nil { + return x.VersionId + } + return "" +} + +type ListVersionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // policy_id is the identifier of the policy to list versions of. + PolicyId string `protobuf:"bytes,1,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` +} + +func (x *ListVersionsRequest) Reset() { + *x = ListVersionsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListVersionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListVersionsRequest) ProtoMessage() {} + +func (x *ListVersionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListVersionsRequest.ProtoReflect.Descriptor instead. +func (*ListVersionsRequest) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{8} +} + +func (x *ListVersionsRequest) GetPolicyId() string { + if x != nil { + return x.PolicyId + } + return "" +} + +type PolicyVersionList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*PolicyVersion `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *PolicyVersionList) Reset() { + *x = PolicyVersionList{} + if protoimpl.UnsafeEnabled { + mi := &file_policies_platform_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyVersionList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyVersionList) ProtoMessage() {} + +func (x *PolicyVersionList) ProtoReflect() protoreflect.Message { + mi := &file_policies_platform_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyVersionList.ProtoReflect.Descriptor instead. +func (*PolicyVersionList) Descriptor() ([]byte, []int) { + return file_policies_platform_proto_rawDescGZIP(), []int{9} +} + +func (x *PolicyVersionList) GetItems() []*PolicyVersion { + if x != nil { + return x.Items + } + return nil +} + +var File_policies_platform_proto protoreflect.FileDescriptor + +var file_policies_platform_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x73, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0xbb, 0x02, + 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x65, 0x6e, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x65, 0x6e, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x0c, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x22, 0x43, 0x0a, 0x0a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x35, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6e, 0x0a, 0x0c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, + 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2d, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, + 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x81, 0x02, 0x0a, 0x0d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3f, 0x0a, 0x16, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, + 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x3a, 0x0a, 0x13, 0x4c, 0x69, + 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x11, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x32, 0xd0, 0x08, 0x0a, 0x08, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0xcd, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x12, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x1f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa1, 0x06, 0xc2, 0xf0, 0x8e, + 0xfc, 0x0b, 0x33, 0x0a, 0x28, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x7a, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x12, 0x12, 0x10, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x69, 0x65, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xa3, 0x06, + 0x10, 0x01, 0x12, 0xb5, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2c, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa4, + 0x06, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x33, 0x0a, 0x28, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, + 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xb4, 0x01, 0x0a, 0x06, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, + 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x1a, + 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa2, 0x06, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x33, 0x0a, 0x28, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0x01, 0x12, 0xa3, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x39, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa3, 0x06, 0x12, 0xe2, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x7d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x22, 0x26, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa2, 0x06, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3d, 0x0a, + 0x32, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6a, 0x0a, 0x22, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, + 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x76, 0x31, 0x42, 0x18, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, + 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_policies_platform_proto_rawDescOnce sync.Once + file_policies_platform_proto_rawDescData = file_policies_platform_proto_rawDesc +) + +func file_policies_platform_proto_rawDescGZIP() []byte { + file_policies_platform_proto_rawDescOnce.Do(func() { + file_policies_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_policies_platform_proto_rawDescData) + }) + return file_policies_platform_proto_rawDescData +} + +var file_policies_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_policies_platform_proto_goTypes = []interface{}{ + (*CreatePolicyRequest)(nil), // 0: chainguard.platform.iam.CreatePolicyRequest + (*Policy)(nil), // 1: chainguard.platform.iam.Policy + (*PolicyAuthor)(nil), // 2: chainguard.platform.iam.PolicyAuthor + (*PolicyList)(nil), // 3: chainguard.platform.iam.PolicyList + (*PolicyFilter)(nil), // 4: chainguard.platform.iam.PolicyFilter + (*DeletePolicyRequest)(nil), // 5: chainguard.platform.iam.DeletePolicyRequest + (*PolicyVersion)(nil), // 6: chainguard.platform.iam.PolicyVersion + (*ActivateVersionRequest)(nil), // 7: chainguard.platform.iam.ActivateVersionRequest + (*ListVersionsRequest)(nil), // 8: chainguard.platform.iam.ListVersionsRequest + (*PolicyVersionList)(nil), // 9: chainguard.platform.iam.PolicyVersionList + (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 11: chainguard.platform.common.UIDPFilter + (*emptypb.Empty)(nil), // 12: google.protobuf.Empty +} +var file_policies_platform_proto_depIdxs = []int32{ + 1, // 0: chainguard.platform.iam.CreatePolicyRequest.policy:type_name -> chainguard.platform.iam.Policy + 10, // 1: chainguard.platform.iam.Policy.created_at:type_name -> google.protobuf.Timestamp + 10, // 2: chainguard.platform.iam.Policy.updated_at:type_name -> google.protobuf.Timestamp + 6, // 3: chainguard.platform.iam.Policy.enforced_version:type_name -> chainguard.platform.iam.PolicyVersion + 1, // 4: chainguard.platform.iam.PolicyList.items:type_name -> chainguard.platform.iam.Policy + 11, // 5: chainguard.platform.iam.PolicyFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 2, // 6: chainguard.platform.iam.PolicyVersion.author:type_name -> chainguard.platform.iam.PolicyAuthor + 10, // 7: chainguard.platform.iam.PolicyVersion.created_at:type_name -> google.protobuf.Timestamp + 6, // 8: chainguard.platform.iam.PolicyVersionList.items:type_name -> chainguard.platform.iam.PolicyVersion + 0, // 9: chainguard.platform.iam.Policies.Create:input_type -> chainguard.platform.iam.CreatePolicyRequest + 4, // 10: chainguard.platform.iam.Policies.List:input_type -> chainguard.platform.iam.PolicyFilter + 5, // 11: chainguard.platform.iam.Policies.Delete:input_type -> chainguard.platform.iam.DeletePolicyRequest + 1, // 12: chainguard.platform.iam.Policies.Update:input_type -> chainguard.platform.iam.Policy + 8, // 13: chainguard.platform.iam.Policies.ListVersions:input_type -> chainguard.platform.iam.ListVersionsRequest + 7, // 14: chainguard.platform.iam.Policies.ActivateVersion:input_type -> chainguard.platform.iam.ActivateVersionRequest + 1, // 15: chainguard.platform.iam.Policies.Create:output_type -> chainguard.platform.iam.Policy + 3, // 16: chainguard.platform.iam.Policies.List:output_type -> chainguard.platform.iam.PolicyList + 12, // 17: chainguard.platform.iam.Policies.Delete:output_type -> google.protobuf.Empty + 1, // 18: chainguard.platform.iam.Policies.Update:output_type -> chainguard.platform.iam.Policy + 9, // 19: chainguard.platform.iam.Policies.ListVersions:output_type -> chainguard.platform.iam.PolicyVersionList + 1, // 20: chainguard.platform.iam.Policies.ActivateVersion:output_type -> chainguard.platform.iam.Policy + 15, // [15:21] is the sub-list for method output_type + 9, // [9:15] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_policies_platform_proto_init() } +func file_policies_platform_proto_init() { + if File_policies_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_policies_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreatePolicyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policies_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Policy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policies_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyAuthor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policies_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policies_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policies_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeletePolicyRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policies_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyVersion); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policies_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActivateVersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policies_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListVersionsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policies_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyVersionList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_policies_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 10, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_policies_platform_proto_goTypes, + DependencyIndexes: file_policies_platform_proto_depIdxs, + MessageInfos: file_policies_platform_proto_msgTypes, + }.Build() + File_policies_platform_proto = out.File + file_policies_platform_proto_rawDesc = nil + file_policies_platform_proto_goTypes = nil + file_policies_platform_proto_depIdxs = nil +} diff --git a/proto/platform/iam/v1/policies.platform.pb.gw.go b/proto/platform/iam/v1/policies.platform.pb.gw.go new file mode 100644 index 00000000..2ac936c3 --- /dev/null +++ b/proto/platform/iam/v1/policies.platform.pb.gw.go @@ -0,0 +1,708 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: policies.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Policies_Create_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreatePolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Policy); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Policies_Create_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreatePolicyRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Policy); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Policies_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Policies_List_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PolicyFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Policies_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Policies_List_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PolicyFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Policies_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Policies_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeletePolicyRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Policies_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeletePolicyRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Policies_Update_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Policy + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Policies_Update_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Policy + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Policies_ListVersions_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListVersionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["policy_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "policy_id") + } + + protoReq.PolicyId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "policy_id", err) + } + + msg, err := client.ListVersions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Policies_ListVersions_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListVersionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["policy_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "policy_id") + } + + protoReq.PolicyId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "policy_id", err) + } + + msg, err := server.ListVersions(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Policies_ActivateVersion_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ActivateVersionRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["version_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "version_id") + } + + protoReq.VersionId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "version_id", err) + } + + msg, err := client.ActivateVersion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Policies_ActivateVersion_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ActivateVersionRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["version_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "version_id") + } + + protoReq.VersionId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "version_id", err) + } + + msg, err := server.ActivateVersion(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterPoliciesHandlerServer registers the http handlers for service Policies to "mux". +// UnaryRPC :call PoliciesServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPoliciesHandlerFromEndpoint instead. +func RegisterPoliciesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PoliciesServer) error { + + mux.Handle("POST", pattern_Policies_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Create", runtime.WithHTTPPathPattern("/iam/v1/policies/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Policies_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Policies_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/List", runtime.WithHTTPPathPattern("/iam/v1/policies")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Policies_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Policies_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Delete", runtime.WithHTTPPathPattern("/iam/v1/policies/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Policies_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Policies_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Update", runtime.WithHTTPPathPattern("/iam/v1/policies/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Policies_Update_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Policies_ListVersions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/ListVersions", runtime.WithHTTPPathPattern("/iam/v1/policyVersions/{policy_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Policies_ListVersions_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_ListVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Policies_ActivateVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/ActivateVersion", runtime.WithHTTPPathPattern("/iam/v1/policyVersions/{version_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Policies_ActivateVersion_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_ActivateVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterPoliciesHandlerFromEndpoint is same as RegisterPoliciesHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterPoliciesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterPoliciesHandler(ctx, mux, conn) +} + +// RegisterPoliciesHandler registers the http handlers for service Policies to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterPoliciesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterPoliciesHandlerClient(ctx, mux, NewPoliciesClient(conn)) +} + +// RegisterPoliciesHandlerClient registers the http handlers for service Policies +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PoliciesClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PoliciesClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "PoliciesClient" to call the correct interceptors. +func RegisterPoliciesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PoliciesClient) error { + + mux.Handle("POST", pattern_Policies_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Create", runtime.WithHTTPPathPattern("/iam/v1/policies/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Policies_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Policies_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/List", runtime.WithHTTPPathPattern("/iam/v1/policies")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Policies_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Policies_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Delete", runtime.WithHTTPPathPattern("/iam/v1/policies/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Policies_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Policies_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Update", runtime.WithHTTPPathPattern("/iam/v1/policies/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Policies_Update_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Policies_ListVersions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/ListVersions", runtime.WithHTTPPathPattern("/iam/v1/policyVersions/{policy_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Policies_ListVersions_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_ListVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Policies_ActivateVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/ActivateVersion", runtime.WithHTTPPathPattern("/iam/v1/policyVersions/{version_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Policies_ActivateVersion_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Policies_ActivateVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Policies_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policies", "parent_id"}, "")) + + pattern_Policies_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "policies"}, "")) + + pattern_Policies_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policies", "id"}, "")) + + pattern_Policies_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policies", "id"}, "")) + + pattern_Policies_ListVersions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policyVersions", "policy_id"}, "")) + + pattern_Policies_ActivateVersion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policyVersions", "version_id"}, "")) +) + +var ( + forward_Policies_Create_0 = runtime.ForwardResponseMessage + + forward_Policies_List_0 = runtime.ForwardResponseMessage + + forward_Policies_Delete_0 = runtime.ForwardResponseMessage + + forward_Policies_Update_0 = runtime.ForwardResponseMessage + + forward_Policies_ListVersions_0 = runtime.ForwardResponseMessage + + forward_Policies_ActivateVersion_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/iam/v1/policies.platform.proto b/proto/platform/iam/v1/policies.platform.proto new file mode 100644 index 00000000..e7f42222 --- /dev/null +++ b/proto/platform/iam/v1/policies.platform.proto @@ -0,0 +1,208 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.iam.v1"; +option java_outer_classname = "PlatformIAMPoliciesProto"; + +package chainguard.platform.iam; + +import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; +import "google/api/annotations.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Policies { + rpc Create(CreatePolicyRequest) returns (Policy) { + option (google.api.http) = { + post: "/iam/v1/policies/{parent_id=**}" + body: "policy" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_POLICY_CREATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.policy.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc List(PolicyFilter) returns (PolicyList) { + option (google.api.http) = { + get: "/iam/v1/policies" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_POLICY_LIST] + unscoped: true + } + }; + } + + rpc Delete(DeletePolicyRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/iam/v1/policies/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_POLICY_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.policy.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Update(Policy) returns (Policy) { + option (google.api.http) = { + put: "/iam/v1/policies/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_POLICY_UPDATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.policy.updated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc ListVersions(ListVersionsRequest) returns (PolicyVersionList) { + option (google.api.http) = { + get: "/iam/v1/policyVersions/{policy_id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_POLICY_LIST] + } + }; + } + + rpc ActivateVersion(ActivateVersionRequest) returns (Policy) { + option (google.api.http) = { + post: "/iam/v1/policyVersions/{version_id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_POLICY_UPDATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.policy.version.activated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } +} + +message CreatePolicyRequest { + // parent_id, The Group UIDP path under which the new policy is associated. + string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; + + // Policy is the policy to create; + Policy policy = 2; +} + +message Policy { + // id is identifier of this specific policy. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + + // name, human readable name of policy. + // This field is populated from the document and any existing value will be ignored for Create/Update. + string name = 2; + + // description, human readable description of policy. + string description = 3; + + // document, YAML encoded policy document. + string document = 4; + + // created_at is the timestamp for when the policy was created. + google.protobuf.Timestamp created_at = 5; + + // updated_at is the timestamp when the current version of the policy was last updated. + google.protobuf.Timestamp updated_at = 6; + + // enforced_version contains information about the enforced version of this policy. + // When used as a return value, Policy.name, Policy.description, and Policy.document are all copies of + // the respective fields in enforced_version for backwards compatibility. enforced_version may be empty for + // legacy policies without versions. + // When used for Create or Update, set enforced_version.label to set an optional version label. + PolicyVersion enforced_version = 7; +} + +message PolicyAuthor { + // id is the UID of the author identity. + string id = 1; + + // email is the email address of the author, if known. + string email = 2; +} + +message PolicyList { + repeated Policy items = 1; +} + +message PolicyFilter { + // id is the exact UIDP of the record. + string id = 1; + + // uidp filers records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 2; + + // name is the exact name of the record. + string name = 3; +} + +message DeletePolicyRequest { + // id is the exact UIDP of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message PolicyVersion { + // id is the identifier of this specific policy version. + string id = 1; + + // name, human-readable name of policy. + string name = 2; + + // description, human-readable description of policy. + string description = 3; + + // document, YAML encoded policy document. + string document = 4; + + // author is information about the identity that created/updated this version of the policy, if known. + PolicyAuthor author = 5; + + // created_at is the timestamp from when this version was created. + google.protobuf.Timestamp created_at = 6; + + // label is a human-readable identifier for this version of the policy. + string label = 7; +} + +message ActivateVersionRequest { + // version_id is the identifier of the policy version to enforce. + string version_id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message ListVersionsRequest { + // policy_id is the identifier of the policy to list versions of. + string policy_id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message PolicyVersionList { + repeated PolicyVersion items = 1; +} + diff --git a/proto/platform/iam/v1/policies.platform_grpc.pb.go b/proto/platform/iam/v1/policies.platform_grpc.pb.go new file mode 100644 index 00000000..94a15fb1 --- /dev/null +++ b/proto/platform/iam/v1/policies.platform_grpc.pb.go @@ -0,0 +1,295 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: policies.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Policies_Create_FullMethodName = "/chainguard.platform.iam.Policies/Create" + Policies_List_FullMethodName = "/chainguard.platform.iam.Policies/List" + Policies_Delete_FullMethodName = "/chainguard.platform.iam.Policies/Delete" + Policies_Update_FullMethodName = "/chainguard.platform.iam.Policies/Update" + Policies_ListVersions_FullMethodName = "/chainguard.platform.iam.Policies/ListVersions" + Policies_ActivateVersion_FullMethodName = "/chainguard.platform.iam.Policies/ActivateVersion" +) + +// PoliciesClient is the client API for Policies service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type PoliciesClient interface { + Create(ctx context.Context, in *CreatePolicyRequest, opts ...grpc.CallOption) (*Policy, error) + List(ctx context.Context, in *PolicyFilter, opts ...grpc.CallOption) (*PolicyList, error) + Delete(ctx context.Context, in *DeletePolicyRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Update(ctx context.Context, in *Policy, opts ...grpc.CallOption) (*Policy, error) + ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*PolicyVersionList, error) + ActivateVersion(ctx context.Context, in *ActivateVersionRequest, opts ...grpc.CallOption) (*Policy, error) +} + +type policiesClient struct { + cc grpc.ClientConnInterface +} + +func NewPoliciesClient(cc grpc.ClientConnInterface) PoliciesClient { + return &policiesClient{cc} +} + +func (c *policiesClient) Create(ctx context.Context, in *CreatePolicyRequest, opts ...grpc.CallOption) (*Policy, error) { + out := new(Policy) + err := c.cc.Invoke(ctx, Policies_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *policiesClient) List(ctx context.Context, in *PolicyFilter, opts ...grpc.CallOption) (*PolicyList, error) { + out := new(PolicyList) + err := c.cc.Invoke(ctx, Policies_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *policiesClient) Delete(ctx context.Context, in *DeletePolicyRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, Policies_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *policiesClient) Update(ctx context.Context, in *Policy, opts ...grpc.CallOption) (*Policy, error) { + out := new(Policy) + err := c.cc.Invoke(ctx, Policies_Update_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *policiesClient) ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*PolicyVersionList, error) { + out := new(PolicyVersionList) + err := c.cc.Invoke(ctx, Policies_ListVersions_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *policiesClient) ActivateVersion(ctx context.Context, in *ActivateVersionRequest, opts ...grpc.CallOption) (*Policy, error) { + out := new(Policy) + err := c.cc.Invoke(ctx, Policies_ActivateVersion_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// PoliciesServer is the server API for Policies service. +// All implementations must embed UnimplementedPoliciesServer +// for forward compatibility +type PoliciesServer interface { + Create(context.Context, *CreatePolicyRequest) (*Policy, error) + List(context.Context, *PolicyFilter) (*PolicyList, error) + Delete(context.Context, *DeletePolicyRequest) (*emptypb.Empty, error) + Update(context.Context, *Policy) (*Policy, error) + ListVersions(context.Context, *ListVersionsRequest) (*PolicyVersionList, error) + ActivateVersion(context.Context, *ActivateVersionRequest) (*Policy, error) + mustEmbedUnimplementedPoliciesServer() +} + +// UnimplementedPoliciesServer must be embedded to have forward compatible implementations. +type UnimplementedPoliciesServer struct { +} + +func (UnimplementedPoliciesServer) Create(context.Context, *CreatePolicyRequest) (*Policy, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedPoliciesServer) List(context.Context, *PolicyFilter) (*PolicyList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedPoliciesServer) Delete(context.Context, *DeletePolicyRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedPoliciesServer) Update(context.Context, *Policy) (*Policy, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedPoliciesServer) ListVersions(context.Context, *ListVersionsRequest) (*PolicyVersionList, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListVersions not implemented") +} +func (UnimplementedPoliciesServer) ActivateVersion(context.Context, *ActivateVersionRequest) (*Policy, error) { + return nil, status.Errorf(codes.Unimplemented, "method ActivateVersion not implemented") +} +func (UnimplementedPoliciesServer) mustEmbedUnimplementedPoliciesServer() {} + +// UnsafePoliciesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to PoliciesServer will +// result in compilation errors. +type UnsafePoliciesServer interface { + mustEmbedUnimplementedPoliciesServer() +} + +func RegisterPoliciesServer(s grpc.ServiceRegistrar, srv PoliciesServer) { + s.RegisterService(&Policies_ServiceDesc, srv) +} + +func _Policies_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreatePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PoliciesServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Policies_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PoliciesServer).Create(ctx, req.(*CreatePolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Policies_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PolicyFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PoliciesServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Policies_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PoliciesServer).List(ctx, req.(*PolicyFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Policies_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePolicyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PoliciesServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Policies_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PoliciesServer).Delete(ctx, req.(*DeletePolicyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Policies_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Policy) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PoliciesServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Policies_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PoliciesServer).Update(ctx, req.(*Policy)) + } + return interceptor(ctx, in, info, handler) +} + +func _Policies_ListVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListVersionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PoliciesServer).ListVersions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Policies_ListVersions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PoliciesServer).ListVersions(ctx, req.(*ListVersionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Policies_ActivateVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ActivateVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PoliciesServer).ActivateVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Policies_ActivateVersion_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PoliciesServer).ActivateVersion(ctx, req.(*ActivateVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Policies_ServiceDesc is the grpc.ServiceDesc for Policies service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Policies_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.iam.Policies", + HandlerType: (*PoliciesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _Policies_Create_Handler, + }, + { + MethodName: "List", + Handler: _Policies_List_Handler, + }, + { + MethodName: "Delete", + Handler: _Policies_Delete_Handler, + }, + { + MethodName: "Update", + Handler: _Policies_Update_Handler, + }, + { + MethodName: "ListVersions", + Handler: _Policies_ListVersions_Handler, + }, + { + MethodName: "ActivateVersion", + Handler: _Policies_ActivateVersion_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "policies.platform.proto", +} diff --git a/proto/platform/iam/v1/role.platform.event.go b/proto/platform/iam/v1/role.platform.event.go new file mode 100644 index 00000000..489e240f --- /dev/null +++ b/proto/platform/iam/v1/role.platform.event.go @@ -0,0 +1,23 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import "chainguard.dev/sdk/uidp" + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *Role) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *Role) CloudEventsSubject() string { + return x.GetId() +} diff --git a/proto/platform/iam/v1/role.platform.pb.go b/proto/platform/iam/v1/role.platform.pb.go new file mode 100644 index 00000000..46241bb2 --- /dev/null +++ b/proto/platform/iam/v1/role.platform.pb.go @@ -0,0 +1,540 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: role.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Role struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The Group path under which this Role resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name, human readable name of group. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // description, human readable description of group. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // capabilities, human readable list of capabilities supported by the group. + Capabilities []string `protobuf:"bytes,4,rep,name=capabilities,proto3" json:"capabilities,omitempty"` +} + +func (x *Role) Reset() { + *x = Role{} + if protoimpl.UnsafeEnabled { + mi := &file_role_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Role) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Role) ProtoMessage() {} + +func (x *Role) ProtoReflect() protoreflect.Message { + mi := &file_role_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Role.ProtoReflect.Descriptor instead. +func (*Role) Descriptor() ([]byte, []int) { + return file_role_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Role) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Role) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Role) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Role) GetCapabilities() []string { + if x != nil { + return x.Capabilities + } + return nil +} + +type RoleList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Role `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *RoleList) Reset() { + *x = RoleList{} + if protoimpl.UnsafeEnabled { + mi := &file_role_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleList) ProtoMessage() {} + +func (x *RoleList) ProtoReflect() protoreflect.Message { + mi := &file_role_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoleList.ProtoReflect.Descriptor instead. +func (*RoleList) Descriptor() ([]byte, []int) { + return file_role_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *RoleList) GetItems() []*Role { + if x != nil { + return x.Items + } + return nil +} + +type RoleFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name is the exact name of the record + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // parent is the exact UIDP of the parent, or / for root + Parent string `protobuf:"bytes,3,opt,name=parent,proto3" json:"parent,omitempty"` + // uidp filters records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,4,opt,name=uidp,proto3" json:"uidp,omitempty"` +} + +func (x *RoleFilter) Reset() { + *x = RoleFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_role_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleFilter) ProtoMessage() {} + +func (x *RoleFilter) ProtoReflect() protoreflect.Message { + mi := &file_role_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoleFilter.ProtoReflect.Descriptor instead. +func (*RoleFilter) Descriptor() ([]byte, []int) { + return file_role_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *RoleFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RoleFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoleFilter) GetParent() string { + if x != nil { + return x.Parent + } + return "" +} + +func (x *RoleFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +type CreateRoleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // parent_id, The Group UIDP path under which the new Role resides. + ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + // Role to create. + Role *Role `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` +} + +func (x *CreateRoleRequest) Reset() { + *x = CreateRoleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_role_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateRoleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateRoleRequest) ProtoMessage() {} + +func (x *CreateRoleRequest) ProtoReflect() protoreflect.Message { + mi := &file_role_platform_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 CreateRoleRequest.ProtoReflect.Descriptor instead. +func (*CreateRoleRequest) Descriptor() ([]byte, []int) { + return file_role_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *CreateRoleRequest) GetParentId() string { + if x != nil { + return x.ParentId + } + return "" +} + +func (x *CreateRoleRequest) GetRole() *Role { + if x != nil { + return x.Role + } + return nil +} + +type DeleteRoleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteRoleRequest) Reset() { + *x = DeleteRoleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_role_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteRoleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteRoleRequest) ProtoMessage() {} + +func (x *DeleteRoleRequest) ProtoReflect() protoreflect.Message { + mi := &file_role_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteRoleRequest.ProtoReflect.Descriptor instead. +func (*DeleteRoleRequest) Descriptor() ([]byte, []int) { + return file_role_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *DeleteRoleRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +var File_role_platform_proto protoreflect.FileDescriptor + +var file_role_platform_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1c, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x78, 0x0a, 0x04, 0x52, 0x6f, 0x6c, + 0x65, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, + 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x22, 0x3f, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x33, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x52, 0x6f, 0x6c, 0x65, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, + 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x22, 0x6b, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, + 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x2b, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, + 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, 0xf9, 0x03, 0x0a, 0x05, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, + 0x8b, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, + 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1c, 0x2f, + 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xad, 0x02, 0x12, 0x74, 0x0a, + 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, + 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x1a, 0x15, 0x2f, + 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, + 0x02, 0xae, 0x02, 0x12, 0x73, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, + 0x12, 0x06, 0x0a, 0x02, 0xaf, 0x02, 0x10, 0x01, 0x12, 0x77, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x2a, 0x15, + 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xb0, + 0x02, 0x42, 0x66, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x14, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x49, 0x41, 0x4d, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, + 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_role_platform_proto_rawDescOnce sync.Once + file_role_platform_proto_rawDescData = file_role_platform_proto_rawDesc +) + +func file_role_platform_proto_rawDescGZIP() []byte { + file_role_platform_proto_rawDescOnce.Do(func() { + file_role_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_role_platform_proto_rawDescData) + }) + return file_role_platform_proto_rawDescData +} + +var file_role_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_role_platform_proto_goTypes = []interface{}{ + (*Role)(nil), // 0: chainguard.platform.iam.Role + (*RoleList)(nil), // 1: chainguard.platform.iam.RoleList + (*RoleFilter)(nil), // 2: chainguard.platform.iam.RoleFilter + (*CreateRoleRequest)(nil), // 3: chainguard.platform.iam.CreateRoleRequest + (*DeleteRoleRequest)(nil), // 4: chainguard.platform.iam.DeleteRoleRequest + (*v1.UIDPFilter)(nil), // 5: chainguard.platform.common.UIDPFilter + (*emptypb.Empty)(nil), // 6: google.protobuf.Empty +} +var file_role_platform_proto_depIdxs = []int32{ + 0, // 0: chainguard.platform.iam.RoleList.items:type_name -> chainguard.platform.iam.Role + 5, // 1: chainguard.platform.iam.RoleFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 0, // 2: chainguard.platform.iam.CreateRoleRequest.role:type_name -> chainguard.platform.iam.Role + 3, // 3: chainguard.platform.iam.Roles.Create:input_type -> chainguard.platform.iam.CreateRoleRequest + 0, // 4: chainguard.platform.iam.Roles.Update:input_type -> chainguard.platform.iam.Role + 2, // 5: chainguard.platform.iam.Roles.List:input_type -> chainguard.platform.iam.RoleFilter + 4, // 6: chainguard.platform.iam.Roles.Delete:input_type -> chainguard.platform.iam.DeleteRoleRequest + 0, // 7: chainguard.platform.iam.Roles.Create:output_type -> chainguard.platform.iam.Role + 0, // 8: chainguard.platform.iam.Roles.Update:output_type -> chainguard.platform.iam.Role + 1, // 9: chainguard.platform.iam.Roles.List:output_type -> chainguard.platform.iam.RoleList + 6, // 10: chainguard.platform.iam.Roles.Delete:output_type -> google.protobuf.Empty + 7, // [7:11] is the sub-list for method output_type + 3, // [3:7] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_role_platform_proto_init() } +func file_role_platform_proto_init() { + if File_role_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_role_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Role); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_role_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_role_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_role_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateRoleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_role_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteRoleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_role_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_role_platform_proto_goTypes, + DependencyIndexes: file_role_platform_proto_depIdxs, + MessageInfos: file_role_platform_proto_msgTypes, + }.Build() + File_role_platform_proto = out.File + file_role_platform_proto_rawDesc = nil + file_role_platform_proto_goTypes = nil + file_role_platform_proto_depIdxs = nil +} diff --git a/proto/platform/iam/v1/role.platform.pb.gw.go b/proto/platform/iam/v1/role.platform.pb.gw.go new file mode 100644 index 00000000..b4bb5afa --- /dev/null +++ b/proto/platform/iam/v1/role.platform.pb.gw.go @@ -0,0 +1,506 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: role.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Roles_Create_0(ctx context.Context, marshaler runtime.Marshaler, client RolesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateRoleRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Role); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Roles_Create_0(ctx context.Context, marshaler runtime.Marshaler, server RolesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateRoleRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Role); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Roles_Update_0(ctx context.Context, marshaler runtime.Marshaler, client RolesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Role + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Roles_Update_0(ctx context.Context, marshaler runtime.Marshaler, server RolesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Role + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Roles_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Roles_List_0(ctx context.Context, marshaler runtime.Marshaler, client RolesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RoleFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Roles_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Roles_List_0(ctx context.Context, marshaler runtime.Marshaler, server RolesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RoleFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Roles_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Roles_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client RolesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteRoleRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Roles_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server RolesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteRoleRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterRolesHandlerServer registers the http handlers for service Roles to "mux". +// UnaryRPC :call RolesServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRolesHandlerFromEndpoint instead. +func RegisterRolesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RolesServer) error { + + mux.Handle("POST", pattern_Roles_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Create", runtime.WithHTTPPathPattern("/iam/v1/roles/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Roles_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Roles_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Roles_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Update", runtime.WithHTTPPathPattern("/iam/v1/roles/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Roles_Update_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Roles_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Roles_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Roles/List", runtime.WithHTTPPathPattern("/iam/v1/roles")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Roles_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Roles_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Roles_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Delete", runtime.WithHTTPPathPattern("/iam/v1/roles/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Roles_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Roles_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterRolesHandlerFromEndpoint is same as RegisterRolesHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterRolesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterRolesHandler(ctx, mux, conn) +} + +// RegisterRolesHandler registers the http handlers for service Roles to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterRolesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterRolesHandlerClient(ctx, mux, NewRolesClient(conn)) +} + +// RegisterRolesHandlerClient registers the http handlers for service Roles +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RolesClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RolesClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "RolesClient" to call the correct interceptors. +func RegisterRolesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RolesClient) error { + + mux.Handle("POST", pattern_Roles_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Create", runtime.WithHTTPPathPattern("/iam/v1/roles/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Roles_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Roles_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Roles_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Update", runtime.WithHTTPPathPattern("/iam/v1/roles/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Roles_Update_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Roles_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Roles_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Roles/List", runtime.WithHTTPPathPattern("/iam/v1/roles")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Roles_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Roles_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Roles_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Roles/Delete", runtime.WithHTTPPathPattern("/iam/v1/roles/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Roles_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Roles_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Roles_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "roles", "parent_id"}, "")) + + pattern_Roles_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "roles", "id"}, "")) + + pattern_Roles_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "roles"}, "")) + + pattern_Roles_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "roles", "id"}, "")) +) + +var ( + forward_Roles_Create_0 = runtime.ForwardResponseMessage + + forward_Roles_Update_0 = runtime.ForwardResponseMessage + + forward_Roles_List_0 = runtime.ForwardResponseMessage + + forward_Roles_Delete_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/iam/v1/role.platform.proto b/proto/platform/iam/v1/role.platform.proto new file mode 100644 index 00000000..7ff18fb4 --- /dev/null +++ b/proto/platform/iam/v1/role.platform.proto @@ -0,0 +1,100 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.iam.v1"; +option java_outer_classname = "PlatformIAMRoleProto"; + +package chainguard.platform.iam; + +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Roles { + rpc Create(CreateRoleRequest) returns (Role) { + option (google.api.http) = { + post: "/iam/v1/roles/{parent_id=**}" + body: "role" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ROLES_CREATE] + } + }; + } + + rpc Update(Role) returns (Role) { + option (google.api.http) = { + put: "/iam/v1/roles/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ROLES_UPDATE] + } + }; + } + + rpc List(RoleFilter) returns (RoleList) { + option (google.api.http) = { + get: "/iam/v1/roles" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ROLES_LIST] + unscoped: true + } + }; + } + + rpc Delete(DeleteRoleRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/iam/v1/roles/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ROLES_DELETE] + } + }; + } +} + +message Role { + // id, The Group path under which this Role resides. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + // name, human readable name of group. + string name = 2; + // description, human readable description of group. + string description = 3; + // capabilities, human readable list of capabilities supported by the group. + repeated string capabilities = 4; +} + +message RoleList { + repeated Role items = 1; +} + +message RoleFilter { + // id is the exact UIDP of the record. + string id = 1; + // name is the exact name of the record + string name = 2; + // parent is the exact UIDP of the parent, or / for root + string parent = 3; + // uidp filters records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 4; +} + +message CreateRoleRequest { + // parent_id, The Group UIDP path under which the new Role resides. + string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; + // Role to create. + Role role = 2; +} + +message DeleteRoleRequest { + // id is the exact UIDP of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} diff --git a/proto/platform/iam/v1/role.platform_grpc.pb.go b/proto/platform/iam/v1/role.platform_grpc.pb.go new file mode 100644 index 00000000..c6456ef5 --- /dev/null +++ b/proto/platform/iam/v1/role.platform_grpc.pb.go @@ -0,0 +1,221 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: role.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Roles_Create_FullMethodName = "/chainguard.platform.iam.Roles/Create" + Roles_Update_FullMethodName = "/chainguard.platform.iam.Roles/Update" + Roles_List_FullMethodName = "/chainguard.platform.iam.Roles/List" + Roles_Delete_FullMethodName = "/chainguard.platform.iam.Roles/Delete" +) + +// RolesClient is the client API for Roles service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type RolesClient interface { + Create(ctx context.Context, in *CreateRoleRequest, opts ...grpc.CallOption) (*Role, error) + Update(ctx context.Context, in *Role, opts ...grpc.CallOption) (*Role, error) + List(ctx context.Context, in *RoleFilter, opts ...grpc.CallOption) (*RoleList, error) + Delete(ctx context.Context, in *DeleteRoleRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) +} + +type rolesClient struct { + cc grpc.ClientConnInterface +} + +func NewRolesClient(cc grpc.ClientConnInterface) RolesClient { + return &rolesClient{cc} +} + +func (c *rolesClient) Create(ctx context.Context, in *CreateRoleRequest, opts ...grpc.CallOption) (*Role, error) { + out := new(Role) + err := c.cc.Invoke(ctx, Roles_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *rolesClient) Update(ctx context.Context, in *Role, opts ...grpc.CallOption) (*Role, error) { + out := new(Role) + err := c.cc.Invoke(ctx, Roles_Update_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *rolesClient) List(ctx context.Context, in *RoleFilter, opts ...grpc.CallOption) (*RoleList, error) { + out := new(RoleList) + err := c.cc.Invoke(ctx, Roles_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *rolesClient) Delete(ctx context.Context, in *DeleteRoleRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, Roles_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RolesServer is the server API for Roles service. +// All implementations must embed UnimplementedRolesServer +// for forward compatibility +type RolesServer interface { + Create(context.Context, *CreateRoleRequest) (*Role, error) + Update(context.Context, *Role) (*Role, error) + List(context.Context, *RoleFilter) (*RoleList, error) + Delete(context.Context, *DeleteRoleRequest) (*emptypb.Empty, error) + mustEmbedUnimplementedRolesServer() +} + +// UnimplementedRolesServer must be embedded to have forward compatible implementations. +type UnimplementedRolesServer struct { +} + +func (UnimplementedRolesServer) Create(context.Context, *CreateRoleRequest) (*Role, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedRolesServer) Update(context.Context, *Role) (*Role, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedRolesServer) List(context.Context, *RoleFilter) (*RoleList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedRolesServer) Delete(context.Context, *DeleteRoleRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedRolesServer) mustEmbedUnimplementedRolesServer() {} + +// UnsafeRolesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RolesServer will +// result in compilation errors. +type UnsafeRolesServer interface { + mustEmbedUnimplementedRolesServer() +} + +func RegisterRolesServer(s grpc.ServiceRegistrar, srv RolesServer) { + s.RegisterService(&Roles_ServiceDesc, srv) +} + +func _Roles_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateRoleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RolesServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Roles_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RolesServer).Create(ctx, req.(*CreateRoleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Roles_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Role) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RolesServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Roles_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RolesServer).Update(ctx, req.(*Role)) + } + return interceptor(ctx, in, info, handler) +} + +func _Roles_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RoleFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RolesServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Roles_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RolesServer).List(ctx, req.(*RoleFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Roles_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteRoleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RolesServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Roles_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RolesServer).Delete(ctx, req.(*DeleteRoleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Roles_ServiceDesc is the grpc.ServiceDesc for Roles service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Roles_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.iam.Roles", + HandlerType: (*RolesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _Roles_Create_Handler, + }, + { + MethodName: "Update", + Handler: _Roles_Update_Handler, + }, + { + MethodName: "List", + Handler: _Roles_List_Handler, + }, + { + MethodName: "Delete", + Handler: _Roles_Delete_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "role.platform.proto", +} diff --git a/proto/platform/iam/v1/role_binding.platform.event.go b/proto/platform/iam/v1/role_binding.platform.event.go new file mode 100644 index 00000000..1e6eba55 --- /dev/null +++ b/proto/platform/iam/v1/role_binding.platform.event.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import "chainguard.dev/sdk/uidp" + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *RoleBinding) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *RoleBinding) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *DeleteRoleBindingRequest) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *DeleteRoleBindingRequest) CloudEventsSubject() string { + return x.GetId() +} diff --git a/proto/platform/iam/v1/role_binding.platform.pb.go b/proto/platform/iam/v1/role_binding.platform.pb.go new file mode 100644 index 00000000..22969923 --- /dev/null +++ b/proto/platform/iam/v1/role_binding.platform.pb.go @@ -0,0 +1,687 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: role_binding.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RoleBinding struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, the UID of this role binding. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // identity, UID of the Identity to bind. + Identity string `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` + // group, UIDP of the group to bind. This field is ignored and will be removed + // in the future. The group is always the parent of the UIDP. + // + // Deprecated: Do not use. + Group string `protobuf:"bytes,3,opt,name=group,proto3" json:"group,omitempty"` + // role, UIDP of the Role to bind + Role string `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` +} + +func (x *RoleBinding) Reset() { + *x = RoleBinding{} + if protoimpl.UnsafeEnabled { + mi := &file_role_binding_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleBinding) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleBinding) ProtoMessage() {} + +func (x *RoleBinding) ProtoReflect() protoreflect.Message { + mi := &file_role_binding_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoleBinding.ProtoReflect.Descriptor instead. +func (*RoleBinding) Descriptor() ([]byte, []int) { + return file_role_binding_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *RoleBinding) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RoleBinding) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" +} + +// Deprecated: Do not use. +func (x *RoleBinding) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *RoleBinding) GetRole() string { + if x != nil { + return x.Role + } + return "" +} + +type RoleBindingList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*RoleBindingList_Binding `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *RoleBindingList) Reset() { + *x = RoleBindingList{} + if protoimpl.UnsafeEnabled { + mi := &file_role_binding_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleBindingList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleBindingList) ProtoMessage() {} + +func (x *RoleBindingList) ProtoReflect() protoreflect.Message { + mi := &file_role_binding_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoleBindingList.ProtoReflect.Descriptor instead. +func (*RoleBindingList) Descriptor() ([]byte, []int) { + return file_role_binding_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *RoleBindingList) GetItems() []*RoleBindingList_Binding { + if x != nil { + return x.Items + } + return nil +} + +type RoleBindingFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // uidp filters records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` +} + +func (x *RoleBindingFilter) Reset() { + *x = RoleBindingFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_role_binding_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleBindingFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleBindingFilter) ProtoMessage() {} + +func (x *RoleBindingFilter) ProtoReflect() protoreflect.Message { + mi := &file_role_binding_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoleBindingFilter.ProtoReflect.Descriptor instead. +func (*RoleBindingFilter) Descriptor() ([]byte, []int) { + return file_role_binding_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *RoleBindingFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RoleBindingFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +type CreateRoleBindingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // parent, The Group UIDP path under which the new RoleBinding resides. + Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` + // RoleBinding to create. + RoleBinding *RoleBinding `protobuf:"bytes,2,opt,name=role_binding,json=roleBinding,proto3" json:"role_binding,omitempty"` +} + +func (x *CreateRoleBindingRequest) Reset() { + *x = CreateRoleBindingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_role_binding_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateRoleBindingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateRoleBindingRequest) ProtoMessage() {} + +func (x *CreateRoleBindingRequest) ProtoReflect() protoreflect.Message { + mi := &file_role_binding_platform_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 CreateRoleBindingRequest.ProtoReflect.Descriptor instead. +func (*CreateRoleBindingRequest) Descriptor() ([]byte, []int) { + return file_role_binding_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *CreateRoleBindingRequest) GetParent() string { + if x != nil { + return x.Parent + } + return "" +} + +func (x *CreateRoleBindingRequest) GetRoleBinding() *RoleBinding { + if x != nil { + return x.RoleBinding + } + return nil +} + +type DeleteRoleBindingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteRoleBindingRequest) Reset() { + *x = DeleteRoleBindingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_role_binding_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteRoleBindingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteRoleBindingRequest) ProtoMessage() {} + +func (x *DeleteRoleBindingRequest) ProtoReflect() protoreflect.Message { + mi := &file_role_binding_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteRoleBindingRequest.ProtoReflect.Descriptor instead. +func (*DeleteRoleBindingRequest) Descriptor() ([]byte, []int) { + return file_role_binding_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *DeleteRoleBindingRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type RoleBindingList_Binding struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, the UID of this role binding. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // group of the bound role. + Group *Group `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"` + // identity, UID of the Identity bound. + Identity string `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` + // role of the bound identity. + Role *Role `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` + // email of the bound identity. + Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` + // ClaimMatch issuer of the bound identity. + ClaimMatchIssuer string `protobuf:"bytes,6,opt,name=claim_match_issuer,json=claimMatchIssuer,proto3" json:"claim_match_issuer,omitempty"` + // ClaimMatch subject of the bound identity. + ClaimMatchSubject string `protobuf:"bytes,7,opt,name=claim_match_subject,json=claimMatchSubject,proto3" json:"claim_match_subject,omitempty"` +} + +func (x *RoleBindingList_Binding) Reset() { + *x = RoleBindingList_Binding{} + if protoimpl.UnsafeEnabled { + mi := &file_role_binding_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleBindingList_Binding) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleBindingList_Binding) ProtoMessage() {} + +func (x *RoleBindingList_Binding) ProtoReflect() protoreflect.Message { + mi := &file_role_binding_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RoleBindingList_Binding.ProtoReflect.Descriptor instead. +func (*RoleBindingList_Binding) Descriptor() ([]byte, []int) { + return file_role_binding_platform_proto_rawDescGZIP(), []int{1, 0} +} + +func (x *RoleBindingList_Binding) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RoleBindingList_Binding) GetGroup() *Group { + if x != nil { + return x.Group + } + return nil +} + +func (x *RoleBindingList_Binding) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" +} + +func (x *RoleBindingList_Binding) GetRole() *Role { + if x != nil { + return x.Role + } + return nil +} + +func (x *RoleBindingList_Binding) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *RoleBindingList_Binding) GetClaimMatchIssuer() string { + if x != nil { + return x.ClaimMatchIssuer + } + return "" +} + +func (x *RoleBindingList_Binding) GetClaimMatchSubject() string { + if x != nil { + return x.ClaimMatchSubject + } + return "" +} + +var File_role_binding_platform_proto protoreflect.FileDescriptor + +var file_role_binding_platform_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, + 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x13, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6f, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xee, 0x02, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x1a, 0x92, 0x02, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x5f, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, + 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, + 0x32, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, + 0x02, 0x69, 0x64, 0x32, 0x93, 0x06, 0x0a, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0xe5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, + 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x30, 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, + 0x2a, 0x2a, 0x7d, 0x3a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x91, 0x03, 0xc2, 0xf0, 0x8e, + 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc8, 0x01, 0x0a, + 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x1a, 0x24, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x1a, 0x1c, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x92, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x88, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, + 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x93, 0x03, + 0x10, 0x01, 0x12, 0xc4, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, + 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, + 0x2a, 0x1c, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x94, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, + 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, + 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, + 0x1b, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x52, 0x6f, 0x6c, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, + 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_role_binding_platform_proto_rawDescOnce sync.Once + file_role_binding_platform_proto_rawDescData = file_role_binding_platform_proto_rawDesc +) + +func file_role_binding_platform_proto_rawDescGZIP() []byte { + file_role_binding_platform_proto_rawDescOnce.Do(func() { + file_role_binding_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_role_binding_platform_proto_rawDescData) + }) + return file_role_binding_platform_proto_rawDescData +} + +var file_role_binding_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_role_binding_platform_proto_goTypes = []interface{}{ + (*RoleBinding)(nil), // 0: chainguard.platform.iam.RoleBinding + (*RoleBindingList)(nil), // 1: chainguard.platform.iam.RoleBindingList + (*RoleBindingFilter)(nil), // 2: chainguard.platform.iam.RoleBindingFilter + (*CreateRoleBindingRequest)(nil), // 3: chainguard.platform.iam.CreateRoleBindingRequest + (*DeleteRoleBindingRequest)(nil), // 4: chainguard.platform.iam.DeleteRoleBindingRequest + (*RoleBindingList_Binding)(nil), // 5: chainguard.platform.iam.RoleBindingList.Binding + (*v1.UIDPFilter)(nil), // 6: chainguard.platform.common.UIDPFilter + (*Group)(nil), // 7: chainguard.platform.iam.Group + (*Role)(nil), // 8: chainguard.platform.iam.Role + (*emptypb.Empty)(nil), // 9: google.protobuf.Empty +} +var file_role_binding_platform_proto_depIdxs = []int32{ + 5, // 0: chainguard.platform.iam.RoleBindingList.items:type_name -> chainguard.platform.iam.RoleBindingList.Binding + 6, // 1: chainguard.platform.iam.RoleBindingFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 0, // 2: chainguard.platform.iam.CreateRoleBindingRequest.role_binding:type_name -> chainguard.platform.iam.RoleBinding + 7, // 3: chainguard.platform.iam.RoleBindingList.Binding.group:type_name -> chainguard.platform.iam.Group + 8, // 4: chainguard.platform.iam.RoleBindingList.Binding.role:type_name -> chainguard.platform.iam.Role + 3, // 5: chainguard.platform.iam.RoleBindings.Create:input_type -> chainguard.platform.iam.CreateRoleBindingRequest + 0, // 6: chainguard.platform.iam.RoleBindings.Update:input_type -> chainguard.platform.iam.RoleBinding + 2, // 7: chainguard.platform.iam.RoleBindings.List:input_type -> chainguard.platform.iam.RoleBindingFilter + 4, // 8: chainguard.platform.iam.RoleBindings.Delete:input_type -> chainguard.platform.iam.DeleteRoleBindingRequest + 0, // 9: chainguard.platform.iam.RoleBindings.Create:output_type -> chainguard.platform.iam.RoleBinding + 0, // 10: chainguard.platform.iam.RoleBindings.Update:output_type -> chainguard.platform.iam.RoleBinding + 1, // 11: chainguard.platform.iam.RoleBindings.List:output_type -> chainguard.platform.iam.RoleBindingList + 9, // 12: chainguard.platform.iam.RoleBindings.Delete:output_type -> google.protobuf.Empty + 9, // [9:13] is the sub-list for method output_type + 5, // [5:9] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_role_binding_platform_proto_init() } +func file_role_binding_platform_proto_init() { + if File_role_binding_platform_proto != nil { + return + } + file_group_platform_proto_init() + file_role_platform_proto_init() + if !protoimpl.UnsafeEnabled { + file_role_binding_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleBinding); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_role_binding_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleBindingList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_role_binding_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleBindingFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_role_binding_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateRoleBindingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_role_binding_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteRoleBindingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_role_binding_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleBindingList_Binding); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_role_binding_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_role_binding_platform_proto_goTypes, + DependencyIndexes: file_role_binding_platform_proto_depIdxs, + MessageInfos: file_role_binding_platform_proto_msgTypes, + }.Build() + File_role_binding_platform_proto = out.File + file_role_binding_platform_proto_rawDesc = nil + file_role_binding_platform_proto_goTypes = nil + file_role_binding_platform_proto_depIdxs = nil +} diff --git a/proto/platform/iam/v1/role_binding.platform.pb.gw.go b/proto/platform/iam/v1/role_binding.platform.pb.gw.go new file mode 100644 index 00000000..8d673504 --- /dev/null +++ b/proto/platform/iam/v1/role_binding.platform.pb.gw.go @@ -0,0 +1,506 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: role_binding.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_RoleBindings_Create_0(ctx context.Context, marshaler runtime.Marshaler, client RoleBindingsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateRoleBindingRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.RoleBinding); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent") + } + + protoReq.Parent, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_RoleBindings_Create_0(ctx context.Context, marshaler runtime.Marshaler, server RoleBindingsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateRoleBindingRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.RoleBinding); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent") + } + + protoReq.Parent, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +func request_RoleBindings_Update_0(ctx context.Context, marshaler runtime.Marshaler, client RoleBindingsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RoleBinding + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_RoleBindings_Update_0(ctx context.Context, marshaler runtime.Marshaler, server RoleBindingsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RoleBinding + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_RoleBindings_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_RoleBindings_List_0(ctx context.Context, marshaler runtime.Marshaler, client RoleBindingsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RoleBindingFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleBindings_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_RoleBindings_List_0(ctx context.Context, marshaler runtime.Marshaler, server RoleBindingsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RoleBindingFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_RoleBindings_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_RoleBindings_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client RoleBindingsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteRoleBindingRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_RoleBindings_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server RoleBindingsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteRoleBindingRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterRoleBindingsHandlerServer registers the http handlers for service RoleBindings to "mux". +// UnaryRPC :call RoleBindingsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRoleBindingsHandlerFromEndpoint instead. +func RegisterRoleBindingsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RoleBindingsServer) error { + + mux.Handle("POST", pattern_RoleBindings_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Create", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{parent=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_RoleBindings_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RoleBindings_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_RoleBindings_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Update", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_RoleBindings_Update_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RoleBindings_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_RoleBindings_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/List", runtime.WithHTTPPathPattern("/iam/v1/rolebindings")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_RoleBindings_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RoleBindings_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_RoleBindings_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Delete", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_RoleBindings_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RoleBindings_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterRoleBindingsHandlerFromEndpoint is same as RegisterRoleBindingsHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterRoleBindingsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterRoleBindingsHandler(ctx, mux, conn) +} + +// RegisterRoleBindingsHandler registers the http handlers for service RoleBindings to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterRoleBindingsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterRoleBindingsHandlerClient(ctx, mux, NewRoleBindingsClient(conn)) +} + +// RegisterRoleBindingsHandlerClient registers the http handlers for service RoleBindings +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RoleBindingsClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RoleBindingsClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "RoleBindingsClient" to call the correct interceptors. +func RegisterRoleBindingsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RoleBindingsClient) error { + + mux.Handle("POST", pattern_RoleBindings_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Create", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{parent=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_RoleBindings_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RoleBindings_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_RoleBindings_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Update", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_RoleBindings_Update_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RoleBindings_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_RoleBindings_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/List", runtime.WithHTTPPathPattern("/iam/v1/rolebindings")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_RoleBindings_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RoleBindings_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_RoleBindings_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.RoleBindings/Delete", runtime.WithHTTPPathPattern("/iam/v1/rolebindings/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_RoleBindings_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_RoleBindings_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_RoleBindings_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "rolebindings", "parent"}, "")) + + pattern_RoleBindings_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "rolebindings", "id"}, "")) + + pattern_RoleBindings_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "rolebindings"}, "")) + + pattern_RoleBindings_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "rolebindings", "id"}, "")) +) + +var ( + forward_RoleBindings_Create_0 = runtime.ForwardResponseMessage + + forward_RoleBindings_Update_0 = runtime.ForwardResponseMessage + + forward_RoleBindings_List_0 = runtime.ForwardResponseMessage + + forward_RoleBindings_Delete_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/iam/v1/role_binding.platform.proto b/proto/platform/iam/v1/role_binding.platform.proto new file mode 100644 index 00000000..9ee50f0d --- /dev/null +++ b/proto/platform/iam/v1/role_binding.platform.proto @@ -0,0 +1,131 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.iam.v1"; +option java_outer_classname = "PlatformIAMRoleBindingProto"; + +package chainguard.platform.iam; + +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "platform/common/v1/uidp.platform.proto"; +import "group.platform.proto"; +import "role.platform.proto"; + +service RoleBindings { + rpc Create(CreateRoleBindingRequest) returns (RoleBinding) { + option (google.api.http) = { + post: "/iam/v1/rolebindings/{parent=**}" + body: "role_binding" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ROLE_BINDINGS_CREATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.rolebindings.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Update(RoleBinding) returns (RoleBinding) { + option (google.api.http) = { + put: "/iam/v1/rolebindings/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ROLE_BINDINGS_UPDATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.rolebindings.updated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc List(RoleBindingFilter) returns (RoleBindingList) { + option (google.api.http) = { + get: "/iam/v1/rolebindings" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ROLE_BINDINGS_LIST] + unscoped: true + } + }; + } + + rpc Delete(DeleteRoleBindingRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/iam/v1/rolebindings/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_IAM_ROLE_BINDINGS_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.iam.rolebindings.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } +} + +message RoleBinding { + // id, the UID of this role binding. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + // identity, UID of the Identity to bind. + string identity = 2; + // group, UIDP of the group to bind. This field is ignored and will be removed + // in the future. The group is always the parent of the UIDP. + string group = 3 [deprecated = true]; + // role, UIDP of the Role to bind + string role = 4; +} + +message RoleBindingList { + message Binding { + // id, the UID of this role binding. + string id = 1; + // group of the bound role. + chainguard.platform.iam.Group group = 2; + // identity, UID of the Identity bound. + string identity = 3; + // role of the bound identity. + chainguard.platform.iam.Role role = 4; + // email of the bound identity. + string email = 5; + // ClaimMatch issuer of the bound identity. + string claim_match_issuer = 6; + // ClaimMatch subject of the bound identity. + string claim_match_subject = 7; + } + repeated Binding items = 1; +} + +message RoleBindingFilter { + // id is the exact UID of the record. + string id = 1; + // uidp filters records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 2; +} + +message CreateRoleBindingRequest { + // parent, The Group UIDP path under which the new RoleBinding resides. + string parent = 1 [(chainguard.annotations.iam_scope) = true]; + // RoleBinding to create. + RoleBinding role_binding = 2; +} + +message DeleteRoleBindingRequest { + // id is the exact UID of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} diff --git a/proto/platform/iam/v1/role_binding.platform_grpc.pb.go b/proto/platform/iam/v1/role_binding.platform_grpc.pb.go new file mode 100644 index 00000000..2c8bbc27 --- /dev/null +++ b/proto/platform/iam/v1/role_binding.platform_grpc.pb.go @@ -0,0 +1,221 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: role_binding.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + RoleBindings_Create_FullMethodName = "/chainguard.platform.iam.RoleBindings/Create" + RoleBindings_Update_FullMethodName = "/chainguard.platform.iam.RoleBindings/Update" + RoleBindings_List_FullMethodName = "/chainguard.platform.iam.RoleBindings/List" + RoleBindings_Delete_FullMethodName = "/chainguard.platform.iam.RoleBindings/Delete" +) + +// RoleBindingsClient is the client API for RoleBindings service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type RoleBindingsClient interface { + Create(ctx context.Context, in *CreateRoleBindingRequest, opts ...grpc.CallOption) (*RoleBinding, error) + Update(ctx context.Context, in *RoleBinding, opts ...grpc.CallOption) (*RoleBinding, error) + List(ctx context.Context, in *RoleBindingFilter, opts ...grpc.CallOption) (*RoleBindingList, error) + Delete(ctx context.Context, in *DeleteRoleBindingRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) +} + +type roleBindingsClient struct { + cc grpc.ClientConnInterface +} + +func NewRoleBindingsClient(cc grpc.ClientConnInterface) RoleBindingsClient { + return &roleBindingsClient{cc} +} + +func (c *roleBindingsClient) Create(ctx context.Context, in *CreateRoleBindingRequest, opts ...grpc.CallOption) (*RoleBinding, error) { + out := new(RoleBinding) + err := c.cc.Invoke(ctx, RoleBindings_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *roleBindingsClient) Update(ctx context.Context, in *RoleBinding, opts ...grpc.CallOption) (*RoleBinding, error) { + out := new(RoleBinding) + err := c.cc.Invoke(ctx, RoleBindings_Update_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *roleBindingsClient) List(ctx context.Context, in *RoleBindingFilter, opts ...grpc.CallOption) (*RoleBindingList, error) { + out := new(RoleBindingList) + err := c.cc.Invoke(ctx, RoleBindings_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *roleBindingsClient) Delete(ctx context.Context, in *DeleteRoleBindingRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, RoleBindings_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RoleBindingsServer is the server API for RoleBindings service. +// All implementations must embed UnimplementedRoleBindingsServer +// for forward compatibility +type RoleBindingsServer interface { + Create(context.Context, *CreateRoleBindingRequest) (*RoleBinding, error) + Update(context.Context, *RoleBinding) (*RoleBinding, error) + List(context.Context, *RoleBindingFilter) (*RoleBindingList, error) + Delete(context.Context, *DeleteRoleBindingRequest) (*emptypb.Empty, error) + mustEmbedUnimplementedRoleBindingsServer() +} + +// UnimplementedRoleBindingsServer must be embedded to have forward compatible implementations. +type UnimplementedRoleBindingsServer struct { +} + +func (UnimplementedRoleBindingsServer) Create(context.Context, *CreateRoleBindingRequest) (*RoleBinding, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedRoleBindingsServer) Update(context.Context, *RoleBinding) (*RoleBinding, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedRoleBindingsServer) List(context.Context, *RoleBindingFilter) (*RoleBindingList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedRoleBindingsServer) Delete(context.Context, *DeleteRoleBindingRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedRoleBindingsServer) mustEmbedUnimplementedRoleBindingsServer() {} + +// UnsafeRoleBindingsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RoleBindingsServer will +// result in compilation errors. +type UnsafeRoleBindingsServer interface { + mustEmbedUnimplementedRoleBindingsServer() +} + +func RegisterRoleBindingsServer(s grpc.ServiceRegistrar, srv RoleBindingsServer) { + s.RegisterService(&RoleBindings_ServiceDesc, srv) +} + +func _RoleBindings_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateRoleBindingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RoleBindingsServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RoleBindings_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RoleBindingsServer).Create(ctx, req.(*CreateRoleBindingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _RoleBindings_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RoleBinding) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RoleBindingsServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RoleBindings_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RoleBindingsServer).Update(ctx, req.(*RoleBinding)) + } + return interceptor(ctx, in, info, handler) +} + +func _RoleBindings_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RoleBindingFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RoleBindingsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RoleBindings_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RoleBindingsServer).List(ctx, req.(*RoleBindingFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _RoleBindings_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteRoleBindingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RoleBindingsServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RoleBindings_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RoleBindingsServer).Delete(ctx, req.(*DeleteRoleBindingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// RoleBindings_ServiceDesc is the grpc.ServiceDesc for RoleBindings service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var RoleBindings_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.iam.RoleBindings", + HandlerType: (*RoleBindingsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _RoleBindings_Create_Handler, + }, + { + MethodName: "Update", + Handler: _RoleBindings_Update_Handler, + }, + { + MethodName: "List", + Handler: _RoleBindings_List_Handler, + }, + { + MethodName: "Delete", + Handler: _RoleBindings_Delete_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "role_binding.platform.proto", +} diff --git a/proto/platform/iam/v1/sigstore.platform.pb.go b/proto/platform/iam/v1/sigstore.platform.pb.go new file mode 100644 index 00000000..fda336a4 --- /dev/null +++ b/proto/platform/iam/v1/sigstore.platform.pb.go @@ -0,0 +1,803 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: sigstore.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CreateSigstoreRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // parent_id, The Group UIDP path under which the new sigstore instance is associated. + ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + // Sigstore is the sigstore instance to create; + Sigstore *Sigstore `protobuf:"bytes,2,opt,name=sigstore,proto3" json:"sigstore,omitempty"` +} + +func (x *CreateSigstoreRequest) Reset() { + *x = CreateSigstoreRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sigstore_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateSigstoreRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateSigstoreRequest) ProtoMessage() {} + +func (x *CreateSigstoreRequest) ProtoReflect() protoreflect.Message { + mi := &file_sigstore_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateSigstoreRequest.ProtoReflect.Descriptor instead. +func (*CreateSigstoreRequest) Descriptor() ([]byte, []int) { + return file_sigstore_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *CreateSigstoreRequest) GetParentId() string { + if x != nil { + return x.ParentId + } + return "" +} + +func (x *CreateSigstoreRequest) GetSigstore() *Sigstore { + if x != nil { + return x.Sigstore + } + return nil +} + +type Sigstore struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is identifier of this specific sigstore instance. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name, human-readable name of the sigstore instance. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // description, human-readable description of the sigstore instance. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // certificate authority for this instance of sigstore + CertificateAuthority *CertificateAuthority `protobuf:"bytes,4,opt,name=certificate_authority,json=certificateAuthority,proto3" json:"certificate_authority,omitempty"` + // unique hostname of this sigstore instance + Hostname string `protobuf:"bytes,5,opt,name=hostname,proto3" json:"hostname,omitempty"` +} + +func (x *Sigstore) Reset() { + *x = Sigstore{} + if protoimpl.UnsafeEnabled { + mi := &file_sigstore_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sigstore) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sigstore) ProtoMessage() {} + +func (x *Sigstore) ProtoReflect() protoreflect.Message { + mi := &file_sigstore_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sigstore.ProtoReflect.Descriptor instead. +func (*Sigstore) Descriptor() ([]byte, []int) { + return file_sigstore_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *Sigstore) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Sigstore) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Sigstore) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Sigstore) GetCertificateAuthority() *CertificateAuthority { + if x != nil { + return x.CertificateAuthority + } + return nil +} + +func (x *Sigstore) GetHostname() string { + if x != nil { + return x.Hostname + } + return "" +} + +type SigstoreList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Sigstore `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *SigstoreList) Reset() { + *x = SigstoreList{} + if protoimpl.UnsafeEnabled { + mi := &file_sigstore_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SigstoreList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SigstoreList) ProtoMessage() {} + +func (x *SigstoreList) ProtoReflect() protoreflect.Message { + mi := &file_sigstore_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SigstoreList.ProtoReflect.Descriptor instead. +func (*SigstoreList) Descriptor() ([]byte, []int) { + return file_sigstore_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *SigstoreList) GetItems() []*Sigstore { + if x != nil { + return x.Items + } + return nil +} + +type SigstoreFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // uidp filers records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` + // name is the exact name of the record. + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *SigstoreFilter) Reset() { + *x = SigstoreFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_sigstore_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SigstoreFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SigstoreFilter) ProtoMessage() {} + +func (x *SigstoreFilter) ProtoReflect() protoreflect.Message { + mi := &file_sigstore_platform_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 SigstoreFilter.ProtoReflect.Descriptor instead. +func (*SigstoreFilter) Descriptor() ([]byte, []int) { + return file_sigstore_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *SigstoreFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *SigstoreFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *SigstoreFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type DeleteSigstoreRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteSigstoreRequest) Reset() { + *x = DeleteSigstoreRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sigstore_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteSigstoreRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteSigstoreRequest) ProtoMessage() {} + +func (x *DeleteSigstoreRequest) ProtoReflect() protoreflect.Message { + mi := &file_sigstore_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteSigstoreRequest.ProtoReflect.Descriptor instead. +func (*DeleteSigstoreRequest) Descriptor() ([]byte, []int) { + return file_sigstore_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *DeleteSigstoreRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type CertificateAuthority struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Ca: + // + // *CertificateAuthority_KmsCa + // *CertificateAuthority_GoogleCa + Ca isCertificateAuthority_Ca `protobuf_oneof:"ca"` +} + +func (x *CertificateAuthority) Reset() { + *x = CertificateAuthority{} + if protoimpl.UnsafeEnabled { + mi := &file_sigstore_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CertificateAuthority) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CertificateAuthority) ProtoMessage() {} + +func (x *CertificateAuthority) ProtoReflect() protoreflect.Message { + mi := &file_sigstore_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CertificateAuthority.ProtoReflect.Descriptor instead. +func (*CertificateAuthority) Descriptor() ([]byte, []int) { + return file_sigstore_platform_proto_rawDescGZIP(), []int{5} +} + +func (m *CertificateAuthority) GetCa() isCertificateAuthority_Ca { + if m != nil { + return m.Ca + } + return nil +} + +func (x *CertificateAuthority) GetKmsCa() *KMSCA { + if x, ok := x.GetCa().(*CertificateAuthority_KmsCa); ok { + return x.KmsCa + } + return nil +} + +func (x *CertificateAuthority) GetGoogleCa() *GoogleCA { + if x, ok := x.GetCa().(*CertificateAuthority_GoogleCa); ok { + return x.GoogleCa + } + return nil +} + +type isCertificateAuthority_Ca interface { + isCertificateAuthority_Ca() +} + +type CertificateAuthority_KmsCa struct { + // kmsca is a KMS-based CA that requires a root cert and KMS signing key + KmsCa *KMSCA `protobuf:"bytes,1,opt,name=kms_ca,json=kmsCa,proto3,oneof"` +} + +type CertificateAuthority_GoogleCa struct { + // google_ca is the Google Certificate Authority service + GoogleCa *GoogleCA `protobuf:"bytes,2,opt,name=google_ca,json=googleCa,proto3,oneof"` +} + +func (*CertificateAuthority_KmsCa) isCertificateAuthority_Ca() {} + +func (*CertificateAuthority_GoogleCa) isCertificateAuthority_Ca() {} + +type KMSCA struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // key_ref is a unique reference to the signing key used for this CA + // most likely a KMS key prefixed with gcpkms://, awskms://, azurekms:// etc + // and the relevant resource name + KeyRef string `protobuf:"bytes,1,opt,name=key_ref,json=keyRef,proto3" json:"key_ref,omitempty"` + // cert_chain is the root certificate and (optional) chain + // in PEM-encoded format + CertChain string `protobuf:"bytes,2,opt,name=cert_chain,json=certChain,proto3" json:"cert_chain,omitempty"` +} + +func (x *KMSCA) Reset() { + *x = KMSCA{} + if protoimpl.UnsafeEnabled { + mi := &file_sigstore_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KMSCA) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KMSCA) ProtoMessage() {} + +func (x *KMSCA) ProtoReflect() protoreflect.Message { + mi := &file_sigstore_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KMSCA.ProtoReflect.Descriptor instead. +func (*KMSCA) Descriptor() ([]byte, []int) { + return file_sigstore_platform_proto_rawDescGZIP(), []int{6} +} + +func (x *KMSCA) GetKeyRef() string { + if x != nil { + return x.KeyRef + } + return "" +} + +func (x *KMSCA) GetCertChain() string { + if x != nil { + return x.CertChain + } + return "" +} + +type GoogleCA struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ref is a unique reference to the Google CA service in the format + // projects//locations// + Ref string `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"` +} + +func (x *GoogleCA) Reset() { + *x = GoogleCA{} + if protoimpl.UnsafeEnabled { + mi := &file_sigstore_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GoogleCA) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GoogleCA) ProtoMessage() {} + +func (x *GoogleCA) ProtoReflect() protoreflect.Message { + mi := &file_sigstore_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GoogleCA.ProtoReflect.Descriptor instead. +func (*GoogleCA) Descriptor() ([]byte, []int) { + return file_sigstore_platform_proto_rawDescGZIP(), []int{7} +} + +func (x *GoogleCA) GetRef() string { + if x != nil { + return x.Ref + } + return "" +} + +var File_sigstore_platform_proto protoreflect.FileDescriptor + +var file_sigstore_platform_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7b, 0x0a, + 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, + 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x73, + 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x52, 0x08, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0xd8, 0x01, 0x0a, 0x08, 0x53, + 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x15, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x52, 0x14, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x47, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, + 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x70, + 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x2f, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x97, 0x01, 0x0a, 0x14, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x37, 0x0a, 0x06, 0x6b, 0x6d, + 0x73, 0x5f, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x4b, 0x4d, 0x53, 0x43, 0x41, 0x48, 0x00, 0x52, 0x05, 0x6b, 0x6d, + 0x73, 0x43, 0x61, 0x12, 0x40, 0x0a, 0x09, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, + 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x41, 0x48, 0x00, 0x52, 0x08, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x43, 0x61, 0x42, 0x04, 0x0a, 0x02, 0x63, 0x61, 0x22, 0x3f, 0x0a, 0x05, 0x4b, + 0x4d, 0x53, 0x43, 0x41, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x52, 0x65, 0x66, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x63, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22, 0x1c, 0x0a, 0x08, + 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x41, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x32, 0xaf, 0x04, 0x0a, 0x0f, 0x53, + 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9a, + 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x3d, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x1f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, + 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x08, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa5, 0x0d, 0x12, 0x7e, 0x0a, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, + 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xa7, 0x0d, 0x10, 0x01, 0x12, 0x7e, 0x0a, 0x06, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, + 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa8, 0x0d, 0x12, 0x7f, 0x0a, 0x06, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1d, 0x1a, 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa6, 0x0d, 0x42, 0x6a, 0x0a, 0x22, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, + 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x76, 0x31, 0x42, 0x18, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x53, + 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, + 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_sigstore_platform_proto_rawDescOnce sync.Once + file_sigstore_platform_proto_rawDescData = file_sigstore_platform_proto_rawDesc +) + +func file_sigstore_platform_proto_rawDescGZIP() []byte { + file_sigstore_platform_proto_rawDescOnce.Do(func() { + file_sigstore_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_sigstore_platform_proto_rawDescData) + }) + return file_sigstore_platform_proto_rawDescData +} + +var file_sigstore_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_sigstore_platform_proto_goTypes = []interface{}{ + (*CreateSigstoreRequest)(nil), // 0: chainguard.platform.iam.CreateSigstoreRequest + (*Sigstore)(nil), // 1: chainguard.platform.iam.Sigstore + (*SigstoreList)(nil), // 2: chainguard.platform.iam.SigstoreList + (*SigstoreFilter)(nil), // 3: chainguard.platform.iam.SigstoreFilter + (*DeleteSigstoreRequest)(nil), // 4: chainguard.platform.iam.DeleteSigstoreRequest + (*CertificateAuthority)(nil), // 5: chainguard.platform.iam.CertificateAuthority + (*KMSCA)(nil), // 6: chainguard.platform.iam.KMSCA + (*GoogleCA)(nil), // 7: chainguard.platform.iam.GoogleCA + (*v1.UIDPFilter)(nil), // 8: chainguard.platform.common.UIDPFilter + (*emptypb.Empty)(nil), // 9: google.protobuf.Empty +} +var file_sigstore_platform_proto_depIdxs = []int32{ + 1, // 0: chainguard.platform.iam.CreateSigstoreRequest.sigstore:type_name -> chainguard.platform.iam.Sigstore + 5, // 1: chainguard.platform.iam.Sigstore.certificate_authority:type_name -> chainguard.platform.iam.CertificateAuthority + 1, // 2: chainguard.platform.iam.SigstoreList.items:type_name -> chainguard.platform.iam.Sigstore + 8, // 3: chainguard.platform.iam.SigstoreFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 6, // 4: chainguard.platform.iam.CertificateAuthority.kms_ca:type_name -> chainguard.platform.iam.KMSCA + 7, // 5: chainguard.platform.iam.CertificateAuthority.google_ca:type_name -> chainguard.platform.iam.GoogleCA + 0, // 6: chainguard.platform.iam.SigstoreService.Create:input_type -> chainguard.platform.iam.CreateSigstoreRequest + 3, // 7: chainguard.platform.iam.SigstoreService.List:input_type -> chainguard.platform.iam.SigstoreFilter + 4, // 8: chainguard.platform.iam.SigstoreService.Delete:input_type -> chainguard.platform.iam.DeleteSigstoreRequest + 1, // 9: chainguard.platform.iam.SigstoreService.Update:input_type -> chainguard.platform.iam.Sigstore + 1, // 10: chainguard.platform.iam.SigstoreService.Create:output_type -> chainguard.platform.iam.Sigstore + 2, // 11: chainguard.platform.iam.SigstoreService.List:output_type -> chainguard.platform.iam.SigstoreList + 9, // 12: chainguard.platform.iam.SigstoreService.Delete:output_type -> google.protobuf.Empty + 1, // 13: chainguard.platform.iam.SigstoreService.Update:output_type -> chainguard.platform.iam.Sigstore + 10, // [10:14] is the sub-list for method output_type + 6, // [6:10] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_sigstore_platform_proto_init() } +func file_sigstore_platform_proto_init() { + if File_sigstore_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_sigstore_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateSigstoreRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sigstore_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sigstore); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sigstore_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SigstoreList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sigstore_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SigstoreFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sigstore_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteSigstoreRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sigstore_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CertificateAuthority); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sigstore_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KMSCA); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sigstore_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GoogleCA); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_sigstore_platform_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*CertificateAuthority_KmsCa)(nil), + (*CertificateAuthority_GoogleCa)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_sigstore_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_sigstore_platform_proto_goTypes, + DependencyIndexes: file_sigstore_platform_proto_depIdxs, + MessageInfos: file_sigstore_platform_proto_msgTypes, + }.Build() + File_sigstore_platform_proto = out.File + file_sigstore_platform_proto_rawDesc = nil + file_sigstore_platform_proto_goTypes = nil + file_sigstore_platform_proto_depIdxs = nil +} diff --git a/proto/platform/iam/v1/sigstore.platform.pb.gw.go b/proto/platform/iam/v1/sigstore.platform.pb.gw.go new file mode 100644 index 00000000..b61fd0e2 --- /dev/null +++ b/proto/platform/iam/v1/sigstore.platform.pb.gw.go @@ -0,0 +1,506 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: sigstore.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_SigstoreService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client SigstoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateSigstoreRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Sigstore); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SigstoreService_Create_0(ctx context.Context, marshaler runtime.Marshaler, server SigstoreServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateSigstoreRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Sigstore); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_SigstoreService_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_SigstoreService_List_0(ctx context.Context, marshaler runtime.Marshaler, client SigstoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SigstoreFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SigstoreService_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SigstoreService_List_0(ctx context.Context, marshaler runtime.Marshaler, server SigstoreServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SigstoreFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SigstoreService_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_SigstoreService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client SigstoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteSigstoreRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SigstoreService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server SigstoreServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteSigstoreRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +func request_SigstoreService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client SigstoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Sigstore + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SigstoreService_Update_0(ctx context.Context, marshaler runtime.Marshaler, server SigstoreServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Sigstore + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterSigstoreServiceHandlerServer registers the http handlers for service SigstoreService to "mux". +// UnaryRPC :call SigstoreServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSigstoreServiceHandlerFromEndpoint instead. +func RegisterSigstoreServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SigstoreServiceServer) error { + + mux.Handle("POST", pattern_SigstoreService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Create", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SigstoreService_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SigstoreService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_SigstoreService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/List", runtime.WithHTTPPathPattern("/iam/v1/sigstore")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SigstoreService_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SigstoreService_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_SigstoreService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Delete", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SigstoreService_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SigstoreService_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_SigstoreService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Update", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SigstoreService_Update_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SigstoreService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterSigstoreServiceHandlerFromEndpoint is same as RegisterSigstoreServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterSigstoreServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterSigstoreServiceHandler(ctx, mux, conn) +} + +// RegisterSigstoreServiceHandler registers the http handlers for service SigstoreService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterSigstoreServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterSigstoreServiceHandlerClient(ctx, mux, NewSigstoreServiceClient(conn)) +} + +// RegisterSigstoreServiceHandlerClient registers the http handlers for service SigstoreService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SigstoreServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SigstoreServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "SigstoreServiceClient" to call the correct interceptors. +func RegisterSigstoreServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SigstoreServiceClient) error { + + mux.Handle("POST", pattern_SigstoreService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Create", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SigstoreService_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SigstoreService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_SigstoreService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/List", runtime.WithHTTPPathPattern("/iam/v1/sigstore")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SigstoreService_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SigstoreService_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_SigstoreService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Delete", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SigstoreService_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SigstoreService_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_SigstoreService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Update", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SigstoreService_Update_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SigstoreService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_SigstoreService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "sigstore", "parent_id"}, "")) + + pattern_SigstoreService_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "sigstore"}, "")) + + pattern_SigstoreService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "sigstore", "id"}, "")) + + pattern_SigstoreService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "sigstore", "id"}, "")) +) + +var ( + forward_SigstoreService_Create_0 = runtime.ForwardResponseMessage + + forward_SigstoreService_List_0 = runtime.ForwardResponseMessage + + forward_SigstoreService_Delete_0 = runtime.ForwardResponseMessage + + forward_SigstoreService_Update_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/iam/v1/sigstore.platform.proto b/proto/platform/iam/v1/sigstore.platform.proto new file mode 100644 index 00000000..f1613ae5 --- /dev/null +++ b/proto/platform/iam/v1/sigstore.platform.proto @@ -0,0 +1,134 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.iam.v1"; +option java_outer_classname = "PlatformIAMSigstoreProto"; + +package chainguard.platform.iam; + +import "google/protobuf/empty.proto"; +import "google/api/annotations.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service SigstoreService { + rpc Create(CreateSigstoreRequest) returns (Sigstore) { + option (google.api.http) = { + post: "/iam/v1/sigstore/{parent_id=**}" + body: "sigstore" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_SIGSTORE_CREATE] + } + }; + } + + rpc List(SigstoreFilter) returns (SigstoreList) { + option (google.api.http) = { + get: "/iam/v1/sigstore" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_SIGSTORE_LIST] + unscoped: true + } + }; + } + + rpc Delete(DeleteSigstoreRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/iam/v1/sigstore/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_SIGSTORE_DELETE] + } + }; + } + + rpc Update(Sigstore) returns (Sigstore) { + option (google.api.http) = { + put: "/iam/v1/sigstore/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_SIGSTORE_UPDATE] + } + }; + } +} + +message CreateSigstoreRequest { + // parent_id, The Group UIDP path under which the new sigstore instance is associated. + string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; + + // Sigstore is the sigstore instance to create; + Sigstore sigstore = 2; +} + +message Sigstore { + // id is identifier of this specific sigstore instance. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + + // name, human-readable name of the sigstore instance. + string name = 2; + + // description, human-readable description of the sigstore instance. + string description = 3; + + // certificate authority for this instance of sigstore + CertificateAuthority certificate_authority = 4; + + // unique hostname of this sigstore instance + string hostname = 5; +} + +message SigstoreList { + repeated Sigstore items = 1; +} + +message SigstoreFilter { + // id is the exact UIDP of the record. + string id = 1; + + // uidp filers records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 2; + + // name is the exact name of the record. + string name = 3; +} + +message DeleteSigstoreRequest { + // id is the exact UIDP of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message CertificateAuthority { + oneof ca { + // kmsca is a KMS-based CA that requires a root cert and KMS signing key + KMSCA kms_ca = 1; + + // google_ca is the Google Certificate Authority service + GoogleCA google_ca =2; + } +} + +message KMSCA { + // key_ref is a unique reference to the signing key used for this CA + // most likely a KMS key prefixed with gcpkms://, awskms://, azurekms:// etc + // and the relevant resource name + string key_ref = 1; + + // cert_chain is the root certificate and (optional) chain + // in PEM-encoded format + string cert_chain = 2; +} + +message GoogleCA { + // ref is a unique reference to the Google CA service in the format + // projects//locations// + string ref = 1; +} diff --git a/proto/platform/iam/v1/sigstore.platform_grpc.pb.go b/proto/platform/iam/v1/sigstore.platform_grpc.pb.go new file mode 100644 index 00000000..97750f65 --- /dev/null +++ b/proto/platform/iam/v1/sigstore.platform_grpc.pb.go @@ -0,0 +1,221 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: sigstore.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + SigstoreService_Create_FullMethodName = "/chainguard.platform.iam.SigstoreService/Create" + SigstoreService_List_FullMethodName = "/chainguard.platform.iam.SigstoreService/List" + SigstoreService_Delete_FullMethodName = "/chainguard.platform.iam.SigstoreService/Delete" + SigstoreService_Update_FullMethodName = "/chainguard.platform.iam.SigstoreService/Update" +) + +// SigstoreServiceClient is the client API for SigstoreService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SigstoreServiceClient interface { + Create(ctx context.Context, in *CreateSigstoreRequest, opts ...grpc.CallOption) (*Sigstore, error) + List(ctx context.Context, in *SigstoreFilter, opts ...grpc.CallOption) (*SigstoreList, error) + Delete(ctx context.Context, in *DeleteSigstoreRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Update(ctx context.Context, in *Sigstore, opts ...grpc.CallOption) (*Sigstore, error) +} + +type sigstoreServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewSigstoreServiceClient(cc grpc.ClientConnInterface) SigstoreServiceClient { + return &sigstoreServiceClient{cc} +} + +func (c *sigstoreServiceClient) Create(ctx context.Context, in *CreateSigstoreRequest, opts ...grpc.CallOption) (*Sigstore, error) { + out := new(Sigstore) + err := c.cc.Invoke(ctx, SigstoreService_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sigstoreServiceClient) List(ctx context.Context, in *SigstoreFilter, opts ...grpc.CallOption) (*SigstoreList, error) { + out := new(SigstoreList) + err := c.cc.Invoke(ctx, SigstoreService_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sigstoreServiceClient) Delete(ctx context.Context, in *DeleteSigstoreRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, SigstoreService_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sigstoreServiceClient) Update(ctx context.Context, in *Sigstore, opts ...grpc.CallOption) (*Sigstore, error) { + out := new(Sigstore) + err := c.cc.Invoke(ctx, SigstoreService_Update_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SigstoreServiceServer is the server API for SigstoreService service. +// All implementations must embed UnimplementedSigstoreServiceServer +// for forward compatibility +type SigstoreServiceServer interface { + Create(context.Context, *CreateSigstoreRequest) (*Sigstore, error) + List(context.Context, *SigstoreFilter) (*SigstoreList, error) + Delete(context.Context, *DeleteSigstoreRequest) (*emptypb.Empty, error) + Update(context.Context, *Sigstore) (*Sigstore, error) + mustEmbedUnimplementedSigstoreServiceServer() +} + +// UnimplementedSigstoreServiceServer must be embedded to have forward compatible implementations. +type UnimplementedSigstoreServiceServer struct { +} + +func (UnimplementedSigstoreServiceServer) Create(context.Context, *CreateSigstoreRequest) (*Sigstore, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedSigstoreServiceServer) List(context.Context, *SigstoreFilter) (*SigstoreList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedSigstoreServiceServer) Delete(context.Context, *DeleteSigstoreRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedSigstoreServiceServer) Update(context.Context, *Sigstore) (*Sigstore, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedSigstoreServiceServer) mustEmbedUnimplementedSigstoreServiceServer() {} + +// UnsafeSigstoreServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SigstoreServiceServer will +// result in compilation errors. +type UnsafeSigstoreServiceServer interface { + mustEmbedUnimplementedSigstoreServiceServer() +} + +func RegisterSigstoreServiceServer(s grpc.ServiceRegistrar, srv SigstoreServiceServer) { + s.RegisterService(&SigstoreService_ServiceDesc, srv) +} + +func _SigstoreService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSigstoreRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SigstoreServiceServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SigstoreService_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SigstoreServiceServer).Create(ctx, req.(*CreateSigstoreRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SigstoreService_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SigstoreFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SigstoreServiceServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SigstoreService_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SigstoreServiceServer).List(ctx, req.(*SigstoreFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _SigstoreService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteSigstoreRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SigstoreServiceServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SigstoreService_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SigstoreServiceServer).Delete(ctx, req.(*DeleteSigstoreRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SigstoreService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Sigstore) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SigstoreServiceServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SigstoreService_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SigstoreServiceServer).Update(ctx, req.(*Sigstore)) + } + return interceptor(ctx, in, info, handler) +} + +// SigstoreService_ServiceDesc is the grpc.ServiceDesc for SigstoreService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SigstoreService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.iam.SigstoreService", + HandlerType: (*SigstoreServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _SigstoreService_Create_Handler, + }, + { + MethodName: "List", + Handler: _SigstoreService_List_Handler, + }, + { + MethodName: "Delete", + Handler: _SigstoreService_Delete_Handler, + }, + { + MethodName: "Update", + Handler: _SigstoreService_Update_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "sigstore.platform.proto", +} diff --git a/proto/platform/iam/v1/test/mock_account_accociations.go b/proto/platform/iam/v1/test/mock_account_accociations.go new file mode 100644 index 00000000..8de0cce6 --- /dev/null +++ b/proto/platform/iam/v1/test/mock_account_accociations.go @@ -0,0 +1,103 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + iam "chainguard.dev/sdk/proto/platform/iam/v1" +) + +var _ iam.GroupAccountAssociationsClient = (*MockGroupAccountAssociationsClient)(nil) + +type MockGroupAccountAssociationsClient struct { + OnCreate []AccountAssociationsOnCreate + OnUpdate []AccountAssociationsOnUpdate + OnDelete []AccountAssociationsOnDelete + OnList []AccountAssociationsOnList + OnCheck []AccountAssociationsOnCheck +} + +type AccountAssociationsOnCreate struct { + Given *iam.AccountAssociations + Created *iam.AccountAssociations + Error error +} + +type AccountAssociationsOnUpdate struct { + Given *iam.AccountAssociations + Updated *iam.AccountAssociations + Error error +} + +type AccountAssociationsOnDelete struct { + Given *iam.DeleteAccountAssociationsRequest + Error error +} + +type AccountAssociationsOnList struct { + Given *iam.AccountAssociationsFilter + List *iam.AccountAssociationsList + Error error +} + +type AccountAssociationsOnCheck struct { + Given *iam.AccountAssociationsCheckRequest + Status *iam.AccountAssociationsStatus + Error error +} + +func (m MockGroupAccountAssociationsClient) Create(_ context.Context, given *iam.AccountAssociations, _ ...grpc.CallOption) (*iam.AccountAssociations, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupAccountAssociationsClient) Update(_ context.Context, given *iam.AccountAssociations, _ ...grpc.CallOption) (*iam.AccountAssociations, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupAccountAssociationsClient) Delete(_ context.Context, given *iam.DeleteAccountAssociationsRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupAccountAssociationsClient) List(_ context.Context, given *iam.AccountAssociationsFilter, _ ...grpc.CallOption) (*iam.AccountAssociationsList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return proto.Clone(o.List).(*iam.AccountAssociationsList), o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupAccountAssociationsClient) Check(_ context.Context, given *iam.AccountAssociationsCheckRequest, _ ...grpc.CallOption) (*iam.AccountAssociationsStatus, error) { + for _, o := range m.OnCheck { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return proto.Clone(o.Status).(*iam.AccountAssociationsStatus), o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/iam/v1/test/mock_client.go b/proto/platform/iam/v1/test/mock_client.go new file mode 100644 index 00000000..f852d27a --- /dev/null +++ b/proto/platform/iam/v1/test/mock_client.go @@ -0,0 +1,77 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + events "chainguard.dev/sdk/proto/platform/events/v1" + iam "chainguard.dev/sdk/proto/platform/iam/v1" +) + +type MockIAMClient struct { + OnClose error + + GroupsClient MockGroupsClient + GroupInvitesClient MockGroupInvitesClient + RolesClient MockRolesClient + RoleBindingsClient MockRoleBindingsClient + IdentitiesClient MockIdentitiesClient + DeprecatedIdentitiesClient MockDeprecatedIdentitiesClient + IdentityProvidersClient MockIdentityProvidersClient + GroupAccountAssociationsClient MockGroupAccountAssociationsClient + SubscriptionsClient MockSubscriptionsClient + PoliciesClient MockPoliciesClient + SigstoreClient MockSigstoreClient +} + +var _ iam.Clients = (*MockIAMClient)(nil) + +func (m MockIAMClient) Groups() iam.GroupsClient { + return &m.GroupsClient +} + +func (m MockIAMClient) GroupInvites() iam.GroupInvitesClient { + return &m.GroupInvitesClient +} + +func (m MockIAMClient) Roles() iam.RolesClient { + return &m.RolesClient +} + +func (m MockIAMClient) RoleBindings() iam.RoleBindingsClient { + return &m.RoleBindingsClient +} + +func (m MockIAMClient) Identities() iam.IdentitiesClient { + return &m.IdentitiesClient +} + +func (m MockIAMClient) DeprecatedIdentities() events.IdentitiesClient { + return &m.DeprecatedIdentitiesClient +} + +func (m MockIAMClient) IdentityProviders() iam.IdentityProvidersClient { + return &m.IdentityProvidersClient +} + +func (m MockIAMClient) AccountAssociations() iam.GroupAccountAssociationsClient { + return &m.GroupAccountAssociationsClient +} + +func (m MockIAMClient) Subscriptions() events.SubscriptionsClient { + return &m.SubscriptionsClient +} + +func (m MockIAMClient) Policies() iam.PoliciesClient { + return &m.PoliciesClient +} + +func (m MockIAMClient) Sigstore() iam.SigstoreServiceClient { + return &m.SigstoreClient +} + +func (m MockIAMClient) Close() error { + return m.OnClose +} diff --git a/proto/platform/iam/v1/test/mock_deprecatedidentities.go b/proto/platform/iam/v1/test/mock_deprecatedidentities.go new file mode 100644 index 00000000..3480421c --- /dev/null +++ b/proto/platform/iam/v1/test/mock_deprecatedidentities.go @@ -0,0 +1,42 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + events "chainguard.dev/sdk/proto/platform/events/v1" +) + +var _ events.IdentitiesClient = (*MockDeprecatedIdentitiesClient)(nil) + +type MockDeprecatedIdentitiesClient struct { + OnCreate []DeprecatedIdentityOnCreate +} + +type DeprecatedIdentityOnCreate struct { + Given *events.Identity + Created *events.Identity + Error error +} + +func (m MockDeprecatedIdentitiesClient) Create(_ context.Context, given *events.Identity, _ ...grpc.CallOption) (*events.Identity, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockDeprecatedIdentitiesClient) UpdateMetadata(ctx context.Context, in *events.IdentityMetadata, opts ...grpc.CallOption) (*events.IdentityMetadata, error) { //nolint: revive + return in, nil +} diff --git a/proto/platform/iam/v1/test/mock_groups.go b/proto/platform/iam/v1/test/mock_groups.go new file mode 100644 index 00000000..d2eec859 --- /dev/null +++ b/proto/platform/iam/v1/test/mock_groups.go @@ -0,0 +1,105 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + iam "chainguard.dev/sdk/proto/platform/iam/v1" + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" +) + +var _ iam.GroupsClient = (*MockGroupsClient)(nil) + +type MockGroupsClient struct { + OnCreate []GroupOnCreate + OnUpdate []GroupOnUpdate + OnDelete []GroupOnDelete + OnList []GroupOnList +} + +type GroupOnCreate struct { + Given *iam.CreateGroupRequest + Created *iam.Group + Error error +} + +type GroupOnUpdate struct { + Given *iam.Group + Updated *iam.Group + Error error +} + +type GroupOnDelete struct { + Given *iam.DeleteGroupRequest + Error error +} + +type GroupOnList struct { + Given *iam.GroupFilter + List *iam.GroupList + Error error +} + +func (m MockGroupsClient) Create(_ context.Context, given *iam.CreateGroupRequest, _ ...grpc.CallOption) (*iam.Group, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupsClient) Update(_ context.Context, given *iam.Group, _ ...grpc.CallOption) (*iam.Group, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupsClient) Delete(_ context.Context, given *iam.DeleteGroupRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupsClient) List(_ context.Context, given *iam.GroupFilter, _ ...grpc.CallOption) (*iam.GroupList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +// -- Server -- + +type MockGroupsServer struct { + iam.UnimplementedGroupsServer + Client MockGroupsClient +} + +func (m MockGroupsServer) Create(ctx context.Context, req *iam.CreateGroupRequest) (*iam.Group, error) { + return m.Client.Create(ctx, req) +} +func (m MockGroupsServer) Update(ctx context.Context, req *iam.Group) (*iam.Group, error) { + return m.Client.Update(ctx, req) +} +func (m MockGroupsServer) List(ctx context.Context, req *iam.GroupFilter) (*iam.GroupList, error) { + return m.Client.List(ctx, req) +} +func (m MockGroupsServer) Delete(ctx context.Context, req *iam.DeleteGroupRequest) (*emptypb.Empty, error) { + return m.Client.Delete(ctx, req) +} diff --git a/proto/platform/iam/v1/test/mock_identities.go b/proto/platform/iam/v1/test/mock_identities.go new file mode 100644 index 00000000..acea986d --- /dev/null +++ b/proto/platform/iam/v1/test/mock_identities.go @@ -0,0 +1,102 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + iam "chainguard.dev/sdk/proto/platform/iam/v1" +) + +var _ iam.IdentitiesClient = (*MockIdentitiesClient)(nil) + +type MockIdentitiesClient struct { + OnCreate []IdentityOnCreate + OnUpdate []IdentityOnUpdate + OnDelete []IdentityOnDelete + OnList []IdentityOnList + OnLooKup []IdentityOnLookup +} + +type IdentityOnCreate struct { + Given *iam.CreateIdentityRequest + Created *iam.Identity + Error error +} + +type IdentityOnUpdate struct { + Given *iam.Identity + Updated *iam.Identity + Error error +} + +type IdentityOnDelete struct { + Given *iam.DeleteIdentityRequest + Error error +} + +type IdentityOnList struct { + Given *iam.IdentityFilter + List *iam.IdentityList + Error error +} + +type IdentityOnLookup struct { + Given *iam.LookupRequest + Found *iam.Identity + Error error +} + +func (m MockIdentitiesClient) Create(_ context.Context, given *iam.CreateIdentityRequest, _ ...grpc.CallOption) (*iam.Identity, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockIdentitiesClient) Update(_ context.Context, given *iam.Identity, _ ...grpc.CallOption) (*iam.Identity, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockIdentitiesClient) Delete(_ context.Context, given *iam.DeleteIdentityRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockIdentitiesClient) List(_ context.Context, given *iam.IdentityFilter, _ ...grpc.CallOption) (*iam.IdentityList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockIdentitiesClient) Lookup(_ context.Context, given *iam.LookupRequest, _ ...grpc.CallOption) (*iam.Identity, error) { + for _, o := range m.OnLooKup { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Found, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/iam/v1/test/mock_identity_providers.go b/proto/platform/iam/v1/test/mock_identity_providers.go new file mode 100644 index 00000000..1d3d0c53 --- /dev/null +++ b/proto/platform/iam/v1/test/mock_identity_providers.go @@ -0,0 +1,86 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + api "chainguard.dev/sdk/proto/platform/iam/v1" +) + +var _ api.IdentityProvidersClient = (*MockIdentityProvidersClient)(nil) + +type MockIdentityProvidersClient struct { + OnCreate []IdentityProvidersOnCreate + OnUpdate []IdentityProvidersOnUpdate + OnDelete []IdentityProvidersOnDelete + OnList []IdentityProvidersOnList +} + +type IdentityProvidersOnCreate struct { + Given *api.CreateIdentityProviderRequest + Created *api.IdentityProvider + Error error +} + +type IdentityProvidersOnUpdate struct { + Given *api.IdentityProvider + Updated *api.IdentityProvider + Error error +} + +type IdentityProvidersOnDelete struct { + Given *api.DeleteIdentityProviderRequest + Error error +} + +type IdentityProvidersOnList struct { + Given *api.IdentityProviderFilter + List *api.IdentityProviderList + Error error +} + +func (m MockIdentityProvidersClient) Create(_ context.Context, given *api.CreateIdentityProviderRequest, _ ...grpc.CallOption) (*api.IdentityProvider, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockIdentityProvidersClient) Update(_ context.Context, given *api.IdentityProvider, _ ...grpc.CallOption) (*api.IdentityProvider, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockIdentityProvidersClient) Delete(_ context.Context, given *api.DeleteIdentityProviderRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockIdentityProvidersClient) List(_ context.Context, given *api.IdentityProviderFilter, _ ...grpc.CallOption) (*api.IdentityProviderList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/iam/v1/test/mock_invites.go b/proto/platform/iam/v1/test/mock_invites.go new file mode 100644 index 00000000..b546f392 --- /dev/null +++ b/proto/platform/iam/v1/test/mock_invites.go @@ -0,0 +1,86 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + iam "chainguard.dev/sdk/proto/platform/iam/v1" +) + +var _ iam.GroupInvitesClient = (*MockGroupInvitesClient)(nil) + +type MockGroupInvitesClient struct { + OnCreate []GroupInviteOnCreate + OnCreateWithGroup []GroupInviteOnCreateWithGroup + OnDelete []GroupInviteOnDelete + OnList []GroupInviteOnList +} + +type GroupInviteOnCreate struct { + Given *iam.GroupInviteRequest + Created *iam.GroupInvite + Error error +} + +type GroupInviteOnCreateWithGroup struct { + Given *iam.GroupInviteRequest + Created *iam.GroupInvite + Error error +} + +type GroupInviteOnDelete struct { + Given *iam.DeleteGroupInviteRequest + Error error +} + +type GroupInviteOnList struct { + Given *iam.GroupInviteFilter + List *iam.GroupInviteList + Error error +} + +func (m MockGroupInvitesClient) Create(_ context.Context, given *iam.GroupInviteRequest, _ ...grpc.CallOption) (*iam.GroupInvite, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupInvitesClient) CreateWithGroup(_ context.Context, given *iam.GroupInviteRequest, _ ...grpc.CallOption) (*iam.GroupInvite, error) { + for _, o := range m.OnCreateWithGroup { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupInvitesClient) Delete(_ context.Context, given *iam.DeleteGroupInviteRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockGroupInvitesClient) List(_ context.Context, given *iam.GroupInviteFilter, _ ...grpc.CallOption) (*iam.GroupInviteList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/iam/v1/test/mock_policies.go b/proto/platform/iam/v1/test/mock_policies.go new file mode 100644 index 00000000..f9ac1179 --- /dev/null +++ b/proto/platform/iam/v1/test/mock_policies.go @@ -0,0 +1,118 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + iam "chainguard.dev/sdk/proto/platform/iam/v1" +) + +var _ iam.PoliciesClient = (*MockPoliciesClient)(nil) + +type MockPoliciesClient struct { + OnCreate []PoliciesOnCreate + OnUpdate []PoliciesOnUpdate + OnDelete []PoliciesOnDelete + OnList []PoliciesOnList + OnListVersions []PoliciesOnListVersions + OnActiveVersion []PoliciesOnActivateVersion +} + +type PoliciesOnCreate struct { + Given *iam.CreatePolicyRequest + Created *iam.Policy + Error error +} + +type PoliciesOnUpdate struct { + Given *iam.Policy + Updated *iam.Policy + Error error +} + +type PoliciesOnDelete struct { + Given *iam.DeletePolicyRequest + Error error +} + +type PoliciesOnList struct { + Given *iam.PolicyFilter + List *iam.PolicyList + Error error +} + +type PoliciesOnListVersions struct { + Given *iam.ListVersionsRequest + List *iam.PolicyVersionList + Error error +} + +type PoliciesOnActivateVersion struct { + Given *iam.ActivateVersionRequest + Active *iam.Policy + Error error +} + +func (m MockPoliciesClient) Create(_ context.Context, given *iam.CreatePolicyRequest, _ ...grpc.CallOption) (*iam.Policy, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockPoliciesClient) Update(_ context.Context, given *iam.Policy, _ ...grpc.CallOption) (*iam.Policy, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockPoliciesClient) Delete(_ context.Context, given *iam.DeletePolicyRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockPoliciesClient) List(_ context.Context, given *iam.PolicyFilter, _ ...grpc.CallOption) (*iam.PolicyList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockPoliciesClient) ListVersions(_ context.Context, given *iam.ListVersionsRequest, _ ...grpc.CallOption) (*iam.PolicyVersionList, error) { + for _, o := range m.OnListVersions { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockPoliciesClient) ActivateVersion(_ context.Context, given *iam.ActivateVersionRequest, _ ...grpc.CallOption) (*iam.Policy, error) { + for _, o := range m.OnActiveVersion { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Active, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/iam/v1/test/mock_role_bindings.go b/proto/platform/iam/v1/test/mock_role_bindings.go new file mode 100644 index 00000000..abd2b9e1 --- /dev/null +++ b/proto/platform/iam/v1/test/mock_role_bindings.go @@ -0,0 +1,86 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + iam "chainguard.dev/sdk/proto/platform/iam/v1" +) + +var _ iam.RoleBindingsClient = (*MockRoleBindingsClient)(nil) + +type MockRoleBindingsClient struct { + OnCreate []RoleBindingOnCreate + OnUpdate []RoleBindingOnUpdate + OnDelete []RoleBindingOnDelete + OnList []RoleBindingOnList +} + +type RoleBindingOnCreate struct { + Given *iam.CreateRoleBindingRequest + Created *iam.RoleBinding + Error error +} + +type RoleBindingOnUpdate struct { + Given *iam.RoleBinding + Updated *iam.RoleBinding + Error error +} + +type RoleBindingOnDelete struct { + Given *iam.DeleteRoleBindingRequest + Error error +} + +type RoleBindingOnList struct { + Given *iam.RoleBindingFilter + List *iam.RoleBindingList + Error error +} + +func (m MockRoleBindingsClient) Create(_ context.Context, given *iam.CreateRoleBindingRequest, _ ...grpc.CallOption) (*iam.RoleBinding, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRoleBindingsClient) Update(_ context.Context, given *iam.RoleBinding, _ ...grpc.CallOption) (*iam.RoleBinding, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRoleBindingsClient) Delete(_ context.Context, given *iam.DeleteRoleBindingRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRoleBindingsClient) List(_ context.Context, given *iam.RoleBindingFilter, _ ...grpc.CallOption) (*iam.RoleBindingList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/iam/v1/test/mock_roles.go b/proto/platform/iam/v1/test/mock_roles.go new file mode 100644 index 00000000..b3b3cc25 --- /dev/null +++ b/proto/platform/iam/v1/test/mock_roles.go @@ -0,0 +1,86 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + iam "chainguard.dev/sdk/proto/platform/iam/v1" +) + +var _ iam.RolesClient = (*MockRolesClient)(nil) + +type MockRolesClient struct { + OnCreate []RoleOnCreate + OnUpdate []RoleOnUpdate + OnDelete []RoleOnDelete + OnList []RoleOnList +} + +type RoleOnCreate struct { + Given *iam.CreateRoleRequest + Created *iam.Role + Error error +} + +type RoleOnUpdate struct { + Given *iam.Role + Updated *iam.Role + Error error +} + +type RoleOnDelete struct { + Given *iam.DeleteRoleRequest + Error error +} + +type RoleOnList struct { + Given *iam.RoleFilter + List *iam.RoleList + Error error +} + +func (m MockRolesClient) Create(_ context.Context, given *iam.CreateRoleRequest, _ ...grpc.CallOption) (*iam.Role, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRolesClient) Update(_ context.Context, given *iam.Role, _ ...grpc.CallOption) (*iam.Role, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRolesClient) Delete(_ context.Context, given *iam.DeleteRoleRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRolesClient) List(_ context.Context, given *iam.RoleFilter, _ ...grpc.CallOption) (*iam.RoleList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/iam/v1/test/mock_sigstore.go b/proto/platform/iam/v1/test/mock_sigstore.go new file mode 100644 index 00000000..7433bc6a --- /dev/null +++ b/proto/platform/iam/v1/test/mock_sigstore.go @@ -0,0 +1,85 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + iam "chainguard.dev/sdk/proto/platform/iam/v1" + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" +) + +var _ iam.SigstoreServiceClient = (*MockSigstoreClient)(nil) + +type MockSigstoreClient struct { + OnCreate []SigstoreOnCreate + OnUpdate []SigstoreOnUpdate + OnDelete []SigstoreOnDelete + OnList []SigstoreOnList +} + +type SigstoreOnCreate struct { + Given *iam.CreateSigstoreRequest + Created *iam.Sigstore + Error error +} + +type SigstoreOnUpdate struct { + Given *iam.Sigstore + Updated *iam.Sigstore + Error error +} + +type SigstoreOnDelete struct { + Given *iam.DeleteSigstoreRequest + Error error +} + +type SigstoreOnList struct { + Given *iam.SigstoreFilter + List *iam.SigstoreList + Error error +} + +func (m MockSigstoreClient) Create(_ context.Context, given *iam.CreateSigstoreRequest, _ ...grpc.CallOption) (*iam.Sigstore, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockSigstoreClient) Update(_ context.Context, given *iam.Sigstore, _ ...grpc.CallOption) (*iam.Sigstore, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockSigstoreClient) Delete(_ context.Context, given *iam.DeleteSigstoreRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockSigstoreClient) List(_ context.Context, given *iam.SigstoreFilter, _ ...grpc.CallOption) (*iam.SigstoreList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/iam/v1/test/mock_subscriptions.go b/proto/platform/iam/v1/test/mock_subscriptions.go new file mode 100644 index 00000000..8ac42298 --- /dev/null +++ b/proto/platform/iam/v1/test/mock_subscriptions.go @@ -0,0 +1,86 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + events "chainguard.dev/sdk/proto/platform/events/v1" +) + +var _ events.SubscriptionsClient = (*MockSubscriptionsClient)(nil) + +type MockSubscriptionsClient struct { + OnCreate []SubscriptionOnCreate + OnUpdate []SubscriptionOnUpdate + OnDelete []SubscriptionOnDelete + OnList []SubscriptionOnList +} + +type SubscriptionOnCreate struct { + Given *events.CreateSubscriptionRequest + Created *events.Subscription + Error error +} + +type SubscriptionOnUpdate struct { + Given *events.Subscription + Updated *events.Subscription + Error error +} + +type SubscriptionOnDelete struct { + Given *events.DeleteSubscriptionRequest + Error error +} + +type SubscriptionOnList struct { + Given *events.SubscriptionFilter + List *events.SubscriptionList + Error error +} + +func (m MockSubscriptionsClient) Create(_ context.Context, given *events.CreateSubscriptionRequest, _ ...grpc.CallOption) (*events.Subscription, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockSubscriptionsClient) Update(_ context.Context, given *events.Subscription, _ ...grpc.CallOption) (*events.Subscription, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockSubscriptionsClient) Delete(_ context.Context, given *events.DeleteSubscriptionRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockSubscriptionsClient) List(_ context.Context, given *events.SubscriptionFilter, _ ...grpc.CallOption) (*events.SubscriptionList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/oidc/v1/clients.go b/proto/platform/oidc/v1/clients.go new file mode 100644 index 00000000..61058163 --- /dev/null +++ b/proto/platform/oidc/v1/clients.go @@ -0,0 +1,101 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "context" + "fmt" + "net/url" + "time" + + delegate "chainguard.dev/go-grpc-kit/pkg/options" + "github.com/chainguard-dev/clog" + "google.golang.org/grpc" + + "chainguard.dev/sdk/auth" +) + +type Clients interface { + STS() SecurityTokenServiceClient + + Close() error +} + +type options struct { + userAgent string +} + +type ClientOption func(*options) + +func WithUserAgent(agent string) ClientOption { + return func(o *options) { + o.userAgent = agent + } +} +func NewClients(ctx context.Context, addr string, token string, opts ...ClientOption) (Clients, error) { + conf := new(options) + for _, opt := range opts { + opt(conf) + } + + uri, err := url.Parse(addr) + if err != nil { + return nil, fmt.Errorf("failed to parse oidc service address, must be a url: %w", err) + } + + target, rpcOpts := delegate.GRPCOptions(*uri) + + // TODO: we may want to require transport security at some future point. + if cred := auth.NewFromToken(ctx, token, false); cred != nil { + rpcOpts = append(rpcOpts, grpc.WithPerRPCCredentials(cred)) + } else { + clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") + } + + if conf.userAgent != "" { + rpcOpts = append(rpcOpts, grpc.WithUserAgent(conf.userAgent)) + } + + var cancel context.CancelFunc + if _, timeoutSet := ctx.Deadline(); !timeoutSet { + ctx, cancel = context.WithTimeout(ctx, 300*time.Second) + defer cancel() + } + conn, err := grpc.DialContext(ctx, target, rpcOpts...) + if err != nil { + return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + } + + return &clients{ + sts: NewSecurityTokenServiceClient(conn), + + conn: conn, + }, nil +} + +func NewClientsFromConnection(conn *grpc.ClientConn) Clients { + return &clients{ + sts: NewSecurityTokenServiceClient(conn), + // conn is not set, this client struct does not own closing it. + } +} + +type clients struct { + sts SecurityTokenServiceClient + + conn *grpc.ClientConn +} + +func (c *clients) STS() SecurityTokenServiceClient { + return c.sts +} + +func (c *clients) Close() error { + if c.conn != nil { + return c.conn.Close() + } + return nil +} diff --git a/proto/platform/oidc/v1/doc.go b/proto/platform/oidc/v1/doc.go new file mode 100644 index 00000000..93693c42 --- /dev/null +++ b/proto/platform/oidc/v1/doc.go @@ -0,0 +1,10 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package v1 contains the v1 GRPC client and server definitions +// for implementing OIDC interactions for the Platform. +// +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. oidc.platform.proto +package v1 diff --git a/proto/platform/oidc/v1/oidc.platform.pb.go b/proto/platform/oidc/v1/oidc.platform.pb.go new file mode 100644 index 00000000..1a2b1350 --- /dev/null +++ b/proto/platform/oidc/v1/oidc.platform.pb.go @@ -0,0 +1,459 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: oidc.platform.proto + +package v1 + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ExchangeRefreshTokenRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Aud []string `protobuf:"bytes,1,rep,name=aud,proto3" json:"aud,omitempty"` + Scope string `protobuf:"bytes,2,opt,name=scope,proto3" json:"scope,omitempty"` + // List of capabilities to request for the token. + Cap []string `protobuf:"bytes,3,rep,name=cap,proto3" json:"cap,omitempty"` +} + +func (x *ExchangeRefreshTokenRequest) Reset() { + *x = ExchangeRefreshTokenRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_oidc_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExchangeRefreshTokenRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExchangeRefreshTokenRequest) ProtoMessage() {} + +func (x *ExchangeRefreshTokenRequest) ProtoReflect() protoreflect.Message { + mi := &file_oidc_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExchangeRefreshTokenRequest.ProtoReflect.Descriptor instead. +func (*ExchangeRefreshTokenRequest) Descriptor() ([]byte, []int) { + return file_oidc_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *ExchangeRefreshTokenRequest) GetAud() []string { + if x != nil { + return x.Aud + } + return nil +} + +func (x *ExchangeRefreshTokenRequest) GetScope() string { + if x != nil { + return x.Scope + } + return "" +} + +func (x *ExchangeRefreshTokenRequest) GetCap() []string { + if x != nil { + return x.Cap + } + return nil +} + +type ExchangeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Aud []string `protobuf:"bytes,1,rep,name=aud,proto3" json:"aud,omitempty"` + Scope string `protobuf:"bytes,2,opt,name=scope,proto3" json:"scope,omitempty"` + Cluster string `protobuf:"bytes,3,opt,name=cluster,proto3" json:"cluster,omitempty"` + Identity string `protobuf:"bytes,4,opt,name=identity,proto3" json:"identity,omitempty"` + // List of capabilities to request for the token. + Cap []string `protobuf:"bytes,5,rep,name=cap,proto3" json:"cap,omitempty"` + // Whether or not to include the upstream token in the response + IncludeUpstreamToken bool `protobuf:"varint,6,opt,name=include_upstream_token,json=includeUpstreamToken,proto3" json:"include_upstream_token,omitempty"` +} + +func (x *ExchangeRequest) Reset() { + *x = ExchangeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_oidc_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExchangeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExchangeRequest) ProtoMessage() {} + +func (x *ExchangeRequest) ProtoReflect() protoreflect.Message { + mi := &file_oidc_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExchangeRequest.ProtoReflect.Descriptor instead. +func (*ExchangeRequest) Descriptor() ([]byte, []int) { + return file_oidc_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *ExchangeRequest) GetAud() []string { + if x != nil { + return x.Aud + } + return nil +} + +func (x *ExchangeRequest) GetScope() string { + if x != nil { + return x.Scope + } + return "" +} + +func (x *ExchangeRequest) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +func (x *ExchangeRequest) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" +} + +func (x *ExchangeRequest) GetCap() []string { + if x != nil { + return x.Cap + } + return nil +} + +func (x *ExchangeRequest) GetIncludeUpstreamToken() bool { + if x != nil { + return x.IncludeUpstreamToken + } + return false +} + +type RawToken struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *RawToken) Reset() { + *x = RawToken{} + if protoimpl.UnsafeEnabled { + mi := &file_oidc_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RawToken) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RawToken) ProtoMessage() {} + +func (x *RawToken) ProtoReflect() protoreflect.Message { + mi := &file_oidc_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RawToken.ProtoReflect.Descriptor instead. +func (*RawToken) Descriptor() ([]byte, []int) { + return file_oidc_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *RawToken) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +// ExchangeRefreshToken returns a pair of token, in order to allow +// refresh token to also be rotated. +type TokenPair struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token *RawToken `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + RefreshToken *RawToken `protobuf:"bytes,2,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` +} + +func (x *TokenPair) Reset() { + *x = TokenPair{} + if protoimpl.UnsafeEnabled { + mi := &file_oidc_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TokenPair) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TokenPair) ProtoMessage() {} + +func (x *TokenPair) ProtoReflect() protoreflect.Message { + mi := &file_oidc_platform_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 TokenPair.ProtoReflect.Descriptor instead. +func (*TokenPair) Descriptor() ([]byte, []int) { + return file_oidc_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *TokenPair) GetToken() *RawToken { + if x != nil { + return x.Token + } + return nil +} + +func (x *TokenPair) GetRefreshToken() *RawToken { + if x != nil { + return x.RefreshToken + } + return nil +} + +var File_oidc_platform_proto protoreflect.FileDescriptor + +var file_oidc_platform_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x1b, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x75, 0x64, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x61, 0x75, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, + 0x12, 0x39, 0x0a, 0x03, 0x63, 0x61, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x27, 0xfa, + 0x41, 0x24, 0x0a, 0x22, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x63, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x43, 0x61, 0x70, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x03, 0x63, 0x61, 0x70, 0x22, 0xe0, 0x01, 0x0a, 0x0f, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x75, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x61, 0x75, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x39, 0x0a, + 0x03, 0x63, 0x61, 0x70, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x27, 0xfa, 0x41, 0x24, 0x0a, + 0x22, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x63, 0x61, 0x70, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x03, 0x63, 0x61, 0x70, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x20, + 0x0a, 0x08, 0x52, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x22, 0x8e, 0x01, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x12, 0x38, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x52, 0x61, 0x77, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x47, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x52, 0x61, 0x77, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x32, 0xb4, 0x02, 0x0a, 0x14, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x08, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, + 0x64, 0x63, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x52, 0x61, + 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x0d, + 0x2f, 0x73, 0x74, 0x73, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5a, 0x0f, 0x12, + 0x0d, 0x2f, 0x73, 0x74, 0x73, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x97, + 0x01, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, + 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, + 0x64, 0x63, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, + 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, + 0x61, 0x69, 0x72, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x22, 0x1b, 0x2f, 0x73, 0x74, + 0x73, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, + 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x65, 0x0a, 0x23, 0x64, 0x65, 0x76, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x76, 0x31, 0x42, + 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x4f, 0x49, 0x44, 0x43, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x6f, 0x69, 0x64, 0x63, 0x2f, 0x76, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_oidc_platform_proto_rawDescOnce sync.Once + file_oidc_platform_proto_rawDescData = file_oidc_platform_proto_rawDesc +) + +func file_oidc_platform_proto_rawDescGZIP() []byte { + file_oidc_platform_proto_rawDescOnce.Do(func() { + file_oidc_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_oidc_platform_proto_rawDescData) + }) + return file_oidc_platform_proto_rawDescData +} + +var file_oidc_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_oidc_platform_proto_goTypes = []interface{}{ + (*ExchangeRefreshTokenRequest)(nil), // 0: chainguard.platform.oidc.ExchangeRefreshTokenRequest + (*ExchangeRequest)(nil), // 1: chainguard.platform.oidc.ExchangeRequest + (*RawToken)(nil), // 2: chainguard.platform.oidc.RawToken + (*TokenPair)(nil), // 3: chainguard.platform.oidc.TokenPair +} +var file_oidc_platform_proto_depIdxs = []int32{ + 2, // 0: chainguard.platform.oidc.TokenPair.token:type_name -> chainguard.platform.oidc.RawToken + 2, // 1: chainguard.platform.oidc.TokenPair.refresh_token:type_name -> chainguard.platform.oidc.RawToken + 1, // 2: chainguard.platform.oidc.SecurityTokenService.Exchange:input_type -> chainguard.platform.oidc.ExchangeRequest + 0, // 3: chainguard.platform.oidc.SecurityTokenService.ExchangeRefreshToken:input_type -> chainguard.platform.oidc.ExchangeRefreshTokenRequest + 2, // 4: chainguard.platform.oidc.SecurityTokenService.Exchange:output_type -> chainguard.platform.oidc.RawToken + 3, // 5: chainguard.platform.oidc.SecurityTokenService.ExchangeRefreshToken:output_type -> chainguard.platform.oidc.TokenPair + 4, // [4:6] is the sub-list for method output_type + 2, // [2:4] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_oidc_platform_proto_init() } +func file_oidc_platform_proto_init() { + if File_oidc_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_oidc_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeRefreshTokenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_oidc_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_oidc_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RawToken); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_oidc_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenPair); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_oidc_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_oidc_platform_proto_goTypes, + DependencyIndexes: file_oidc_platform_proto_depIdxs, + MessageInfos: file_oidc_platform_proto_msgTypes, + }.Build() + File_oidc_platform_proto = out.File + file_oidc_platform_proto_rawDesc = nil + file_oidc_platform_proto_goTypes = nil + file_oidc_platform_proto_depIdxs = nil +} diff --git a/proto/platform/oidc/v1/oidc.platform.pb.gw.go b/proto/platform/oidc/v1/oidc.platform.pb.gw.go new file mode 100644 index 00000000..fc3d42cf --- /dev/null +++ b/proto/platform/oidc/v1/oidc.platform.pb.gw.go @@ -0,0 +1,341 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: oidc.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_SecurityTokenService_Exchange_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_SecurityTokenService_Exchange_0(ctx context.Context, marshaler runtime.Marshaler, client SecurityTokenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ExchangeRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_Exchange_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Exchange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SecurityTokenService_Exchange_0(ctx context.Context, marshaler runtime.Marshaler, server SecurityTokenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ExchangeRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_Exchange_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Exchange(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_SecurityTokenService_Exchange_1 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_SecurityTokenService_Exchange_1(ctx context.Context, marshaler runtime.Marshaler, client SecurityTokenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ExchangeRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_Exchange_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Exchange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SecurityTokenService_Exchange_1(ctx context.Context, marshaler runtime.Marshaler, server SecurityTokenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ExchangeRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_Exchange_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Exchange(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_SecurityTokenService_ExchangeRefreshToken_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_SecurityTokenService_ExchangeRefreshToken_0(ctx context.Context, marshaler runtime.Marshaler, client SecurityTokenServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ExchangeRefreshTokenRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_ExchangeRefreshToken_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ExchangeRefreshToken(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_SecurityTokenService_ExchangeRefreshToken_0(ctx context.Context, marshaler runtime.Marshaler, server SecurityTokenServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ExchangeRefreshTokenRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SecurityTokenService_ExchangeRefreshToken_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ExchangeRefreshToken(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterSecurityTokenServiceHandlerServer registers the http handlers for service SecurityTokenService to "mux". +// UnaryRPC :call SecurityTokenServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSecurityTokenServiceHandlerFromEndpoint instead. +func RegisterSecurityTokenServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SecurityTokenServiceServer) error { + + mux.Handle("POST", pattern_SecurityTokenService_Exchange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/Exchange", runtime.WithHTTPPathPattern("/sts/exchange")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SecurityTokenService_Exchange_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityTokenService_Exchange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_SecurityTokenService_Exchange_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/Exchange", runtime.WithHTTPPathPattern("/sts/exchange")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SecurityTokenService_Exchange_1(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityTokenService_Exchange_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_SecurityTokenService_ExchangeRefreshToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/ExchangeRefreshToken", runtime.WithHTTPPathPattern("/sts/exchange_refresh_token")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_SecurityTokenService_ExchangeRefreshToken_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityTokenService_ExchangeRefreshToken_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterSecurityTokenServiceHandlerFromEndpoint is same as RegisterSecurityTokenServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterSecurityTokenServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterSecurityTokenServiceHandler(ctx, mux, conn) +} + +// RegisterSecurityTokenServiceHandler registers the http handlers for service SecurityTokenService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterSecurityTokenServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterSecurityTokenServiceHandlerClient(ctx, mux, NewSecurityTokenServiceClient(conn)) +} + +// RegisterSecurityTokenServiceHandlerClient registers the http handlers for service SecurityTokenService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SecurityTokenServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SecurityTokenServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "SecurityTokenServiceClient" to call the correct interceptors. +func RegisterSecurityTokenServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SecurityTokenServiceClient) error { + + mux.Handle("POST", pattern_SecurityTokenService_Exchange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/Exchange", runtime.WithHTTPPathPattern("/sts/exchange")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SecurityTokenService_Exchange_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityTokenService_Exchange_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_SecurityTokenService_Exchange_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/Exchange", runtime.WithHTTPPathPattern("/sts/exchange")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SecurityTokenService_Exchange_1(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityTokenService_Exchange_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_SecurityTokenService_ExchangeRefreshToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.oidc.SecurityTokenService/ExchangeRefreshToken", runtime.WithHTTPPathPattern("/sts/exchange_refresh_token")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_SecurityTokenService_ExchangeRefreshToken_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_SecurityTokenService_ExchangeRefreshToken_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_SecurityTokenService_Exchange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sts", "exchange"}, "")) + + pattern_SecurityTokenService_Exchange_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sts", "exchange"}, "")) + + pattern_SecurityTokenService_ExchangeRefreshToken_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"sts", "exchange_refresh_token"}, "")) +) + +var ( + forward_SecurityTokenService_Exchange_0 = runtime.ForwardResponseMessage + + forward_SecurityTokenService_Exchange_1 = runtime.ForwardResponseMessage + + forward_SecurityTokenService_ExchangeRefreshToken_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/oidc/v1/oidc.platform.proto b/proto/platform/oidc/v1/oidc.platform.proto new file mode 100644 index 00000000..df9442b3 --- /dev/null +++ b/proto/platform/oidc/v1/oidc.platform.proto @@ -0,0 +1,64 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/oidc/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.oidc.v1"; +option java_outer_classname = "PlatformOIDCProto"; + +package chainguard.platform.oidc; + +import "google/api/annotations.proto"; +import "google/api/resource.proto"; + +service SecurityTokenService { + rpc Exchange(ExchangeRequest) returns (RawToken) { + option (google.api.http) = { + post: "/sts/exchange" + additional_bindings { + get: "/sts/exchange" + } + }; + } + + rpc ExchangeRefreshToken(ExchangeRefreshTokenRequest) returns (TokenPair) { + option (google.api.http) = { + post: "/sts/exchange_refresh_token" + }; + } +} + +message ExchangeRefreshTokenRequest { + repeated string aud = 1; + string scope = 2; + + // List of capabilities to request for the token. + repeated string cap = 3 [(google.api.resource_reference) = { + type: "chainguard.capabilities/Capability" + }]; +} + +message ExchangeRequest { + repeated string aud = 1; + string scope = 2; + string cluster = 3; + string identity = 4; + + // List of capabilities to request for the token. + repeated string cap = 5 [(google.api.resource_reference) = { + type: "chainguard.capabilities/Capability" + }]; + + // Whether or not to include the upstream token in the response + bool include_upstream_token = 6; +} + +message RawToken { + string token = 1; +} + +// ExchangeRefreshToken returns a pair of token, in order to allow +// refresh token to also be rotated. +message TokenPair { + RawToken token = 1; + RawToken refresh_token = 2; +} diff --git a/proto/platform/oidc/v1/oidc.platform_grpc.pb.go b/proto/platform/oidc/v1/oidc.platform_grpc.pb.go new file mode 100644 index 00000000..80b069e5 --- /dev/null +++ b/proto/platform/oidc/v1/oidc.platform_grpc.pb.go @@ -0,0 +1,146 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: oidc.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + SecurityTokenService_Exchange_FullMethodName = "/chainguard.platform.oidc.SecurityTokenService/Exchange" + SecurityTokenService_ExchangeRefreshToken_FullMethodName = "/chainguard.platform.oidc.SecurityTokenService/ExchangeRefreshToken" +) + +// SecurityTokenServiceClient is the client API for SecurityTokenService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SecurityTokenServiceClient interface { + Exchange(ctx context.Context, in *ExchangeRequest, opts ...grpc.CallOption) (*RawToken, error) + ExchangeRefreshToken(ctx context.Context, in *ExchangeRefreshTokenRequest, opts ...grpc.CallOption) (*TokenPair, error) +} + +type securityTokenServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewSecurityTokenServiceClient(cc grpc.ClientConnInterface) SecurityTokenServiceClient { + return &securityTokenServiceClient{cc} +} + +func (c *securityTokenServiceClient) Exchange(ctx context.Context, in *ExchangeRequest, opts ...grpc.CallOption) (*RawToken, error) { + out := new(RawToken) + err := c.cc.Invoke(ctx, SecurityTokenService_Exchange_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *securityTokenServiceClient) ExchangeRefreshToken(ctx context.Context, in *ExchangeRefreshTokenRequest, opts ...grpc.CallOption) (*TokenPair, error) { + out := new(TokenPair) + err := c.cc.Invoke(ctx, SecurityTokenService_ExchangeRefreshToken_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SecurityTokenServiceServer is the server API for SecurityTokenService service. +// All implementations must embed UnimplementedSecurityTokenServiceServer +// for forward compatibility +type SecurityTokenServiceServer interface { + Exchange(context.Context, *ExchangeRequest) (*RawToken, error) + ExchangeRefreshToken(context.Context, *ExchangeRefreshTokenRequest) (*TokenPair, error) + mustEmbedUnimplementedSecurityTokenServiceServer() +} + +// UnimplementedSecurityTokenServiceServer must be embedded to have forward compatible implementations. +type UnimplementedSecurityTokenServiceServer struct { +} + +func (UnimplementedSecurityTokenServiceServer) Exchange(context.Context, *ExchangeRequest) (*RawToken, error) { + return nil, status.Errorf(codes.Unimplemented, "method Exchange not implemented") +} +func (UnimplementedSecurityTokenServiceServer) ExchangeRefreshToken(context.Context, *ExchangeRefreshTokenRequest) (*TokenPair, error) { + return nil, status.Errorf(codes.Unimplemented, "method ExchangeRefreshToken not implemented") +} +func (UnimplementedSecurityTokenServiceServer) mustEmbedUnimplementedSecurityTokenServiceServer() {} + +// UnsafeSecurityTokenServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SecurityTokenServiceServer will +// result in compilation errors. +type UnsafeSecurityTokenServiceServer interface { + mustEmbedUnimplementedSecurityTokenServiceServer() +} + +func RegisterSecurityTokenServiceServer(s grpc.ServiceRegistrar, srv SecurityTokenServiceServer) { + s.RegisterService(&SecurityTokenService_ServiceDesc, srv) +} + +func _SecurityTokenService_Exchange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExchangeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecurityTokenServiceServer).Exchange(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecurityTokenService_Exchange_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecurityTokenServiceServer).Exchange(ctx, req.(*ExchangeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SecurityTokenService_ExchangeRefreshToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ExchangeRefreshTokenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SecurityTokenServiceServer).ExchangeRefreshToken(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SecurityTokenService_ExchangeRefreshToken_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SecurityTokenServiceServer).ExchangeRefreshToken(ctx, req.(*ExchangeRefreshTokenRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// SecurityTokenService_ServiceDesc is the grpc.ServiceDesc for SecurityTokenService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SecurityTokenService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.oidc.SecurityTokenService", + HandlerType: (*SecurityTokenServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Exchange", + Handler: _SecurityTokenService_Exchange_Handler, + }, + { + MethodName: "ExchangeRefreshToken", + Handler: _SecurityTokenService_ExchangeRefreshToken_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "oidc.platform.proto", +} diff --git a/proto/platform/oidc/v1/test/mock_client.go b/proto/platform/oidc/v1/test/mock_client.go new file mode 100644 index 00000000..5b04441b --- /dev/null +++ b/proto/platform/oidc/v1/test/mock_client.go @@ -0,0 +1,26 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + oidc "chainguard.dev/sdk/proto/platform/oidc/v1" +) + +type MockOIDCClient struct { + OnClose error + + STSClient MockSTSClient +} + +var _ oidc.Clients = (*MockOIDCClient)(nil) + +func (m MockOIDCClient) STS() oidc.SecurityTokenServiceClient { + return &m.STSClient +} + +func (m MockOIDCClient) Close() error { + return m.OnClose +} diff --git a/proto/platform/oidc/v1/test/mock_sts.go b/proto/platform/oidc/v1/test/mock_sts.go new file mode 100644 index 00000000..2c19fb58 --- /dev/null +++ b/proto/platform/oidc/v1/test/mock_sts.go @@ -0,0 +1,53 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + oidc "chainguard.dev/sdk/proto/platform/oidc/v1" + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" +) + +var _ oidc.SecurityTokenServiceClient = (*MockSTSClient)(nil) + +type MockSTSClient struct { + OnExchange []STSOnExchange + OnGetAccessToken []STSOnGetAccessToken +} + +func (m MockSTSClient) Exchange(_ context.Context, given *oidc.ExchangeRequest, _ ...grpc.CallOption) (*oidc.RawToken, error) { + for _, o := range m.OnExchange { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Exchanged, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockSTSClient) ExchangeRefreshToken(_ context.Context, given *oidc.ExchangeRefreshTokenRequest, _ ...grpc.CallOption) (*oidc.TokenPair, error) { + for _, o := range m.OnGetAccessToken { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Exchanged, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +type STSOnExchange struct { + Given *oidc.ExchangeRequest + Exchanged *oidc.RawToken + Error error +} + +type STSOnGetAccessToken struct { + Given *oidc.ExchangeRefreshTokenRequest + Exchanged *oidc.TokenPair + Error error +} diff --git a/proto/platform/ping/v1/clients.go b/proto/platform/ping/v1/clients.go new file mode 100644 index 00000000..2f775fcf --- /dev/null +++ b/proto/platform/ping/v1/clients.go @@ -0,0 +1,80 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "context" + "fmt" + "net/url" + "time" + + delegate "chainguard.dev/go-grpc-kit/pkg/options" + "github.com/chainguard-dev/clog" + "google.golang.org/grpc" + + "chainguard.dev/sdk/auth" +) + +type Clients interface { + Ping() PingServiceClient + + Close() error +} + +func NewClients(ctx context.Context, addr string, token string) (Clients, error) { + uri, err := url.Parse(addr) + if err != nil { + return nil, fmt.Errorf("failed to parse ping service address, must be a url: %w", err) + } + + target, opts := delegate.GRPCOptions(*uri) + + // TODO: we may want to require transport security at some future point. + if cred := auth.NewFromToken(ctx, token, false); cred != nil { + opts = append(opts, grpc.WithPerRPCCredentials(cred)) + } else { + clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") + } + + var cancel context.CancelFunc + if _, timeoutSet := ctx.Deadline(); !timeoutSet { + ctx, cancel = context.WithTimeout(ctx, 300*time.Second) + defer cancel() + } + conn, err := grpc.DialContext(ctx, target, opts...) + if err != nil { + return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + } + + return &clients{ + ping: NewPingServiceClient(conn), + + conn: conn, + }, nil +} + +func NewClientsFromConnection(conn *grpc.ClientConn) Clients { + return &clients{ + ping: NewPingServiceClient(conn), + // conn is not set, this client struct does not own closing it. + } +} + +type clients struct { + ping PingServiceClient + conn *grpc.ClientConn +} + +func (c *clients) Ping() PingServiceClient { + return c.ping +} + +func (c *clients) Close() error { + if c.conn != nil { + return c.conn.Close() + } + return nil +} diff --git a/proto/platform/ping/v1/doc.go b/proto/platform/ping/v1/doc.go new file mode 100644 index 00000000..598bbb48 --- /dev/null +++ b/proto/platform/ping/v1/doc.go @@ -0,0 +1,10 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package v1 contains the v1 GRPC client and server definitions +// for implementing ping interactions for the Platform. +// +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. ping.platform.proto +package v1 diff --git a/proto/platform/ping/v1/ping.platform.pb.go b/proto/platform/ping/v1/ping.platform.pb.go new file mode 100644 index 00000000..601fda17 --- /dev/null +++ b/proto/platform/ping/v1/ping.platform.pb.go @@ -0,0 +1,216 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: ping.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type PingRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PingRequest) Reset() { + *x = PingRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_ping_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PingRequest) ProtoMessage() {} + +func (x *PingRequest) ProtoReflect() protoreflect.Message { + mi := &file_ping_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PingRequest.ProtoReflect.Descriptor instead. +func (*PingRequest) Descriptor() ([]byte, []int) { + return file_ping_platform_proto_rawDescGZIP(), []int{0} +} + +type Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Response string `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` +} + +func (x *Response) Reset() { + *x = Response{} + if protoimpl.UnsafeEnabled { + mi := &file_ping_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Response) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Response) ProtoMessage() {} + +func (x *Response) ProtoReflect() protoreflect.Message { + mi := &file_ping_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Response.ProtoReflect.Descriptor instead. +func (*Response) Descriptor() ([]byte, []int) { + return file_ping_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *Response) GetResponse() string { + if x != nil { + return x.Response + } + return "" +} + +var File_ping_platform_proto protoreflect.FileDescriptor + +var file_ping_platform_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x69, 0x6e, 0x67, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x26, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x7f, 0x0a, 0x0b, + 0x50, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x70, 0x0a, 0x04, 0x50, + 0x69, 0x6e, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x50, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x12, 0x0d, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x0a, 0x00, 0x42, 0x65, 0x0a, + 0x23, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x69, 0x6e, + 0x67, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_ping_platform_proto_rawDescOnce sync.Once + file_ping_platform_proto_rawDescData = file_ping_platform_proto_rawDesc +) + +func file_ping_platform_proto_rawDescGZIP() []byte { + file_ping_platform_proto_rawDescOnce.Do(func() { + file_ping_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_ping_platform_proto_rawDescData) + }) + return file_ping_platform_proto_rawDescData +} + +var file_ping_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_ping_platform_proto_goTypes = []interface{}{ + (*PingRequest)(nil), // 0: chainguard.platform.ping.PingRequest + (*Response)(nil), // 1: chainguard.platform.ping.Response +} +var file_ping_platform_proto_depIdxs = []int32{ + 0, // 0: chainguard.platform.ping.PingService.Ping:input_type -> chainguard.platform.ping.PingRequest + 1, // 1: chainguard.platform.ping.PingService.Ping:output_type -> chainguard.platform.ping.Response + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_ping_platform_proto_init() } +func file_ping_platform_proto_init() { + if File_ping_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_ping_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_ping_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_ping_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_ping_platform_proto_goTypes, + DependencyIndexes: file_ping_platform_proto_depIdxs, + MessageInfos: file_ping_platform_proto_msgTypes, + }.Build() + File_ping_platform_proto = out.File + file_ping_platform_proto_rawDesc = nil + file_ping_platform_proto_goTypes = nil + file_ping_platform_proto_depIdxs = nil +} diff --git a/proto/platform/ping/v1/ping.platform.pb.gw.go b/proto/platform/ping/v1/ping.platform.pb.gw.go new file mode 100644 index 00000000..c934acab --- /dev/null +++ b/proto/platform/ping/v1/ping.platform.pb.gw.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: ping.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_PingService_Ping_0(ctx context.Context, marshaler runtime.Marshaler, client PingServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PingRequest + var metadata runtime.ServerMetadata + + msg, err := client.Ping(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_PingService_Ping_0(ctx context.Context, marshaler runtime.Marshaler, server PingServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PingRequest + var metadata runtime.ServerMetadata + + msg, err := server.Ping(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterPingServiceHandlerServer registers the http handlers for service PingService to "mux". +// UnaryRPC :call PingServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPingServiceHandlerFromEndpoint instead. +func RegisterPingServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PingServiceServer) error { + + mux.Handle("GET", pattern_PingService_Ping_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.ping.PingService/Ping", runtime.WithHTTPPathPattern("/ping/v1/ping")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_PingService_Ping_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_PingService_Ping_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterPingServiceHandlerFromEndpoint is same as RegisterPingServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterPingServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterPingServiceHandler(ctx, mux, conn) +} + +// RegisterPingServiceHandler registers the http handlers for service PingService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterPingServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterPingServiceHandlerClient(ctx, mux, NewPingServiceClient(conn)) +} + +// RegisterPingServiceHandlerClient registers the http handlers for service PingService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PingServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PingServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "PingServiceClient" to call the correct interceptors. +func RegisterPingServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PingServiceClient) error { + + mux.Handle("GET", pattern_PingService_Ping_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.ping.PingService/Ping", runtime.WithHTTPPathPattern("/ping/v1/ping")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_PingService_Ping_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_PingService_Ping_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_PingService_Ping_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 0}, []string{"ping", "v1"}, "")) +) + +var ( + forward_PingService_Ping_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/ping/v1/ping.platform.proto b/proto/platform/ping/v1/ping.platform.proto new file mode 100644 index 00000000..86f8d93d --- /dev/null +++ b/proto/platform/ping/v1/ping.platform.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/ping/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.ping.v1"; +option java_outer_classname = "PlatformPingProto"; + +package chainguard.platform.ping; + +import "google/api/annotations.proto"; +import "annotations/auth.proto"; + +service PingService { + rpc Ping(PingRequest) returns (Response) { + option (google.api.http) = { + get: "/ping/v1/ping" + }; + option (chainguard.annotations.iam) = { + // This method doesn't require authentication. + disabled: {} + }; + } +} + +message PingRequest {} + +message Response { + string response = 1; +} diff --git a/proto/platform/ping/v1/ping.platform_grpc.pb.go b/proto/platform/ping/v1/ping.platform_grpc.pb.go new file mode 100644 index 00000000..f4feefd8 --- /dev/null +++ b/proto/platform/ping/v1/ping.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: ping.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + PingService_Ping_FullMethodName = "/chainguard.platform.ping.PingService/Ping" +) + +// PingServiceClient is the client API for PingService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type PingServiceClient interface { + Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*Response, error) +} + +type pingServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewPingServiceClient(cc grpc.ClientConnInterface) PingServiceClient { + return &pingServiceClient{cc} +} + +func (c *pingServiceClient) Ping(ctx context.Context, in *PingRequest, opts ...grpc.CallOption) (*Response, error) { + out := new(Response) + err := c.cc.Invoke(ctx, PingService_Ping_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// PingServiceServer is the server API for PingService service. +// All implementations must embed UnimplementedPingServiceServer +// for forward compatibility +type PingServiceServer interface { + Ping(context.Context, *PingRequest) (*Response, error) + mustEmbedUnimplementedPingServiceServer() +} + +// UnimplementedPingServiceServer must be embedded to have forward compatible implementations. +type UnimplementedPingServiceServer struct { +} + +func (UnimplementedPingServiceServer) Ping(context.Context, *PingRequest) (*Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") +} +func (UnimplementedPingServiceServer) mustEmbedUnimplementedPingServiceServer() {} + +// UnsafePingServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to PingServiceServer will +// result in compilation errors. +type UnsafePingServiceServer interface { + mustEmbedUnimplementedPingServiceServer() +} + +func RegisterPingServiceServer(s grpc.ServiceRegistrar, srv PingServiceServer) { + s.RegisterService(&PingService_ServiceDesc, srv) +} + +func _PingService_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PingServiceServer).Ping(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: PingService_Ping_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PingServiceServer).Ping(ctx, req.(*PingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// PingService_ServiceDesc is the grpc.ServiceDesc for PingService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var PingService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.ping.PingService", + HandlerType: (*PingServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Ping", + Handler: _PingService_Ping_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "ping.platform.proto", +} diff --git a/proto/platform/ping/v1/test/ping.go b/proto/platform/ping/v1/test/ping.go new file mode 100644 index 00000000..e91d6763 --- /dev/null +++ b/proto/platform/ping/v1/test/ping.go @@ -0,0 +1,52 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + ping "chainguard.dev/sdk/proto/platform/ping/v1" +) + +var _ ping.Clients = (*MockPingServiceClients)(nil) + +type MockPingServiceClients struct { + OnClose error + + PingServiceClient MockPingServiceClient +} + +func (m MockPingServiceClients) Ping() ping.PingServiceClient { + return &m.PingServiceClient +} + +func (m MockPingServiceClients) Close() error { + return m.OnClose +} + +var _ ping.PingServiceClient = (*MockPingServiceClient)(nil) + +type MockPingServiceClient struct { + ping.PingServiceClient + + OnPing Ping +} + +type Ping struct { + Given *ping.PingRequest + Response *ping.Response + Error error +} + +func (m MockPingServiceClient) Ping(_ context.Context, _ *ping.PingRequest, _ ...grpc.CallOption) (*ping.Response, error) { + if m.OnPing.Given == nil { + return nil, fmt.Errorf("OnPing.Given defined to be %v", m.OnPing.Given) + } + return &ping.Response{}, nil +} diff --git a/proto/platform/registry/v1/clients.go b/proto/platform/registry/v1/clients.go new file mode 100644 index 00000000..a52a2861 --- /dev/null +++ b/proto/platform/registry/v1/clients.go @@ -0,0 +1,81 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "context" + "fmt" + "net/url" + "time" + + delegate "chainguard.dev/go-grpc-kit/pkg/options" + "github.com/chainguard-dev/clog" + "google.golang.org/grpc" + + "chainguard.dev/sdk/auth" +) + +type Clients interface { + Registry() RegistryClient + + Close() error +} + +func NewClients(ctx context.Context, addr string, token string) (Clients, error) { + uri, err := url.Parse(addr) + if err != nil { + return nil, fmt.Errorf("failed to parse tenant service address, must be a url: %w", err) + } + + target, opts := delegate.GRPCOptions(*uri) + + // TODO: we may want to require transport security at some future point. + if cred := auth.NewFromToken(ctx, token, false); cred != nil { + opts = append(opts, grpc.WithPerRPCCredentials(cred)) + } else { + clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") + } + + var cancel context.CancelFunc + if _, timeoutSet := ctx.Deadline(); !timeoutSet { + ctx, cancel = context.WithTimeout(ctx, 300*time.Second) + defer cancel() + } + conn, err := grpc.DialContext(ctx, target, opts...) + if err != nil { + return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + } + + return &clients{ + registry: NewRegistryClient(conn), + + conn: conn, + }, nil +} + +func NewClientsFromConnection(conn *grpc.ClientConn) Clients { + return &clients{ + registry: NewRegistryClient(conn), + // conn is not set, this client struct does not own closing it. + } +} + +type clients struct { + registry RegistryClient + + conn *grpc.ClientConn +} + +func (c *clients) Registry() RegistryClient { + return c.registry +} + +func (c *clients) Close() error { + if c.conn != nil { + return c.conn.Close() + } + return nil +} diff --git a/proto/platform/registry/v1/doc.go b/proto/platform/registry/v1/doc.go new file mode 100644 index 00000000..006b05d9 --- /dev/null +++ b/proto/platform/registry/v1/doc.go @@ -0,0 +1,10 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package v1 contains the v1 GRPC client and server definitions +// for implementing Registry interactions. +// +//go:generate protoc -I . -I ../.. -I ../../.. -I ../../tenant/v1 --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. registry.platform.proto +package v1 diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go new file mode 100644 index 00000000..5cf6d6c0 --- /dev/null +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -0,0 +1,3295 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: registry.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + v11 "chainguard.dev/sdk/proto/platform/tenant/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CatalogTier int32 + +const ( + CatalogTier_UNKNOWN CatalogTier = 0 + CatalogTier_FREE CatalogTier = 1 + CatalogTier_STANDARD CatalogTier = 2 + CatalogTier_PREMIUM CatalogTier = 3 +) + +// Enum value maps for CatalogTier. +var ( + CatalogTier_name = map[int32]string{ + 0: "UNKNOWN", + 1: "FREE", + 2: "STANDARD", + 3: "PREMIUM", + } + CatalogTier_value = map[string]int32{ + "UNKNOWN": 0, + "FREE": 1, + "STANDARD": 2, + "PREMIUM": 3, + } +) + +func (x CatalogTier) Enum() *CatalogTier { + p := new(CatalogTier) + *p = x + return p +} + +func (x CatalogTier) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CatalogTier) Descriptor() protoreflect.EnumDescriptor { + return file_registry_platform_proto_enumTypes[0].Descriptor() +} + +func (CatalogTier) Type() protoreflect.EnumType { + return &file_registry_platform_proto_enumTypes[0] +} + +func (x CatalogTier) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use CatalogTier.Descriptor instead. +func (CatalogTier) EnumDescriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{0} +} + +type Repo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the identifier of this specific repository. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name is the human-readable name of the repository. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // catalog_tier is the catalog tier this repository belongs to. + CatalogTier CatalogTier `protobuf:"varint,3,opt,name=catalog_tier,json=catalogTier,proto3,enum=chainguard.platform.registry.CatalogTier" json:"catalog_tier,omitempty"` + // bundles is a list of tags/labels that allow us to group repositories to each other for sales purposes. + Bundles []string `protobuf:"bytes,4,rep,name=bundles,proto3" json:"bundles,omitempty"` + // readme is raw Markdown file contents describing the repo. + Readme string `protobuf:"bytes,5,opt,name=readme,proto3" json:"readme,omitempty"` + // (optional) Repository sync configuration. If enabled, images are synced from the source to this repo. + // NOTE: This property can only be set by Chainguard. + SyncConfig *SyncConfig `protobuf:"bytes,6,opt,name=sync_config,json=syncConfig,proto3" json:"sync_config,omitempty"` +} + +func (x *Repo) Reset() { + *x = Repo{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Repo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Repo) ProtoMessage() {} + +func (x *Repo) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Repo.ProtoReflect.Descriptor instead. +func (*Repo) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Repo) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Repo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Repo) GetCatalogTier() CatalogTier { + if x != nil { + return x.CatalogTier + } + return CatalogTier_UNKNOWN +} + +func (x *Repo) GetBundles() []string { + if x != nil { + return x.Bundles + } + return nil +} + +func (x *Repo) GetReadme() string { + if x != nil { + return x.Readme + } + return "" +} + +func (x *Repo) GetSyncConfig() *SyncConfig { + if x != nil { + return x.SyncConfig + } + return nil +} + +type SyncConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Repo ID to sync from. + Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` + // Controls whether exported tags will be uniquely labeled. + UniqueTags bool `protobuf:"varint,2,opt,name=unique_tags,json=uniqueTags,proto3" json:"unique_tags,omitempty"` +} + +func (x *SyncConfig) Reset() { + *x = SyncConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncConfig) ProtoMessage() {} + +func (x *SyncConfig) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncConfig.ProtoReflect.Descriptor instead. +func (*SyncConfig) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *SyncConfig) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (x *SyncConfig) GetUniqueTags() bool { + if x != nil { + return x.UniqueTags + } + return false +} + +type CreateRepoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + Repo *Repo `protobuf:"bytes,2,opt,name=repo,proto3" json:"repo,omitempty"` +} + +func (x *CreateRepoRequest) Reset() { + *x = CreateRepoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateRepoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateRepoRequest) ProtoMessage() {} + +func (x *CreateRepoRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateRepoRequest.ProtoReflect.Descriptor instead. +func (*CreateRepoRequest) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *CreateRepoRequest) GetParentId() string { + if x != nil { + return x.ParentId + } + return "" +} + +func (x *CreateRepoRequest) GetRepo() *Repo { + if x != nil { + return x.Repo + } + return nil +} + +type DeleteRepoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID, UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteRepoRequest) Reset() { + *x = DeleteRepoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteRepoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteRepoRequest) ProtoMessage() {} + +func (x *DeleteRepoRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_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 DeleteRepoRequest.ProtoReflect.Descriptor instead. +func (*DeleteRepoRequest) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *DeleteRepoRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type RepoList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Repo `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *RepoList) Reset() { + *x = RepoList{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RepoList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RepoList) ProtoMessage() {} + +func (x *RepoList) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RepoList.ProtoReflect.Descriptor instead. +func (*RepoList) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *RepoList) GetItems() []*Repo { + if x != nil { + return x.Items + } + return nil +} + +type RepoFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // uidp filters records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` + // name is the exact name of the record. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // id is the identifier of this specific repository. + Id string `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *RepoFilter) Reset() { + *x = RepoFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RepoFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RepoFilter) ProtoMessage() {} + +func (x *RepoFilter) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RepoFilter.ProtoReflect.Descriptor instead. +func (*RepoFilter) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *RepoFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *RepoFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RepoFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type CreateTagRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` + Tag *Tag `protobuf:"bytes,2,opt,name=tag,proto3" json:"tag,omitempty"` +} + +func (x *CreateTagRequest) Reset() { + *x = CreateTagRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateTagRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateTagRequest) ProtoMessage() {} + +func (x *CreateTagRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateTagRequest.ProtoReflect.Descriptor instead. +func (*CreateTagRequest) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{6} +} + +func (x *CreateTagRequest) GetRepoId() string { + if x != nil { + return x.RepoId + } + return "" +} + +func (x *CreateTagRequest) GetTag() *Tag { + if x != nil { + return x.Tag + } + return nil +} + +type DeleteTagRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID, UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteTagRequest) Reset() { + *x = DeleteTagRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTagRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTagRequest) ProtoMessage() {} + +func (x *DeleteTagRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteTagRequest.ProtoReflect.Descriptor instead. +func (*DeleteTagRequest) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{7} +} + +func (x *DeleteTagRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type Tag struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, identifier of this Tag, a UIDP under a Repo. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name, the unique name of the Tag. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // digest, the digest of the manifest with this tag. + Digest string `protobuf:"bytes,3,opt,name=digest,proto3" json:"digest,omitempty"` + // last time this tag was updated. + LastUpdated *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` + // deprecated, true if the tag is deprecated. + Deprecated bool `protobuf:"varint,5,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + // bundles is a list of tags/labels for sales purposes. + Bundles []string `protobuf:"bytes,6,rep,name=bundles,proto3" json:"bundles,omitempty"` +} + +func (x *Tag) Reset() { + *x = Tag{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Tag) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Tag) ProtoMessage() {} + +func (x *Tag) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Tag.ProtoReflect.Descriptor instead. +func (*Tag) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{8} +} + +func (x *Tag) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Tag) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Tag) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +func (x *Tag) GetLastUpdated() *timestamppb.Timestamp { + if x != nil { + return x.LastUpdated + } + return nil +} + +func (x *Tag) GetDeprecated() bool { + if x != nil { + return x.Deprecated + } + return false +} + +func (x *Tag) GetBundles() []string { + if x != nil { + return x.Bundles + } + return nil +} + +type TagFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // uidp filters records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` + // The unique name of the Tag to list. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // The timestamp after which returned records were updated. + UpdatedSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=updated_since,json=updatedSince,proto3" json:"updated_since,omitempty"` + // Exclude tags of the form "sha256-*". + ExcludeReferrers bool `protobuf:"varint,6,opt,name=exclude_referrers,json=excludeReferrers,proto3" json:"exclude_referrers,omitempty"` + // Exclude tags of the form "*-20yymmdd". + ExcludeDates bool `protobuf:"varint,7,opt,name=exclude_dates,json=excludeDates,proto3" json:"exclude_dates,omitempty"` + // Exclude tags of the form "*-r[0-9]+". + ExcludeEpochs bool `protobuf:"varint,8,opt,name=exclude_epochs,json=excludeEpochs,proto3" json:"exclude_epochs,omitempty"` + Id string `protobuf:"bytes,9,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TagFilter) Reset() { + *x = TagFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TagFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TagFilter) ProtoMessage() {} + +func (x *TagFilter) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TagFilter.ProtoReflect.Descriptor instead. +func (*TagFilter) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{9} +} + +func (x *TagFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *TagFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TagFilter) GetUpdatedSince() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedSince + } + return nil +} + +func (x *TagFilter) GetExcludeReferrers() bool { + if x != nil { + return x.ExcludeReferrers + } + return false +} + +func (x *TagFilter) GetExcludeDates() bool { + if x != nil { + return x.ExcludeDates + } + return false +} + +func (x *TagFilter) GetExcludeEpochs() bool { + if x != nil { + return x.ExcludeEpochs + } + return false +} + +func (x *TagFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type TagList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Tag `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *TagList) Reset() { + *x = TagList{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TagList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TagList) ProtoMessage() {} + +func (x *TagList) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TagList.ProtoReflect.Descriptor instead. +func (*TagList) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{10} +} + +func (x *TagList) GetItems() []*Tag { + if x != nil { + return x.Items + } + return nil +} + +type TagHistoryFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // tag UIDP to list history for. + ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + Start *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=start,proto3" json:"start,omitempty"` + End *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=end,proto3" json:"end,omitempty"` +} + +func (x *TagHistoryFilter) Reset() { + *x = TagHistoryFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TagHistoryFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TagHistoryFilter) ProtoMessage() {} + +func (x *TagHistoryFilter) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TagHistoryFilter.ProtoReflect.Descriptor instead. +func (*TagHistoryFilter) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{11} +} + +func (x *TagHistoryFilter) GetParentId() string { + if x != nil { + return x.ParentId + } + return "" +} + +func (x *TagHistoryFilter) GetStart() *timestamppb.Timestamp { + if x != nil { + return x.Start + } + return nil +} + +func (x *TagHistoryFilter) GetEnd() *timestamppb.Timestamp { + if x != nil { + return x.End + } + return nil +} + +type TagHistoryList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*TagHistory `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *TagHistoryList) Reset() { + *x = TagHistoryList{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TagHistoryList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TagHistoryList) ProtoMessage() {} + +func (x *TagHistoryList) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TagHistoryList.ProtoReflect.Descriptor instead. +func (*TagHistoryList) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{12} +} + +func (x *TagHistoryList) GetItems() []*TagHistory { + if x != nil { + return x.Items + } + return nil +} + +type TagHistory struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UpdateTimestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=update_timestamp,json=updateTimestamp,proto3" json:"update_timestamp,omitempty"` + Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` +} + +func (x *TagHistory) Reset() { + *x = TagHistory{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TagHistory) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TagHistory) ProtoMessage() {} + +func (x *TagHistory) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TagHistory.ProtoReflect.Descriptor instead. +func (*TagHistory) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{13} +} + +func (x *TagHistory) GetUpdateTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTimestamp + } + return nil +} + +func (x *TagHistory) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +type DiffImageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Packages *PackagesDiff `protobuf:"bytes,1,opt,name=packages,proto3" json:"packages,omitempty"` + Vulnerabilities *VulnerabilitiesDiff `protobuf:"bytes,2,opt,name=vulnerabilities,proto3" json:"vulnerabilities,omitempty"` + Config *ImageConfigDiff `protobuf:"bytes,4,opt,name=config,proto3" json:"config,omitempty"` + // warnings is a list of warning messages to return to the requesting client. + // Warning messages describe a problem the client making the DiffImageRequest should correct or be aware of. + // Warnings over 256 characters and large numbers of warnings may be truncated. + Warnings []string `protobuf:"bytes,5,rep,name=warnings,proto3" json:"warnings,omitempty"` +} + +func (x *DiffImageResponse) Reset() { + *x = DiffImageResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DiffImageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DiffImageResponse) ProtoMessage() {} + +func (x *DiffImageResponse) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DiffImageResponse.ProtoReflect.Descriptor instead. +func (*DiffImageResponse) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{14} +} + +func (x *DiffImageResponse) GetPackages() *PackagesDiff { + if x != nil { + return x.Packages + } + return nil +} + +func (x *DiffImageResponse) GetVulnerabilities() *VulnerabilitiesDiff { + if x != nil { + return x.Vulnerabilities + } + return nil +} + +func (x *DiffImageResponse) GetConfig() *ImageConfigDiff { + if x != nil { + return x.Config + } + return nil +} + +func (x *DiffImageResponse) GetWarnings() []string { + if x != nil { + return x.Warnings + } + return nil +} + +type ImageConfigDiff struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Changed *ChangedImageConfig `protobuf:"bytes,1,opt,name=changed,proto3" json:"changed,omitempty"` +} + +func (x *ImageConfigDiff) Reset() { + *x = ImageConfigDiff{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageConfigDiff) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageConfigDiff) ProtoMessage() {} + +func (x *ImageConfigDiff) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImageConfigDiff.ProtoReflect.Descriptor instead. +func (*ImageConfigDiff) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{15} +} + +func (x *ImageConfigDiff) GetChanged() *ChangedImageConfig { + if x != nil { + return x.Changed + } + return nil +} + +type ChangedImageConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChangedUser *ChangedImageConfig_ChangedUser `protobuf:"bytes,1,opt,name=changedUser,proto3" json:"changedUser,omitempty"` + ChangedWorkingDir *ChangedImageConfig_ChangedWorkingDir `protobuf:"bytes,2,opt,name=changedWorkingDir,proto3" json:"changedWorkingDir,omitempty"` + Entrypoints *ChangedImageConfig_EntrypointDiff `protobuf:"bytes,3,opt,name=entrypoints,proto3" json:"entrypoints,omitempty"` + Envs *ChangedImageConfig_EnvDiff `protobuf:"bytes,4,opt,name=envs,proto3" json:"envs,omitempty"` + Cmds *ChangedImageConfig_CmdDiff `protobuf:"bytes,5,opt,name=cmds,proto3" json:"cmds,omitempty"` + ChangedStopSignal *ChangedImageConfig_ChangedStopSignal `protobuf:"bytes,6,opt,name=changedStopSignal,proto3" json:"changedStopSignal,omitempty"` + Volumes *ChangedImageConfig_VolumeDiff `protobuf:"bytes,7,opt,name=volumes,proto3" json:"volumes,omitempty"` +} + +func (x *ChangedImageConfig) Reset() { + *x = ChangedImageConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangedImageConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangedImageConfig) ProtoMessage() {} + +func (x *ChangedImageConfig) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChangedImageConfig.ProtoReflect.Descriptor instead. +func (*ChangedImageConfig) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{16} +} + +func (x *ChangedImageConfig) GetChangedUser() *ChangedImageConfig_ChangedUser { + if x != nil { + return x.ChangedUser + } + return nil +} + +func (x *ChangedImageConfig) GetChangedWorkingDir() *ChangedImageConfig_ChangedWorkingDir { + if x != nil { + return x.ChangedWorkingDir + } + return nil +} + +func (x *ChangedImageConfig) GetEntrypoints() *ChangedImageConfig_EntrypointDiff { + if x != nil { + return x.Entrypoints + } + return nil +} + +func (x *ChangedImageConfig) GetEnvs() *ChangedImageConfig_EnvDiff { + if x != nil { + return x.Envs + } + return nil +} + +func (x *ChangedImageConfig) GetCmds() *ChangedImageConfig_CmdDiff { + if x != nil { + return x.Cmds + } + return nil +} + +func (x *ChangedImageConfig) GetChangedStopSignal() *ChangedImageConfig_ChangedStopSignal { + if x != nil { + return x.ChangedStopSignal + } + return nil +} + +func (x *ChangedImageConfig) GetVolumes() *ChangedImageConfig_VolumeDiff { + if x != nil { + return x.Volumes + } + return nil +} + +type PackagesDiff struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Added []*PackageReference `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` + Removed []*PackageReference `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` + Changed []*PackagesDiff_ChangedPackageReference `protobuf:"bytes,3,rep,name=changed,proto3" json:"changed,omitempty"` +} + +func (x *PackagesDiff) Reset() { + *x = PackagesDiff{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PackagesDiff) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PackagesDiff) ProtoMessage() {} + +func (x *PackagesDiff) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PackagesDiff.ProtoReflect.Descriptor instead. +func (*PackagesDiff) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{17} +} + +func (x *PackagesDiff) GetAdded() []*PackageReference { + if x != nil { + return x.Added + } + return nil +} + +func (x *PackagesDiff) GetRemoved() []*PackageReference { + if x != nil { + return x.Removed + } + return nil +} + +func (x *PackagesDiff) GetChanged() []*PackagesDiff_ChangedPackageReference { + if x != nil { + return x.Changed + } + return nil +} + +type VersionReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` + Reference string `protobuf:"bytes,2,opt,name=reference,proto3" json:"reference,omitempty"` +} + +func (x *VersionReference) Reset() { + *x = VersionReference{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VersionReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VersionReference) ProtoMessage() {} + +func (x *VersionReference) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VersionReference.ProtoReflect.Descriptor instead. +func (*VersionReference) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{18} +} + +func (x *VersionReference) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *VersionReference) GetReference() string { + if x != nil { + return x.Reference + } + return "" +} + +// PackageReference is a reference to a package, containing minimal information to identify it. +type PackageReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Reference string `protobuf:"bytes,3,opt,name=reference,proto3" json:"reference,omitempty"` +} + +func (x *PackageReference) Reset() { + *x = PackageReference{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PackageReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PackageReference) ProtoMessage() {} + +func (x *PackageReference) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PackageReference.ProtoReflect.Descriptor instead. +func (*PackageReference) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{19} +} + +func (x *PackageReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PackageReference) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *PackageReference) GetReference() string { + if x != nil { + return x.Reference + } + return "" +} + +type VulnerabilitiesDiff struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Added []*VulnerabilityReference `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` + Removed []*VulnerabilityReference `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` + Metadata []*ScannerMetadata `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *VulnerabilitiesDiff) Reset() { + *x = VulnerabilitiesDiff{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnerabilitiesDiff) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnerabilitiesDiff) ProtoMessage() {} + +func (x *VulnerabilitiesDiff) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[20] + 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 VulnerabilitiesDiff.ProtoReflect.Descriptor instead. +func (*VulnerabilitiesDiff) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{20} +} + +func (x *VulnerabilitiesDiff) GetAdded() []*VulnerabilityReference { + if x != nil { + return x.Added + } + return nil +} + +func (x *VulnerabilitiesDiff) GetRemoved() []*VulnerabilityReference { + if x != nil { + return x.Removed + } + return nil +} + +func (x *VulnerabilitiesDiff) GetMetadata() []*ScannerMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +type ScannerMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Digest string `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` + Scanner *v11.Scanner `protobuf:"bytes,2,opt,name=scanner,proto3" json:"scanner,omitempty"` + VulnerabilityDbLastBuildTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=vulnerability_db_last_build_time,json=vulnerabilityDbLastBuildTime,proto3" json:"vulnerability_db_last_build_time,omitempty"` + VulnerabilityDbSchemaVersion string `protobuf:"bytes,4,opt,name=vulnerability_db_schema_version,json=vulnerabilityDbSchemaVersion,proto3" json:"vulnerability_db_schema_version,omitempty"` +} + +func (x *ScannerMetadata) Reset() { + *x = ScannerMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScannerMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScannerMetadata) ProtoMessage() {} + +func (x *ScannerMetadata) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScannerMetadata.ProtoReflect.Descriptor instead. +func (*ScannerMetadata) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{21} +} + +func (x *ScannerMetadata) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +func (x *ScannerMetadata) GetScanner() *v11.Scanner { + if x != nil { + return x.Scanner + } + return nil +} + +func (x *ScannerMetadata) GetVulnerabilityDbLastBuildTime() *timestamppb.Timestamp { + if x != nil { + return x.VulnerabilityDbLastBuildTime + } + return nil +} + +func (x *ScannerMetadata) GetVulnerabilityDbSchemaVersion() string { + if x != nil { + return x.VulnerabilityDbSchemaVersion + } + return "" +} + +// VulnerabilityReference is a reference to a vulnerability, containing minimal information to identify it. +type VulnerabilityReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Reference string `protobuf:"bytes,2,opt,name=reference,proto3" json:"reference,omitempty"` + Severity string `protobuf:"bytes,3,opt,name=severity,proto3" json:"severity,omitempty"` +} + +func (x *VulnerabilityReference) Reset() { + *x = VulnerabilityReference{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnerabilityReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnerabilityReference) ProtoMessage() {} + +func (x *VulnerabilityReference) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[22] + 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 VulnerabilityReference.ProtoReflect.Descriptor instead. +func (*VulnerabilityReference) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{22} +} + +func (x *VulnerabilityReference) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VulnerabilityReference) GetReference() string { + if x != nil { + return x.Reference + } + return "" +} + +func (x *VulnerabilityReference) GetSeverity() string { + if x != nil { + return x.Severity + } + return "" +} + +// DiffImageRequests are used to request a diff between two images. +type DiffImageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The UIDP of the image repo to diff against. + RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` + FromDigest string `protobuf:"bytes,2,opt,name=from_digest,json=fromDigest,proto3" json:"from_digest,omitempty"` + ToDigest string `protobuf:"bytes,3,opt,name=to_digest,json=toDigest,proto3" json:"to_digest,omitempty"` +} + +func (x *DiffImageRequest) Reset() { + *x = DiffImageRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DiffImageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DiffImageRequest) ProtoMessage() {} + +func (x *DiffImageRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[23] + 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 DiffImageRequest.ProtoReflect.Descriptor instead. +func (*DiffImageRequest) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{23} +} + +func (x *DiffImageRequest) GetRepoId() string { + if x != nil { + return x.RepoId + } + return "" +} + +func (x *DiffImageRequest) GetFromDigest() string { + if x != nil { + return x.FromDigest + } + return "" +} + +func (x *DiffImageRequest) GetToDigest() string { + if x != nil { + return x.ToDigest + } + return "" +} + +type SbomRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The UIDP of the image repo to get an SBOM for. + RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` + // The digest of the image to get an SBOM for. + Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` +} + +func (x *SbomRequest) Reset() { + *x = SbomRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SbomRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SbomRequest) ProtoMessage() {} + +func (x *SbomRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[24] + 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 SbomRequest.ProtoReflect.Descriptor instead. +func (*SbomRequest) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{24} +} + +func (x *SbomRequest) GetRepoId() string { + if x != nil { + return x.RepoId + } + return "" +} + +func (x *SbomRequest) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +type VulnReportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The UIDP of the image repo to get a VulnReport for. + RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` + // The digest of the image to get a VulnReport for. + Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` +} + +func (x *VulnReportRequest) Reset() { + *x = VulnReportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnReportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnReportRequest) ProtoMessage() {} + +func (x *VulnReportRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[25] + 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 VulnReportRequest.ProtoReflect.Descriptor instead. +func (*VulnReportRequest) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{25} +} + +func (x *VulnReportRequest) GetRepoId() string { + if x != nil { + return x.RepoId + } + return "" +} + +func (x *VulnReportRequest) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +type ChangedImageConfig_ChangedUser struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Current string `protobuf:"bytes,1,opt,name=current,proto3" json:"current,omitempty"` + Previous string `protobuf:"bytes,2,opt,name=previous,proto3" json:"previous,omitempty"` +} + +func (x *ChangedImageConfig_ChangedUser) Reset() { + *x = ChangedImageConfig_ChangedUser{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangedImageConfig_ChangedUser) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangedImageConfig_ChangedUser) ProtoMessage() {} + +func (x *ChangedImageConfig_ChangedUser) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[26] + 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 ChangedImageConfig_ChangedUser.ProtoReflect.Descriptor instead. +func (*ChangedImageConfig_ChangedUser) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{16, 0} +} + +func (x *ChangedImageConfig_ChangedUser) GetCurrent() string { + if x != nil { + return x.Current + } + return "" +} + +func (x *ChangedImageConfig_ChangedUser) GetPrevious() string { + if x != nil { + return x.Previous + } + return "" +} + +type ChangedImageConfig_ChangedWorkingDir struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Current string `protobuf:"bytes,1,opt,name=current,proto3" json:"current,omitempty"` + Previous string `protobuf:"bytes,2,opt,name=previous,proto3" json:"previous,omitempty"` +} + +func (x *ChangedImageConfig_ChangedWorkingDir) Reset() { + *x = ChangedImageConfig_ChangedWorkingDir{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangedImageConfig_ChangedWorkingDir) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangedImageConfig_ChangedWorkingDir) ProtoMessage() {} + +func (x *ChangedImageConfig_ChangedWorkingDir) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[27] + 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 ChangedImageConfig_ChangedWorkingDir.ProtoReflect.Descriptor instead. +func (*ChangedImageConfig_ChangedWorkingDir) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{16, 1} +} + +func (x *ChangedImageConfig_ChangedWorkingDir) GetCurrent() string { + if x != nil { + return x.Current + } + return "" +} + +func (x *ChangedImageConfig_ChangedWorkingDir) GetPrevious() string { + if x != nil { + return x.Previous + } + return "" +} + +type ChangedImageConfig_EntrypointDiff struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Added []string `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` + Removed []string `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` +} + +func (x *ChangedImageConfig_EntrypointDiff) Reset() { + *x = ChangedImageConfig_EntrypointDiff{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangedImageConfig_EntrypointDiff) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangedImageConfig_EntrypointDiff) ProtoMessage() {} + +func (x *ChangedImageConfig_EntrypointDiff) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[28] + 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 ChangedImageConfig_EntrypointDiff.ProtoReflect.Descriptor instead. +func (*ChangedImageConfig_EntrypointDiff) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{16, 2} +} + +func (x *ChangedImageConfig_EntrypointDiff) GetAdded() []string { + if x != nil { + return x.Added + } + return nil +} + +func (x *ChangedImageConfig_EntrypointDiff) GetRemoved() []string { + if x != nil { + return x.Removed + } + return nil +} + +type ChangedImageConfig_EnvDiff struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Added []string `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` + Removed []string `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` +} + +func (x *ChangedImageConfig_EnvDiff) Reset() { + *x = ChangedImageConfig_EnvDiff{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangedImageConfig_EnvDiff) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangedImageConfig_EnvDiff) ProtoMessage() {} + +func (x *ChangedImageConfig_EnvDiff) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[29] + 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 ChangedImageConfig_EnvDiff.ProtoReflect.Descriptor instead. +func (*ChangedImageConfig_EnvDiff) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{16, 3} +} + +func (x *ChangedImageConfig_EnvDiff) GetAdded() []string { + if x != nil { + return x.Added + } + return nil +} + +func (x *ChangedImageConfig_EnvDiff) GetRemoved() []string { + if x != nil { + return x.Removed + } + return nil +} + +type ChangedImageConfig_CmdDiff struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Added []string `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty"` + Removed []string `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty"` +} + +func (x *ChangedImageConfig_CmdDiff) Reset() { + *x = ChangedImageConfig_CmdDiff{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangedImageConfig_CmdDiff) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangedImageConfig_CmdDiff) ProtoMessage() {} + +func (x *ChangedImageConfig_CmdDiff) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[30] + 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 ChangedImageConfig_CmdDiff.ProtoReflect.Descriptor instead. +func (*ChangedImageConfig_CmdDiff) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{16, 4} +} + +func (x *ChangedImageConfig_CmdDiff) GetAdded() []string { + if x != nil { + return x.Added + } + return nil +} + +func (x *ChangedImageConfig_CmdDiff) GetRemoved() []string { + if x != nil { + return x.Removed + } + return nil +} + +type ChangedImageConfig_ChangedStopSignal struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Current string `protobuf:"bytes,1,opt,name=current,proto3" json:"current,omitempty"` + Previous string `protobuf:"bytes,2,opt,name=previous,proto3" json:"previous,omitempty"` +} + +func (x *ChangedImageConfig_ChangedStopSignal) Reset() { + *x = ChangedImageConfig_ChangedStopSignal{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangedImageConfig_ChangedStopSignal) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangedImageConfig_ChangedStopSignal) ProtoMessage() {} + +func (x *ChangedImageConfig_ChangedStopSignal) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[31] + 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 ChangedImageConfig_ChangedStopSignal.ProtoReflect.Descriptor instead. +func (*ChangedImageConfig_ChangedStopSignal) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{16, 5} +} + +func (x *ChangedImageConfig_ChangedStopSignal) GetCurrent() string { + if x != nil { + return x.Current + } + return "" +} + +func (x *ChangedImageConfig_ChangedStopSignal) GetPrevious() string { + if x != nil { + return x.Previous + } + return "" +} + +type ChangedImageConfig_Volume struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ChangedImageConfig_Volume) Reset() { + *x = ChangedImageConfig_Volume{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangedImageConfig_Volume) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangedImageConfig_Volume) ProtoMessage() {} + +func (x *ChangedImageConfig_Volume) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[32] + 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 ChangedImageConfig_Volume.ProtoReflect.Descriptor instead. +func (*ChangedImageConfig_Volume) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{16, 6} +} + +type ChangedImageConfig_VolumeDiff struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Added map[string]*ChangedImageConfig_Volume `protobuf:"bytes,1,rep,name=added,proto3" json:"added,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Removed map[string]*ChangedImageConfig_Volume `protobuf:"bytes,2,rep,name=removed,proto3" json:"removed,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ChangedImageConfig_VolumeDiff) Reset() { + *x = ChangedImageConfig_VolumeDiff{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChangedImageConfig_VolumeDiff) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangedImageConfig_VolumeDiff) ProtoMessage() {} + +func (x *ChangedImageConfig_VolumeDiff) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[33] + 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 ChangedImageConfig_VolumeDiff.ProtoReflect.Descriptor instead. +func (*ChangedImageConfig_VolumeDiff) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{16, 7} +} + +func (x *ChangedImageConfig_VolumeDiff) GetAdded() map[string]*ChangedImageConfig_Volume { + if x != nil { + return x.Added + } + return nil +} + +func (x *ChangedImageConfig_VolumeDiff) GetRemoved() map[string]*ChangedImageConfig_Volume { + if x != nil { + return x.Removed + } + return nil +} + +type PackagesDiff_ChangedPackageReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Current *VersionReference `protobuf:"bytes,2,opt,name=current,proto3" json:"current,omitempty"` + Previous *VersionReference `protobuf:"bytes,3,opt,name=previous,proto3" json:"previous,omitempty"` +} + +func (x *PackagesDiff_ChangedPackageReference) Reset() { + *x = PackagesDiff_ChangedPackageReference{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PackagesDiff_ChangedPackageReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PackagesDiff_ChangedPackageReference) ProtoMessage() {} + +func (x *PackagesDiff_ChangedPackageReference) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[36] + 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 PackagesDiff_ChangedPackageReference.ProtoReflect.Descriptor instead. +func (*PackagesDiff_ChangedPackageReference) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{17, 0} +} + +func (x *PackagesDiff_ChangedPackageReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PackagesDiff_ChangedPackageReference) GetCurrent() *VersionReference { + if x != nil { + return x.Current + } + return nil +} + +func (x *PackagesDiff_ChangedPackageReference) GetPrevious() *VersionReference { + if x != nil { + return x.Previous + } + return nil +} + +var File_registry_platform_proto protoreflect.FileDescriptor + +var file_registry_platform_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x76, + 0x75, 0x6c, 0x6e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x13, 0x73, 0x62, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x01, 0x0a, 0x04, 0x52, 0x65, 0x70, 0x6f, + 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, + 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0c, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x52, 0x0b, 0x63, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x0b, + 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x73, 0x79, 0x6e, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x45, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x22, 0x70, + 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x22, 0x2b, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, + 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, + 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x68, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, + 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, + 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, + 0x09, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, + 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, + 0x67, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, + 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, + 0x6e, 0x64, 0x22, 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x22, 0xa1, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x5b, 0x0a, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, + 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, + 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, + 0x69, 0x66, 0x66, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x12, 0x4c, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, + 0x0a, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, + 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, + 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, + 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, + 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, + 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, + 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, + 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x1a, 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, + 0x66, 0x12, 0x5c, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x46, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, + 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, + 0x62, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc2, 0x03, 0x0a, 0x0c, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x44, 0x0a, 0x05, + 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, + 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x07, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, 0xc3, 0x01, 0x0a, 0x17, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x07, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, + 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x10, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, + 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, + 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x93, 0x02, 0x0a, 0x0f, + 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, + 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, + 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, + 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x1f, 0x76, 0x75, + 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, + 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, + 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, + 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, + 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, + 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, + 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, + 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2a, 0x3f, + 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x52, + 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, 0x32, + 0xd3, 0x11, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x04, 0x72, 0x65, + 0x70, 0x6f, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, 0xf0, + 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, + 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, 0x8e, + 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, + 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, 0x0a, + 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, + 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x25, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, + 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, + 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1e, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, + 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, 0x8e, + 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, + 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, + 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, + 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, + 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, + 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, + 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, + 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, + 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, 0x01, + 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, 0x12, + 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, 0x66, + 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, 0x66, + 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, + 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, 0x0a, + 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, + 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, + 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xbd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, + 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, + 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, + 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, + 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_registry_platform_proto_rawDescOnce sync.Once + file_registry_platform_proto_rawDescData = file_registry_platform_proto_rawDesc +) + +func file_registry_platform_proto_rawDescGZIP() []byte { + file_registry_platform_proto_rawDescOnce.Do(func() { + file_registry_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_registry_platform_proto_rawDescData) + }) + return file_registry_platform_proto_rawDescData +} + +var file_registry_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_registry_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 37) +var file_registry_platform_proto_goTypes = []interface{}{ + (CatalogTier)(0), // 0: chainguard.platform.registry.CatalogTier + (*Repo)(nil), // 1: chainguard.platform.registry.Repo + (*SyncConfig)(nil), // 2: chainguard.platform.registry.SyncConfig + (*CreateRepoRequest)(nil), // 3: chainguard.platform.registry.CreateRepoRequest + (*DeleteRepoRequest)(nil), // 4: chainguard.platform.registry.DeleteRepoRequest + (*RepoList)(nil), // 5: chainguard.platform.registry.RepoList + (*RepoFilter)(nil), // 6: chainguard.platform.registry.RepoFilter + (*CreateTagRequest)(nil), // 7: chainguard.platform.registry.CreateTagRequest + (*DeleteTagRequest)(nil), // 8: chainguard.platform.registry.DeleteTagRequest + (*Tag)(nil), // 9: chainguard.platform.registry.Tag + (*TagFilter)(nil), // 10: chainguard.platform.registry.TagFilter + (*TagList)(nil), // 11: chainguard.platform.registry.TagList + (*TagHistoryFilter)(nil), // 12: chainguard.platform.registry.TagHistoryFilter + (*TagHistoryList)(nil), // 13: chainguard.platform.registry.TagHistoryList + (*TagHistory)(nil), // 14: chainguard.platform.registry.TagHistory + (*DiffImageResponse)(nil), // 15: chainguard.platform.registry.DiffImageResponse + (*ImageConfigDiff)(nil), // 16: chainguard.platform.registry.ImageConfigDiff + (*ChangedImageConfig)(nil), // 17: chainguard.platform.registry.ChangedImageConfig + (*PackagesDiff)(nil), // 18: chainguard.platform.registry.PackagesDiff + (*VersionReference)(nil), // 19: chainguard.platform.registry.VersionReference + (*PackageReference)(nil), // 20: chainguard.platform.registry.PackageReference + (*VulnerabilitiesDiff)(nil), // 21: chainguard.platform.registry.VulnerabilitiesDiff + (*ScannerMetadata)(nil), // 22: chainguard.platform.registry.ScannerMetadata + (*VulnerabilityReference)(nil), // 23: chainguard.platform.registry.VulnerabilityReference + (*DiffImageRequest)(nil), // 24: chainguard.platform.registry.DiffImageRequest + (*SbomRequest)(nil), // 25: chainguard.platform.registry.SbomRequest + (*VulnReportRequest)(nil), // 26: chainguard.platform.registry.VulnReportRequest + (*ChangedImageConfig_ChangedUser)(nil), // 27: chainguard.platform.registry.ChangedImageConfig.ChangedUser + (*ChangedImageConfig_ChangedWorkingDir)(nil), // 28: chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + (*ChangedImageConfig_EntrypointDiff)(nil), // 29: chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + (*ChangedImageConfig_EnvDiff)(nil), // 30: chainguard.platform.registry.ChangedImageConfig.EnvDiff + (*ChangedImageConfig_CmdDiff)(nil), // 31: chainguard.platform.registry.ChangedImageConfig.CmdDiff + (*ChangedImageConfig_ChangedStopSignal)(nil), // 32: chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + (*ChangedImageConfig_Volume)(nil), // 33: chainguard.platform.registry.ChangedImageConfig.Volume + (*ChangedImageConfig_VolumeDiff)(nil), // 34: chainguard.platform.registry.ChangedImageConfig.VolumeDiff + nil, // 35: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + nil, // 36: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + (*PackagesDiff_ChangedPackageReference)(nil), // 37: chainguard.platform.registry.PackagesDiff.ChangedPackageReference + (*v1.UIDPFilter)(nil), // 38: chainguard.platform.common.UIDPFilter + (*timestamppb.Timestamp)(nil), // 39: google.protobuf.Timestamp + (*v11.Scanner)(nil), // 40: chainguard.platform.tenant.Scanner + (*emptypb.Empty)(nil), // 41: google.protobuf.Empty + (*v11.Sbom2)(nil), // 42: chainguard.platform.tenant.Sbom2 + (*v11.VulnReport)(nil), // 43: chainguard.platform.tenant.VulnReport +} +var file_registry_platform_proto_depIdxs = []int32{ + 0, // 0: chainguard.platform.registry.Repo.catalog_tier:type_name -> chainguard.platform.registry.CatalogTier + 2, // 1: chainguard.platform.registry.Repo.sync_config:type_name -> chainguard.platform.registry.SyncConfig + 1, // 2: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo + 1, // 3: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo + 38, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 9, // 5: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag + 39, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp + 38, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 39, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp + 9, // 9: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag + 39, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp + 39, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp + 14, // 12: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory + 39, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp + 18, // 14: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff + 21, // 15: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff + 16, // 16: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff + 17, // 17: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig + 27, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser + 28, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + 29, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + 30, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff + 31, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff + 32, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + 34, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff + 20, // 25: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference + 20, // 26: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference + 37, // 27: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference + 23, // 28: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference + 23, // 29: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference + 22, // 30: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata + 40, // 31: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner + 39, // 32: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp + 35, // 33: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + 36, // 34: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + 33, // 35: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 33, // 36: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 19, // 37: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference + 19, // 38: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference + 3, // 39: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest + 1, // 40: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo + 6, // 41: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter + 4, // 42: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest + 7, // 43: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest + 9, // 44: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag + 8, // 45: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest + 10, // 46: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter + 12, // 47: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter + 24, // 48: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest + 25, // 49: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest + 26, // 50: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest + 1, // 51: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo + 1, // 52: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo + 5, // 53: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList + 41, // 54: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty + 9, // 55: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag + 9, // 56: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag + 41, // 57: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty + 11, // 58: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList + 13, // 59: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList + 15, // 60: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse + 42, // 61: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 + 43, // 62: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport + 51, // [51:63] is the sub-list for method output_type + 39, // [39:51] is the sub-list for method input_type + 39, // [39:39] is the sub-list for extension type_name + 39, // [39:39] is the sub-list for extension extendee + 0, // [0:39] is the sub-list for field type_name +} + +func init() { file_registry_platform_proto_init() } +func file_registry_platform_proto_init() { + if File_registry_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_registry_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Repo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SyncConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateRepoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteRepoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RepoList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RepoFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateTagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Tag); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TagFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TagList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TagHistoryFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TagHistoryList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TagHistory); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DiffImageResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageConfigDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PackagesDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VersionReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PackageReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnerabilitiesDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ScannerMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnerabilityReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DiffImageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SbomRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnReportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_ChangedUser); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_ChangedWorkingDir); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_EntrypointDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_EnvDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_CmdDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_ChangedStopSignal); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_Volume); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_VolumeDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PackagesDiff_ChangedPackageReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_registry_platform_proto_rawDesc, + NumEnums: 1, + NumMessages: 37, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_registry_platform_proto_goTypes, + DependencyIndexes: file_registry_platform_proto_depIdxs, + EnumInfos: file_registry_platform_proto_enumTypes, + MessageInfos: file_registry_platform_proto_msgTypes, + }.Build() + File_registry_platform_proto = out.File + file_registry_platform_proto_rawDesc = nil + file_registry_platform_proto_goTypes = nil + file_registry_platform_proto_depIdxs = nil +} diff --git a/proto/platform/registry/v1/registry.platform.pb.gw.go b/proto/platform/registry/v1/registry.platform.pb.gw.go new file mode 100644 index 00000000..aa5a11c4 --- /dev/null +++ b/proto/platform/registry/v1/registry.platform.pb.gw.go @@ -0,0 +1,1406 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: registry.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Registry_CreateRepo_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateRepoRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Repo); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := client.CreateRepo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_CreateRepo_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateRepoRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Repo); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := server.CreateRepo(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Registry_UpdateRepo_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Repo + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.UpdateRepo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_UpdateRepo_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Repo + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.UpdateRepo(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Registry_ListRepos_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Registry_ListRepos_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RepoFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListRepos_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListRepos(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_ListRepos_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RepoFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListRepos_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListRepos(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Registry_DeleteRepo_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteRepoRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.DeleteRepo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_DeleteRepo_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteRepoRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.DeleteRepo(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Registry_CreateTag_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTagRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Tag); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + msg, err := client.CreateTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_CreateTag_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateTagRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Tag); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + msg, err := server.CreateTag(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Registry_UpdateTag_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Tag + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.UpdateTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_UpdateTag_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Tag + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.UpdateTag(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Registry_DeleteTag_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTagRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.DeleteTag(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_DeleteTag_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTagRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.DeleteTag(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Registry_ListTags_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Registry_ListTags_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq TagFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListTags_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListTags(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_ListTags_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq TagFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListTags_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListTags(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Registry_ListTagHistory_0 = &utilities.DoubleArray{Encoding: map[string]int{"parent_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Registry_ListTagHistory_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq TagHistoryFilter + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListTagHistory_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListTagHistory(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_ListTagHistory_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq TagHistoryFilter + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListTagHistory_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListTagHistory(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Registry_DiffImage_0 = &utilities.DoubleArray{Encoding: map[string]int{"repo_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Registry_DiffImage_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DiffImageRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_DiffImage_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DiffImage(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_DiffImage_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DiffImageRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_DiffImage_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DiffImage(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Registry_GetSbom_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SbomRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + val, ok = pathParams["digest"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") + } + + protoReq.Digest, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) + } + + msg, err := client.GetSbom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_GetSbom_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SbomRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + val, ok = pathParams["digest"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") + } + + protoReq.Digest, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) + } + + msg, err := server.GetSbom(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Registry_GetVulnReport_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VulnReportRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + val, ok = pathParams["digest"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") + } + + protoReq.Digest, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) + } + + msg, err := client.GetVulnReport(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_GetVulnReport_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VulnReportRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + val, ok = pathParams["digest"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") + } + + protoReq.Digest, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) + } + + msg, err := server.GetVulnReport(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterRegistryHandlerServer registers the http handlers for service Registry to "mux". +// UnaryRPC :call RegistryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRegistryHandlerFromEndpoint instead. +func RegisterRegistryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RegistryServer) error { + + mux.Handle("POST", pattern_Registry_CreateRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/CreateRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_CreateRepo_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_CreateRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Registry_UpdateRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/UpdateRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_UpdateRepo_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_UpdateRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_ListRepos_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListRepos", runtime.WithHTTPPathPattern("/registry/v1/repos")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_ListRepos_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_ListRepos_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Registry_DeleteRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DeleteRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_DeleteRepo_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_DeleteRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Registry_CreateTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/CreateTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{repo_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_CreateTag_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_CreateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Registry_UpdateTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/UpdateTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_UpdateTag_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_UpdateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Registry_DeleteTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DeleteTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_DeleteTag_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_DeleteTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_ListTags_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListTags", runtime.WithHTTPPathPattern("/registry/v1/tags")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_ListTags_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_ListTags_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_ListTagHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListTagHistory", runtime.WithHTTPPathPattern("/registry/v1/tags/{parent_id=**}/history")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_ListTagHistory_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_ListTagHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_DiffImage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DiffImage", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/diff")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_DiffImage_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_DiffImage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_GetSbom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetSbom", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/sbom")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_GetSbom_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_GetSbom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_GetVulnReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetVulnReport", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/vulnreport")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_GetVulnReport_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_GetVulnReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterRegistryHandlerFromEndpoint is same as RegisterRegistryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterRegistryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterRegistryHandler(ctx, mux, conn) +} + +// RegisterRegistryHandler registers the http handlers for service Registry to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterRegistryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterRegistryHandlerClient(ctx, mux, NewRegistryClient(conn)) +} + +// RegisterRegistryHandlerClient registers the http handlers for service Registry +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RegistryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RegistryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "RegistryClient" to call the correct interceptors. +func RegisterRegistryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RegistryClient) error { + + mux.Handle("POST", pattern_Registry_CreateRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/CreateRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_CreateRepo_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_CreateRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Registry_UpdateRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/UpdateRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_UpdateRepo_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_UpdateRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_ListRepos_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListRepos", runtime.WithHTTPPathPattern("/registry/v1/repos")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_ListRepos_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_ListRepos_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Registry_DeleteRepo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DeleteRepo", runtime.WithHTTPPathPattern("/registry/v1/repos/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_DeleteRepo_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_DeleteRepo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Registry_CreateTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/CreateTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{repo_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_CreateTag_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_CreateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Registry_UpdateTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/UpdateTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_UpdateTag_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_UpdateTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Registry_DeleteTag_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DeleteTag", runtime.WithHTTPPathPattern("/registry/v1/tags/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_DeleteTag_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_DeleteTag_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_ListTags_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListTags", runtime.WithHTTPPathPattern("/registry/v1/tags")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_ListTags_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_ListTags_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_ListTagHistory_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListTagHistory", runtime.WithHTTPPathPattern("/registry/v1/tags/{parent_id=**}/history")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_ListTagHistory_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_ListTagHistory_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_DiffImage_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/DiffImage", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/diff")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_DiffImage_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_DiffImage_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_GetSbom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetSbom", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/sbom")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_GetSbom_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_GetSbom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Registry_GetVulnReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetVulnReport", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/vulnreport")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_GetVulnReport_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_GetVulnReport_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Registry_CreateRepo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "repos", "parent_id"}, "")) + + pattern_Registry_UpdateRepo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "repos", "id"}, "")) + + pattern_Registry_ListRepos_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"registry", "v1", "repos"}, "")) + + pattern_Registry_DeleteRepo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "repos", "id"}, "")) + + pattern_Registry_CreateTag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "tags", "repo_id"}, "")) + + pattern_Registry_UpdateTag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "tags", "id"}, "")) + + pattern_Registry_DeleteTag_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"registry", "v1", "tags", "id"}, "")) + + pattern_Registry_ListTags_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"registry", "v1", "tags"}, "")) + + pattern_Registry_ListTagHistory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4}, []string{"registry", "v1", "tags", "parent_id", "history"}, "")) + + pattern_Registry_DiffImage_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4}, []string{"registry", "v1", "repos", "repo_id", "diff"}, "")) + + pattern_Registry_GetSbom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "sbom"}, "")) + + pattern_Registry_GetVulnReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "vulnreport"}, "")) +) + +var ( + forward_Registry_CreateRepo_0 = runtime.ForwardResponseMessage + + forward_Registry_UpdateRepo_0 = runtime.ForwardResponseMessage + + forward_Registry_ListRepos_0 = runtime.ForwardResponseMessage + + forward_Registry_DeleteRepo_0 = runtime.ForwardResponseMessage + + forward_Registry_CreateTag_0 = runtime.ForwardResponseMessage + + forward_Registry_UpdateTag_0 = runtime.ForwardResponseMessage + + forward_Registry_DeleteTag_0 = runtime.ForwardResponseMessage + + forward_Registry_ListTags_0 = runtime.ForwardResponseMessage + + forward_Registry_ListTagHistory_0 = runtime.ForwardResponseMessage + + forward_Registry_DiffImage_0 = runtime.ForwardResponseMessage + + forward_Registry_GetSbom_0 = runtime.ForwardResponseMessage + + forward_Registry_GetVulnReport_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto new file mode 100644 index 00000000..a62fc737 --- /dev/null +++ b/proto/platform/registry/v1/registry.platform.proto @@ -0,0 +1,457 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/registry/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.registry.v1"; +option java_outer_classname = "PlatformRegistryProto"; + +package chainguard.platform.registry; + +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "platform/common/v1/uidp.platform.proto"; +import "vuln.platform.proto"; +import "sbom.platform.proto"; + +service Registry { + rpc CreateRepo(CreateRepoRequest) returns (Repo) { + option (google.api.http) = { + post: "/registry/v1/repos/{parent_id=**}" + body: "repo" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_REPO_CREATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.platform.registry.repo.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc UpdateRepo(Repo) returns (Repo) { + option (google.api.http) = { + put: "/registry/v1/repos/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_REPO_UPDATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.platform.registry.repo.updated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc ListRepos(RepoFilter) returns (RepoList) { + option (google.api.http) = { + get: "/registry/v1/repos" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_REPO_LIST] + unscoped: true + } + }; + } + + rpc DeleteRepo(DeleteRepoRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/registry/v1/repos/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_REPO_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.platform.registry.repo.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc CreateTag(CreateTagRequest) returns (Tag) { + option (google.api.http) = { + post: "/registry/v1/tags/{repo_id=**}" + body: "tag" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TAG_CREATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.platform.registry.tag.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc UpdateTag(Tag) returns (Tag) { + option (google.api.http) = { + put: "/registry/v1/tags/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TAG_UPDATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.platform.registry.tag.updated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc DeleteTag(DeleteTagRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/registry/v1/tags/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TAG_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.platform.registry.tag.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc ListTags(TagFilter) returns (TagList) { + option (google.api.http) = { + get: "/registry/v1/tags" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TAG_LIST] + unscoped: true + } + }; + } + + rpc ListTagHistory(TagHistoryFilter) returns (TagHistoryList) { + option (google.api.http) = { + get: "/registry/v1/tags/{parent_id=**}/history" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TAG_LIST] + } + }; + } + + rpc DiffImage(DiffImageRequest) returns (DiffImageResponse) { + option (google.api.http) = { + get: "/registry/v1/repos/{repo_id=**}/diff" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_REPO_LIST, CAP_TENANT_VULN_REPORTS_LIST, CAP_TENANT_SBOMS_LIST] + } + }; + } + + rpc GetSbom(SbomRequest) returns (chainguard.platform.tenant.Sbom2) { + option (google.api.http) = { + get: "/registry/v1/repos/{repo_id=**}/digests/{digest=*}/sbom" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_REPO_LIST, CAP_TENANT_SBOMS_LIST] + } + }; + } + + rpc GetVulnReport(VulnReportRequest) returns (chainguard.platform.tenant.VulnReport) { + option (google.api.http) = { + get: "/registry/v1/repos/{repo_id=**}/digests/{digest=*}/vulnreport" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_REPO_LIST, CAP_TENANT_VULN_REPORTS_LIST] + } + }; + } +} + +message Repo { + // id is the identifier of this specific repository. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + + // name is the human-readable name of the repository. + string name = 2; + + // catalog_tier is the catalog tier this repository belongs to. + CatalogTier catalog_tier = 3; + + // bundles is a list of tags/labels that allow us to group repositories to each other for sales purposes. + repeated string bundles = 4; + + // readme is raw Markdown file contents describing the repo. + string readme = 5; + + // (optional) Repository sync configuration. If enabled, images are synced from the source to this repo. + // NOTE: This property can only be set by Chainguard. + SyncConfig sync_config = 6; +} + +enum CatalogTier { + UNKNOWN = 0; + FREE = 1; + STANDARD = 2; + PREMIUM = 3; +} + +message SyncConfig { + // Repo ID to sync from. + string source = 1; + + // Controls whether exported tags will be uniquely labeled. + bool unique_tags = 2; +} + +message CreateRepoRequest { + string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; + Repo repo = 2; +} + +message DeleteRepoRequest { + // ID, UID of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message RepoList { + repeated Repo items = 1; +} + +message RepoFilter { + // uidp filters records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 1; + + // name is the exact name of the record. + string name = 2; + + // id is the identifier of this specific repository. + string id = 3; +} + +message CreateTagRequest { + string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; + Tag tag = 2; +} + +message DeleteTagRequest { + // ID, UID of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message Tag { + // id, identifier of this Tag, a UIDP under a Repo. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + + // name, the unique name of the Tag. + string name = 2; + + // digest, the digest of the manifest with this tag. + string digest = 3; + + // last time this tag was updated. + google.protobuf.Timestamp last_updated = 4; + + // deprecated, true if the tag is deprecated. + bool deprecated = 5; + + // bundles is a list of tags/labels for sales purposes. + repeated string bundles = 6; +} + +message TagFilter { + // uidp filters records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 1; + + // The unique name of the Tag to list. + string name = 2; + + // The timestamp after which returned records were updated. + google.protobuf.Timestamp updated_since = 3; + + // Exclude tags of the form "sha256-*". + bool exclude_referrers = 6; + + // Exclude tags of the form "*-20yymmdd". + bool exclude_dates = 7; + + // Exclude tags of the form "*-r[0-9]+". + bool exclude_epochs = 8; + + string id = 9; +} + +message TagList { + repeated Tag items = 1; +} + +message TagHistoryFilter { + // tag UIDP to list history for. + string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; + + google.protobuf.Timestamp start = 2; + google.protobuf.Timestamp end = 3; +} + +message TagHistoryList { + repeated TagHistory items = 1; +} + +message TagHistory { + google.protobuf.Timestamp update_timestamp = 1; + string digest = 2; +} + +message DiffImageResponse { + PackagesDiff packages = 1; + VulnerabilitiesDiff vulnerabilities = 2; + + // This field referred to the FilesDiff mesage and is no longer in use. + reserved 3; + + ImageConfigDiff config = 4; + + // warnings is a list of warning messages to return to the requesting client. + // Warning messages describe a problem the client making the DiffImageRequest should correct or be aware of. + // Warnings over 256 characters and large numbers of warnings may be truncated. + repeated string warnings = 5; +} + +message ImageConfigDiff { + ChangedImageConfig changed = 1; +} + +message ChangedImageConfig { + message ChangedUser { + string current = 1; + string previous = 2; + } + ChangedUser changedUser = 1; + + message ChangedWorkingDir { + string current = 1; + string previous = 2; + } + + ChangedWorkingDir changedWorkingDir = 2; + + message EntrypointDiff { + repeated string added = 1; + repeated string removed = 2; + } + + EntrypointDiff entrypoints = 3; + + message EnvDiff { + repeated string added = 1; + repeated string removed = 2; + } + + EnvDiff envs = 4; + + message CmdDiff { + repeated string added = 1; + repeated string removed = 2; + } + + CmdDiff cmds = 5; + + message ChangedStopSignal { + string current = 1; + string previous = 2; + } + ChangedStopSignal changedStopSignal = 6; + + message Volume {} + message VolumeDiff { + map added = 1; + map removed = 2; + } + VolumeDiff volumes = 7; +} + +message PackagesDiff { + repeated PackageReference added = 1; + repeated PackageReference removed = 2; + + message ChangedPackageReference { + string name = 1; + VersionReference current = 2; + VersionReference previous = 3; + } + + repeated ChangedPackageReference changed = 3; +} + +message VersionReference { + string version = 1; + string reference = 2; +} + +// PackageReference is a reference to a package, containing minimal information to identify it. +message PackageReference { + string name = 1; + string version = 2; + string reference = 3; +} + +message VulnerabilitiesDiff { + repeated VulnerabilityReference added = 1; + repeated VulnerabilityReference removed = 2; + repeated ScannerMetadata metadata = 3; +} + +message ScannerMetadata { + string digest = 1; + chainguard.platform.tenant.Scanner scanner = 2; + google.protobuf.Timestamp vulnerability_db_last_build_time = 3; + string vulnerability_db_schema_version = 4; +} + +// VulnerabilityReference is a reference to a vulnerability, containing minimal information to identify it. +message VulnerabilityReference { + string id = 1; + string reference = 2; + string severity = 3; +} + +// DiffImageRequests are used to request a diff between two images. +message DiffImageRequest { + // The UIDP of the image repo to diff against. + string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; + + string from_digest = 2; + string to_digest = 3; +} + +message SbomRequest { + // The UIDP of the image repo to get an SBOM for. + string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; + // The digest of the image to get an SBOM for. + string digest = 2; +} + +message VulnReportRequest { + // The UIDP of the image repo to get a VulnReport for. + string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; + // The digest of the image to get a VulnReport for. + string digest = 2; +} diff --git a/proto/platform/registry/v1/registry.platform_grpc.pb.go b/proto/platform/registry/v1/registry.platform_grpc.pb.go new file mode 100644 index 00000000..a0faf126 --- /dev/null +++ b/proto/platform/registry/v1/registry.platform_grpc.pb.go @@ -0,0 +1,518 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: registry.platform.proto + +package v1 + +import ( + v1 "chainguard.dev/sdk/proto/platform/tenant/v1" + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Registry_CreateRepo_FullMethodName = "/chainguard.platform.registry.Registry/CreateRepo" + Registry_UpdateRepo_FullMethodName = "/chainguard.platform.registry.Registry/UpdateRepo" + Registry_ListRepos_FullMethodName = "/chainguard.platform.registry.Registry/ListRepos" + Registry_DeleteRepo_FullMethodName = "/chainguard.platform.registry.Registry/DeleteRepo" + Registry_CreateTag_FullMethodName = "/chainguard.platform.registry.Registry/CreateTag" + Registry_UpdateTag_FullMethodName = "/chainguard.platform.registry.Registry/UpdateTag" + Registry_DeleteTag_FullMethodName = "/chainguard.platform.registry.Registry/DeleteTag" + Registry_ListTags_FullMethodName = "/chainguard.platform.registry.Registry/ListTags" + Registry_ListTagHistory_FullMethodName = "/chainguard.platform.registry.Registry/ListTagHistory" + Registry_DiffImage_FullMethodName = "/chainguard.platform.registry.Registry/DiffImage" + Registry_GetSbom_FullMethodName = "/chainguard.platform.registry.Registry/GetSbom" + Registry_GetVulnReport_FullMethodName = "/chainguard.platform.registry.Registry/GetVulnReport" +) + +// RegistryClient is the client API for Registry service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type RegistryClient interface { + CreateRepo(ctx context.Context, in *CreateRepoRequest, opts ...grpc.CallOption) (*Repo, error) + UpdateRepo(ctx context.Context, in *Repo, opts ...grpc.CallOption) (*Repo, error) + ListRepos(ctx context.Context, in *RepoFilter, opts ...grpc.CallOption) (*RepoList, error) + DeleteRepo(ctx context.Context, in *DeleteRepoRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + CreateTag(ctx context.Context, in *CreateTagRequest, opts ...grpc.CallOption) (*Tag, error) + UpdateTag(ctx context.Context, in *Tag, opts ...grpc.CallOption) (*Tag, error) + DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + ListTags(ctx context.Context, in *TagFilter, opts ...grpc.CallOption) (*TagList, error) + ListTagHistory(ctx context.Context, in *TagHistoryFilter, opts ...grpc.CallOption) (*TagHistoryList, error) + DiffImage(ctx context.Context, in *DiffImageRequest, opts ...grpc.CallOption) (*DiffImageResponse, error) + GetSbom(ctx context.Context, in *SbomRequest, opts ...grpc.CallOption) (*v1.Sbom2, error) + GetVulnReport(ctx context.Context, in *VulnReportRequest, opts ...grpc.CallOption) (*v1.VulnReport, error) +} + +type registryClient struct { + cc grpc.ClientConnInterface +} + +func NewRegistryClient(cc grpc.ClientConnInterface) RegistryClient { + return ®istryClient{cc} +} + +func (c *registryClient) CreateRepo(ctx context.Context, in *CreateRepoRequest, opts ...grpc.CallOption) (*Repo, error) { + out := new(Repo) + err := c.cc.Invoke(ctx, Registry_CreateRepo_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) UpdateRepo(ctx context.Context, in *Repo, opts ...grpc.CallOption) (*Repo, error) { + out := new(Repo) + err := c.cc.Invoke(ctx, Registry_UpdateRepo_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) ListRepos(ctx context.Context, in *RepoFilter, opts ...grpc.CallOption) (*RepoList, error) { + out := new(RepoList) + err := c.cc.Invoke(ctx, Registry_ListRepos_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) DeleteRepo(ctx context.Context, in *DeleteRepoRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, Registry_DeleteRepo_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) CreateTag(ctx context.Context, in *CreateTagRequest, opts ...grpc.CallOption) (*Tag, error) { + out := new(Tag) + err := c.cc.Invoke(ctx, Registry_CreateTag_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) UpdateTag(ctx context.Context, in *Tag, opts ...grpc.CallOption) (*Tag, error) { + out := new(Tag) + err := c.cc.Invoke(ctx, Registry_UpdateTag_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) DeleteTag(ctx context.Context, in *DeleteTagRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, Registry_DeleteTag_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) ListTags(ctx context.Context, in *TagFilter, opts ...grpc.CallOption) (*TagList, error) { + out := new(TagList) + err := c.cc.Invoke(ctx, Registry_ListTags_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) ListTagHistory(ctx context.Context, in *TagHistoryFilter, opts ...grpc.CallOption) (*TagHistoryList, error) { + out := new(TagHistoryList) + err := c.cc.Invoke(ctx, Registry_ListTagHistory_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) DiffImage(ctx context.Context, in *DiffImageRequest, opts ...grpc.CallOption) (*DiffImageResponse, error) { + out := new(DiffImageResponse) + err := c.cc.Invoke(ctx, Registry_DiffImage_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) GetSbom(ctx context.Context, in *SbomRequest, opts ...grpc.CallOption) (*v1.Sbom2, error) { + out := new(v1.Sbom2) + err := c.cc.Invoke(ctx, Registry_GetSbom_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *registryClient) GetVulnReport(ctx context.Context, in *VulnReportRequest, opts ...grpc.CallOption) (*v1.VulnReport, error) { + out := new(v1.VulnReport) + err := c.cc.Invoke(ctx, Registry_GetVulnReport_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RegistryServer is the server API for Registry service. +// All implementations must embed UnimplementedRegistryServer +// for forward compatibility +type RegistryServer interface { + CreateRepo(context.Context, *CreateRepoRequest) (*Repo, error) + UpdateRepo(context.Context, *Repo) (*Repo, error) + ListRepos(context.Context, *RepoFilter) (*RepoList, error) + DeleteRepo(context.Context, *DeleteRepoRequest) (*emptypb.Empty, error) + CreateTag(context.Context, *CreateTagRequest) (*Tag, error) + UpdateTag(context.Context, *Tag) (*Tag, error) + DeleteTag(context.Context, *DeleteTagRequest) (*emptypb.Empty, error) + ListTags(context.Context, *TagFilter) (*TagList, error) + ListTagHistory(context.Context, *TagHistoryFilter) (*TagHistoryList, error) + DiffImage(context.Context, *DiffImageRequest) (*DiffImageResponse, error) + GetSbom(context.Context, *SbomRequest) (*v1.Sbom2, error) + GetVulnReport(context.Context, *VulnReportRequest) (*v1.VulnReport, error) + mustEmbedUnimplementedRegistryServer() +} + +// UnimplementedRegistryServer must be embedded to have forward compatible implementations. +type UnimplementedRegistryServer struct { +} + +func (UnimplementedRegistryServer) CreateRepo(context.Context, *CreateRepoRequest) (*Repo, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateRepo not implemented") +} +func (UnimplementedRegistryServer) UpdateRepo(context.Context, *Repo) (*Repo, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateRepo not implemented") +} +func (UnimplementedRegistryServer) ListRepos(context.Context, *RepoFilter) (*RepoList, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListRepos not implemented") +} +func (UnimplementedRegistryServer) DeleteRepo(context.Context, *DeleteRepoRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteRepo not implemented") +} +func (UnimplementedRegistryServer) CreateTag(context.Context, *CreateTagRequest) (*Tag, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTag not implemented") +} +func (UnimplementedRegistryServer) UpdateTag(context.Context, *Tag) (*Tag, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTag not implemented") +} +func (UnimplementedRegistryServer) DeleteTag(context.Context, *DeleteTagRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteTag not implemented") +} +func (UnimplementedRegistryServer) ListTags(context.Context, *TagFilter) (*TagList, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListTags not implemented") +} +func (UnimplementedRegistryServer) ListTagHistory(context.Context, *TagHistoryFilter) (*TagHistoryList, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListTagHistory not implemented") +} +func (UnimplementedRegistryServer) DiffImage(context.Context, *DiffImageRequest) (*DiffImageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DiffImage not implemented") +} +func (UnimplementedRegistryServer) GetSbom(context.Context, *SbomRequest) (*v1.Sbom2, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetSbom not implemented") +} +func (UnimplementedRegistryServer) GetVulnReport(context.Context, *VulnReportRequest) (*v1.VulnReport, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetVulnReport not implemented") +} +func (UnimplementedRegistryServer) mustEmbedUnimplementedRegistryServer() {} + +// UnsafeRegistryServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RegistryServer will +// result in compilation errors. +type UnsafeRegistryServer interface { + mustEmbedUnimplementedRegistryServer() +} + +func RegisterRegistryServer(s grpc.ServiceRegistrar, srv RegistryServer) { + s.RegisterService(&Registry_ServiceDesc, srv) +} + +func _Registry_CreateRepo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateRepoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).CreateRepo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_CreateRepo_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).CreateRepo(ctx, req.(*CreateRepoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_UpdateRepo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Repo) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).UpdateRepo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_UpdateRepo_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).UpdateRepo(ctx, req.(*Repo)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_ListRepos_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RepoFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).ListRepos(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_ListRepos_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).ListRepos(ctx, req.(*RepoFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_DeleteRepo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteRepoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).DeleteRepo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_DeleteRepo_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).DeleteRepo(ctx, req.(*DeleteRepoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_CreateTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateTagRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).CreateTag(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_CreateTag_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).CreateTag(ctx, req.(*CreateTagRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_UpdateTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Tag) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).UpdateTag(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_UpdateTag_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).UpdateTag(ctx, req.(*Tag)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_DeleteTag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTagRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).DeleteTag(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_DeleteTag_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).DeleteTag(ctx, req.(*DeleteTagRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_ListTags_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(TagFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).ListTags(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_ListTags_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).ListTags(ctx, req.(*TagFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_ListTagHistory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(TagHistoryFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).ListTagHistory(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_ListTagHistory_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).ListTagHistory(ctx, req.(*TagHistoryFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_DiffImage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DiffImageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).DiffImage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_DiffImage_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).DiffImage(ctx, req.(*DiffImageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_GetSbom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SbomRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).GetSbom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_GetSbom_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).GetSbom(ctx, req.(*SbomRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Registry_GetVulnReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VulnReportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).GetVulnReport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_GetVulnReport_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).GetVulnReport(ctx, req.(*VulnReportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Registry_ServiceDesc is the grpc.ServiceDesc for Registry service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Registry_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.registry.Registry", + HandlerType: (*RegistryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateRepo", + Handler: _Registry_CreateRepo_Handler, + }, + { + MethodName: "UpdateRepo", + Handler: _Registry_UpdateRepo_Handler, + }, + { + MethodName: "ListRepos", + Handler: _Registry_ListRepos_Handler, + }, + { + MethodName: "DeleteRepo", + Handler: _Registry_DeleteRepo_Handler, + }, + { + MethodName: "CreateTag", + Handler: _Registry_CreateTag_Handler, + }, + { + MethodName: "UpdateTag", + Handler: _Registry_UpdateTag_Handler, + }, + { + MethodName: "DeleteTag", + Handler: _Registry_DeleteTag_Handler, + }, + { + MethodName: "ListTags", + Handler: _Registry_ListTags_Handler, + }, + { + MethodName: "ListTagHistory", + Handler: _Registry_ListTagHistory_Handler, + }, + { + MethodName: "DiffImage", + Handler: _Registry_DiffImage_Handler, + }, + { + MethodName: "GetSbom", + Handler: _Registry_GetSbom_Handler, + }, + { + MethodName: "GetVulnReport", + Handler: _Registry_GetVulnReport_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "registry.platform.proto", +} diff --git a/proto/platform/registry/v1/test/registry.go b/proto/platform/registry/v1/test/registry.go new file mode 100644 index 00000000..b1e21513 --- /dev/null +++ b/proto/platform/registry/v1/test/registry.go @@ -0,0 +1,231 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + registry "chainguard.dev/sdk/proto/platform/registry/v1" + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" +) + +var _ registry.Clients = (*MockRegistryClients)(nil) + +type MockRegistryClients struct { + OnClose error + + RegistryClient MockRegistryClient +} + +func (m MockRegistryClients) Registry() registry.RegistryClient { + return &m.RegistryClient +} + +func (m MockRegistryClients) Close() error { + return m.OnClose +} + +var _ registry.RegistryClient = (*MockRegistryClient)(nil) + +type MockRegistryClient struct { + registry.RegistryClient + + OnCreateRepos []ReposOnCreate + OnDeleteRepos []ReposOnDelete + OnListRepos []ReposOnList + OnCreateTags []TagsOnCreate + OnDeleteTags []TagsOnDelete + OnUpdateTag []TagOnUpdate + OnListTags []TagsOnList + OnUpdateRepo []RepoOnUpdate + OnListTagHistory []TagHistoryOnList + OnGetSbom []SbomOnGet + OnGetVulnReport []VulnReportOnGet + OnDiffImage []DiffImage +} + +type DiffImage struct { + Given *registry.DiffImageRequest + Diff *registry.DiffImageResponse + Error error +} + +type ReposOnCreate struct { + Given *registry.CreateRepoRequest + Created *registry.Repo + Error error +} + +type ReposOnDelete struct { + Given *registry.DeleteRepoRequest + Error error +} + +type ReposOnList struct { + Given *registry.RepoFilter + List *registry.RepoList + Error error +} + +type TagsOnCreate struct { + Given *registry.CreateTagRequest + Created *registry.Tag + Error error +} + +type TagsOnDelete struct { + Given *registry.DeleteTagRequest + Error error +} + +type TagOnUpdate struct { + Given *registry.Tag + Updated *registry.Tag + Error error +} + +type TagsOnList struct { + Given *registry.TagFilter + List *registry.TagList + Error error +} + +type RepoOnUpdate struct { + Given *registry.Repo + Updated *registry.Repo + Error error +} + +type TagHistoryOnList struct { + Given *registry.TagHistoryFilter + List *registry.TagHistoryList + Error error +} + +type SbomOnGet struct { + Given *registry.SbomRequest + Get *tenant.Sbom2 + Error error +} + +type VulnReportOnGet struct { + Given *registry.VulnReportRequest + Get *tenant.VulnReport + Error error +} + +func (m MockRegistryClient) CreateRepo(_ context.Context, given *registry.CreateRepoRequest, _ ...grpc.CallOption) (*registry.Repo, error) { + for _, o := range m.OnCreateRepos { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) DeleteRepo(_ context.Context, given *registry.DeleteRepoRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDeleteRepos { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) ListRepos(_ context.Context, given *registry.RepoFilter, _ ...grpc.CallOption) (*registry.RepoList, error) { //nolint: revive + for _, o := range m.OnListRepos { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) CreateTag(_ context.Context, given *registry.CreateTagRequest, _ ...grpc.CallOption) (*registry.Tag, error) { + for _, o := range m.OnCreateTags { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) UpdateTag(_ context.Context, given *registry.Tag, _ ...grpc.CallOption) (*registry.Tag, error) { + for _, o := range m.OnUpdateTag { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) DeleteTag(_ context.Context, given *registry.DeleteTagRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDeleteTags { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) ListTags(_ context.Context, given *registry.TagFilter, _ ...grpc.CallOption) (*registry.TagList, error) { //nolint: revive + for _, o := range m.OnListTags { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) UpdateRepo(_ context.Context, given *registry.Repo, _ ...grpc.CallOption) (*registry.Repo, error) { //nolint: revive + for _, o := range m.OnUpdateRepo { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) ListTagHistory(_ context.Context, given *registry.TagHistoryFilter, _ ...grpc.CallOption) (*registry.TagHistoryList, error) { //nolint: revive + for _, o := range m.OnListTagHistory { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) GetSbom(_ context.Context, given *registry.SbomRequest, _ ...grpc.CallOption) (*tenant.Sbom2, error) { //nolint: revive + for _, o := range m.OnGetSbom { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Get, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) GetVulnReport(_ context.Context, given *registry.VulnReportRequest, _ ...grpc.CallOption) (*tenant.VulnReport, error) { //nolint: revive + for _, o := range m.OnGetVulnReport { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Get, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockRegistryClient) DiffImage(_ context.Context, given *registry.DiffImageRequest, _ ...grpc.CallOption) (*registry.DiffImageResponse, error) { + for _, o := range m.OnDiffImage { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Diff, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/attestation.platform.pb.go b/proto/platform/tenant/v1/attestation.platform.pb.go new file mode 100644 index 00000000..52bae515 --- /dev/null +++ b/proto/platform/tenant/v1/attestation.platform.pb.go @@ -0,0 +1,389 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: attestation.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Attestation represents a normalized Attestation that we have ingested into our datastore. +// They are linked to Signatures via ID, as in they are 'children' of Signatures +// There can be multiple of these that we keep. +type Attestation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The Attestation UIDP at which this Attestation resides in the hierarchy. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // raw_attestation is a free form type to stub in any attestations so we don't end up a + // adding new tables for all the new type of attestations, initial goal is to add image configs + // and anything which comes up after that + RawAttestation []byte `protobuf:"bytes,2,opt,name=raw_attestation,json=rawAttestation,proto3" json:"raw_attestation,omitempty"` + // format holds the Document format type + Format string `protobuf:"bytes,3,opt,name=format,proto3" json:"format,omitempty"` + // generated_at holds when the Attestation was generated. + GeneratedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=generated_at,json=generatedAt,proto3" json:"generated_at,omitempty"` + // Name of the Attestation. + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + // Short description of the Attestation + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + // digest of the Attestation when ingested + Digest *string `protobuf:"bytes,7,opt,name=digest,proto3,oneof" json:"digest,omitempty"` +} + +func (x *Attestation) Reset() { + *x = Attestation{} + if protoimpl.UnsafeEnabled { + mi := &file_attestation_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Attestation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Attestation) ProtoMessage() {} + +func (x *Attestation) ProtoReflect() protoreflect.Message { + mi := &file_attestation_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Attestation.ProtoReflect.Descriptor instead. +func (*Attestation) Descriptor() ([]byte, []int) { + return file_attestation_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Attestation) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Attestation) GetRawAttestation() []byte { + if x != nil { + return x.RawAttestation + } + return nil +} + +func (x *Attestation) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *Attestation) GetGeneratedAt() *timestamppb.Timestamp { + if x != nil { + return x.GeneratedAt + } + return nil +} + +func (x *Attestation) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Attestation) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Attestation) GetDigest() string { + if x != nil && x.Digest != nil { + return *x.Digest + } + return "" +} + +type AttestationList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Attestation `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *AttestationList) Reset() { + *x = AttestationList{} + if protoimpl.UnsafeEnabled { + mi := &file_attestation_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttestationList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttestationList) ProtoMessage() {} + +func (x *AttestationList) ProtoReflect() protoreflect.Message { + mi := &file_attestation_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AttestationList.ProtoReflect.Descriptor instead. +func (*AttestationList) Descriptor() ([]byte, []int) { + return file_attestation_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *AttestationList) GetItems() []*Attestation { + if x != nil { + return x.Items + } + return nil +} + +type AttestationFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` +} + +func (x *AttestationFilter) Reset() { + *x = AttestationFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_attestation_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttestationFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttestationFilter) ProtoMessage() {} + +func (x *AttestationFilter) ProtoReflect() protoreflect.Message { + mi := &file_attestation_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AttestationFilter.ProtoReflect.Descriptor instead. +func (*AttestationFilter) Descriptor() ([]byte, []int) { + return file_attestation_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *AttestationFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AttestationFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +var File_attestation_platform_proto protoreflect.FileDescriptor + +var file_attestation_platform_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfb, 0x01, 0x0a, 0x0b, 0x41, 0x74, + 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x61, 0x77, + 0x5f, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0e, 0x72, 0x61, 0x77, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x50, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x65, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x5f, 0x0a, 0x11, 0x41, 0x74, 0x74, + 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, + 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x32, 0x82, 0x01, 0x0a, 0x0c, 0x41, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x72, 0x0a, 0x04, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x1a, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x9e, 0x05, 0x10, 0x01, 0x42, + 0x76, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_attestation_platform_proto_rawDescOnce sync.Once + file_attestation_platform_proto_rawDescData = file_attestation_platform_proto_rawDesc +) + +func file_attestation_platform_proto_rawDescGZIP() []byte { + file_attestation_platform_proto_rawDescOnce.Do(func() { + file_attestation_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_attestation_platform_proto_rawDescData) + }) + return file_attestation_platform_proto_rawDescData +} + +var file_attestation_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_attestation_platform_proto_goTypes = []interface{}{ + (*Attestation)(nil), // 0: chainguard.platform.tenant.Attestation + (*AttestationList)(nil), // 1: chainguard.platform.tenant.AttestationList + (*AttestationFilter)(nil), // 2: chainguard.platform.tenant.AttestationFilter + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 4: chainguard.platform.common.UIDPFilter +} +var file_attestation_platform_proto_depIdxs = []int32{ + 3, // 0: chainguard.platform.tenant.Attestation.generated_at:type_name -> google.protobuf.Timestamp + 0, // 1: chainguard.platform.tenant.AttestationList.items:type_name -> chainguard.platform.tenant.Attestation + 4, // 2: chainguard.platform.tenant.AttestationFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 2, // 3: chainguard.platform.tenant.Attestations.List:input_type -> chainguard.platform.tenant.AttestationFilter + 1, // 4: chainguard.platform.tenant.Attestations.List:output_type -> chainguard.platform.tenant.AttestationList + 4, // [4:5] is the sub-list for method output_type + 3, // [3:4] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_attestation_platform_proto_init() } +func file_attestation_platform_proto_init() { + if File_attestation_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_attestation_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Attestation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_attestation_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AttestationList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_attestation_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AttestationFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_attestation_platform_proto_msgTypes[0].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_attestation_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_attestation_platform_proto_goTypes, + DependencyIndexes: file_attestation_platform_proto_depIdxs, + MessageInfos: file_attestation_platform_proto_msgTypes, + }.Build() + File_attestation_platform_proto = out.File + file_attestation_platform_proto_rawDesc = nil + file_attestation_platform_proto_goTypes = nil + file_attestation_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/attestation.platform.pb.gw.go b/proto/platform/tenant/v1/attestation.platform.pb.gw.go new file mode 100644 index 00000000..38db96d2 --- /dev/null +++ b/proto/platform/tenant/v1/attestation.platform.pb.gw.go @@ -0,0 +1,169 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: attestation.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Attestations_List_0(ctx context.Context, marshaler runtime.Marshaler, client AttestationsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AttestationFilter + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Attestations_List_0(ctx context.Context, marshaler runtime.Marshaler, server AttestationsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AttestationFilter + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterAttestationsHandlerServer registers the http handlers for service Attestations to "mux". +// UnaryRPC :call AttestationsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAttestationsHandlerFromEndpoint instead. +func RegisterAttestationsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AttestationsServer) error { + + mux.Handle("POST", pattern_Attestations_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Attestations/List", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Attestations/List")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Attestations_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Attestations_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterAttestationsHandlerFromEndpoint is same as RegisterAttestationsHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterAttestationsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterAttestationsHandler(ctx, mux, conn) +} + +// RegisterAttestationsHandler registers the http handlers for service Attestations to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterAttestationsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterAttestationsHandlerClient(ctx, mux, NewAttestationsClient(conn)) +} + +// RegisterAttestationsHandlerClient registers the http handlers for service Attestations +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AttestationsClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AttestationsClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "AttestationsClient" to call the correct interceptors. +func RegisterAttestationsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AttestationsClient) error { + + mux.Handle("POST", pattern_Attestations_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Attestations/List", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Attestations/List")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Attestations_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Attestations_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Attestations_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Attestations", "List"}, "")) +) + +var ( + forward_Attestations_List_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/tenant/v1/attestation.platform.proto b/proto/platform/tenant/v1/attestation.platform.proto new file mode 100644 index 00000000..652a67f2 --- /dev/null +++ b/proto/platform/tenant/v1/attestation.platform.proto @@ -0,0 +1,63 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantAttestationProto"; + +package chainguard.platform.tenant; + +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Attestations { + rpc List(AttestationFilter) returns (AttestationList) { + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_ATTESTATIONS_LIST] + unscoped: true + } + }; + } + } + +// Attestation represents a normalized Attestation that we have ingested into our datastore. +// They are linked to Signatures via ID, as in they are 'children' of Signatures +// There can be multiple of these that we keep. +message Attestation { + // id, The Attestation UIDP at which this Attestation resides in the hierarchy. + string id = 1; + + // raw_attestation is a free form type to stub in any attestations so we don't end up a + // adding new tables for all the new type of attestations, initial goal is to add image configs + // and anything which comes up after that + bytes raw_attestation = 2; + + // format holds the Document format type + string format = 3; + + // generated_at holds when the Attestation was generated. + google.protobuf.Timestamp generated_at = 4; + + // Name of the Attestation. + string name = 5; + + // Short description of the Attestation + string description = 6; + + // digest of the Attestation when ingested + optional string digest = 7; +} + +message AttestationList { + repeated Attestation items = 1; +} + +message AttestationFilter { + // id is the exact UID of the record. + string id = 1; + + chainguard.platform.common.UIDPFilter uidp = 2; + +} diff --git a/proto/platform/tenant/v1/attestation.platform_grpc.pb.go b/proto/platform/tenant/v1/attestation.platform_grpc.pb.go new file mode 100644 index 00000000..321d546e --- /dev/null +++ b/proto/platform/tenant/v1/attestation.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: attestation.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Attestations_List_FullMethodName = "/chainguard.platform.tenant.Attestations/List" +) + +// AttestationsClient is the client API for Attestations service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type AttestationsClient interface { + List(ctx context.Context, in *AttestationFilter, opts ...grpc.CallOption) (*AttestationList, error) +} + +type attestationsClient struct { + cc grpc.ClientConnInterface +} + +func NewAttestationsClient(cc grpc.ClientConnInterface) AttestationsClient { + return &attestationsClient{cc} +} + +func (c *attestationsClient) List(ctx context.Context, in *AttestationFilter, opts ...grpc.CallOption) (*AttestationList, error) { + out := new(AttestationList) + err := c.cc.Invoke(ctx, Attestations_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// AttestationsServer is the server API for Attestations service. +// All implementations must embed UnimplementedAttestationsServer +// for forward compatibility +type AttestationsServer interface { + List(context.Context, *AttestationFilter) (*AttestationList, error) + mustEmbedUnimplementedAttestationsServer() +} + +// UnimplementedAttestationsServer must be embedded to have forward compatible implementations. +type UnimplementedAttestationsServer struct { +} + +func (UnimplementedAttestationsServer) List(context.Context, *AttestationFilter) (*AttestationList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedAttestationsServer) mustEmbedUnimplementedAttestationsServer() {} + +// UnsafeAttestationsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to AttestationsServer will +// result in compilation errors. +type UnsafeAttestationsServer interface { + mustEmbedUnimplementedAttestationsServer() +} + +func RegisterAttestationsServer(s grpc.ServiceRegistrar, srv AttestationsServer) { + s.RegisterService(&Attestations_ServiceDesc, srv) +} + +func _Attestations_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AttestationFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AttestationsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Attestations_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AttestationsServer).List(ctx, req.(*AttestationFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// Attestations_ServiceDesc is the grpc.ServiceDesc for Attestations service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Attestations_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.Attestations", + HandlerType: (*AttestationsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _Attestations_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "attestation.platform.proto", +} diff --git a/proto/platform/tenant/v1/clients.go b/proto/platform/tenant/v1/clients.go new file mode 100644 index 00000000..3fc4389e --- /dev/null +++ b/proto/platform/tenant/v1/clients.go @@ -0,0 +1,164 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "context" + "fmt" + "net/url" + "time" + + delegate "chainguard.dev/go-grpc-kit/pkg/options" + "github.com/chainguard-dev/clog" + "google.golang.org/grpc" + + "chainguard.dev/sdk/auth" +) + +type Clients interface { + Clusters() ClustersClient + Records() RecordsClient + RecordContexts() RecordContextsClient + Sboms() SbomsClient + Risks() RisksClient + Signatures() SignaturesClient + PolicyResults() PolicyResultsClient + VulnReports() VulnReportsClient + + Nodes() NodesClient + Namespaces() NamespacesClient + Workloads() WorkloadsClient + + Close() error +} + +func NewClients(ctx context.Context, addr string, token string) (Clients, error) { + uri, err := url.Parse(addr) + if err != nil { + return nil, fmt.Errorf("failed to parse tenant service address, must be a url: %w", err) + } + + target, opts := delegate.GRPCOptions(*uri) + + // TODO: we may want to require transport security at some future point. + if cred := auth.NewFromToken(ctx, token, false); cred != nil { + opts = append(opts, grpc.WithPerRPCCredentials(cred)) + } else { + clog.FromContext(ctx).Warn("No authentication provided, this may end badly.") + } + + var cancel context.CancelFunc + if _, timeoutSet := ctx.Deadline(); !timeoutSet { + ctx, cancel = context.WithTimeout(ctx, 300*time.Second) + defer cancel() + } + conn, err := grpc.DialContext(ctx, target, opts...) + if err != nil { + return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + } + + return &clients{ + clusters: NewClustersClient(conn), + records: NewRecordsClient(conn), + recordContexts: NewRecordContextsClient(conn), + sboms: NewSbomsClient(conn), + vulnReports: NewVulnReportsClient(conn), + risks: NewRisksClient(conn), + signatures: NewSignaturesClient(conn), + nodes: NewNodesClient(conn), + namespaces: NewNamespacesClient(conn), + workloads: NewWorkloadsClient(conn), + policyResults: NewPolicyResultsClient(conn), + + conn: conn, + }, nil +} + +func NewClientsFromConnection(conn *grpc.ClientConn) Clients { + return &clients{ + clusters: NewClustersClient(conn), + records: NewRecordsClient(conn), + recordContexts: NewRecordContextsClient(conn), + sboms: NewSbomsClient(conn), + vulnReports: NewVulnReportsClient(conn), + risks: NewRisksClient(conn), + signatures: NewSignaturesClient(conn), + policyResults: NewPolicyResultsClient(conn), + nodes: NewNodesClient(conn), + namespaces: NewNamespacesClient(conn), + workloads: NewWorkloadsClient(conn), + // conn is not set, this client struct does not own closing it. + } +} + +type clients struct { + clusters ClustersClient + records RecordsClient + + recordContexts RecordContextsClient + sboms SbomsClient + risks RisksClient + signatures SignaturesClient + policyResults PolicyResultsClient + vulnReports VulnReportsClient + + nodes NodesClient + namespaces NamespacesClient + workloads WorkloadsClient + + conn *grpc.ClientConn +} + +func (c *clients) Clusters() ClustersClient { + return c.clusters +} + +func (c *clients) Records() RecordsClient { + return c.records +} + +func (c *clients) RecordContexts() RecordContextsClient { + return c.recordContexts +} + +func (c *clients) Sboms() SbomsClient { + return c.sboms +} + +func (c *clients) Risks() RisksClient { + return c.risks +} + +func (c *clients) Signatures() SignaturesClient { + return c.signatures +} + +func (c *clients) PolicyResults() PolicyResultsClient { + return c.policyResults +} + +func (c *clients) Nodes() NodesClient { + return c.nodes +} + +func (c *clients) Namespaces() NamespacesClient { + return c.namespaces +} + +func (c *clients) Workloads() WorkloadsClient { + return c.workloads +} + +func (c *clients) VulnReports() VulnReportsClient { + return c.vulnReports +} + +func (c *clients) Close() error { + if c.conn != nil { + return c.conn.Close() + } + return nil +} diff --git a/proto/platform/tenant/v1/cluster.platform.event.go b/proto/platform/tenant/v1/cluster.platform.event.go new file mode 100644 index 00000000..aeb567ed --- /dev/null +++ b/proto/platform/tenant/v1/cluster.platform.event.go @@ -0,0 +1,45 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +import ( + "chainguard.dev/sdk/uidp" +) + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *Cluster) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *Cluster) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *DeleteClusterRequest) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return uidp.Parent(x.GetId()), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *DeleteClusterRequest) CloudEventsSubject() string { + return x.GetId() +} + +// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.Redact. +func (x *DeleteClusterRequest) CloudEventsRedact() interface{} { + return nil +} diff --git a/proto/platform/tenant/v1/cluster.platform.pb.go b/proto/platform/tenant/v1/cluster.platform.pb.go new file mode 100644 index 00000000..60f6a6b3 --- /dev/null +++ b/proto/platform/tenant/v1/cluster.platform.pb.go @@ -0,0 +1,2934 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: cluster.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v11 "chainguard.dev/sdk/proto/platform/common/v1" + v1 "chainguard.dev/sdk/proto/platform/iam/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ClusterDiscoveryRequest_State int32 + +const ( + ClusterDiscoveryRequest_UNKNOWN ClusterDiscoveryRequest_State = 0 + ClusterDiscoveryRequest_UNSUPPORTED ClusterDiscoveryRequest_State = 1 + ClusterDiscoveryRequest_NEEDS_WORK ClusterDiscoveryRequest_State = 2 + ClusterDiscoveryRequest_ELIGIBLE ClusterDiscoveryRequest_State = 3 + ClusterDiscoveryRequest_ENROLLED ClusterDiscoveryRequest_State = 4 +) + +// Enum value maps for ClusterDiscoveryRequest_State. +var ( + ClusterDiscoveryRequest_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "UNSUPPORTED", + 2: "NEEDS_WORK", + 3: "ELIGIBLE", + 4: "ENROLLED", + } + ClusterDiscoveryRequest_State_value = map[string]int32{ + "UNKNOWN": 0, + "UNSUPPORTED": 1, + "NEEDS_WORK": 2, + "ELIGIBLE": 3, + "ENROLLED": 4, + } +) + +func (x ClusterDiscoveryRequest_State) Enum() *ClusterDiscoveryRequest_State { + p := new(ClusterDiscoveryRequest_State) + *p = x + return p +} + +func (x ClusterDiscoveryRequest_State) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClusterDiscoveryRequest_State) Descriptor() protoreflect.EnumDescriptor { + return file_cluster_platform_proto_enumTypes[0].Descriptor() +} + +func (ClusterDiscoveryRequest_State) Type() protoreflect.EnumType { + return &file_cluster_platform_proto_enumTypes[0] +} + +func (x ClusterDiscoveryRequest_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ClusterDiscoveryRequest_State.Descriptor instead. +func (ClusterDiscoveryRequest_State) EnumDescriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{2, 0} +} + +type Cluster_NamespaceEnforcementMode int32 + +const ( + Cluster_OptOut Cluster_NamespaceEnforcementMode = 0 + Cluster_OptIn Cluster_NamespaceEnforcementMode = 1 +) + +// Enum value maps for Cluster_NamespaceEnforcementMode. +var ( + Cluster_NamespaceEnforcementMode_name = map[int32]string{ + 0: "OptOut", + 1: "OptIn", + } + Cluster_NamespaceEnforcementMode_value = map[string]int32{ + "OptOut": 0, + "OptIn": 1, + } +) + +func (x Cluster_NamespaceEnforcementMode) Enum() *Cluster_NamespaceEnforcementMode { + p := new(Cluster_NamespaceEnforcementMode) + *p = x + return p +} + +func (x Cluster_NamespaceEnforcementMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Cluster_NamespaceEnforcementMode) Descriptor() protoreflect.EnumDescriptor { + return file_cluster_platform_proto_enumTypes[1].Descriptor() +} + +func (Cluster_NamespaceEnforcementMode) Type() protoreflect.EnumType { + return &file_cluster_platform_proto_enumTypes[1] +} + +func (x Cluster_NamespaceEnforcementMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Cluster_NamespaceEnforcementMode.Descriptor instead. +func (Cluster_NamespaceEnforcementMode) EnumDescriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{4, 0} +} + +type Cluster_Provider int32 + +const ( + Cluster_UNKNOWN Cluster_Provider = 0 + Cluster_GKE Cluster_Provider = 1 + Cluster_EKS Cluster_Provider = 2 + // GCP Services (10+) + Cluster_CLOUD_RUN Cluster_Provider = 10 + // AWS Services (20+) + Cluster_ECS Cluster_Provider = 20 + Cluster_APP_RUNNER Cluster_Provider = 21 + // For testing. + Cluster_KIND Cluster_Provider = 100 +) + +// Enum value maps for Cluster_Provider. +var ( + Cluster_Provider_name = map[int32]string{ + 0: "UNKNOWN", + 1: "GKE", + 2: "EKS", + 10: "CLOUD_RUN", + 20: "ECS", + 21: "APP_RUNNER", + 100: "KIND", + } + Cluster_Provider_value = map[string]int32{ + "UNKNOWN": 0, + "GKE": 1, + "EKS": 2, + "CLOUD_RUN": 10, + "ECS": 20, + "APP_RUNNER": 21, + "KIND": 100, + } +) + +func (x Cluster_Provider) Enum() *Cluster_Provider { + p := new(Cluster_Provider) + *p = x + return p +} + +func (x Cluster_Provider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Cluster_Provider) Descriptor() protoreflect.EnumDescriptor { + return file_cluster_platform_proto_enumTypes[2].Descriptor() +} + +func (Cluster_Provider) Type() protoreflect.EnumType { + return &file_cluster_platform_proto_enumTypes[2] +} + +func (x Cluster_Provider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Cluster_Provider.Descriptor instead. +func (Cluster_Provider) EnumDescriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{4, 1} +} + +type Cluster_Location int32 + +const ( + Cluster_AUTO Cluster_Location = 0 + // Use 1xx for US + Cluster_US_EAST Cluster_Location = 101 + Cluster_US_CENTRAL Cluster_Location = 102 + Cluster_US_WEST Cluster_Location = 103 +) + +// Enum value maps for Cluster_Location. +var ( + Cluster_Location_name = map[int32]string{ + 0: "AUTO", + 101: "US_EAST", + 102: "US_CENTRAL", + 103: "US_WEST", + } + Cluster_Location_value = map[string]int32{ + "AUTO": 0, + "US_EAST": 101, + "US_CENTRAL": 102, + "US_WEST": 103, + } +) + +func (x Cluster_Location) Enum() *Cluster_Location { + p := new(Cluster_Location) + *p = x + return p +} + +func (x Cluster_Location) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Cluster_Location) Descriptor() protoreflect.EnumDescriptor { + return file_cluster_platform_proto_enumTypes[3].Descriptor() +} + +func (Cluster_Location) Type() protoreflect.EnumType { + return &file_cluster_platform_proto_enumTypes[3] +} + +func (x Cluster_Location) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Cluster_Location.Descriptor instead. +func (Cluster_Location) EnumDescriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{4, 2} +} + +type Cluster_Status_State int32 + +const ( + Cluster_Status_UNKNOWN Cluster_Status_State = 0 + Cluster_Status_Ready Cluster_Status_State = 1 + Cluster_Status_NotReady Cluster_Status_State = 2 +) + +// Enum value maps for Cluster_Status_State. +var ( + Cluster_Status_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "Ready", + 2: "NotReady", + } + Cluster_Status_State_value = map[string]int32{ + "UNKNOWN": 0, + "Ready": 1, + "NotReady": 2, + } +) + +func (x Cluster_Status_State) Enum() *Cluster_Status_State { + p := new(Cluster_Status_State) + *p = x + return p +} + +func (x Cluster_Status_State) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Cluster_Status_State) Descriptor() protoreflect.EnumDescriptor { + return file_cluster_platform_proto_enumTypes[4].Descriptor() +} + +func (Cluster_Status_State) Type() protoreflect.EnumType { + return &file_cluster_platform_proto_enumTypes[4] +} + +func (x Cluster_Status_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Cluster_Status_State.Descriptor instead. +func (Cluster_Status_State) EnumDescriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{4, 4, 0} +} + +type ClusterConfigRequest_NamespaceEnforcementMode int32 + +const ( + ClusterConfigRequest_OptOut ClusterConfigRequest_NamespaceEnforcementMode = 0 + ClusterConfigRequest_OptIn ClusterConfigRequest_NamespaceEnforcementMode = 1 +) + +// Enum value maps for ClusterConfigRequest_NamespaceEnforcementMode. +var ( + ClusterConfigRequest_NamespaceEnforcementMode_name = map[int32]string{ + 0: "OptOut", + 1: "OptIn", + } + ClusterConfigRequest_NamespaceEnforcementMode_value = map[string]int32{ + "OptOut": 0, + "OptIn": 1, + } +) + +func (x ClusterConfigRequest_NamespaceEnforcementMode) Enum() *ClusterConfigRequest_NamespaceEnforcementMode { + p := new(ClusterConfigRequest_NamespaceEnforcementMode) + *p = x + return p +} + +func (x ClusterConfigRequest_NamespaceEnforcementMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClusterConfigRequest_NamespaceEnforcementMode) Descriptor() protoreflect.EnumDescriptor { + return file_cluster_platform_proto_enumTypes[5].Descriptor() +} + +func (ClusterConfigRequest_NamespaceEnforcementMode) Type() protoreflect.EnumType { + return &file_cluster_platform_proto_enumTypes[5] +} + +func (x ClusterConfigRequest_NamespaceEnforcementMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ClusterConfigRequest_NamespaceEnforcementMode.Descriptor instead. +func (ClusterConfigRequest_NamespaceEnforcementMode) EnumDescriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{10, 0} +} + +type CreateClusterRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // parent_id, The Group under which this Cluster resides. + ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` + // Cluster is the definition of the managed cluster to create. + Cluster *Cluster `protobuf:"bytes,2,opt,name=cluster,proto3" json:"cluster,omitempty"` +} + +func (x *CreateClusterRequest) Reset() { + *x = CreateClusterRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateClusterRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateClusterRequest) ProtoMessage() {} + +func (x *CreateClusterRequest) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateClusterRequest.ProtoReflect.Descriptor instead. +func (*CreateClusterRequest) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *CreateClusterRequest) GetParentId() string { + if x != nil { + return x.ParentId + } + return "" +} + +func (x *CreateClusterRequest) GetCluster() *Cluster { + if x != nil { + return x.Cluster + } + return nil +} + +type DeleteClusterRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *DeleteClusterRequest) Reset() { + *x = DeleteClusterRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteClusterRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteClusterRequest) ProtoMessage() {} + +func (x *DeleteClusterRequest) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteClusterRequest.ProtoReflect.Descriptor instead. +func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *DeleteClusterRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +type ClusterDiscoveryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UIDP of the group to impersonate to search for clusters. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // providers is the list of providers to perform discovery on. + Providers []Cluster_Provider `protobuf:"varint,2,rep,packed,name=providers,proto3,enum=chainguard.platform.tenant.Cluster_Provider" json:"providers,omitempty"` + // profiles includes the set of profiles to perform discovery for, + // which may impact eligibility (some profiles may not be supported + // on some providers). + Profiles []string `protobuf:"bytes,3,rep,name=profiles,proto3" json:"profiles,omitempty"` + // states is a collection of the states to return, or all if + // none are specified. + States []ClusterDiscoveryRequest_State `protobuf:"varint,4,rep,packed,name=states,proto3,enum=chainguard.platform.tenant.ClusterDiscoveryRequest_State" json:"states,omitempty"` +} + +func (x *ClusterDiscoveryRequest) Reset() { + *x = ClusterDiscoveryRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterDiscoveryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterDiscoveryRequest) ProtoMessage() {} + +func (x *ClusterDiscoveryRequest) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterDiscoveryRequest.ProtoReflect.Descriptor instead. +func (*ClusterDiscoveryRequest) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *ClusterDiscoveryRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClusterDiscoveryRequest) GetProviders() []Cluster_Provider { + if x != nil { + return x.Providers + } + return nil +} + +func (x *ClusterDiscoveryRequest) GetProfiles() []string { + if x != nil { + return x.Profiles + } + return nil +} + +func (x *ClusterDiscoveryRequest) GetStates() []ClusterDiscoveryRequest_State { + if x != nil { + return x.States + } + return nil +} + +type ClusterDiscoveryResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Results []*ClusterDiscoveryResponse_Result `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` +} + +func (x *ClusterDiscoveryResponse) Reset() { + *x = ClusterDiscoveryResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterDiscoveryResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterDiscoveryResponse) ProtoMessage() {} + +func (x *ClusterDiscoveryResponse) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_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 ClusterDiscoveryResponse.ProtoReflect.Descriptor instead. +func (*ClusterDiscoveryResponse) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *ClusterDiscoveryResponse) GetResults() []*ClusterDiscoveryResponse_Result { + if x != nil { + return x.Results + } + return nil +} + +type Cluster struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The Cluster UIDP under which this Cluster resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // remote_id is the remote ID of this cluster. + RemoteId string `protobuf:"bytes,2,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` + // issuer is the identity issuer tied to this cluster. + Issuer string `protobuf:"bytes,3,opt,name=issuer,proto3" json:"issuer,omitempty"` + // registered tracks the timestamp at which this cluster was registered. + Registered *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=registered,proto3" json:"registered,omitempty"` + // last_seen tracks the timestamp at which this cluster was last seen. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + // version holds the Kubernetes version last reported by the cluster. + Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` + // agent_version holds the version of the Chainguard agent last reported by the cluster. + AgentVersion string `protobuf:"bytes,7,opt,name=agent_version,json=agentVersion,proto3" json:"agent_version,omitempty"` + // activity is a mapping from "Source" URLs to an activity record summarizing + // recent activity from this source. + Activity map[string]*ClusterActivity `protobuf:"bytes,8,rep,name=activity,proto3" json:"activity,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // name of the cluster. + Name string `protobuf:"bytes,9,opt,name=name,proto3" json:"name,omitempty"` + // a short description of this cluster. + Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"` + // group the cluster resides in + Group *v1.Group `protobuf:"bytes,99,opt,name=group,proto3" json:"group,omitempty"` + // managed_name is the unique name we have given to this cluster's managed agent. + // This field is output-only, and is populated only when this cluster is "managed". + ManagedName string `protobuf:"bytes,100,opt,name=managed_name,json=managedName,proto3" json:"managed_name,omitempty"` + // provider holds the flavor of cluster provider, which is used to determine how we + // authenticate with the cluster. + Provider Cluster_Provider `protobuf:"varint,101,opt,name=provider,proto3,enum=chainguard.platform.tenant.Cluster_Provider" json:"provider,omitempty"` + // affinity specifies a scheduling preference for where to run the managed agent. + // Other factors, such as the provider may be taken into account when choosing a + // host cluster. + Affinity Cluster_Location `protobuf:"varint,105,opt,name=affinity,proto3,enum=chainguard.platform.tenant.Cluster_Location" json:"affinity,omitempty"` + // info contains the cluster information from the kubeconfig context. + Info *Cluster_Info `protobuf:"bytes,102,opt,name=info,proto3" json:"info,omitempty"` + // auth_info holds authentication details for connecting to KinD in test scenarios. + AuthInfo *Cluster_AuthInfo `protobuf:"bytes,104,opt,name=auth_info,json=authInfo,proto3" json:"auth_info,omitempty"` + // status contains the managed cluster's status. + Status *Cluster_Status `protobuf:"bytes,103,opt,name=status,proto3" json:"status,omitempty"` + // host_cluster surfaces the opaque identifier for the Chainguard cluster hosting + // this agent. + HostCluster string `protobuf:"bytes,106,opt,name=host_cluster,json=hostCluster,proto3" json:"host_cluster,omitempty"` + // profiles specifies the root set of tenant configurations that we want to run + // on this cluster. + Profiles []string `protobuf:"bytes,107,rep,name=profiles,proto3" json:"profiles,omitempty"` + // EnforcerOptions contains additional Enforcer configuration settings. + // +optional + EnforcerOptions *Cluster_EnforcerOptions `protobuf:"bytes,108,opt,name=enforcer_options,json=enforcerOptions,proto3,oneof" json:"enforcer_options,omitempty"` +} + +func (x *Cluster) Reset() { + *x = Cluster{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cluster) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cluster) ProtoMessage() {} + +func (x *Cluster) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Cluster.ProtoReflect.Descriptor instead. +func (*Cluster) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *Cluster) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Cluster) GetRemoteId() string { + if x != nil { + return x.RemoteId + } + return "" +} + +func (x *Cluster) GetIssuer() string { + if x != nil { + return x.Issuer + } + return "" +} + +func (x *Cluster) GetRegistered() *timestamppb.Timestamp { + if x != nil { + return x.Registered + } + return nil +} + +func (x *Cluster) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (x *Cluster) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *Cluster) GetAgentVersion() string { + if x != nil { + return x.AgentVersion + } + return "" +} + +func (x *Cluster) GetActivity() map[string]*ClusterActivity { + if x != nil { + return x.Activity + } + return nil +} + +func (x *Cluster) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Cluster) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Cluster) GetGroup() *v1.Group { + if x != nil { + return x.Group + } + return nil +} + +func (x *Cluster) GetManagedName() string { + if x != nil { + return x.ManagedName + } + return "" +} + +func (x *Cluster) GetProvider() Cluster_Provider { + if x != nil { + return x.Provider + } + return Cluster_UNKNOWN +} + +func (x *Cluster) GetAffinity() Cluster_Location { + if x != nil { + return x.Affinity + } + return Cluster_AUTO +} + +func (x *Cluster) GetInfo() *Cluster_Info { + if x != nil { + return x.Info + } + return nil +} + +func (x *Cluster) GetAuthInfo() *Cluster_AuthInfo { + if x != nil { + return x.AuthInfo + } + return nil +} + +func (x *Cluster) GetStatus() *Cluster_Status { + if x != nil { + return x.Status + } + return nil +} + +func (x *Cluster) GetHostCluster() string { + if x != nil { + return x.HostCluster + } + return "" +} + +func (x *Cluster) GetProfiles() []string { + if x != nil { + return x.Profiles + } + return nil +} + +func (x *Cluster) GetEnforcerOptions() *Cluster_EnforcerOptions { + if x != nil { + return x.EnforcerOptions + } + return nil +} + +type ClusterActivity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // profile is the Chainguard profile to which the source of this activity belongs. + Profile string `protobuf:"bytes,6,opt,name=profile,proto3" json:"profile,omitempty"` + // namespace is the namespace in which the source of this cluster activity lives. + Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` + // controller_name is the name of the Controller CRD which was the source of this + // activity on the tenant cluster. + ControllerName string `protobuf:"bytes,2,opt,name=controller_name,json=controllerName,proto3" json:"controller_name,omitempty"` + // webhook_name is the name of the Webhook CRD which was the source of this + // activity on the tenant cluster. + WebhookName string `protobuf:"bytes,3,opt,name=webhook_name,json=webhookName,proto3" json:"webhook_name,omitempty"` + // spec_hash is the hash of the Controller or Webhook CRD's spec, which forms a + // loose form of versioning. + SpecHash string `protobuf:"bytes,4,opt,name=spec_hash,json=specHash,proto3" json:"spec_hash,omitempty"` + // last_seen tracks the timestamp at which this source was last active. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` +} + +func (x *ClusterActivity) Reset() { + *x = ClusterActivity{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterActivity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterActivity) ProtoMessage() {} + +func (x *ClusterActivity) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterActivity.ProtoReflect.Descriptor instead. +func (*ClusterActivity) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *ClusterActivity) GetProfile() string { + if x != nil { + return x.Profile + } + return "" +} + +func (x *ClusterActivity) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *ClusterActivity) GetControllerName() string { + if x != nil { + return x.ControllerName + } + return "" +} + +func (x *ClusterActivity) GetWebhookName() string { + if x != nil { + return x.WebhookName + } + return "" +} + +func (x *ClusterActivity) GetSpecHash() string { + if x != nil { + return x.SpecHash + } + return "" +} + +func (x *ClusterActivity) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +type ClusterList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Cluster `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *ClusterList) Reset() { + *x = ClusterList{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterList) ProtoMessage() {} + +func (x *ClusterList) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterList.ProtoReflect.Descriptor instead. +func (*ClusterList) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{6} +} + +func (x *ClusterList) GetItems() []*Cluster { + if x != nil { + return x.Items + } + return nil +} + +type ClusterFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // active_since is the timestamp after which returned clusters should have been active. + // This applies to both cluster registration and when it was "last seen". + ActiveSince *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` + // uidp filers records based on their position in the group hierarchy. + Uidp *v11.UIDPFilter `protobuf:"bytes,3,opt,name=uidp,proto3" json:"uidp,omitempty"` + // remote_id is the remote ID of this cluster. + RemoteId string `protobuf:"bytes,4,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` + // name is the exact name of the cluster. + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *ClusterFilter) Reset() { + *x = ClusterFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterFilter) ProtoMessage() {} + +func (x *ClusterFilter) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterFilter.ProtoReflect.Descriptor instead. +func (*ClusterFilter) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{7} +} + +func (x *ClusterFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClusterFilter) GetActiveSince() *timestamppb.Timestamp { + if x != nil { + return x.ActiveSince + } + return nil +} + +func (x *ClusterFilter) GetUidp() *v11.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *ClusterFilter) GetRemoteId() string { + if x != nil { + return x.RemoteId + } + return "" +} + +func (x *ClusterFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type ClusterProfilesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ClusterProfilesRequest) Reset() { + *x = ClusterProfilesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterProfilesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterProfilesRequest) ProtoMessage() {} + +func (x *ClusterProfilesRequest) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterProfilesRequest.ProtoReflect.Descriptor instead. +func (*ClusterProfilesRequest) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{8} +} + +type ClusterProfilesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Profile []*ClusterProfilesResponse_Profile `protobuf:"bytes,1,rep,name=profile,proto3" json:"profile,omitempty"` +} + +func (x *ClusterProfilesResponse) Reset() { + *x = ClusterProfilesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterProfilesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterProfilesResponse) ProtoMessage() {} + +func (x *ClusterProfilesResponse) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterProfilesResponse.ProtoReflect.Descriptor instead. +func (*ClusterProfilesResponse) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{9} +} + +func (x *ClusterProfilesResponse) GetProfile() []*ClusterProfilesResponse_Profile { + if x != nil { + return x.Profile + } + return nil +} + +type ClusterConfigRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // profiles specifies the root profiles we want as part of this configuration. + Profiles []string `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"` + // EnforcerOptions contains additional Enforcer configuration settings. + EnforcerOptions *ClusterConfigRequest_EnforcerOptions `protobuf:"bytes,2,opt,name=enforcer_options,json=enforcerOptions,proto3,oneof" json:"enforcer_options,omitempty"` +} + +func (x *ClusterConfigRequest) Reset() { + *x = ClusterConfigRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterConfigRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterConfigRequest) ProtoMessage() {} + +func (x *ClusterConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterConfigRequest.ProtoReflect.Descriptor instead. +func (*ClusterConfigRequest) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{10} +} + +func (x *ClusterConfigRequest) GetProfiles() []string { + if x != nil { + return x.Profiles + } + return nil +} + +func (x *ClusterConfigRequest) GetEnforcerOptions() *ClusterConfigRequest_EnforcerOptions { + if x != nil { + return x.EnforcerOptions + } + return nil +} + +type ClusterConfigResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + McpConfig []byte `protobuf:"bytes,1,opt,name=mcp_config,json=mcpConfig,proto3" json:"mcp_config,omitempty"` + TenantConfig []byte `protobuf:"bytes,2,opt,name=tenant_config,json=tenantConfig,proto3" json:"tenant_config,omitempty"` + // profiles includes the full set of profiles returned (including transitive + // dependencies of the input profiles) + Profiles []string `protobuf:"bytes,3,rep,name=profiles,proto3" json:"profiles,omitempty"` +} + +func (x *ClusterConfigResponse) Reset() { + *x = ClusterConfigResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterConfigResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterConfigResponse) ProtoMessage() {} + +func (x *ClusterConfigResponse) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterConfigResponse.ProtoReflect.Descriptor instead. +func (*ClusterConfigResponse) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{11} +} + +func (x *ClusterConfigResponse) GetMcpConfig() []byte { + if x != nil { + return x.McpConfig + } + return nil +} + +func (x *ClusterConfigResponse) GetTenantConfig() []byte { + if x != nil { + return x.TenantConfig + } + return nil +} + +func (x *ClusterConfigResponse) GetProfiles() []string { + if x != nil { + return x.Profiles + } + return nil +} + +type ClusterCIDRRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ClusterCIDRRequest) Reset() { + *x = ClusterCIDRRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterCIDRRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterCIDRRequest) ProtoMessage() {} + +func (x *ClusterCIDRRequest) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterCIDRRequest.ProtoReflect.Descriptor instead. +func (*ClusterCIDRRequest) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{12} +} + +type ClusterCIDRResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // cidr_blocks specifies the cidr blocks enforce uses to communicate with clusters. + CidrBlocks []string `protobuf:"bytes,1,rep,name=cidr_blocks,json=cidrBlocks,proto3" json:"cidr_blocks,omitempty"` +} + +func (x *ClusterCIDRResponse) Reset() { + *x = ClusterCIDRResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterCIDRResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterCIDRResponse) ProtoMessage() {} + +func (x *ClusterCIDRResponse) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterCIDRResponse.ProtoReflect.Descriptor instead. +func (*ClusterCIDRResponse) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{13} +} + +func (x *ClusterCIDRResponse) GetCidrBlocks() []string { + if x != nil { + return x.CidrBlocks + } + return nil +} + +type ClusterDiscoveryResponse_Result struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Provider Cluster_Provider `protobuf:"varint,1,opt,name=provider,proto3,enum=chainguard.platform.tenant.Cluster_Provider" json:"provider,omitempty"` + Account string `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"` + Location Cluster_Location `protobuf:"varint,3,opt,name=location,proto3,enum=chainguard.platform.tenant.Cluster_Location" json:"location,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + // Types that are assignable to State: + // + // *ClusterDiscoveryResponse_Result_Unsupported_ + // *ClusterDiscoveryResponse_Result_NeedsWork_ + // *ClusterDiscoveryResponse_Result_Eligible_ + // *ClusterDiscoveryResponse_Result_Enrolled_ + State isClusterDiscoveryResponse_Result_State `protobuf_oneof:"state"` +} + +func (x *ClusterDiscoveryResponse_Result) Reset() { + *x = ClusterDiscoveryResponse_Result{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterDiscoveryResponse_Result) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterDiscoveryResponse_Result) ProtoMessage() {} + +func (x *ClusterDiscoveryResponse_Result) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterDiscoveryResponse_Result.ProtoReflect.Descriptor instead. +func (*ClusterDiscoveryResponse_Result) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *ClusterDiscoveryResponse_Result) GetProvider() Cluster_Provider { + if x != nil { + return x.Provider + } + return Cluster_UNKNOWN +} + +func (x *ClusterDiscoveryResponse_Result) GetAccount() string { + if x != nil { + return x.Account + } + return "" +} + +func (x *ClusterDiscoveryResponse_Result) GetLocation() Cluster_Location { + if x != nil { + return x.Location + } + return Cluster_AUTO +} + +func (x *ClusterDiscoveryResponse_Result) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (m *ClusterDiscoveryResponse_Result) GetState() isClusterDiscoveryResponse_Result_State { + if m != nil { + return m.State + } + return nil +} + +func (x *ClusterDiscoveryResponse_Result) GetUnsupported() *ClusterDiscoveryResponse_Result_Unsupported { + if x, ok := x.GetState().(*ClusterDiscoveryResponse_Result_Unsupported_); ok { + return x.Unsupported + } + return nil +} + +func (x *ClusterDiscoveryResponse_Result) GetNeedsWork() *ClusterDiscoveryResponse_Result_NeedsWork { + if x, ok := x.GetState().(*ClusterDiscoveryResponse_Result_NeedsWork_); ok { + return x.NeedsWork + } + return nil +} + +func (x *ClusterDiscoveryResponse_Result) GetEligible() *ClusterDiscoveryResponse_Result_Eligible { + if x, ok := x.GetState().(*ClusterDiscoveryResponse_Result_Eligible_); ok { + return x.Eligible + } + return nil +} + +func (x *ClusterDiscoveryResponse_Result) GetEnrolled() *ClusterDiscoveryResponse_Result_Enrolled { + if x, ok := x.GetState().(*ClusterDiscoveryResponse_Result_Enrolled_); ok { + return x.Enrolled + } + return nil +} + +type isClusterDiscoveryResponse_Result_State interface { + isClusterDiscoveryResponse_Result_State() +} + +type ClusterDiscoveryResponse_Result_Unsupported_ struct { + // unsupported clusters cannot be enrolled with our + // Agentless cluster support. + Unsupported *ClusterDiscoveryResponse_Result_Unsupported `protobuf:"bytes,10,opt,name=unsupported,proto3,oneof"` +} + +type ClusterDiscoveryResponse_Result_NeedsWork_ struct { + // needs_work clusters can be modified in some way so + // that they are supported by our Agentless infrastructure. + NeedsWork *ClusterDiscoveryResponse_Result_NeedsWork `protobuf:"bytes,11,opt,name=needs_work,json=needsWork,proto3,oneof"` +} + +type ClusterDiscoveryResponse_Result_Eligible_ struct { + // eligible clusters are able to be directly enrolled as + // agentless tenants immediately. This message contains + // all of the information needed to enroll this cluster. + Eligible *ClusterDiscoveryResponse_Result_Eligible `protobuf:"bytes,12,opt,name=eligible,proto3,oneof"` +} + +type ClusterDiscoveryResponse_Result_Enrolled_ struct { + // enrolled clusters are clusters that have already been + // enrolled as agentless tenants. + Enrolled *ClusterDiscoveryResponse_Result_Enrolled `protobuf:"bytes,13,opt,name=enrolled,proto3,oneof"` +} + +func (*ClusterDiscoveryResponse_Result_Unsupported_) isClusterDiscoveryResponse_Result_State() {} + +func (*ClusterDiscoveryResponse_Result_NeedsWork_) isClusterDiscoveryResponse_Result_State() {} + +func (*ClusterDiscoveryResponse_Result_Eligible_) isClusterDiscoveryResponse_Result_State() {} + +func (*ClusterDiscoveryResponse_Result_Enrolled_) isClusterDiscoveryResponse_Result_State() {} + +type ClusterDiscoveryResponse_Result_Unsupported struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // reason holds the reason the cluster is not currently supported. + Reason string `protobuf:"bytes,1,opt,name=reason,proto3" json:"reason,omitempty"` +} + +func (x *ClusterDiscoveryResponse_Result_Unsupported) Reset() { + *x = ClusterDiscoveryResponse_Result_Unsupported{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterDiscoveryResponse_Result_Unsupported) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterDiscoveryResponse_Result_Unsupported) ProtoMessage() {} + +func (x *ClusterDiscoveryResponse_Result_Unsupported) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterDiscoveryResponse_Result_Unsupported.ProtoReflect.Descriptor instead. +func (*ClusterDiscoveryResponse_Result_Unsupported) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0, 0} +} + +func (x *ClusterDiscoveryResponse_Result_Unsupported) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +type ClusterDiscoveryResponse_Result_NeedsWork struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // steps holds the set of changes the user needs to make in order + // for the cluster to become eligible. + Steps []string `protobuf:"bytes,1,rep,name=steps,proto3" json:"steps,omitempty"` +} + +func (x *ClusterDiscoveryResponse_Result_NeedsWork) Reset() { + *x = ClusterDiscoveryResponse_Result_NeedsWork{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterDiscoveryResponse_Result_NeedsWork) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterDiscoveryResponse_Result_NeedsWork) ProtoMessage() {} + +func (x *ClusterDiscoveryResponse_Result_NeedsWork) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterDiscoveryResponse_Result_NeedsWork.ProtoReflect.Descriptor instead. +func (*ClusterDiscoveryResponse_Result_NeedsWork) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0, 1} +} + +func (x *ClusterDiscoveryResponse_Result_NeedsWork) GetSteps() []string { + if x != nil { + return x.Steps + } + return nil +} + +type ClusterDiscoveryResponse_Result_Eligible struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Info *Cluster_Info `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *ClusterDiscoveryResponse_Result_Eligible) Reset() { + *x = ClusterDiscoveryResponse_Result_Eligible{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterDiscoveryResponse_Result_Eligible) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterDiscoveryResponse_Result_Eligible) ProtoMessage() {} + +func (x *ClusterDiscoveryResponse_Result_Eligible) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterDiscoveryResponse_Result_Eligible.ProtoReflect.Descriptor instead. +func (*ClusterDiscoveryResponse_Result_Eligible) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0, 2} +} + +func (x *ClusterDiscoveryResponse_Result_Eligible) GetInfo() *Cluster_Info { + if x != nil { + return x.Info + } + return nil +} + +type ClusterDiscoveryResponse_Result_Enrolled struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the UIDP of the tenant Cluster. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // profiles contains the set of profiles that this + // cluster was enrolled with. + Profiles []string `protobuf:"bytes,2,rep,name=profiles,proto3" json:"profiles,omitempty"` + Info *Cluster_Info `protobuf:"bytes,3,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *ClusterDiscoveryResponse_Result_Enrolled) Reset() { + *x = ClusterDiscoveryResponse_Result_Enrolled{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterDiscoveryResponse_Result_Enrolled) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterDiscoveryResponse_Result_Enrolled) ProtoMessage() {} + +func (x *ClusterDiscoveryResponse_Result_Enrolled) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClusterDiscoveryResponse_Result_Enrolled.ProtoReflect.Descriptor instead. +func (*ClusterDiscoveryResponse_Result_Enrolled) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0, 3} +} + +func (x *ClusterDiscoveryResponse_Result_Enrolled) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ClusterDiscoveryResponse_Result_Enrolled) GetProfiles() []string { + if x != nil { + return x.Profiles + } + return nil +} + +func (x *ClusterDiscoveryResponse_Result_Enrolled) GetInfo() *Cluster_Info { + if x != nil { + return x.Info + } + return nil +} + +type Cluster_EnforcerOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // +optional + WebhookFailOpen *bool `protobuf:"varint,1,opt,name=webhook_fail_open,json=webhookFailOpen,proto3,oneof" json:"webhook_fail_open,omitempty"` + // +optional + EnableCipCache *bool `protobuf:"varint,2,opt,name=enable_cip_cache,json=enableCipCache,proto3,oneof" json:"enable_cip_cache,omitempty"` + // +optional + NamespaceEnforcementMode *Cluster_NamespaceEnforcementMode `protobuf:"varint,3,opt,name=namespace_enforcement_mode,json=namespaceEnforcementMode,proto3,enum=chainguard.platform.tenant.Cluster_NamespaceEnforcementMode,oneof" json:"namespace_enforcement_mode,omitempty"` +} + +func (x *Cluster_EnforcerOptions) Reset() { + *x = Cluster_EnforcerOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cluster_EnforcerOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cluster_EnforcerOptions) ProtoMessage() {} + +func (x *Cluster_EnforcerOptions) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[20] + 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 Cluster_EnforcerOptions.ProtoReflect.Descriptor instead. +func (*Cluster_EnforcerOptions) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{4, 1} +} + +func (x *Cluster_EnforcerOptions) GetWebhookFailOpen() bool { + if x != nil && x.WebhookFailOpen != nil { + return *x.WebhookFailOpen + } + return false +} + +func (x *Cluster_EnforcerOptions) GetEnableCipCache() bool { + if x != nil && x.EnableCipCache != nil { + return *x.EnableCipCache + } + return false +} + +func (x *Cluster_EnforcerOptions) GetNamespaceEnforcementMode() Cluster_NamespaceEnforcementMode { + if x != nil && x.NamespaceEnforcementMode != nil { + return *x.NamespaceEnforcementMode + } + return Cluster_OptOut +} + +// This is based off of k8s.io/client-go/tools/clientcmd/api/v1.Cluster +// This can be extracted from kubectl for a named cluster (replace CLUSTER_NAME) with: +// +// kubectl config view \ +// --flatten -o jsonpath='{.clusters[?(@.name == "CLUSTER_NAME")].cluster}' +type Cluster_Info struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Server is the address of the kubernetes cluster (https://hostname:port). + Server string `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"` + // CertificateAuthorityData contains PEM-encoded certificate authority certificates. + // Overrides CertificateAuthority + CertificateAuthorityData []byte `protobuf:"bytes,5,opt,name=CertificateAuthorityData,proto3" json:"CertificateAuthorityData,omitempty"` +} + +func (x *Cluster_Info) Reset() { + *x = Cluster_Info{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cluster_Info) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cluster_Info) ProtoMessage() {} + +func (x *Cluster_Info) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Cluster_Info.ProtoReflect.Descriptor instead. +func (*Cluster_Info) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{4, 2} +} + +func (x *Cluster_Info) GetServer() string { + if x != nil { + return x.Server + } + return "" +} + +func (x *Cluster_Info) GetCertificateAuthorityData() []byte { + if x != nil { + return x.CertificateAuthorityData + } + return nil +} + +// This is based off of k8s.io/client-go/tools/clientcmd/api/v1.AuthInfo +// This should only ever be used with KinD clusters during testing, it WILL +// NOT be stored securely. +type Cluster_AuthInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // client_certificate_data contains PEM-encoded data from a client cert file for TLS. + ClientCertificateData []byte `protobuf:"bytes,2,opt,name=client_certificate_data,json=clientCertificateData,proto3" json:"client_certificate_data,omitempty"` + // client_key_data contains PEM-encoded data from a client key file for TLS. + ClientKeyData []byte `protobuf:"bytes,4,opt,name=client_key_data,json=clientKeyData,proto3" json:"client_key_data,omitempty"` +} + +func (x *Cluster_AuthInfo) Reset() { + *x = Cluster_AuthInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cluster_AuthInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cluster_AuthInfo) ProtoMessage() {} + +func (x *Cluster_AuthInfo) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[22] + 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 Cluster_AuthInfo.ProtoReflect.Descriptor instead. +func (*Cluster_AuthInfo) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{4, 3} +} + +func (x *Cluster_AuthInfo) GetClientCertificateData() []byte { + if x != nil { + return x.ClientCertificateData + } + return nil +} + +func (x *Cluster_AuthInfo) GetClientKeyData() []byte { + if x != nil { + return x.ClientKeyData + } + return nil +} + +type Cluster_Status struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ready Cluster_Status_State `protobuf:"varint,1,opt,name=ready,proto3,enum=chainguard.platform.tenant.Cluster_Status_State" json:"ready,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *Cluster_Status) Reset() { + *x = Cluster_Status{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cluster_Status) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cluster_Status) ProtoMessage() {} + +func (x *Cluster_Status) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[23] + 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 Cluster_Status.ProtoReflect.Descriptor instead. +func (*Cluster_Status) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{4, 4} +} + +func (x *Cluster_Status) GetReady() Cluster_Status_State { + if x != nil { + return x.Ready + } + return Cluster_Status_UNKNOWN +} + +func (x *Cluster_Status) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *Cluster_Status) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +type ClusterProfilesResponse_Profile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Dependencies []string `protobuf:"bytes,3,rep,name=dependencies,proto3" json:"dependencies,omitempty"` +} + +func (x *ClusterProfilesResponse_Profile) Reset() { + *x = ClusterProfilesResponse_Profile{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterProfilesResponse_Profile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterProfilesResponse_Profile) ProtoMessage() {} + +func (x *ClusterProfilesResponse_Profile) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[24] + 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 ClusterProfilesResponse_Profile.ProtoReflect.Descriptor instead. +func (*ClusterProfilesResponse_Profile) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{9, 0} +} + +func (x *ClusterProfilesResponse_Profile) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ClusterProfilesResponse_Profile) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *ClusterProfilesResponse_Profile) GetDependencies() []string { + if x != nil { + return x.Dependencies + } + return nil +} + +type ClusterConfigRequest_EnforcerOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // +optional + WebhookFailOpen *bool `protobuf:"varint,1,opt,name=webhook_fail_open,json=webhookFailOpen,proto3,oneof" json:"webhook_fail_open,omitempty"` + // +optional + EnableCipCache *bool `protobuf:"varint,2,opt,name=enable_cip_cache,json=enableCipCache,proto3,oneof" json:"enable_cip_cache,omitempty"` + // +optional + NamespaceEnforcementMode *ClusterConfigRequest_NamespaceEnforcementMode `protobuf:"varint,3,opt,name=namespace_enforcement_mode,json=namespaceEnforcementMode,proto3,enum=chainguard.platform.tenant.ClusterConfigRequest_NamespaceEnforcementMode,oneof" json:"namespace_enforcement_mode,omitempty"` +} + +func (x *ClusterConfigRequest_EnforcerOptions) Reset() { + *x = ClusterConfigRequest_EnforcerOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_cluster_platform_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClusterConfigRequest_EnforcerOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClusterConfigRequest_EnforcerOptions) ProtoMessage() {} + +func (x *ClusterConfigRequest_EnforcerOptions) ProtoReflect() protoreflect.Message { + mi := &file_cluster_platform_proto_msgTypes[25] + 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 ClusterConfigRequest_EnforcerOptions.ProtoReflect.Descriptor instead. +func (*ClusterConfigRequest_EnforcerOptions) Descriptor() ([]byte, []int) { + return file_cluster_platform_proto_rawDescGZIP(), []int{10, 0} +} + +func (x *ClusterConfigRequest_EnforcerOptions) GetWebhookFailOpen() bool { + if x != nil && x.WebhookFailOpen != nil { + return *x.WebhookFailOpen + } + return false +} + +func (x *ClusterConfigRequest_EnforcerOptions) GetEnableCipCache() bool { + if x != nil && x.EnableCipCache != nil { + return *x.EnableCipCache + } + return false +} + +func (x *ClusterConfigRequest_EnforcerOptions) GetNamespaceEnforcementMode() ClusterConfigRequest_NamespaceEnforcementMode { + if x != nil && x.NamespaceEnforcementMode != nil { + return *x.NamespaceEnforcementMode + } + return ClusterConfigRequest_OptOut +} + +var File_cluster_platform_proto protoreflect.FileDescriptor + +var file_cluster_platform_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, + 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x7a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, + 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x2e, 0x0a, 0x14, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbf, 0x02, 0x0a, + 0x17, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x4a, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x51, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x45, 0x45, 0x44, 0x53, 0x5f, 0x57, 0x4f, 0x52, 0x4b, + 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x03, + 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x22, 0xee, + 0x07, 0x0a, 0x18, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x07, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x73, 0x1a, 0xfa, 0x06, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x48, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x48, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x6b, 0x0a, 0x0b, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, + 0x0b, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x66, 0x0a, 0x0a, + 0x6e, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x45, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x4e, 0x65, + 0x65, 0x64, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x65, 0x65, 0x64, 0x73, + 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x62, 0x0a, 0x08, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x2e, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x08, + 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x62, 0x0a, 0x08, 0x65, 0x6e, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x08, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x1a, 0x25, 0x0a, 0x0b, + 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x1a, 0x21, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x73, 0x57, 0x6f, 0x72, 0x6b, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x1a, 0x48, 0x0a, 0x08, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, + 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, + 0x1a, 0x74, 0x0a, 0x08, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x07, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0xf7, 0x0f, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, + 0x6e, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x61, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x08, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x64, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x08, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x18, 0x69, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x3c, + 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x49, 0x0a, 0x09, + 0x61, 0x75, 0x74, 0x68, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x68, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x61, + 0x75, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x67, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x68, + 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x6a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x6b, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x63, 0x0a, 0x10, 0x65, 0x6e, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x6c, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x65, 0x6e, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x1a, + 0x68, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xbc, 0x02, 0x0a, 0x0f, 0x45, 0x6e, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, + 0x11, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x70, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0f, 0x77, 0x65, 0x62, 0x68, + 0x6f, 0x6f, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x4f, 0x70, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2d, + 0x0a, 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x63, + 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x43, 0x69, 0x70, 0x43, 0x61, 0x63, 0x68, 0x65, 0x88, 0x01, 0x01, 0x12, 0x7f, 0x0a, + 0x1a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x48, + 0x02, 0x52, 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x42, 0x14, + 0x0a, 0x12, 0x5f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, + 0x6f, 0x70, 0x65, 0x6e, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x63, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x5a, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x18, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x44, 0x61, 0x74, 0x61, 0x1a, 0x6a, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, + 0x1a, 0xb1, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x46, 0x0a, 0x05, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x72, 0x65, + 0x61, 0x64, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, + 0x65, 0x61, 0x64, 0x79, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x52, 0x65, 0x61, + 0x64, 0x79, 0x10, 0x02, 0x22, 0x31, 0x0a, 0x18, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, + 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x4f, 0x75, 0x74, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, + 0x4f, 0x70, 0x74, 0x49, 0x6e, 0x10, 0x01, 0x22, 0x5b, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x07, 0x0a, 0x03, 0x47, 0x4b, 0x45, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4b, 0x53, + 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x52, 0x55, 0x4e, 0x10, + 0x0a, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x43, 0x53, 0x10, 0x14, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x50, + 0x50, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x10, 0x15, 0x12, 0x08, 0x0a, 0x04, 0x4b, 0x49, + 0x4e, 0x44, 0x10, 0x64, 0x22, 0x3e, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x53, + 0x5f, 0x45, 0x41, 0x53, 0x54, 0x10, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x5f, 0x43, 0x45, + 0x4e, 0x54, 0x52, 0x41, 0x4c, 0x10, 0x66, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x53, 0x5f, 0x57, 0x45, + 0x53, 0x54, 0x10, 0x67, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xeb, 0x01, 0x0a, 0x0f, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, + 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x6c, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x65, 0x63, 0x48, 0x61, 0x73, 0x68, 0x12, 0x37, + 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, + 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x22, 0x48, 0x0a, 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x22, 0xcb, 0x01, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, + 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, + 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x1b, + 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0x18, 0x0a, 0x16, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xd5, 0x01, 0x0a, 0x17, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x63, 0x0a, 0x07, + 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, + 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x22, 0xb9, 0x04, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x70, 0x0a, 0x10, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x40, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x1a, 0xca, 0x02, 0x0a, 0x0f, 0x45, 0x6e, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x11, + 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0f, 0x77, 0x65, 0x62, 0x68, 0x6f, + 0x6f, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x4f, 0x70, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, + 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x43, 0x69, 0x70, 0x43, 0x61, 0x63, 0x68, 0x65, 0x88, 0x01, 0x01, 0x12, 0x8c, 0x01, 0x0a, + 0x1a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x49, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x02, 0x52, 0x18, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, + 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x70, 0x65, + 0x6e, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x69, 0x70, + 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x31, 0x0a, 0x18, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, + 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x4f, 0x75, 0x74, 0x10, 0x00, 0x12, 0x09, 0x0a, + 0x05, 0x4f, 0x70, 0x74, 0x49, 0x6e, 0x10, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x6e, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x77, 0x0a, + 0x15, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x63, 0x70, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6d, 0x63, 0x70, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x43, 0x49, 0x44, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x36, 0x0a, 0x13, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x49, 0x44, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x69, 0x64, 0x72, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x69, 0x64, 0x72, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x73, 0x32, 0x8e, 0x0a, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x12, 0xdf, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x30, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x22, 0x7e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x22, 0x2f, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, + 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, + 0x0a, 0x04, 0xf5, 0x03, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x37, 0x0a, 0x2c, 0x64, 0x65, + 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0xc0, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x30, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, + 0x2a, 0x1b, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xf8, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x37, 0x0a, + 0x2c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xa3, 0x01, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xf9, 0x03, 0xf7, 0x03, 0x12, 0x85, 0x01, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x1a, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x15, 0x12, 0x13, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, + 0xf7, 0x03, 0x10, 0x01, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x1a, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x20, 0x1a, 0x1b, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, + 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xf6, 0x03, 0xc2, 0xf0, 0x8e, + 0xfc, 0x0b, 0x37, 0x0a, 0x2c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, + 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x7d, 0x0a, 0x08, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x08, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x12, 0x00, 0x12, 0x77, 0x0a, 0x06, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, + 0x12, 0x00, 0x12, 0x71, 0x0a, 0x04, 0x43, 0x49, 0x44, 0x52, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, + 0x49, 0x44, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, + 0x49, 0x44, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x02, 0x12, 0x00, 0x42, 0x72, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1a, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_cluster_platform_proto_rawDescOnce sync.Once + file_cluster_platform_proto_rawDescData = file_cluster_platform_proto_rawDesc +) + +func file_cluster_platform_proto_rawDescGZIP() []byte { + file_cluster_platform_proto_rawDescOnce.Do(func() { + file_cluster_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_cluster_platform_proto_rawDescData) + }) + return file_cluster_platform_proto_rawDescData +} + +var file_cluster_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 6) +var file_cluster_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_cluster_platform_proto_goTypes = []interface{}{ + (ClusterDiscoveryRequest_State)(0), // 0: chainguard.platform.tenant.ClusterDiscoveryRequest.State + (Cluster_NamespaceEnforcementMode)(0), // 1: chainguard.platform.tenant.Cluster.NamespaceEnforcementMode + (Cluster_Provider)(0), // 2: chainguard.platform.tenant.Cluster.Provider + (Cluster_Location)(0), // 3: chainguard.platform.tenant.Cluster.Location + (Cluster_Status_State)(0), // 4: chainguard.platform.tenant.Cluster.Status.State + (ClusterConfigRequest_NamespaceEnforcementMode)(0), // 5: chainguard.platform.tenant.ClusterConfigRequest.NamespaceEnforcementMode + (*CreateClusterRequest)(nil), // 6: chainguard.platform.tenant.CreateClusterRequest + (*DeleteClusterRequest)(nil), // 7: chainguard.platform.tenant.DeleteClusterRequest + (*ClusterDiscoveryRequest)(nil), // 8: chainguard.platform.tenant.ClusterDiscoveryRequest + (*ClusterDiscoveryResponse)(nil), // 9: chainguard.platform.tenant.ClusterDiscoveryResponse + (*Cluster)(nil), // 10: chainguard.platform.tenant.Cluster + (*ClusterActivity)(nil), // 11: chainguard.platform.tenant.ClusterActivity + (*ClusterList)(nil), // 12: chainguard.platform.tenant.ClusterList + (*ClusterFilter)(nil), // 13: chainguard.platform.tenant.ClusterFilter + (*ClusterProfilesRequest)(nil), // 14: chainguard.platform.tenant.ClusterProfilesRequest + (*ClusterProfilesResponse)(nil), // 15: chainguard.platform.tenant.ClusterProfilesResponse + (*ClusterConfigRequest)(nil), // 16: chainguard.platform.tenant.ClusterConfigRequest + (*ClusterConfigResponse)(nil), // 17: chainguard.platform.tenant.ClusterConfigResponse + (*ClusterCIDRRequest)(nil), // 18: chainguard.platform.tenant.ClusterCIDRRequest + (*ClusterCIDRResponse)(nil), // 19: chainguard.platform.tenant.ClusterCIDRResponse + (*ClusterDiscoveryResponse_Result)(nil), // 20: chainguard.platform.tenant.ClusterDiscoveryResponse.Result + (*ClusterDiscoveryResponse_Result_Unsupported)(nil), // 21: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Unsupported + (*ClusterDiscoveryResponse_Result_NeedsWork)(nil), // 22: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.NeedsWork + (*ClusterDiscoveryResponse_Result_Eligible)(nil), // 23: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Eligible + (*ClusterDiscoveryResponse_Result_Enrolled)(nil), // 24: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Enrolled + nil, // 25: chainguard.platform.tenant.Cluster.ActivityEntry + (*Cluster_EnforcerOptions)(nil), // 26: chainguard.platform.tenant.Cluster.EnforcerOptions + (*Cluster_Info)(nil), // 27: chainguard.platform.tenant.Cluster.Info + (*Cluster_AuthInfo)(nil), // 28: chainguard.platform.tenant.Cluster.AuthInfo + (*Cluster_Status)(nil), // 29: chainguard.platform.tenant.Cluster.Status + (*ClusterProfilesResponse_Profile)(nil), // 30: chainguard.platform.tenant.ClusterProfilesResponse.Profile + (*ClusterConfigRequest_EnforcerOptions)(nil), // 31: chainguard.platform.tenant.ClusterConfigRequest.EnforcerOptions + (*timestamppb.Timestamp)(nil), // 32: google.protobuf.Timestamp + (*v1.Group)(nil), // 33: chainguard.platform.iam.Group + (*v11.UIDPFilter)(nil), // 34: chainguard.platform.common.UIDPFilter + (*emptypb.Empty)(nil), // 35: google.protobuf.Empty +} +var file_cluster_platform_proto_depIdxs = []int32{ + 10, // 0: chainguard.platform.tenant.CreateClusterRequest.cluster:type_name -> chainguard.platform.tenant.Cluster + 2, // 1: chainguard.platform.tenant.ClusterDiscoveryRequest.providers:type_name -> chainguard.platform.tenant.Cluster.Provider + 0, // 2: chainguard.platform.tenant.ClusterDiscoveryRequest.states:type_name -> chainguard.platform.tenant.ClusterDiscoveryRequest.State + 20, // 3: chainguard.platform.tenant.ClusterDiscoveryResponse.results:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result + 32, // 4: chainguard.platform.tenant.Cluster.registered:type_name -> google.protobuf.Timestamp + 32, // 5: chainguard.platform.tenant.Cluster.last_seen:type_name -> google.protobuf.Timestamp + 25, // 6: chainguard.platform.tenant.Cluster.activity:type_name -> chainguard.platform.tenant.Cluster.ActivityEntry + 33, // 7: chainguard.platform.tenant.Cluster.group:type_name -> chainguard.platform.iam.Group + 2, // 8: chainguard.platform.tenant.Cluster.provider:type_name -> chainguard.platform.tenant.Cluster.Provider + 3, // 9: chainguard.platform.tenant.Cluster.affinity:type_name -> chainguard.platform.tenant.Cluster.Location + 27, // 10: chainguard.platform.tenant.Cluster.info:type_name -> chainguard.platform.tenant.Cluster.Info + 28, // 11: chainguard.platform.tenant.Cluster.auth_info:type_name -> chainguard.platform.tenant.Cluster.AuthInfo + 29, // 12: chainguard.platform.tenant.Cluster.status:type_name -> chainguard.platform.tenant.Cluster.Status + 26, // 13: chainguard.platform.tenant.Cluster.enforcer_options:type_name -> chainguard.platform.tenant.Cluster.EnforcerOptions + 32, // 14: chainguard.platform.tenant.ClusterActivity.last_seen:type_name -> google.protobuf.Timestamp + 10, // 15: chainguard.platform.tenant.ClusterList.items:type_name -> chainguard.platform.tenant.Cluster + 32, // 16: chainguard.platform.tenant.ClusterFilter.active_since:type_name -> google.protobuf.Timestamp + 34, // 17: chainguard.platform.tenant.ClusterFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 30, // 18: chainguard.platform.tenant.ClusterProfilesResponse.profile:type_name -> chainguard.platform.tenant.ClusterProfilesResponse.Profile + 31, // 19: chainguard.platform.tenant.ClusterConfigRequest.enforcer_options:type_name -> chainguard.platform.tenant.ClusterConfigRequest.EnforcerOptions + 2, // 20: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.provider:type_name -> chainguard.platform.tenant.Cluster.Provider + 3, // 21: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.location:type_name -> chainguard.platform.tenant.Cluster.Location + 21, // 22: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.unsupported:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Unsupported + 22, // 23: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.needs_work:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result.NeedsWork + 23, // 24: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.eligible:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Eligible + 24, // 25: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.enrolled:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Enrolled + 27, // 26: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Eligible.info:type_name -> chainguard.platform.tenant.Cluster.Info + 27, // 27: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Enrolled.info:type_name -> chainguard.platform.tenant.Cluster.Info + 11, // 28: chainguard.platform.tenant.Cluster.ActivityEntry.value:type_name -> chainguard.platform.tenant.ClusterActivity + 1, // 29: chainguard.platform.tenant.Cluster.EnforcerOptions.namespace_enforcement_mode:type_name -> chainguard.platform.tenant.Cluster.NamespaceEnforcementMode + 4, // 30: chainguard.platform.tenant.Cluster.Status.ready:type_name -> chainguard.platform.tenant.Cluster.Status.State + 5, // 31: chainguard.platform.tenant.ClusterConfigRequest.EnforcerOptions.namespace_enforcement_mode:type_name -> chainguard.platform.tenant.ClusterConfigRequest.NamespaceEnforcementMode + 6, // 32: chainguard.platform.tenant.Clusters.Create:input_type -> chainguard.platform.tenant.CreateClusterRequest + 7, // 33: chainguard.platform.tenant.Clusters.Delete:input_type -> chainguard.platform.tenant.DeleteClusterRequest + 8, // 34: chainguard.platform.tenant.Clusters.Discover:input_type -> chainguard.platform.tenant.ClusterDiscoveryRequest + 13, // 35: chainguard.platform.tenant.Clusters.List:input_type -> chainguard.platform.tenant.ClusterFilter + 10, // 36: chainguard.platform.tenant.Clusters.Update:input_type -> chainguard.platform.tenant.Cluster + 14, // 37: chainguard.platform.tenant.Clusters.Profiles:input_type -> chainguard.platform.tenant.ClusterProfilesRequest + 16, // 38: chainguard.platform.tenant.Clusters.Config:input_type -> chainguard.platform.tenant.ClusterConfigRequest + 18, // 39: chainguard.platform.tenant.Clusters.CIDR:input_type -> chainguard.platform.tenant.ClusterCIDRRequest + 10, // 40: chainguard.platform.tenant.Clusters.Create:output_type -> chainguard.platform.tenant.Cluster + 35, // 41: chainguard.platform.tenant.Clusters.Delete:output_type -> google.protobuf.Empty + 9, // 42: chainguard.platform.tenant.Clusters.Discover:output_type -> chainguard.platform.tenant.ClusterDiscoveryResponse + 12, // 43: chainguard.platform.tenant.Clusters.List:output_type -> chainguard.platform.tenant.ClusterList + 10, // 44: chainguard.platform.tenant.Clusters.Update:output_type -> chainguard.platform.tenant.Cluster + 15, // 45: chainguard.platform.tenant.Clusters.Profiles:output_type -> chainguard.platform.tenant.ClusterProfilesResponse + 17, // 46: chainguard.platform.tenant.Clusters.Config:output_type -> chainguard.platform.tenant.ClusterConfigResponse + 19, // 47: chainguard.platform.tenant.Clusters.CIDR:output_type -> chainguard.platform.tenant.ClusterCIDRResponse + 40, // [40:48] is the sub-list for method output_type + 32, // [32:40] is the sub-list for method input_type + 32, // [32:32] is the sub-list for extension type_name + 32, // [32:32] is the sub-list for extension extendee + 0, // [0:32] is the sub-list for field type_name +} + +func init() { file_cluster_platform_proto_init() } +func file_cluster_platform_proto_init() { + if File_cluster_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_cluster_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateClusterRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteClusterRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterDiscoveryRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterDiscoveryResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cluster); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterActivity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterProfilesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterProfilesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterConfigRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterConfigResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterCIDRRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterCIDRResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterDiscoveryResponse_Result); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterDiscoveryResponse_Result_Unsupported); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterDiscoveryResponse_Result_NeedsWork); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterDiscoveryResponse_Result_Eligible); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterDiscoveryResponse_Result_Enrolled); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cluster_EnforcerOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cluster_Info); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cluster_AuthInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cluster_Status); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterProfilesResponse_Profile); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cluster_platform_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClusterConfigRequest_EnforcerOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_cluster_platform_proto_msgTypes[4].OneofWrappers = []interface{}{} + file_cluster_platform_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_cluster_platform_proto_msgTypes[14].OneofWrappers = []interface{}{ + (*ClusterDiscoveryResponse_Result_Unsupported_)(nil), + (*ClusterDiscoveryResponse_Result_NeedsWork_)(nil), + (*ClusterDiscoveryResponse_Result_Eligible_)(nil), + (*ClusterDiscoveryResponse_Result_Enrolled_)(nil), + } + file_cluster_platform_proto_msgTypes[20].OneofWrappers = []interface{}{} + file_cluster_platform_proto_msgTypes[25].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_cluster_platform_proto_rawDesc, + NumEnums: 6, + NumMessages: 26, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_cluster_platform_proto_goTypes, + DependencyIndexes: file_cluster_platform_proto_depIdxs, + EnumInfos: file_cluster_platform_proto_enumTypes, + MessageInfos: file_cluster_platform_proto_msgTypes, + }.Build() + File_cluster_platform_proto = out.File + file_cluster_platform_proto_rawDesc = nil + file_cluster_platform_proto_goTypes = nil + file_cluster_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/cluster.platform.pb.gw.go b/proto/platform/tenant/v1/cluster.platform.pb.gw.go new file mode 100644 index 00000000..4355e0ab --- /dev/null +++ b/proto/platform/tenant/v1/cluster.platform.pb.gw.go @@ -0,0 +1,838 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: cluster.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Clusters_Create_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateClusterRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Cluster); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Clusters_Create_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CreateClusterRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Cluster); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["parent_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") + } + + protoReq.ParentId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) + } + + msg, err := server.Create(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Clusters_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteClusterRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Clusters_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteClusterRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Delete(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Clusters_Discover_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterDiscoveryRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Discover(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Clusters_Discover_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterDiscoveryRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Discover(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Clusters_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Clusters_List_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Clusters_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Clusters_List_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Clusters_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Clusters_Update_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Cluster + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Clusters_Update_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Cluster + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.Update(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Clusters_Profiles_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterProfilesRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Profiles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Clusters_Profiles_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterProfilesRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Profiles(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Clusters_Config_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterConfigRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Config(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Clusters_Config_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterConfigRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Config(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Clusters_CIDR_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterCIDRRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CIDR(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Clusters_CIDR_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ClusterCIDRRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CIDR(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterClustersHandlerServer registers the http handlers for service Clusters to "mux". +// UnaryRPC :call ClustersServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterClustersHandlerFromEndpoint instead. +func RegisterClustersHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ClustersServer) error { + + mux.Handle("POST", pattern_Clusters_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Create", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Clusters_Create_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Clusters_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Delete", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Clusters_Delete_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Clusters_Discover_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Discover", runtime.WithHTTPPathPattern("/tenant/v1/clusters")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Clusters_Discover_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Discover_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Clusters_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/List", runtime.WithHTTPPathPattern("/tenant/v1/clusters")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Clusters_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Clusters_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Update", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Clusters_Update_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Clusters_Profiles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Profiles", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/Profiles")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Clusters_Profiles_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Profiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Clusters_Config_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Config", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/Config")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Clusters_Config_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Config_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Clusters_CIDR_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/CIDR", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/CIDR")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Clusters_CIDR_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_CIDR_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterClustersHandlerFromEndpoint is same as RegisterClustersHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterClustersHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterClustersHandler(ctx, mux, conn) +} + +// RegisterClustersHandler registers the http handlers for service Clusters to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterClustersHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterClustersHandlerClient(ctx, mux, NewClustersClient(conn)) +} + +// RegisterClustersHandlerClient registers the http handlers for service Clusters +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ClustersClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ClustersClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "ClustersClient" to call the correct interceptors. +func RegisterClustersHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ClustersClient) error { + + mux.Handle("POST", pattern_Clusters_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Create", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{parent_id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Clusters_Create_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_Clusters_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Delete", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Clusters_Delete_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Clusters_Discover_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Discover", runtime.WithHTTPPathPattern("/tenant/v1/clusters")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Clusters_Discover_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Discover_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Clusters_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/List", runtime.WithHTTPPathPattern("/tenant/v1/clusters")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Clusters_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_Clusters_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Update", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{id=**}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Clusters_Update_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Clusters_Profiles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Profiles", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/Profiles")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Clusters_Profiles_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Profiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Clusters_Config_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Config", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/Config")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Clusters_Config_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_Config_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Clusters_CIDR_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/CIDR", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/CIDR")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Clusters_CIDR_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Clusters_CIDR_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Clusters_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"tenant", "v1", "clusters", "parent_id"}, "")) + + pattern_Clusters_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"tenant", "v1", "clusters", "id"}, "")) + + pattern_Clusters_Discover_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "clusters"}, "")) + + pattern_Clusters_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "clusters"}, "")) + + pattern_Clusters_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"tenant", "v1", "clusters", "id"}, "")) + + pattern_Clusters_Profiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Clusters", "Profiles"}, "")) + + pattern_Clusters_Config_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Clusters", "Config"}, "")) + + pattern_Clusters_CIDR_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Clusters", "CIDR"}, "")) +) + +var ( + forward_Clusters_Create_0 = runtime.ForwardResponseMessage + + forward_Clusters_Delete_0 = runtime.ForwardResponseMessage + + forward_Clusters_Discover_0 = runtime.ForwardResponseMessage + + forward_Clusters_List_0 = runtime.ForwardResponseMessage + + forward_Clusters_Update_0 = runtime.ForwardResponseMessage + + forward_Clusters_Profiles_0 = runtime.ForwardResponseMessage + + forward_Clusters_Config_0 = runtime.ForwardResponseMessage + + forward_Clusters_CIDR_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/tenant/v1/cluster.platform.proto b/proto/platform/tenant/v1/cluster.platform.proto new file mode 100644 index 00000000..de125115 --- /dev/null +++ b/proto/platform/tenant/v1/cluster.platform.proto @@ -0,0 +1,479 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantClusterProto"; + +package chainguard.platform.tenant; + +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "annotations/events.proto"; +import "platform/common/v1/uidp.platform.proto"; +import "platform/iam/v1/group.platform.proto"; + +service Clusters { + rpc Create(CreateClusterRequest) returns (Cluster) { + option (google.api.http) = { + post: "/tenant/v1/clusters/{parent_id=**}" + body: "cluster" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [ + CAP_TENANT_CLUSTERS_CREATE, + // Creating a managed Cluster entails creating a RoleBinding + // for the cluster's identity, so check that the caller has + // permission to create RoleBindings as well. + CAP_IAM_ROLE_BINDINGS_CREATE + ] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.tenant.cluster.created.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Delete(DeleteClusterRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { + delete: "/tenant/v1/clusters/{id=**}" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_CLUSTERS_DELETE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.tenant.cluster.deleted.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Discover(ClusterDiscoveryRequest) returns (ClusterDiscoveryResponse) { + option (google.api.http) = { + post: "/tenant/v1/clusters" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [ + // This API is used to discover all of the clusters accessible + // to the IAM roles associated with the group specified in the + // request, use this special capability to cover this permission. + CAP_TENANT_CLUSTERS_DISCOVER, + // As part of the discovery response we return "enrolled" + // clusters, so check the List capability. + CAP_TENANT_CLUSTERS_LIST + ] + } + }; + } + + rpc List(ClusterFilter) returns (ClusterList) { + option (google.api.http) = { + get: "/tenant/v1/clusters" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_CLUSTERS_LIST] + unscoped: true + } + }; + } + + rpc Update(Cluster) returns (Cluster) { + option (google.api.http) = { + put: "/tenant/v1/clusters/{id=**}" + body: "*" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_CLUSTERS_UPDATE] + } + }; + option (chainguard.annotations.events) = { + type: "dev.chainguard.api.tenant.cluster.updated.v1" + extensions: ["group"] + audience: CUSTOMER + }; + } + + rpc Profiles(ClusterProfilesRequest) returns (ClusterProfilesResponse) { + option (chainguard.annotations.iam) = { + // Just check that the caller is registered. + enabled: {} + }; + } + + rpc Config(ClusterConfigRequest) returns (ClusterConfigResponse) { + option (chainguard.annotations.iam) = { + // Just check that the caller is registered. + enabled: {} + }; + } + + rpc CIDR(ClusterCIDRRequest) returns (ClusterCIDRResponse) { + option (chainguard.annotations.iam) = { + // Just check that the caller is registered. + enabled: {} + }; + } +} + +message CreateClusterRequest { + // parent_id, The Group under which this Cluster resides. + string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; + + // Cluster is the definition of the managed cluster to create. + Cluster cluster = 2; +} + +message DeleteClusterRequest { + // id is the exact UIDP of the record. + string id = 1 [(chainguard.annotations.iam_scope) = true]; +} + +message ClusterDiscoveryRequest { + // id is the exact UIDP of the group to impersonate to search for clusters. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + + // providers is the list of providers to perform discovery on. + repeated Cluster.Provider providers = 2; + + // profiles includes the set of profiles to perform discovery for, + // which may impact eligibility (some profiles may not be supported + // on some providers). + repeated string profiles = 3; + + // states is a collection of the states to return, or all if + // none are specified. + repeated State states = 4; + + enum State { + UNKNOWN = 0; + UNSUPPORTED = 1; + NEEDS_WORK = 2; + ELIGIBLE = 3; + ENROLLED = 4; + } +} + +message ClusterDiscoveryResponse { + repeated Result results = 1; + + message Result { + Cluster.Provider provider = 1; + string account = 2; + Cluster.Location location = 3; + string name = 4; + + oneof state { + // unsupported clusters cannot be enrolled with our + // Agentless cluster support. + Unsupported unsupported = 10; + + // needs_work clusters can be modified in some way so + // that they are supported by our Agentless infrastructure. + NeedsWork needs_work = 11; + + // eligible clusters are able to be directly enrolled as + // agentless tenants immediately. This message contains + // all of the information needed to enroll this cluster. + Eligible eligible = 12; + + // enrolled clusters are clusters that have already been + // enrolled as agentless tenants. + Enrolled enrolled = 13; + } + + message Unsupported { + // reason holds the reason the cluster is not currently supported. + string reason = 1; + } + + message NeedsWork { + // steps holds the set of changes the user needs to make in order + // for the cluster to become eligible. + repeated string steps = 1; + } + + message Eligible { + chainguard.platform.tenant.Cluster.Info info = 1; + } + + message Enrolled { + // id is the UIDP of the tenant Cluster. + string id = 1; + + // profiles contains the set of profiles that this + // cluster was enrolled with. + repeated string profiles = 2; + + chainguard.platform.tenant.Cluster.Info info = 3; + } + } +} + +message Cluster { + // id, The Cluster UIDP under which this Cluster resides. + string id = 1 [(chainguard.annotations.iam_scope) = true]; + + // remote_id is the remote ID of this cluster. + string remote_id = 2; + + // issuer is the identity issuer tied to this cluster. + string issuer = 3; + + // registered tracks the timestamp at which this cluster was registered. + google.protobuf.Timestamp registered = 4; + + // last_seen tracks the timestamp at which this cluster was last seen. + google.protobuf.Timestamp last_seen = 5; + + // version holds the Kubernetes version last reported by the cluster. + string version = 6; + + // agent_version holds the version of the Chainguard agent last reported by the cluster. + string agent_version = 7; + + // activity is a mapping from "Source" URLs to an activity record summarizing + // recent activity from this source. + map activity = 8; + + // name of the cluster. + string name = 9; + + // a short description of this cluster. + string description = 10; + + // group the cluster resides in + chainguard.platform.iam.Group group = 99; + + ///////////////////////////////////////////// + // Group "managed" options starting at 100 // + ///////////////////////////////////////////// + + // managed_name is the unique name we have given to this cluster's managed agent. + // This field is output-only, and is populated only when this cluster is "managed". + string managed_name = 100; + + // provider holds the flavor of cluster provider, which is used to determine how we + // authenticate with the cluster. + Provider provider = 101; + + // affinity specifies a scheduling preference for where to run the managed agent. + // Other factors, such as the provider may be taken into account when choosing a + // host cluster. + Location affinity = 105; + + // info contains the cluster information from the kubeconfig context. + Info info = 102; + + // auth_info holds authentication details for connecting to KinD in test scenarios. + AuthInfo auth_info = 104; + + // status contains the managed cluster's status. + Status status = 103; + + // host_cluster surfaces the opaque identifier for the Chainguard cluster hosting + // this agent. + string host_cluster = 106; + + // profiles specifies the root set of tenant configurations that we want to run + // on this cluster. + repeated string profiles = 107; + + // EnforcerOptions contains additional Enforcer configuration settings. + // +optional + optional EnforcerOptions enforcer_options = 108; + + message EnforcerOptions { + // +optional + optional bool webhook_fail_open = 1; + // +optional + optional bool enable_cip_cache = 2; + // +optional + optional NamespaceEnforcementMode namespace_enforcement_mode = 3; + } + + enum NamespaceEnforcementMode { + OptOut = 0; + OptIn = 1; + } + + enum Provider { + UNKNOWN = 0; + GKE = 1; + EKS = 2; + + // GCP Services (10+) + CLOUD_RUN = 10; + + // AWS Services (20+) + ECS = 20; + APP_RUNNER = 21; + + // For testing. + KIND = 100; + } + + enum Location { + AUTO = 0; + + // Use 1xx for US + US_EAST = 101; + US_CENTRAL = 102; + US_WEST = 103; + + // TODO: Segment up other areas + } + + // This is based off of k8s.io/client-go/tools/clientcmd/api/v1.Cluster + // This can be extracted from kubectl for a named cluster (replace CLUSTER_NAME) with: + // kubectl config view \ + // --flatten -o jsonpath='{.clusters[?(@.name == "CLUSTER_NAME")].cluster}' + message Info { + // Server is the address of the kubernetes cluster (https://hostname:port). + string server = 1; + + // TODO: TLSServerName = 2; + + // TODO: InsecureSkipTLSVerify = 3; + + // TODO: CertificateAuthority = 4; + + // CertificateAuthorityData contains PEM-encoded certificate authority certificates. + // Overrides CertificateAuthority + bytes CertificateAuthorityData = 5; + + // TODO: ProxyURL = 6; + + // TODO: Extensions = 7; + } + + // This is based off of k8s.io/client-go/tools/clientcmd/api/v1.AuthInfo + // This should only ever be used with KinD clusters during testing, it WILL + // NOT be stored securely. + message AuthInfo { + // client_certificate_data contains PEM-encoded data from a client cert file for TLS. + bytes client_certificate_data = 2; + + // client_key_data contains PEM-encoded data from a client key file for TLS. + bytes client_key_data = 4; + } + + message Status { + enum State { + UNKNOWN = 0; + Ready = 1; + NotReady = 2; + } + + State ready = 1; + string reason = 2; + string message = 3; + } +} + +message ClusterActivity { + // profile is the Chainguard profile to which the source of this activity belongs. + string profile = 6; + + // namespace is the namespace in which the source of this cluster activity lives. + string namespace = 1; + + // controller_name is the name of the Controller CRD which was the source of this + // activity on the tenant cluster. + string controller_name = 2; + + // webhook_name is the name of the Webhook CRD which was the source of this + // activity on the tenant cluster. + string webhook_name = 3; + + // spec_hash is the hash of the Controller or Webhook CRD's spec, which forms a + // loose form of versioning. + string spec_hash = 4; + + // last_seen tracks the timestamp at which this source was last active. + google.protobuf.Timestamp last_seen = 5; +} + +message ClusterList { + repeated Cluster items = 1; +} + +message ClusterFilter { + // id is the exact UID of the record. + string id = 1; + + // active_since is the timestamp after which returned clusters should have been active. + // This applies to both cluster registration and when it was "last seen". + google.protobuf.Timestamp active_since = 2; + + // uidp filers records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 3; + + // remote_id is the remote ID of this cluster. + string remote_id = 4; + + // name is the exact name of the cluster. + string name = 5; +} + +message ClusterProfilesRequest {} + +message ClusterProfilesResponse { + repeated Profile profile = 1; + + message Profile { + string name = 1; + string description = 2; + + repeated string dependencies = 3; + } +} + +message ClusterConfigRequest { + // profiles specifies the root profiles we want as part of this configuration. + repeated string profiles = 1; + + // EnforcerOptions contains additional Enforcer configuration settings. + optional EnforcerOptions enforcer_options = 2; + + message EnforcerOptions { + // +optional + optional bool webhook_fail_open = 1; + // +optional + optional bool enable_cip_cache = 2; + // +optional + optional NamespaceEnforcementMode namespace_enforcement_mode = 3; + } + + enum NamespaceEnforcementMode { + OptOut = 0; + OptIn = 1; + } +} + +message ClusterConfigResponse { + bytes mcp_config = 1; + bytes tenant_config = 2; + + // profiles includes the full set of profiles returned (including transitive + // dependencies of the input profiles) + repeated string profiles = 3; +} + +message ClusterCIDRRequest { +} + +message ClusterCIDRResponse { + // cidr_blocks specifies the cidr blocks enforce uses to communicate with clusters. + repeated string cidr_blocks = 1; +} diff --git a/proto/platform/tenant/v1/cluster.platform_grpc.pb.go b/proto/platform/tenant/v1/cluster.platform_grpc.pb.go new file mode 100644 index 00000000..75c55127 --- /dev/null +++ b/proto/platform/tenant/v1/cluster.platform_grpc.pb.go @@ -0,0 +1,369 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: cluster.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + emptypb "google.golang.org/protobuf/types/known/emptypb" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Clusters_Create_FullMethodName = "/chainguard.platform.tenant.Clusters/Create" + Clusters_Delete_FullMethodName = "/chainguard.platform.tenant.Clusters/Delete" + Clusters_Discover_FullMethodName = "/chainguard.platform.tenant.Clusters/Discover" + Clusters_List_FullMethodName = "/chainguard.platform.tenant.Clusters/List" + Clusters_Update_FullMethodName = "/chainguard.platform.tenant.Clusters/Update" + Clusters_Profiles_FullMethodName = "/chainguard.platform.tenant.Clusters/Profiles" + Clusters_Config_FullMethodName = "/chainguard.platform.tenant.Clusters/Config" + Clusters_CIDR_FullMethodName = "/chainguard.platform.tenant.Clusters/CIDR" +) + +// ClustersClient is the client API for Clusters service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type ClustersClient interface { + Create(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Cluster, error) + Delete(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Discover(ctx context.Context, in *ClusterDiscoveryRequest, opts ...grpc.CallOption) (*ClusterDiscoveryResponse, error) + List(ctx context.Context, in *ClusterFilter, opts ...grpc.CallOption) (*ClusterList, error) + Update(ctx context.Context, in *Cluster, opts ...grpc.CallOption) (*Cluster, error) + Profiles(ctx context.Context, in *ClusterProfilesRequest, opts ...grpc.CallOption) (*ClusterProfilesResponse, error) + Config(ctx context.Context, in *ClusterConfigRequest, opts ...grpc.CallOption) (*ClusterConfigResponse, error) + CIDR(ctx context.Context, in *ClusterCIDRRequest, opts ...grpc.CallOption) (*ClusterCIDRResponse, error) +} + +type clustersClient struct { + cc grpc.ClientConnInterface +} + +func NewClustersClient(cc grpc.ClientConnInterface) ClustersClient { + return &clustersClient{cc} +} + +func (c *clustersClient) Create(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := c.cc.Invoke(ctx, Clusters_Create_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clustersClient) Delete(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, Clusters_Delete_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clustersClient) Discover(ctx context.Context, in *ClusterDiscoveryRequest, opts ...grpc.CallOption) (*ClusterDiscoveryResponse, error) { + out := new(ClusterDiscoveryResponse) + err := c.cc.Invoke(ctx, Clusters_Discover_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clustersClient) List(ctx context.Context, in *ClusterFilter, opts ...grpc.CallOption) (*ClusterList, error) { + out := new(ClusterList) + err := c.cc.Invoke(ctx, Clusters_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clustersClient) Update(ctx context.Context, in *Cluster, opts ...grpc.CallOption) (*Cluster, error) { + out := new(Cluster) + err := c.cc.Invoke(ctx, Clusters_Update_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clustersClient) Profiles(ctx context.Context, in *ClusterProfilesRequest, opts ...grpc.CallOption) (*ClusterProfilesResponse, error) { + out := new(ClusterProfilesResponse) + err := c.cc.Invoke(ctx, Clusters_Profiles_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clustersClient) Config(ctx context.Context, in *ClusterConfigRequest, opts ...grpc.CallOption) (*ClusterConfigResponse, error) { + out := new(ClusterConfigResponse) + err := c.cc.Invoke(ctx, Clusters_Config_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clustersClient) CIDR(ctx context.Context, in *ClusterCIDRRequest, opts ...grpc.CallOption) (*ClusterCIDRResponse, error) { + out := new(ClusterCIDRResponse) + err := c.cc.Invoke(ctx, Clusters_CIDR_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ClustersServer is the server API for Clusters service. +// All implementations must embed UnimplementedClustersServer +// for forward compatibility +type ClustersServer interface { + Create(context.Context, *CreateClusterRequest) (*Cluster, error) + Delete(context.Context, *DeleteClusterRequest) (*emptypb.Empty, error) + Discover(context.Context, *ClusterDiscoveryRequest) (*ClusterDiscoveryResponse, error) + List(context.Context, *ClusterFilter) (*ClusterList, error) + Update(context.Context, *Cluster) (*Cluster, error) + Profiles(context.Context, *ClusterProfilesRequest) (*ClusterProfilesResponse, error) + Config(context.Context, *ClusterConfigRequest) (*ClusterConfigResponse, error) + CIDR(context.Context, *ClusterCIDRRequest) (*ClusterCIDRResponse, error) + mustEmbedUnimplementedClustersServer() +} + +// UnimplementedClustersServer must be embedded to have forward compatible implementations. +type UnimplementedClustersServer struct { +} + +func (UnimplementedClustersServer) Create(context.Context, *CreateClusterRequest) (*Cluster, error) { + return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") +} +func (UnimplementedClustersServer) Delete(context.Context, *DeleteClusterRequest) (*emptypb.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") +} +func (UnimplementedClustersServer) Discover(context.Context, *ClusterDiscoveryRequest) (*ClusterDiscoveryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Discover not implemented") +} +func (UnimplementedClustersServer) List(context.Context, *ClusterFilter) (*ClusterList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedClustersServer) Update(context.Context, *Cluster) (*Cluster, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedClustersServer) Profiles(context.Context, *ClusterProfilesRequest) (*ClusterProfilesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Profiles not implemented") +} +func (UnimplementedClustersServer) Config(context.Context, *ClusterConfigRequest) (*ClusterConfigResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Config not implemented") +} +func (UnimplementedClustersServer) CIDR(context.Context, *ClusterCIDRRequest) (*ClusterCIDRResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CIDR not implemented") +} +func (UnimplementedClustersServer) mustEmbedUnimplementedClustersServer() {} + +// UnsafeClustersServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ClustersServer will +// result in compilation errors. +type UnsafeClustersServer interface { + mustEmbedUnimplementedClustersServer() +} + +func RegisterClustersServer(s grpc.ServiceRegistrar, srv ClustersServer) { + s.RegisterService(&Clusters_ServiceDesc, srv) +} + +func _Clusters_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClustersServer).Create(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Clusters_Create_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClustersServer).Create(ctx, req.(*CreateClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Clusters_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteClusterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClustersServer).Delete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Clusters_Delete_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClustersServer).Delete(ctx, req.(*DeleteClusterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Clusters_Discover_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClusterDiscoveryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClustersServer).Discover(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Clusters_Discover_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClustersServer).Discover(ctx, req.(*ClusterDiscoveryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Clusters_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClusterFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClustersServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Clusters_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClustersServer).List(ctx, req.(*ClusterFilter)) + } + return interceptor(ctx, in, info, handler) +} + +func _Clusters_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Cluster) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClustersServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Clusters_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClustersServer).Update(ctx, req.(*Cluster)) + } + return interceptor(ctx, in, info, handler) +} + +func _Clusters_Profiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClusterProfilesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClustersServer).Profiles(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Clusters_Profiles_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClustersServer).Profiles(ctx, req.(*ClusterProfilesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Clusters_Config_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClusterConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClustersServer).Config(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Clusters_Config_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClustersServer).Config(ctx, req.(*ClusterConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Clusters_CIDR_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ClusterCIDRRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClustersServer).CIDR(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Clusters_CIDR_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClustersServer).CIDR(ctx, req.(*ClusterCIDRRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Clusters_ServiceDesc is the grpc.ServiceDesc for Clusters service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Clusters_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.Clusters", + HandlerType: (*ClustersServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Create", + Handler: _Clusters_Create_Handler, + }, + { + MethodName: "Delete", + Handler: _Clusters_Delete_Handler, + }, + { + MethodName: "Discover", + Handler: _Clusters_Discover_Handler, + }, + { + MethodName: "List", + Handler: _Clusters_List_Handler, + }, + { + MethodName: "Update", + Handler: _Clusters_Update_Handler, + }, + { + MethodName: "Profiles", + Handler: _Clusters_Profiles_Handler, + }, + { + MethodName: "Config", + Handler: _Clusters_Config_Handler, + }, + { + MethodName: "CIDR", + Handler: _Clusters_CIDR_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cluster.platform.proto", +} diff --git a/proto/platform/tenant/v1/context.platform.pb.go b/proto/platform/tenant/v1/context.platform.pb.go new file mode 100644 index 00000000..e909684b --- /dev/null +++ b/proto/platform/tenant/v1/context.platform.pb.go @@ -0,0 +1,876 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: context.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RecordContext_Ancestry_Role int32 + +const ( + RecordContext_Ancestry_UNKNOWN RecordContext_Ancestry_Role = 0 + RecordContext_Ancestry_BASE RecordContext_Ancestry_Role = 1 + RecordContext_Ancestry_DERIVED RecordContext_Ancestry_Role = 2 +) + +// Enum value maps for RecordContext_Ancestry_Role. +var ( + RecordContext_Ancestry_Role_name = map[int32]string{ + 0: "UNKNOWN", + 1: "BASE", + 2: "DERIVED", + } + RecordContext_Ancestry_Role_value = map[string]int32{ + "UNKNOWN": 0, + "BASE": 1, + "DERIVED": 2, + } +) + +func (x RecordContext_Ancestry_Role) Enum() *RecordContext_Ancestry_Role { + p := new(RecordContext_Ancestry_Role) + *p = x + return p +} + +func (x RecordContext_Ancestry_Role) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RecordContext_Ancestry_Role) Descriptor() protoreflect.EnumDescriptor { + return file_context_platform_proto_enumTypes[0].Descriptor() +} + +func (RecordContext_Ancestry_Role) Type() protoreflect.EnumType { + return &file_context_platform_proto_enumTypes[0] +} + +func (x RecordContext_Ancestry_Role) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RecordContext_Ancestry_Role.Descriptor instead. +func (RecordContext_Ancestry_Role) EnumDescriptor() ([]byte, []int) { + return file_context_platform_proto_rawDescGZIP(), []int{0, 1, 0} +} + +type RecordContext_Variant_Role int32 + +const ( + RecordContext_Variant_UNKNOWN RecordContext_Variant_Role = 0 + RecordContext_Variant_INDEX RecordContext_Variant_Role = 1 + RecordContext_Variant_VARIANT RecordContext_Variant_Role = 2 +) + +// Enum value maps for RecordContext_Variant_Role. +var ( + RecordContext_Variant_Role_name = map[int32]string{ + 0: "UNKNOWN", + 1: "INDEX", + 2: "VARIANT", + } + RecordContext_Variant_Role_value = map[string]int32{ + "UNKNOWN": 0, + "INDEX": 1, + "VARIANT": 2, + } +) + +func (x RecordContext_Variant_Role) Enum() *RecordContext_Variant_Role { + p := new(RecordContext_Variant_Role) + *p = x + return p +} + +func (x RecordContext_Variant_Role) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RecordContext_Variant_Role) Descriptor() protoreflect.EnumDescriptor { + return file_context_platform_proto_enumTypes[1].Descriptor() +} + +func (RecordContext_Variant_Role) Type() protoreflect.EnumType { + return &file_context_platform_proto_enumTypes[1] +} + +func (x RecordContext_Variant_Role) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RecordContext_Variant_Role.Descriptor instead. +func (RecordContext_Variant_Role) EnumDescriptor() ([]byte, []int) { + return file_context_platform_proto_rawDescGZIP(), []int{0, 2, 0} +} + +type RecordContext struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The RecordContext UIDP at which this RecordContext resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name of the RecordContext. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // a short description of this RecordContext. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // last_seen tracks the timestamp at which this RecordContext was last seen. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + // Types that are assignable to Kind: + // + // *RecordContext_Workload_ + // *RecordContext_Ancestry_ + // *RecordContext_Variant_ + Kind isRecordContext_Kind `protobuf_oneof:"kind"` +} + +func (x *RecordContext) Reset() { + *x = RecordContext{} + if protoimpl.UnsafeEnabled { + mi := &file_context_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordContext) ProtoMessage() {} + +func (x *RecordContext) ProtoReflect() protoreflect.Message { + mi := &file_context_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordContext.ProtoReflect.Descriptor instead. +func (*RecordContext) Descriptor() ([]byte, []int) { + return file_context_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *RecordContext) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RecordContext) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RecordContext) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *RecordContext) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (m *RecordContext) GetKind() isRecordContext_Kind { + if m != nil { + return m.Kind + } + return nil +} + +func (x *RecordContext) GetWorkload() *RecordContext_Workload { + if x, ok := x.GetKind().(*RecordContext_Workload_); ok { + return x.Workload + } + return nil +} + +func (x *RecordContext) GetAncestry() *RecordContext_Ancestry { + if x, ok := x.GetKind().(*RecordContext_Ancestry_); ok { + return x.Ancestry + } + return nil +} + +func (x *RecordContext) GetVariant() *RecordContext_Variant { + if x, ok := x.GetKind().(*RecordContext_Variant_); ok { + return x.Variant + } + return nil +} + +type isRecordContext_Kind interface { + isRecordContext_Kind() +} + +type RecordContext_Workload_ struct { + Workload *RecordContext_Workload `protobuf:"bytes,100,opt,name=workload,proto3,oneof"` +} + +type RecordContext_Ancestry_ struct { + Ancestry *RecordContext_Ancestry `protobuf:"bytes,101,opt,name=ancestry,proto3,oneof"` +} + +type RecordContext_Variant_ struct { + Variant *RecordContext_Variant `protobuf:"bytes,102,opt,name=variant,proto3,oneof"` +} + +func (*RecordContext_Workload_) isRecordContext_Kind() {} + +func (*RecordContext_Ancestry_) isRecordContext_Kind() {} + +func (*RecordContext_Variant_) isRecordContext_Kind() {} + +type RecordContextList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*RecordContext `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *RecordContextList) Reset() { + *x = RecordContextList{} + if protoimpl.UnsafeEnabled { + mi := &file_context_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordContextList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordContextList) ProtoMessage() {} + +func (x *RecordContextList) ProtoReflect() protoreflect.Message { + mi := &file_context_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordContextList.ProtoReflect.Descriptor instead. +func (*RecordContextList) Descriptor() ([]byte, []int) { + return file_context_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *RecordContextList) GetItems() []*RecordContext { + if x != nil { + return x.Items + } + return nil +} + +type RecordContextFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` + // active_since is the timestamp after which the records should + // have last been observed in the returned context. + ActiveSince *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` + // Allow filtering results based on matching fields in the context + // ranging from just a particular "kind" to the exact workload shape. + // Only specified fields will be used as part of the match. + // + // Types that are assignable to Kind: + // + // *RecordContextFilter_Workload + // *RecordContextFilter_Ancestry + // *RecordContextFilter_Variant + Kind isRecordContextFilter_Kind `protobuf_oneof:"kind"` +} + +func (x *RecordContextFilter) Reset() { + *x = RecordContextFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_context_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordContextFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordContextFilter) ProtoMessage() {} + +func (x *RecordContextFilter) ProtoReflect() protoreflect.Message { + mi := &file_context_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordContextFilter.ProtoReflect.Descriptor instead. +func (*RecordContextFilter) Descriptor() ([]byte, []int) { + return file_context_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *RecordContextFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *RecordContextFilter) GetActiveSince() *timestamppb.Timestamp { + if x != nil { + return x.ActiveSince + } + return nil +} + +func (m *RecordContextFilter) GetKind() isRecordContextFilter_Kind { + if m != nil { + return m.Kind + } + return nil +} + +func (x *RecordContextFilter) GetWorkload() *RecordContext_Workload { + if x, ok := x.GetKind().(*RecordContextFilter_Workload); ok { + return x.Workload + } + return nil +} + +func (x *RecordContextFilter) GetAncestry() *RecordContext_Ancestry { + if x, ok := x.GetKind().(*RecordContextFilter_Ancestry); ok { + return x.Ancestry + } + return nil +} + +func (x *RecordContextFilter) GetVariant() *RecordContext_Variant { + if x, ok := x.GetKind().(*RecordContextFilter_Variant); ok { + return x.Variant + } + return nil +} + +type isRecordContextFilter_Kind interface { + isRecordContextFilter_Kind() +} + +type RecordContextFilter_Workload struct { + Workload *RecordContext_Workload `protobuf:"bytes,100,opt,name=workload,proto3,oneof"` +} + +type RecordContextFilter_Ancestry struct { + Ancestry *RecordContext_Ancestry `protobuf:"bytes,101,opt,name=ancestry,proto3,oneof"` +} + +type RecordContextFilter_Variant struct { + Variant *RecordContext_Variant `protobuf:"bytes,102,opt,name=variant,proto3,oneof"` +} + +func (*RecordContextFilter_Workload) isRecordContextFilter_Kind() {} + +func (*RecordContextFilter_Ancestry) isRecordContextFilter_Kind() {} + +func (*RecordContextFilter_Variant) isRecordContextFilter_Kind() {} + +// Workload contexts are added to existence records that have been +// observed running on a cluster. +type RecordContext_Workload struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // remote_id is the metadata.uid of the workload in which this + // container was observed. + RemoteId string `protobuf:"bytes,1,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` +} + +func (x *RecordContext_Workload) Reset() { + *x = RecordContext_Workload{} + if protoimpl.UnsafeEnabled { + mi := &file_context_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordContext_Workload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordContext_Workload) ProtoMessage() {} + +func (x *RecordContext_Workload) ProtoReflect() protoreflect.Message { + mi := &file_context_platform_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 RecordContext_Workload.ProtoReflect.Descriptor instead. +func (*RecordContext_Workload) Descriptor() ([]byte, []int) { + return file_context_platform_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *RecordContext_Workload) GetRemoteId() string { + if x != nil { + return x.RemoteId + } + return "" +} + +// Ancestry relationships are added to records when a "base image" +// relationship has been uncovered. This context is added to BOTH +// records with their respective roles. The base image will get +// the Role BASE, and the derivative image will get the Role DERIVED. +type RecordContext_Ancestry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Role RecordContext_Ancestry_Role `protobuf:"varint,1,opt,name=role,proto3,enum=chainguard.platform.tenant.RecordContext_Ancestry_Role" json:"role,omitempty"` + // image_id holds the digest of the related image, which can be used + // to efficiently retrieve it's record. + ImageId string `protobuf:"bytes,2,opt,name=image_id,json=imageId,proto3" json:"image_id,omitempty"` +} + +func (x *RecordContext_Ancestry) Reset() { + *x = RecordContext_Ancestry{} + if protoimpl.UnsafeEnabled { + mi := &file_context_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordContext_Ancestry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordContext_Ancestry) ProtoMessage() {} + +func (x *RecordContext_Ancestry) ProtoReflect() protoreflect.Message { + mi := &file_context_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordContext_Ancestry.ProtoReflect.Descriptor instead. +func (*RecordContext_Ancestry) Descriptor() ([]byte, []int) { + return file_context_platform_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *RecordContext_Ancestry) GetRole() RecordContext_Ancestry_Role { + if x != nil { + return x.Role + } + return RecordContext_Ancestry_UNKNOWN +} + +func (x *RecordContext_Ancestry) GetImageId() string { + if x != nil { + return x.ImageId + } + return "" +} + +// Variant relationships are added to records when we find an "index" +// containing multiple different variations (typically os/arch) of the +// same logical image. These are referred to as "OCI Image Index", +// "Docker Manifest List", and occasionally "fat images". This context +// is added to ALL records including the INDEX and all VARIANTs of that +// index. The INDEX will typically contain N contexts carrying the Role +// INDEX, the id of the VARIANT's record, and the version information +// that discriminates that VARIANT from other VARIANTs. The VARIANT +// will typically (but not always!) contain 1 context carrying the Role +// VARIANT, the id of the INDEX's record, and the version information +// that discriminates it among the other VARIANTs in the INDEX. +type RecordContext_Variant struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Role RecordContext_Variant_Role `protobuf:"varint,1,opt,name=role,proto3,enum=chainguard.platform.tenant.RecordContext_Variant_Role" json:"role,omitempty"` + // image_id holds the digest of the related image, which can be used + // to efficiently retrieve it's record. + ImageId string `protobuf:"bytes,2,opt,name=image_id,json=imageId,proto3" json:"image_id,omitempty"` + // The version information distinguishing this variant + // from other possible variants of the index. + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *RecordContext_Variant) Reset() { + *x = RecordContext_Variant{} + if protoimpl.UnsafeEnabled { + mi := &file_context_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordContext_Variant) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordContext_Variant) ProtoMessage() {} + +func (x *RecordContext_Variant) ProtoReflect() protoreflect.Message { + mi := &file_context_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordContext_Variant.ProtoReflect.Descriptor instead. +func (*RecordContext_Variant) Descriptor() ([]byte, []int) { + return file_context_platform_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *RecordContext_Variant) GetRole() RecordContext_Variant_Role { + if x != nil { + return x.Role + } + return RecordContext_Variant_UNKNOWN +} + +func (x *RecordContext_Variant) GetImageId() string { + if x != nil { + return x.ImageId + } + return "" +} + +func (x *RecordContext_Variant) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +var File_context_platform_proto protoreflect.FileDescriptor + +var file_context_platform_proto_rawDesc = []byte{ + 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, + 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8d, 0x06, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, + 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, + 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x50, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x08, + 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x50, 0x0a, 0x08, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x74, 0x72, 0x79, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x48, 0x00, + 0x52, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x12, 0x4d, 0x0a, 0x07, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x1a, 0x27, 0x0a, 0x08, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x49, 0x64, 0x1a, 0x9e, 0x01, 0x0a, 0x08, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x12, + 0x4b, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x42, 0x41, 0x53, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x52, 0x49, 0x56, 0x45, + 0x44, 0x10, 0x02, 0x1a, 0xb7, 0x01, 0x0a, 0x07, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, + 0x4a, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, + 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x2b, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x49, 0x41, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x06, 0x0a, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x54, 0x0a, 0x11, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x8b, 0x03, 0x0a, 0x13, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, + 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, + 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x50, + 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x12, 0x50, 0x0a, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x18, 0x65, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, 0x6e, + 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, + 0x72, 0x79, 0x12, 0x4d, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x66, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, + 0x74, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x32, 0x88, 0x01, 0x0a, 0x0e, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x12, 0x76, 0x0a, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, + 0xe5, 0x04, 0x10, 0x01, 0x42, 0x78, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x20, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, + 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_context_platform_proto_rawDescOnce sync.Once + file_context_platform_proto_rawDescData = file_context_platform_proto_rawDesc +) + +func file_context_platform_proto_rawDescGZIP() []byte { + file_context_platform_proto_rawDescOnce.Do(func() { + file_context_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_context_platform_proto_rawDescData) + }) + return file_context_platform_proto_rawDescData +} + +var file_context_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_context_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_context_platform_proto_goTypes = []interface{}{ + (RecordContext_Ancestry_Role)(0), // 0: chainguard.platform.tenant.RecordContext.Ancestry.Role + (RecordContext_Variant_Role)(0), // 1: chainguard.platform.tenant.RecordContext.Variant.Role + (*RecordContext)(nil), // 2: chainguard.platform.tenant.RecordContext + (*RecordContextList)(nil), // 3: chainguard.platform.tenant.RecordContextList + (*RecordContextFilter)(nil), // 4: chainguard.platform.tenant.RecordContextFilter + (*RecordContext_Workload)(nil), // 5: chainguard.platform.tenant.RecordContext.Workload + (*RecordContext_Ancestry)(nil), // 6: chainguard.platform.tenant.RecordContext.Ancestry + (*RecordContext_Variant)(nil), // 7: chainguard.platform.tenant.RecordContext.Variant + (*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 9: chainguard.platform.common.UIDPFilter +} +var file_context_platform_proto_depIdxs = []int32{ + 8, // 0: chainguard.platform.tenant.RecordContext.last_seen:type_name -> google.protobuf.Timestamp + 5, // 1: chainguard.platform.tenant.RecordContext.workload:type_name -> chainguard.platform.tenant.RecordContext.Workload + 6, // 2: chainguard.platform.tenant.RecordContext.ancestry:type_name -> chainguard.platform.tenant.RecordContext.Ancestry + 7, // 3: chainguard.platform.tenant.RecordContext.variant:type_name -> chainguard.platform.tenant.RecordContext.Variant + 2, // 4: chainguard.platform.tenant.RecordContextList.items:type_name -> chainguard.platform.tenant.RecordContext + 9, // 5: chainguard.platform.tenant.RecordContextFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 8, // 6: chainguard.platform.tenant.RecordContextFilter.active_since:type_name -> google.protobuf.Timestamp + 5, // 7: chainguard.platform.tenant.RecordContextFilter.workload:type_name -> chainguard.platform.tenant.RecordContext.Workload + 6, // 8: chainguard.platform.tenant.RecordContextFilter.ancestry:type_name -> chainguard.platform.tenant.RecordContext.Ancestry + 7, // 9: chainguard.platform.tenant.RecordContextFilter.variant:type_name -> chainguard.platform.tenant.RecordContext.Variant + 0, // 10: chainguard.platform.tenant.RecordContext.Ancestry.role:type_name -> chainguard.platform.tenant.RecordContext.Ancestry.Role + 1, // 11: chainguard.platform.tenant.RecordContext.Variant.role:type_name -> chainguard.platform.tenant.RecordContext.Variant.Role + 4, // 12: chainguard.platform.tenant.RecordContexts.List:input_type -> chainguard.platform.tenant.RecordContextFilter + 3, // 13: chainguard.platform.tenant.RecordContexts.List:output_type -> chainguard.platform.tenant.RecordContextList + 13, // [13:14] is the sub-list for method output_type + 12, // [12:13] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name +} + +func init() { file_context_platform_proto_init() } +func file_context_platform_proto_init() { + if File_context_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_context_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordContext); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_context_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordContextList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_context_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordContextFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_context_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordContext_Workload); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_context_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordContext_Ancestry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_context_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordContext_Variant); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_context_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*RecordContext_Workload_)(nil), + (*RecordContext_Ancestry_)(nil), + (*RecordContext_Variant_)(nil), + } + file_context_platform_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*RecordContextFilter_Workload)(nil), + (*RecordContextFilter_Ancestry)(nil), + (*RecordContextFilter_Variant)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_context_platform_proto_rawDesc, + NumEnums: 2, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_context_platform_proto_goTypes, + DependencyIndexes: file_context_platform_proto_depIdxs, + EnumInfos: file_context_platform_proto_enumTypes, + MessageInfos: file_context_platform_proto_msgTypes, + }.Build() + File_context_platform_proto = out.File + file_context_platform_proto_rawDesc = nil + file_context_platform_proto_goTypes = nil + file_context_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/context.platform.proto b/proto/platform/tenant/v1/context.platform.proto new file mode 100644 index 00000000..b16427b9 --- /dev/null +++ b/proto/platform/tenant/v1/context.platform.proto @@ -0,0 +1,119 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantRecordContextProto"; + +package chainguard.platform.tenant; + +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service RecordContexts { + rpc List(RecordContextFilter) returns (RecordContextList) { + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_RECORD_CONTEXTS_LIST] + unscoped: true + } + }; + } +} + +message RecordContext { + // id, The RecordContext UIDP at which this RecordContext resides. + string id = 1; + + // name of the RecordContext. + string name = 2; + + // a short description of this RecordContext. + string description = 3; + + // last_seen tracks the timestamp at which this RecordContext was last seen. + google.protobuf.Timestamp last_seen = 4; + + oneof kind { + Workload workload = 100; + Ancestry ancestry = 101; + Variant variant = 102; + } + + // Workload contexts are added to existence records that have been + // observed running on a cluster. + message Workload { + // remote_id is the metadata.uid of the workload in which this + // container was observed. + string remote_id = 1; + } + + // Ancestry relationships are added to records when a "base image" + // relationship has been uncovered. This context is added to BOTH + // records with their respective roles. The base image will get + // the Role BASE, and the derivative image will get the Role DERIVED. + message Ancestry { + Role role = 1; + + // image_id holds the digest of the related image, which can be used + // to efficiently retrieve it's record. + string image_id = 2; + + enum Role { + UNKNOWN = 0; + BASE = 1; + DERIVED = 2; + } + } + + // Variant relationships are added to records when we find an "index" + // containing multiple different variations (typically os/arch) of the + // same logical image. These are referred to as "OCI Image Index", + // "Docker Manifest List", and occasionally "fat images". This context + // is added to ALL records including the INDEX and all VARIANTs of that + // index. The INDEX will typically contain N contexts carrying the Role + // INDEX, the id of the VARIANT's record, and the version information + // that discriminates that VARIANT from other VARIANTs. The VARIANT + // will typically (but not always!) contain 1 context carrying the Role + // VARIANT, the id of the INDEX's record, and the version information + // that discriminates it among the other VARIANTs in the INDEX. + message Variant { + Role role = 1; + + // image_id holds the digest of the related image, which can be used + // to efficiently retrieve it's record. + string image_id = 2; + + // The version information distinguishing this variant + // from other possible variants of the index. + string version = 3; + + enum Role { + UNKNOWN = 0; + INDEX = 1; + VARIANT = 2; + } + } +} + +message RecordContextList { + repeated RecordContext items = 1; +} + +message RecordContextFilter { + chainguard.platform.common.UIDPFilter uidp = 1; + + // active_since is the timestamp after which the records should + // have last been observed in the returned context. + google.protobuf.Timestamp active_since = 2; + + // Allow filtering results based on matching fields in the context + // ranging from just a particular "kind" to the exact workload shape. + // Only specified fields will be used as part of the match. + oneof kind { + RecordContext.Workload workload = 100; + RecordContext.Ancestry ancestry = 101; + RecordContext.Variant variant = 102; + } +} diff --git a/proto/platform/tenant/v1/context.platform_grpc.pb.go b/proto/platform/tenant/v1/context.platform_grpc.pb.go new file mode 100644 index 00000000..41ca8f95 --- /dev/null +++ b/proto/platform/tenant/v1/context.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: context.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + RecordContexts_List_FullMethodName = "/chainguard.platform.tenant.RecordContexts/List" +) + +// RecordContextsClient is the client API for RecordContexts service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type RecordContextsClient interface { + List(ctx context.Context, in *RecordContextFilter, opts ...grpc.CallOption) (*RecordContextList, error) +} + +type recordContextsClient struct { + cc grpc.ClientConnInterface +} + +func NewRecordContextsClient(cc grpc.ClientConnInterface) RecordContextsClient { + return &recordContextsClient{cc} +} + +func (c *recordContextsClient) List(ctx context.Context, in *RecordContextFilter, opts ...grpc.CallOption) (*RecordContextList, error) { + out := new(RecordContextList) + err := c.cc.Invoke(ctx, RecordContexts_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RecordContextsServer is the server API for RecordContexts service. +// All implementations must embed UnimplementedRecordContextsServer +// for forward compatibility +type RecordContextsServer interface { + List(context.Context, *RecordContextFilter) (*RecordContextList, error) + mustEmbedUnimplementedRecordContextsServer() +} + +// UnimplementedRecordContextsServer must be embedded to have forward compatible implementations. +type UnimplementedRecordContextsServer struct { +} + +func (UnimplementedRecordContextsServer) List(context.Context, *RecordContextFilter) (*RecordContextList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedRecordContextsServer) mustEmbedUnimplementedRecordContextsServer() {} + +// UnsafeRecordContextsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RecordContextsServer will +// result in compilation errors. +type UnsafeRecordContextsServer interface { + mustEmbedUnimplementedRecordContextsServer() +} + +func RegisterRecordContextsServer(s grpc.ServiceRegistrar, srv RecordContextsServer) { + s.RegisterService(&RecordContexts_ServiceDesc, srv) +} + +func _RecordContexts_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RecordContextFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RecordContextsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: RecordContexts_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RecordContextsServer).List(ctx, req.(*RecordContextFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// RecordContexts_ServiceDesc is the grpc.ServiceDesc for RecordContexts service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var RecordContexts_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.RecordContexts", + HandlerType: (*RecordContextsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _RecordContexts_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "context.platform.proto", +} diff --git a/proto/platform/tenant/v1/doc.go b/proto/platform/tenant/v1/doc.go new file mode 100644 index 00000000..9441336f --- /dev/null +++ b/proto/platform/tenant/v1/doc.go @@ -0,0 +1,21 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package v1 contains the v1 GRPC client and server definitions +// for implementing Tenant interactions for the Console. +// +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. cluster.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative context.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative node.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative namespace.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative policy_results.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative signature.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative workload.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. record.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. risk.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. sbom.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. vuln.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. attestation.platform.proto +package v1 diff --git a/proto/platform/tenant/v1/namespace.platform.pb.go b/proto/platform/tenant/v1/namespace.platform.pb.go new file mode 100644 index 00000000..7653afcc --- /dev/null +++ b/proto/platform/tenant/v1/namespace.platform.pb.go @@ -0,0 +1,395 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: namespace.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Namespace struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The Namespace UIDP at which this Namespace resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name of the Namespace. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // a short description of this Namespace. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // remote_id is the remote ID of this Namespace. + RemoteId string `protobuf:"bytes,4,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` + Labels string `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` + // last_seen tracks the timestamp at which this namespace was last seen. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` +} + +func (x *Namespace) Reset() { + *x = Namespace{} + if protoimpl.UnsafeEnabled { + mi := &file_namespace_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Namespace) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Namespace) ProtoMessage() {} + +func (x *Namespace) ProtoReflect() protoreflect.Message { + mi := &file_namespace_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Namespace.ProtoReflect.Descriptor instead. +func (*Namespace) Descriptor() ([]byte, []int) { + return file_namespace_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Namespace) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Namespace) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Namespace) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Namespace) GetRemoteId() string { + if x != nil { + return x.RemoteId + } + return "" +} + +func (x *Namespace) GetLabels() string { + if x != nil { + return x.Labels + } + return "" +} + +func (x *Namespace) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +type NamespaceList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Namespace `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *NamespaceList) Reset() { + *x = NamespaceList{} + if protoimpl.UnsafeEnabled { + mi := &file_namespace_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamespaceList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamespaceList) ProtoMessage() {} + +func (x *NamespaceList) ProtoReflect() protoreflect.Message { + mi := &file_namespace_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamespaceList.ProtoReflect.Descriptor instead. +func (*NamespaceList) Descriptor() ([]byte, []int) { + return file_namespace_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *NamespaceList) GetItems() []*Namespace { + if x != nil { + return x.Items + } + return nil +} + +type NamespaceFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // remote_id is the remote ID of this Namespace. + RemoteId string `protobuf:"bytes,2,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` + // active_since is the timestamp after which returned namespaces + // should have been active (last seen). + ActiveSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` + // name filters on the resource name. + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Uidp *v1.UIDPFilter `protobuf:"bytes,100,opt,name=uidp,proto3" json:"uidp,omitempty"` +} + +func (x *NamespaceFilter) Reset() { + *x = NamespaceFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_namespace_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamespaceFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamespaceFilter) ProtoMessage() {} + +func (x *NamespaceFilter) ProtoReflect() protoreflect.Message { + mi := &file_namespace_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamespaceFilter.ProtoReflect.Descriptor instead. +func (*NamespaceFilter) Descriptor() ([]byte, []int) { + return file_namespace_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *NamespaceFilter) GetRemoteId() string { + if x != nil { + return x.RemoteId + } + return "" +} + +func (x *NamespaceFilter) GetActiveSince() *timestamppb.Timestamp { + if x != nil { + return x.ActiveSince + } + return nil +} + +func (x *NamespaceFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamespaceFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +var File_namespace_platform_proto protoreflect.FileDescriptor + +var file_namespace_platform_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbf, 0x01, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x22, 0x4c, 0x0a, 0x0d, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xbd, 0x01, 0x0a, 0x0f, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x75, + 0x69, 0x64, 0x70, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x32, 0x7c, 0x0a, 0x0a, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x6e, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, + 0x02, 0xcf, 0x08, 0x10, 0x01, 0x42, 0x74, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1c, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, + 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_namespace_platform_proto_rawDescOnce sync.Once + file_namespace_platform_proto_rawDescData = file_namespace_platform_proto_rawDesc +) + +func file_namespace_platform_proto_rawDescGZIP() []byte { + file_namespace_platform_proto_rawDescOnce.Do(func() { + file_namespace_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_namespace_platform_proto_rawDescData) + }) + return file_namespace_platform_proto_rawDescData +} + +var file_namespace_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_namespace_platform_proto_goTypes = []interface{}{ + (*Namespace)(nil), // 0: chainguard.platform.tenant.Namespace + (*NamespaceList)(nil), // 1: chainguard.platform.tenant.NamespaceList + (*NamespaceFilter)(nil), // 2: chainguard.platform.tenant.NamespaceFilter + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 4: chainguard.platform.common.UIDPFilter +} +var file_namespace_platform_proto_depIdxs = []int32{ + 3, // 0: chainguard.platform.tenant.Namespace.last_seen:type_name -> google.protobuf.Timestamp + 0, // 1: chainguard.platform.tenant.NamespaceList.items:type_name -> chainguard.platform.tenant.Namespace + 3, // 2: chainguard.platform.tenant.NamespaceFilter.active_since:type_name -> google.protobuf.Timestamp + 4, // 3: chainguard.platform.tenant.NamespaceFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 2, // 4: chainguard.platform.tenant.Namespaces.List:input_type -> chainguard.platform.tenant.NamespaceFilter + 1, // 5: chainguard.platform.tenant.Namespaces.List:output_type -> chainguard.platform.tenant.NamespaceList + 5, // [5:6] is the sub-list for method output_type + 4, // [4:5] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_namespace_platform_proto_init() } +func file_namespace_platform_proto_init() { + if File_namespace_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_namespace_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Namespace); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_namespace_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamespaceList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_namespace_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamespaceFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_namespace_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_namespace_platform_proto_goTypes, + DependencyIndexes: file_namespace_platform_proto_depIdxs, + MessageInfos: file_namespace_platform_proto_msgTypes, + }.Build() + File_namespace_platform_proto = out.File + file_namespace_platform_proto_rawDesc = nil + file_namespace_platform_proto_goTypes = nil + file_namespace_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/namespace.platform.proto b/proto/platform/tenant/v1/namespace.platform.proto new file mode 100644 index 00000000..0b86141a --- /dev/null +++ b/proto/platform/tenant/v1/namespace.platform.proto @@ -0,0 +1,61 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantNamespaceProto"; + +package chainguard.platform.tenant; + +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Namespaces { + rpc List(NamespaceFilter) returns (NamespaceList) { + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_NAMESPACES_LIST] + unscoped: true + } + }; + } +} + +message Namespace { + // id, The Namespace UIDP at which this Namespace resides. + string id = 1; + + // name of the Namespace. + string name = 2; + + // a short description of this Namespace. + string description = 3; + + // remote_id is the remote ID of this Namespace. + string remote_id = 4; + + string labels = 5; + + // last_seen tracks the timestamp at which this namespace was last seen. + google.protobuf.Timestamp last_seen = 6; +} + +message NamespaceList { + repeated Namespace items = 1; +} + +message NamespaceFilter { + // remote_id is the remote ID of this Namespace. + string remote_id = 2; + + // active_since is the timestamp after which returned namespaces + // should have been active (last seen). + google.protobuf.Timestamp active_since = 3; + + // name filters on the resource name. + string name = 4; + + + chainguard.platform.common.UIDPFilter uidp = 100; +} diff --git a/proto/platform/tenant/v1/namespace.platform_grpc.pb.go b/proto/platform/tenant/v1/namespace.platform_grpc.pb.go new file mode 100644 index 00000000..178382e7 --- /dev/null +++ b/proto/platform/tenant/v1/namespace.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: namespace.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Namespaces_List_FullMethodName = "/chainguard.platform.tenant.Namespaces/List" +) + +// NamespacesClient is the client API for Namespaces service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type NamespacesClient interface { + List(ctx context.Context, in *NamespaceFilter, opts ...grpc.CallOption) (*NamespaceList, error) +} + +type namespacesClient struct { + cc grpc.ClientConnInterface +} + +func NewNamespacesClient(cc grpc.ClientConnInterface) NamespacesClient { + return &namespacesClient{cc} +} + +func (c *namespacesClient) List(ctx context.Context, in *NamespaceFilter, opts ...grpc.CallOption) (*NamespaceList, error) { + out := new(NamespaceList) + err := c.cc.Invoke(ctx, Namespaces_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// NamespacesServer is the server API for Namespaces service. +// All implementations must embed UnimplementedNamespacesServer +// for forward compatibility +type NamespacesServer interface { + List(context.Context, *NamespaceFilter) (*NamespaceList, error) + mustEmbedUnimplementedNamespacesServer() +} + +// UnimplementedNamespacesServer must be embedded to have forward compatible implementations. +type UnimplementedNamespacesServer struct { +} + +func (UnimplementedNamespacesServer) List(context.Context, *NamespaceFilter) (*NamespaceList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedNamespacesServer) mustEmbedUnimplementedNamespacesServer() {} + +// UnsafeNamespacesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to NamespacesServer will +// result in compilation errors. +type UnsafeNamespacesServer interface { + mustEmbedUnimplementedNamespacesServer() +} + +func RegisterNamespacesServer(s grpc.ServiceRegistrar, srv NamespacesServer) { + s.RegisterService(&Namespaces_ServiceDesc, srv) +} + +func _Namespaces_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NamespaceFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NamespacesServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Namespaces_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NamespacesServer).List(ctx, req.(*NamespaceFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// Namespaces_ServiceDesc is the grpc.ServiceDesc for Namespaces service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Namespaces_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.Namespaces", + HandlerType: (*NamespacesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _Namespaces_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "namespace.platform.proto", +} diff --git a/proto/platform/tenant/v1/node.platform.pb.go b/proto/platform/tenant/v1/node.platform.pb.go new file mode 100644 index 00000000..e5a3eb90 --- /dev/null +++ b/proto/platform/tenant/v1/node.platform.pb.go @@ -0,0 +1,499 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: node.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Node struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The Node UIDP at which this Node resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name of the Node. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // a short description of this Node. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // remote_id is the remote ID of this Node. + RemoteId string `protobuf:"bytes,4,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` + Labels string `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` + // last_seen tracks the timestamp at which this node was last seen. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + // Platform/Architecture-level information (10+) + OperatingSystem string `protobuf:"bytes,10,opt,name=operating_system,json=operatingSystem,proto3" json:"operating_system,omitempty"` + Architecture string `protobuf:"bytes,11,opt,name=architecture,proto3" json:"architecture,omitempty"` + // Assorted versions (20+) + KubeletVersion string `protobuf:"bytes,20,opt,name=kubelet_version,json=kubeletVersion,proto3" json:"kubelet_version,omitempty"` + ContainerRuntimeVersion string `protobuf:"bytes,21,opt,name=container_runtime_version,json=containerRuntimeVersion,proto3" json:"container_runtime_version,omitempty"` + KernelVersion string `protobuf:"bytes,22,opt,name=kernel_version,json=kernelVersion,proto3" json:"kernel_version,omitempty"` + // Node capacity information (30+) + CpuCapacity string `protobuf:"bytes,30,opt,name=cpu_capacity,json=cpuCapacity,proto3" json:"cpu_capacity,omitempty"` + MemoryCapacity string `protobuf:"bytes,31,opt,name=memory_capacity,json=memoryCapacity,proto3" json:"memory_capacity,omitempty"` + PodCapacity string `protobuf:"bytes,32,opt,name=pod_capacity,json=podCapacity,proto3" json:"pod_capacity,omitempty"` + // Location information (40+) + Zone string `protobuf:"bytes,40,opt,name=zone,proto3" json:"zone,omitempty"` + Region string `protobuf:"bytes,41,opt,name=region,proto3" json:"region,omitempty"` +} + +func (x *Node) Reset() { + *x = Node{} + if protoimpl.UnsafeEnabled { + mi := &file_node_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Node) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Node) ProtoMessage() {} + +func (x *Node) ProtoReflect() protoreflect.Message { + mi := &file_node_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Node.ProtoReflect.Descriptor instead. +func (*Node) Descriptor() ([]byte, []int) { + return file_node_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Node) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Node) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Node) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Node) GetRemoteId() string { + if x != nil { + return x.RemoteId + } + return "" +} + +func (x *Node) GetLabels() string { + if x != nil { + return x.Labels + } + return "" +} + +func (x *Node) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (x *Node) GetOperatingSystem() string { + if x != nil { + return x.OperatingSystem + } + return "" +} + +func (x *Node) GetArchitecture() string { + if x != nil { + return x.Architecture + } + return "" +} + +func (x *Node) GetKubeletVersion() string { + if x != nil { + return x.KubeletVersion + } + return "" +} + +func (x *Node) GetContainerRuntimeVersion() string { + if x != nil { + return x.ContainerRuntimeVersion + } + return "" +} + +func (x *Node) GetKernelVersion() string { + if x != nil { + return x.KernelVersion + } + return "" +} + +func (x *Node) GetCpuCapacity() string { + if x != nil { + return x.CpuCapacity + } + return "" +} + +func (x *Node) GetMemoryCapacity() string { + if x != nil { + return x.MemoryCapacity + } + return "" +} + +func (x *Node) GetPodCapacity() string { + if x != nil { + return x.PodCapacity + } + return "" +} + +func (x *Node) GetZone() string { + if x != nil { + return x.Zone + } + return "" +} + +func (x *Node) GetRegion() string { + if x != nil { + return x.Region + } + return "" +} + +type NodeList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Node `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *NodeList) Reset() { + *x = NodeList{} + if protoimpl.UnsafeEnabled { + mi := &file_node_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeList) ProtoMessage() {} + +func (x *NodeList) ProtoReflect() protoreflect.Message { + mi := &file_node_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NodeList.ProtoReflect.Descriptor instead. +func (*NodeList) Descriptor() ([]byte, []int) { + return file_node_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *NodeList) GetItems() []*Node { + if x != nil { + return x.Items + } + return nil +} + +type NodeFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // remote_id is the remote ID of this Node. + RemoteId string `protobuf:"bytes,2,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` + // active_since is the timestamp after which returned nodes + // should have been active (last seen). + ActiveSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` + // name filters on the resource name. + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Uidp *v1.UIDPFilter `protobuf:"bytes,100,opt,name=uidp,proto3" json:"uidp,omitempty"` +} + +func (x *NodeFilter) Reset() { + *x = NodeFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_node_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeFilter) ProtoMessage() {} + +func (x *NodeFilter) ProtoReflect() protoreflect.Message { + mi := &file_node_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NodeFilter.ProtoReflect.Descriptor instead. +func (*NodeFilter) Descriptor() ([]byte, []int) { + return file_node_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *NodeFilter) GetRemoteId() string { + if x != nil { + return x.RemoteId + } + return "" +} + +func (x *NodeFilter) GetActiveSince() *timestamppb.Timestamp { + if x != nil { + return x.ActiveSince + } + return nil +} + +func (x *NodeFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NodeFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +var File_node_platform_proto protoreflect.FileDescriptor + +var file_node_platform_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, + 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xb0, 0x04, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, + 0x65, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, + 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, + 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x27, + 0x0a, 0x0f, 0x6b, 0x75, 0x62, 0x65, 0x6c, 0x65, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x75, 0x62, 0x65, 0x6c, 0x65, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6b, 0x65, 0x72, + 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x70, + 0x75, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x70, 0x75, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, + 0x0f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, + 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x43, 0x61, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6f, 0x64, 0x5f, 0x63, 0x61, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6f, + 0x64, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, + 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x22, 0x42, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x36, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x6f, + 0x64, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x0a, 0x4e, 0x6f, + 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, + 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, + 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, + 0x75, 0x69, 0x64, 0x70, 0x32, 0x6d, 0x0a, 0x05, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x64, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x24, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xeb, + 0x07, 0x10, 0x01, 0x42, 0x6f, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_node_platform_proto_rawDescOnce sync.Once + file_node_platform_proto_rawDescData = file_node_platform_proto_rawDesc +) + +func file_node_platform_proto_rawDescGZIP() []byte { + file_node_platform_proto_rawDescOnce.Do(func() { + file_node_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_node_platform_proto_rawDescData) + }) + return file_node_platform_proto_rawDescData +} + +var file_node_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_node_platform_proto_goTypes = []interface{}{ + (*Node)(nil), // 0: chainguard.platform.tenant.Node + (*NodeList)(nil), // 1: chainguard.platform.tenant.NodeList + (*NodeFilter)(nil), // 2: chainguard.platform.tenant.NodeFilter + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 4: chainguard.platform.common.UIDPFilter +} +var file_node_platform_proto_depIdxs = []int32{ + 3, // 0: chainguard.platform.tenant.Node.last_seen:type_name -> google.protobuf.Timestamp + 0, // 1: chainguard.platform.tenant.NodeList.items:type_name -> chainguard.platform.tenant.Node + 3, // 2: chainguard.platform.tenant.NodeFilter.active_since:type_name -> google.protobuf.Timestamp + 4, // 3: chainguard.platform.tenant.NodeFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 2, // 4: chainguard.platform.tenant.Nodes.List:input_type -> chainguard.platform.tenant.NodeFilter + 1, // 5: chainguard.platform.tenant.Nodes.List:output_type -> chainguard.platform.tenant.NodeList + 5, // [5:6] is the sub-list for method output_type + 4, // [4:5] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_node_platform_proto_init() } +func file_node_platform_proto_init() { + if File_node_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_node_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Node); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_node_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_node_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_node_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_node_platform_proto_goTypes, + DependencyIndexes: file_node_platform_proto_depIdxs, + MessageInfos: file_node_platform_proto_msgTypes, + }.Build() + File_node_platform_proto = out.File + file_node_platform_proto_rawDesc = nil + file_node_platform_proto_goTypes = nil + file_node_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/node.platform.proto b/proto/platform/tenant/v1/node.platform.proto new file mode 100644 index 00000000..5d50f5e0 --- /dev/null +++ b/proto/platform/tenant/v1/node.platform.proto @@ -0,0 +1,78 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantNodeProto"; + +package chainguard.platform.tenant; + +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Nodes { + rpc List(NodeFilter) returns (NodeList) { + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_NODES_LIST] + unscoped: true + } + }; + } +} + +message Node { + // id, The Node UIDP at which this Node resides. + string id = 1; + + // name of the Node. + string name = 2; + + // a short description of this Node. + string description = 3; + + // remote_id is the remote ID of this Node. + string remote_id = 4; + + string labels = 5; + + // last_seen tracks the timestamp at which this node was last seen. + google.protobuf.Timestamp last_seen = 6; + + // Platform/Architecture-level information (10+) + string operating_system = 10; + string architecture = 11; + + // Assorted versions (20+) + string kubelet_version = 20; + string container_runtime_version = 21; + string kernel_version = 22; + + // Node capacity information (30+) + string cpu_capacity = 30; + string memory_capacity = 31; + string pod_capacity = 32; + + // Location information (40+) + string zone = 40; + string region = 41; +} + +message NodeList { + repeated Node items = 1; +} + +message NodeFilter { + // remote_id is the remote ID of this Node. + string remote_id = 2; + + // active_since is the timestamp after which returned nodes + // should have been active (last seen). + google.protobuf.Timestamp active_since = 3; + + // name filters on the resource name. + string name = 4; + + chainguard.platform.common.UIDPFilter uidp = 100; +} diff --git a/proto/platform/tenant/v1/node.platform_grpc.pb.go b/proto/platform/tenant/v1/node.platform_grpc.pb.go new file mode 100644 index 00000000..96f45690 --- /dev/null +++ b/proto/platform/tenant/v1/node.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: node.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Nodes_List_FullMethodName = "/chainguard.platform.tenant.Nodes/List" +) + +// NodesClient is the client API for Nodes service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type NodesClient interface { + List(ctx context.Context, in *NodeFilter, opts ...grpc.CallOption) (*NodeList, error) +} + +type nodesClient struct { + cc grpc.ClientConnInterface +} + +func NewNodesClient(cc grpc.ClientConnInterface) NodesClient { + return &nodesClient{cc} +} + +func (c *nodesClient) List(ctx context.Context, in *NodeFilter, opts ...grpc.CallOption) (*NodeList, error) { + out := new(NodeList) + err := c.cc.Invoke(ctx, Nodes_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// NodesServer is the server API for Nodes service. +// All implementations must embed UnimplementedNodesServer +// for forward compatibility +type NodesServer interface { + List(context.Context, *NodeFilter) (*NodeList, error) + mustEmbedUnimplementedNodesServer() +} + +// UnimplementedNodesServer must be embedded to have forward compatible implementations. +type UnimplementedNodesServer struct { +} + +func (UnimplementedNodesServer) List(context.Context, *NodeFilter) (*NodeList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedNodesServer) mustEmbedUnimplementedNodesServer() {} + +// UnsafeNodesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to NodesServer will +// result in compilation errors. +type UnsafeNodesServer interface { + mustEmbedUnimplementedNodesServer() +} + +func RegisterNodesServer(s grpc.ServiceRegistrar, srv NodesServer) { + s.RegisterService(&Nodes_ServiceDesc, srv) +} + +func _Nodes_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(NodesServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Nodes_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(NodesServer).List(ctx, req.(*NodeFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// Nodes_ServiceDesc is the grpc.ServiceDesc for Nodes service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Nodes_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.Nodes", + HandlerType: (*NodesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _Nodes_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "node.platform.proto", +} diff --git a/proto/platform/tenant/v1/policy_results.platform.pb.go b/proto/platform/tenant/v1/policy_results.platform.pb.go new file mode 100644 index 00000000..2f395469 --- /dev/null +++ b/proto/platform/tenant/v1/policy_results.platform.pb.go @@ -0,0 +1,770 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: policy_results.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type PolicyResult_Result int32 + +const ( + PolicyResult_UNKNOWN PolicyResult_Result = 0 + // PASS represents when a policy evaluation completed without any + // diagnostics returned. + PolicyResult_PASS PolicyResult_Result = 1 + // WARN represents when a policy evaluation completed with warnings + // (e.g. the policy used mode: warn). + PolicyResult_WARN PolicyResult_Result = 2 + // FAIL represents when a policy evaluation completed with errors + // (e.g. the policy used mode: enforce). + PolicyResult_FAIL PolicyResult_Result = 3 +) + +// Enum value maps for PolicyResult_Result. +var ( + PolicyResult_Result_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PASS", + 2: "WARN", + 3: "FAIL", + } + PolicyResult_Result_value = map[string]int32{ + "UNKNOWN": 0, + "PASS": 1, + "WARN": 2, + "FAIL": 3, + } +) + +func (x PolicyResult_Result) Enum() *PolicyResult_Result { + p := new(PolicyResult_Result) + *p = x + return p +} + +func (x PolicyResult_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PolicyResult_Result) Descriptor() protoreflect.EnumDescriptor { + return file_policy_results_platform_proto_enumTypes[0].Descriptor() +} + +func (PolicyResult_Result) Type() protoreflect.EnumType { + return &file_policy_results_platform_proto_enumTypes[0] +} + +func (x PolicyResult_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PolicyResult_Result.Descriptor instead. +func (PolicyResult_Result) EnumDescriptor() ([]byte, []int) { + return file_policy_results_platform_proto_rawDescGZIP(), []int{0, 0} +} + +type PolicyResult_ParentType int32 + +const ( + PolicyResult_PARENT_TYPE_UNKNOWN PolicyResult_ParentType = 0 + PolicyResult_RECORD PolicyResult_ParentType = 1 + PolicyResult_RECORD_CONTEXT PolicyResult_ParentType = 2 + PolicyResult_WORKLOAD PolicyResult_ParentType = 3 +) + +// Enum value maps for PolicyResult_ParentType. +var ( + PolicyResult_ParentType_name = map[int32]string{ + 0: "PARENT_TYPE_UNKNOWN", + 1: "RECORD", + 2: "RECORD_CONTEXT", + 3: "WORKLOAD", + } + PolicyResult_ParentType_value = map[string]int32{ + "PARENT_TYPE_UNKNOWN": 0, + "RECORD": 1, + "RECORD_CONTEXT": 2, + "WORKLOAD": 3, + } +) + +func (x PolicyResult_ParentType) Enum() *PolicyResult_ParentType { + p := new(PolicyResult_ParentType) + *p = x + return p +} + +func (x PolicyResult_ParentType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PolicyResult_ParentType) Descriptor() protoreflect.EnumDescriptor { + return file_policy_results_platform_proto_enumTypes[1].Descriptor() +} + +func (PolicyResult_ParentType) Type() protoreflect.EnumType { + return &file_policy_results_platform_proto_enumTypes[1] +} + +func (x PolicyResult_ParentType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PolicyResult_ParentType.Descriptor instead. +func (PolicyResult_ParentType) EnumDescriptor() ([]byte, []int) { + return file_policy_results_platform_proto_rawDescGZIP(), []int{0, 1} +} + +type PolicyResult struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The PolicyResult UIDP at which this PolicyResult resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name of the PolicyResult. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // a short description of this PolicyResult. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // policy_id is the metadata.uid of the Policy this result captures an evaluation of. + PolicyId string `protobuf:"bytes,4,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` + // version is the metadata.resourceVersion of the Policy this result captures an evaluation of. + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` + // last_checked tracks the timestamp at which this policy result was last checked. + LastChecked *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_checked,json=lastChecked,proto3" json:"last_checked,omitempty"` + // result holds the result of this policy evaluation. + Result PolicyResult_Result `protobuf:"varint,7,opt,name=result,proto3,enum=chainguard.platform.tenant.PolicyResult_Result" json:"result,omitempty"` + // diagnostic holds the diagnostic message associated with the result of this policy evaluation. + Diagnostic string `protobuf:"bytes,8,opt,name=diagnostic,proto3" json:"diagnostic,omitempty"` + // This loosely tracks the policy-controller's PolicyResult type found here: + // https://github.com/sigstore/policy-controller/blob/f777dcc2e/pkg/webhook/validator_result.go + AuthorityMatches map[string]*PolicyResult_AuthorityMatch `protobuf:"bytes,9,rep,name=authority_matches,json=authorityMatches,proto3" json:"authority_matches,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // parent_type, It is the parent type associated with the PolicyResult, can be Record, RecordContext or Workload. + ParentType PolicyResult_ParentType `protobuf:"varint,10,opt,name=parent_type,json=parentType,proto3,enum=chainguard.platform.tenant.PolicyResult_ParentType" json:"parent_type,omitempty"` +} + +func (x *PolicyResult) Reset() { + *x = PolicyResult{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_results_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyResult) ProtoMessage() {} + +func (x *PolicyResult) ProtoReflect() protoreflect.Message { + mi := &file_policy_results_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyResult.ProtoReflect.Descriptor instead. +func (*PolicyResult) Descriptor() ([]byte, []int) { + return file_policy_results_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *PolicyResult) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PolicyResult) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PolicyResult) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *PolicyResult) GetPolicyId() string { + if x != nil { + return x.PolicyId + } + return "" +} + +func (x *PolicyResult) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *PolicyResult) GetLastChecked() *timestamppb.Timestamp { + if x != nil { + return x.LastChecked + } + return nil +} + +func (x *PolicyResult) GetResult() PolicyResult_Result { + if x != nil { + return x.Result + } + return PolicyResult_UNKNOWN +} + +func (x *PolicyResult) GetDiagnostic() string { + if x != nil { + return x.Diagnostic + } + return "" +} + +func (x *PolicyResult) GetAuthorityMatches() map[string]*PolicyResult_AuthorityMatch { + if x != nil { + return x.AuthorityMatches + } + return nil +} + +func (x *PolicyResult) GetParentType() PolicyResult_ParentType { + if x != nil { + return x.ParentType + } + return PolicyResult_PARENT_TYPE_UNKNOWN +} + +type PolicyResultList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*PolicyResult `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *PolicyResultList) Reset() { + *x = PolicyResultList{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_results_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyResultList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyResultList) ProtoMessage() {} + +func (x *PolicyResultList) ProtoReflect() protoreflect.Message { + mi := &file_policy_results_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyResultList.ProtoReflect.Descriptor instead. +func (*PolicyResultList) Descriptor() ([]byte, []int) { + return file_policy_results_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *PolicyResultList) GetItems() []*PolicyResult { + if x != nil { + return x.Items + } + return nil +} + +type PolicyResultFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` + // checked_since is the timestamp after which the policy should + // have last been checked. + CheckedSince *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=checked_since,json=checkedSince,proto3" json:"checked_since,omitempty"` + // policy_id looks up evaluations of the policy identified by this metadata.uid + PolicyId string `protobuf:"bytes,3,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` + // results filters policy results with one of the provided result. + Results []PolicyResult_Result `protobuf:"varint,4,rep,packed,name=results,proto3,enum=chainguard.platform.tenant.PolicyResult_Result" json:"results,omitempty"` + // parent_type filters policy results with the provided parent_type. + ParentType PolicyResult_ParentType `protobuf:"varint,5,opt,name=parent_type,json=parentType,proto3,enum=chainguard.platform.tenant.PolicyResult_ParentType" json:"parent_type,omitempty"` +} + +func (x *PolicyResultFilter) Reset() { + *x = PolicyResultFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_results_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyResultFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyResultFilter) ProtoMessage() {} + +func (x *PolicyResultFilter) ProtoReflect() protoreflect.Message { + mi := &file_policy_results_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyResultFilter.ProtoReflect.Descriptor instead. +func (*PolicyResultFilter) Descriptor() ([]byte, []int) { + return file_policy_results_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *PolicyResultFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *PolicyResultFilter) GetCheckedSince() *timestamppb.Timestamp { + if x != nil { + return x.CheckedSince + } + return nil +} + +func (x *PolicyResultFilter) GetPolicyId() string { + if x != nil { + return x.PolicyId + } + return "" +} + +func (x *PolicyResultFilter) GetResults() []PolicyResult_Result { + if x != nil { + return x.Results + } + return nil +} + +func (x *PolicyResultFilter) GetParentType() PolicyResult_ParentType { + if x != nil { + return x.ParentType + } + return PolicyResult_PARENT_TYPE_UNKNOWN +} + +type PolicyResult_AuthorityMatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The matched signatures. + Signatures *PolicyResult_AuthorityMatch_SignatureMatches `protobuf:"bytes,1,opt,name=signatures,proto3" json:"signatures,omitempty"` + // A map from attestation name to matched attestations. + Attestations map[string]*PolicyResult_AuthorityMatch_SignatureMatches `protobuf:"bytes,2,rep,name=attestations,proto3" json:"attestations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *PolicyResult_AuthorityMatch) Reset() { + *x = PolicyResult_AuthorityMatch{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_results_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyResult_AuthorityMatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyResult_AuthorityMatch) ProtoMessage() {} + +func (x *PolicyResult_AuthorityMatch) ProtoReflect() protoreflect.Message { + mi := &file_policy_results_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyResult_AuthorityMatch.ProtoReflect.Descriptor instead. +func (*PolicyResult_AuthorityMatch) Descriptor() ([]byte, []int) { + return file_policy_results_platform_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *PolicyResult_AuthorityMatch) GetSignatures() *PolicyResult_AuthorityMatch_SignatureMatches { + if x != nil { + return x.Signatures + } + return nil +} + +func (x *PolicyResult_AuthorityMatch) GetAttestations() map[string]*PolicyResult_AuthorityMatch_SignatureMatches { + if x != nil { + return x.Attestations + } + return nil +} + +type PolicyResult_AuthorityMatch_SignatureMatches struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of signature record UIDPs + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *PolicyResult_AuthorityMatch_SignatureMatches) Reset() { + *x = PolicyResult_AuthorityMatch_SignatureMatches{} + if protoimpl.UnsafeEnabled { + mi := &file_policy_results_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyResult_AuthorityMatch_SignatureMatches) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyResult_AuthorityMatch_SignatureMatches) ProtoMessage() {} + +func (x *PolicyResult_AuthorityMatch_SignatureMatches) ProtoReflect() protoreflect.Message { + mi := &file_policy_results_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyResult_AuthorityMatch_SignatureMatches.ProtoReflect.Descriptor instead. +func (*PolicyResult_AuthorityMatch_SignatureMatches) Descriptor() ([]byte, []int) { + return file_policy_results_platform_proto_rawDescGZIP(), []int{0, 1, 1} +} + +func (x *PolicyResult_AuthorityMatch_SignatureMatches) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +var File_policy_results_platform_proto protoreflect.FileDescriptor + +var file_policy_results_platform_proto_rawDesc = []byte{ + 0x0a, 0x1d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, + 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9c, 0x09, 0x0a, + 0x0c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, + 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, + 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, + 0x69, 0x63, 0x12, 0x6b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, + 0x54, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x50, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x7c, 0x0a, 0x15, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 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, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x9b, 0x03, 0x0a, 0x0e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, + 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x68, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x65, 0x73, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x12, 0x6d, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, + 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, + 0x89, 0x01, 0x0a, 0x11, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x5e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x24, 0x0a, 0x10, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, + 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, + 0x73, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x53, 0x53, + 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, + 0x46, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x22, 0x53, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x43, + 0x4f, 0x52, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, + 0x08, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x03, 0x22, 0x52, 0x0a, 0x10, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, + 0xcf, 0x02, 0x0a, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, + 0x64, 0x70, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, + 0x6e, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, + 0x12, 0x49, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x0b, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x32, 0x85, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x12, 0x74, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x08, 0x12, 0x06, 0x0a, 0x02, 0xf9, 0x04, 0x10, 0x01, 0x42, 0x77, 0x0a, 0x25, 0x64, 0x65, 0x76, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x42, 0x1f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_policy_results_platform_proto_rawDescOnce sync.Once + file_policy_results_platform_proto_rawDescData = file_policy_results_platform_proto_rawDesc +) + +func file_policy_results_platform_proto_rawDescGZIP() []byte { + file_policy_results_platform_proto_rawDescOnce.Do(func() { + file_policy_results_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_policy_results_platform_proto_rawDescData) + }) + return file_policy_results_platform_proto_rawDescData +} + +var file_policy_results_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_policy_results_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_policy_results_platform_proto_goTypes = []interface{}{ + (PolicyResult_Result)(0), // 0: chainguard.platform.tenant.PolicyResult.Result + (PolicyResult_ParentType)(0), // 1: chainguard.platform.tenant.PolicyResult.ParentType + (*PolicyResult)(nil), // 2: chainguard.platform.tenant.PolicyResult + (*PolicyResultList)(nil), // 3: chainguard.platform.tenant.PolicyResultList + (*PolicyResultFilter)(nil), // 4: chainguard.platform.tenant.PolicyResultFilter + nil, // 5: chainguard.platform.tenant.PolicyResult.AuthorityMatchesEntry + (*PolicyResult_AuthorityMatch)(nil), // 6: chainguard.platform.tenant.PolicyResult.AuthorityMatch + nil, // 7: chainguard.platform.tenant.PolicyResult.AuthorityMatch.AttestationsEntry + (*PolicyResult_AuthorityMatch_SignatureMatches)(nil), // 8: chainguard.platform.tenant.PolicyResult.AuthorityMatch.SignatureMatches + (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 10: chainguard.platform.common.UIDPFilter +} +var file_policy_results_platform_proto_depIdxs = []int32{ + 9, // 0: chainguard.platform.tenant.PolicyResult.last_checked:type_name -> google.protobuf.Timestamp + 0, // 1: chainguard.platform.tenant.PolicyResult.result:type_name -> chainguard.platform.tenant.PolicyResult.Result + 5, // 2: chainguard.platform.tenant.PolicyResult.authority_matches:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatchesEntry + 1, // 3: chainguard.platform.tenant.PolicyResult.parent_type:type_name -> chainguard.platform.tenant.PolicyResult.ParentType + 2, // 4: chainguard.platform.tenant.PolicyResultList.items:type_name -> chainguard.platform.tenant.PolicyResult + 10, // 5: chainguard.platform.tenant.PolicyResultFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 9, // 6: chainguard.platform.tenant.PolicyResultFilter.checked_since:type_name -> google.protobuf.Timestamp + 0, // 7: chainguard.platform.tenant.PolicyResultFilter.results:type_name -> chainguard.platform.tenant.PolicyResult.Result + 1, // 8: chainguard.platform.tenant.PolicyResultFilter.parent_type:type_name -> chainguard.platform.tenant.PolicyResult.ParentType + 6, // 9: chainguard.platform.tenant.PolicyResult.AuthorityMatchesEntry.value:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatch + 8, // 10: chainguard.platform.tenant.PolicyResult.AuthorityMatch.signatures:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatch.SignatureMatches + 7, // 11: chainguard.platform.tenant.PolicyResult.AuthorityMatch.attestations:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatch.AttestationsEntry + 8, // 12: chainguard.platform.tenant.PolicyResult.AuthorityMatch.AttestationsEntry.value:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatch.SignatureMatches + 4, // 13: chainguard.platform.tenant.PolicyResults.List:input_type -> chainguard.platform.tenant.PolicyResultFilter + 3, // 14: chainguard.platform.tenant.PolicyResults.List:output_type -> chainguard.platform.tenant.PolicyResultList + 14, // [14:15] is the sub-list for method output_type + 13, // [13:14] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name +} + +func init() { file_policy_results_platform_proto_init() } +func file_policy_results_platform_proto_init() { + if File_policy_results_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_policy_results_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyResult); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_results_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyResultList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_results_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyResultFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_results_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyResult_AuthorityMatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_policy_results_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PolicyResult_AuthorityMatch_SignatureMatches); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_policy_results_platform_proto_rawDesc, + NumEnums: 2, + NumMessages: 7, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_policy_results_platform_proto_goTypes, + DependencyIndexes: file_policy_results_platform_proto_depIdxs, + EnumInfos: file_policy_results_platform_proto_enumTypes, + MessageInfos: file_policy_results_platform_proto_msgTypes, + }.Build() + File_policy_results_platform_proto = out.File + file_policy_results_platform_proto_rawDesc = nil + file_policy_results_platform_proto_goTypes = nil + file_policy_results_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/policy_results.platform.pb.gw.go b/proto/platform/tenant/v1/policy_results.platform.pb.gw.go new file mode 100644 index 00000000..a1b084bb --- /dev/null +++ b/proto/platform/tenant/v1/policy_results.platform.pb.gw.go @@ -0,0 +1,171 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: policy_results.platform.proto + +/* +Package tenant is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_PolicyResults_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_PolicyResults_List_0(ctx context.Context, marshaler runtime.Marshaler, client PolicyResultsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PolicyResultFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PolicyResults_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_PolicyResults_List_0(ctx context.Context, marshaler runtime.Marshaler, server PolicyResultsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PolicyResultFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PolicyResults_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterPolicyResultsHandlerServer registers the http handlers for service PolicyResults to "mux". +// UnaryRPC :call PolicyResultsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPolicyResultsHandlerFromEndpoint instead. +func RegisterPolicyResultsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PolicyResultsServer) error { + + mux.Handle("GET", pattern_PolicyResults_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.PolicyResults/List", runtime.WithHTTPPathPattern("/tenant/v1/policyResults")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_PolicyResults_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_PolicyResults_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterPolicyResultsHandlerFromEndpoint is same as RegisterPolicyResultsHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterPolicyResultsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterPolicyResultsHandler(ctx, mux, conn) +} + +// RegisterPolicyResultsHandler registers the http handlers for service PolicyResults to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterPolicyResultsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterPolicyResultsHandlerClient(ctx, mux, NewPolicyResultsClient(conn)) +} + +// RegisterPolicyResultsHandlerClient registers the http handlers for service PolicyResults +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PolicyResultsClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PolicyResultsClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "PolicyResultsClient" to call the correct interceptors. +func RegisterPolicyResultsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PolicyResultsClient) error { + + mux.Handle("GET", pattern_PolicyResults_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.PolicyResults/List", runtime.WithHTTPPathPattern("/tenant/v1/policyResults")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_PolicyResults_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_PolicyResults_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_PolicyResults_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "policyResults"}, "")) +) + +var ( + forward_PolicyResults_List_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/tenant/v1/policy_results.platform.proto b/proto/platform/tenant/v1/policy_results.platform.proto new file mode 100644 index 00000000..d0680fea --- /dev/null +++ b/proto/platform/tenant/v1/policy_results.platform.proto @@ -0,0 +1,113 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantPolicyResultProto"; + +package chainguard.platform.tenant; + +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service PolicyResults { + rpc List(PolicyResultFilter) returns (PolicyResultList) { + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_RECORD_POLICY_RESULTS_LIST] + unscoped: true + } + }; + } +} + +message PolicyResult { + // id, The PolicyResult UIDP at which this PolicyResult resides. + string id = 1; + + // name of the PolicyResult. + string name = 2; + + // a short description of this PolicyResult. + string description = 3; + + // policy_id is the metadata.uid of the Policy this result captures an evaluation of. + string policy_id = 4; + + // version is the metadata.resourceVersion of the Policy this result captures an evaluation of. + string version = 5; + + // last_checked tracks the timestamp at which this policy result was last checked. + google.protobuf.Timestamp last_checked = 6; + + // result holds the result of this policy evaluation. + Result result = 7; + + // diagnostic holds the diagnostic message associated with the result of this policy evaluation. + string diagnostic = 8; + + enum Result { + UNKNOWN = 0; + + // PASS represents when a policy evaluation completed without any + // diagnostics returned. + PASS = 1; + + // WARN represents when a policy evaluation completed with warnings + // (e.g. the policy used mode: warn). + WARN = 2; + + // FAIL represents when a policy evaluation completed with errors + // (e.g. the policy used mode: enforce). + FAIL = 3; + } + + // This loosely tracks the policy-controller's PolicyResult type found here: + // https://github.com/sigstore/policy-controller/blob/f777dcc2e/pkg/webhook/validator_result.go + map authority_matches = 9; + + message AuthorityMatch { + // The matched signatures. + SignatureMatches signatures = 1; + + // A map from attestation name to matched attestations. + map attestations = 2; + + message SignatureMatches { + // The list of signature record UIDPs + repeated string ids = 1; + } + } + + // parent_type, It is the parent type associated with the PolicyResult, can be Record, RecordContext or Workload. + ParentType parent_type = 10; + + enum ParentType { + PARENT_TYPE_UNKNOWN = 0; + RECORD = 1; + RECORD_CONTEXT = 2; + WORKLOAD = 3; + } +} + +message PolicyResultList { + repeated PolicyResult items = 1; +} + +message PolicyResultFilter { + chainguard.platform.common.UIDPFilter uidp = 1; + + // checked_since is the timestamp after which the policy should + // have last been checked. + google.protobuf.Timestamp checked_since = 2; + + // policy_id looks up evaluations of the policy identified by this metadata.uid + string policy_id = 3; + + // results filters policy results with one of the provided result. + repeated PolicyResult.Result results = 4; + + // parent_type filters policy results with the provided parent_type. + PolicyResult.ParentType parent_type = 5; +} diff --git a/proto/platform/tenant/v1/policy_results.platform_grpc.pb.go b/proto/platform/tenant/v1/policy_results.platform_grpc.pb.go new file mode 100644 index 00000000..148a00b6 --- /dev/null +++ b/proto/platform/tenant/v1/policy_results.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: policy_results.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + PolicyResults_List_FullMethodName = "/chainguard.platform.tenant.PolicyResults/List" +) + +// PolicyResultsClient is the client API for PolicyResults service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type PolicyResultsClient interface { + List(ctx context.Context, in *PolicyResultFilter, opts ...grpc.CallOption) (*PolicyResultList, error) +} + +type policyResultsClient struct { + cc grpc.ClientConnInterface +} + +func NewPolicyResultsClient(cc grpc.ClientConnInterface) PolicyResultsClient { + return &policyResultsClient{cc} +} + +func (c *policyResultsClient) List(ctx context.Context, in *PolicyResultFilter, opts ...grpc.CallOption) (*PolicyResultList, error) { + out := new(PolicyResultList) + err := c.cc.Invoke(ctx, PolicyResults_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// PolicyResultsServer is the server API for PolicyResults service. +// All implementations must embed UnimplementedPolicyResultsServer +// for forward compatibility +type PolicyResultsServer interface { + List(context.Context, *PolicyResultFilter) (*PolicyResultList, error) + mustEmbedUnimplementedPolicyResultsServer() +} + +// UnimplementedPolicyResultsServer must be embedded to have forward compatible implementations. +type UnimplementedPolicyResultsServer struct { +} + +func (UnimplementedPolicyResultsServer) List(context.Context, *PolicyResultFilter) (*PolicyResultList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedPolicyResultsServer) mustEmbedUnimplementedPolicyResultsServer() {} + +// UnsafePolicyResultsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to PolicyResultsServer will +// result in compilation errors. +type UnsafePolicyResultsServer interface { + mustEmbedUnimplementedPolicyResultsServer() +} + +func RegisterPolicyResultsServer(s grpc.ServiceRegistrar, srv PolicyResultsServer) { + s.RegisterService(&PolicyResults_ServiceDesc, srv) +} + +func _PolicyResults_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PolicyResultFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PolicyResultsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: PolicyResults_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PolicyResultsServer).List(ctx, req.(*PolicyResultFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// PolicyResults_ServiceDesc is the grpc.ServiceDesc for PolicyResults service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var PolicyResults_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.PolicyResults", + HandlerType: (*PolicyResultsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _PolicyResults_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "policy_results.platform.proto", +} diff --git a/proto/platform/tenant/v1/record.platform.pb.go b/proto/platform/tenant/v1/record.platform.pb.go new file mode 100644 index 00000000..61aafa73 --- /dev/null +++ b/proto/platform/tenant/v1/record.platform.pb.go @@ -0,0 +1,1465 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: record.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RecordStatus_Result int32 + +const ( + RecordStatus_UNKNOWN RecordStatus_Result = 0 + RecordStatus_PASS RecordStatus_Result = 1 + RecordStatus_FAIL RecordStatus_Result = 2 +) + +// Enum value maps for RecordStatus_Result. +var ( + RecordStatus_Result_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PASS", + 2: "FAIL", + } + RecordStatus_Result_value = map[string]int32{ + "UNKNOWN": 0, + "PASS": 1, + "FAIL": 2, + } +) + +func (x RecordStatus_Result) Enum() *RecordStatus_Result { + p := new(RecordStatus_Result) + *p = x + return p +} + +func (x RecordStatus_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RecordStatus_Result) Descriptor() protoreflect.EnumDescriptor { + return file_record_platform_proto_enumTypes[0].Descriptor() +} + +func (RecordStatus_Result) Type() protoreflect.EnumType { + return &file_record_platform_proto_enumTypes[0] +} + +func (x RecordStatus_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RecordStatus_Result.Descriptor instead. +func (RecordStatus_Result) EnumDescriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{1, 0} +} + +type Context_Ancestry_Role int32 + +const ( + Context_Ancestry_UNKNOWN Context_Ancestry_Role = 0 + Context_Ancestry_BASE Context_Ancestry_Role = 1 + Context_Ancestry_DERIVED Context_Ancestry_Role = 2 +) + +// Enum value maps for Context_Ancestry_Role. +var ( + Context_Ancestry_Role_name = map[int32]string{ + 0: "UNKNOWN", + 1: "BASE", + 2: "DERIVED", + } + Context_Ancestry_Role_value = map[string]int32{ + "UNKNOWN": 0, + "BASE": 1, + "DERIVED": 2, + } +) + +func (x Context_Ancestry_Role) Enum() *Context_Ancestry_Role { + p := new(Context_Ancestry_Role) + *p = x + return p +} + +func (x Context_Ancestry_Role) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Context_Ancestry_Role) Descriptor() protoreflect.EnumDescriptor { + return file_record_platform_proto_enumTypes[1].Descriptor() +} + +func (Context_Ancestry_Role) Type() protoreflect.EnumType { + return &file_record_platform_proto_enumTypes[1] +} + +func (x Context_Ancestry_Role) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Context_Ancestry_Role.Descriptor instead. +func (Context_Ancestry_Role) EnumDescriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{2, 1, 0} +} + +type Context_Variant_Role int32 + +const ( + Context_Variant_UNKNOWN Context_Variant_Role = 0 + Context_Variant_INDEX Context_Variant_Role = 1 + Context_Variant_VARIANT Context_Variant_Role = 2 +) + +// Enum value maps for Context_Variant_Role. +var ( + Context_Variant_Role_name = map[int32]string{ + 0: "UNKNOWN", + 1: "INDEX", + 2: "VARIANT", + } + Context_Variant_Role_value = map[string]int32{ + "UNKNOWN": 0, + "INDEX": 1, + "VARIANT": 2, + } +) + +func (x Context_Variant_Role) Enum() *Context_Variant_Role { + p := new(Context_Variant_Role) + *p = x + return p +} + +func (x Context_Variant_Role) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Context_Variant_Role) Descriptor() protoreflect.EnumDescriptor { + return file_record_platform_proto_enumTypes[2].Descriptor() +} + +func (Context_Variant_Role) Type() protoreflect.EnumType { + return &file_record_platform_proto_enumTypes[2] +} + +func (x Context_Variant_Role) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Context_Variant_Role.Descriptor instead. +func (Context_Variant_Role) EnumDescriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{2, 2, 0} +} + +type Record struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id holds the UIDP for this image's record + Id string `protobuf:"bytes,7,opt,name=id,proto3" json:"id,omitempty"` + // cluster identifies the specific cluster for the record. + Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` + // image is the container image for the record. + Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` + // last_seen is the last time we've seen this image anywhere on this cluster. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + // last_refreshed will hold a PredicateType => Last time it was successfully + // refreshed. + LastRefreshed map[string]*timestamppb.Timestamp `protobuf:"bytes,4,rep,name=last_refreshed,json=lastRefreshed,proto3" json:"last_refreshed,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + Sboms []*Sbom `protobuf:"bytes,6,rep,name=sboms,proto3" json:"sboms,omitempty"` + // status is a map from analysis type (e.g. "sbom", "vuln") => RecordStatus to indidate success/failure, + // the analysis timestamp, as well as any diagnostic message in case of failures. + Status map[string]*RecordStatus `protobuf:"bytes,9,rep,name=status,proto3" json:"status,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Record) Reset() { + *x = Record{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Record) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Record) ProtoMessage() {} + +func (x *Record) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Record.ProtoReflect.Descriptor instead. +func (*Record) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Record) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Record) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +func (x *Record) GetImage() string { + if x != nil { + return x.Image + } + return "" +} + +func (x *Record) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (x *Record) GetLastRefreshed() map[string]*timestamppb.Timestamp { + if x != nil { + return x.LastRefreshed + } + return nil +} + +func (x *Record) GetSboms() []*Sbom { + if x != nil { + return x.Sboms + } + return nil +} + +func (x *Record) GetStatus() map[string]*RecordStatus { + if x != nil { + return x.Status + } + return nil +} + +type RecordStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + LastChecked *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=last_checked,json=lastChecked,proto3" json:"last_checked,omitempty"` + Result RecordStatus_Result `protobuf:"varint,2,opt,name=result,proto3,enum=chainguard.platform.tenant.RecordStatus_Result" json:"result,omitempty"` + Diagnostic string `protobuf:"bytes,3,opt,name=diagnostic,proto3" json:"diagnostic,omitempty"` +} + +func (x *RecordStatus) Reset() { + *x = RecordStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordStatus) ProtoMessage() {} + +func (x *RecordStatus) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordStatus.ProtoReflect.Descriptor instead. +func (*RecordStatus) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *RecordStatus) GetLastChecked() *timestamppb.Timestamp { + if x != nil { + return x.LastChecked + } + return nil +} + +func (x *RecordStatus) GetResult() RecordStatus_Result { + if x != nil { + return x.Result + } + return RecordStatus_UNKNOWN +} + +func (x *RecordStatus) GetDiagnostic() string { + if x != nil { + return x.Diagnostic + } + return "" +} + +type Context struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // context_id is a unique ID, output only. + ContextId string `protobuf:"bytes,1,opt,name=context_id,json=contextId,proto3" json:"context_id,omitempty"` + // last_seen is the last time we've seen the image_id in this context. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + // Types that are assignable to Context: + // + // *Context_Workload_ + // *Context_Ancestry_ + // *Context_Variant_ + Context isContext_Context `protobuf_oneof:"context"` +} + +func (x *Context) Reset() { + *x = Context{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Context) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Context) ProtoMessage() {} + +func (x *Context) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Context.ProtoReflect.Descriptor instead. +func (*Context) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *Context) GetContextId() string { + if x != nil { + return x.ContextId + } + return "" +} + +func (x *Context) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (m *Context) GetContext() isContext_Context { + if m != nil { + return m.Context + } + return nil +} + +func (x *Context) GetWorkload() *Context_Workload { + if x, ok := x.GetContext().(*Context_Workload_); ok { + return x.Workload + } + return nil +} + +func (x *Context) GetAncestry() *Context_Ancestry { + if x, ok := x.GetContext().(*Context_Ancestry_); ok { + return x.Ancestry + } + return nil +} + +func (x *Context) GetVariant() *Context_Variant { + if x, ok := x.GetContext().(*Context_Variant_); ok { + return x.Variant + } + return nil +} + +type isContext_Context interface { + isContext_Context() +} + +type Context_Workload_ struct { + Workload *Context_Workload `protobuf:"bytes,10,opt,name=workload,proto3,oneof"` +} + +type Context_Ancestry_ struct { + Ancestry *Context_Ancestry `protobuf:"bytes,11,opt,name=ancestry,proto3,oneof"` +} + +type Context_Variant_ struct { + Variant *Context_Variant `protobuf:"bytes,12,opt,name=variant,proto3,oneof"` +} + +func (*Context_Workload_) isContext_Context() {} + +func (*Context_Ancestry_) isContext_Context() {} + +func (*Context_Variant_) isContext_Context() {} + +type Sbom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Packages []*Package `protobuf:"bytes,1,rep,name=packages,proto3" json:"packages,omitempty"` +} + +func (x *Sbom) Reset() { + *x = Sbom{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sbom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sbom) ProtoMessage() {} + +func (x *Sbom) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_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 Sbom.ProtoReflect.Descriptor instead. +func (*Sbom) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *Sbom) GetPackages() []*Package { + if x != nil { + return x.Packages + } + return nil +} + +type Package struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Purl string `protobuf:"bytes,3,opt,name=purl,proto3" json:"purl,omitempty"` +} + +func (x *Package) Reset() { + *x = Package{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Package) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Package) ProtoMessage() {} + +func (x *Package) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Package.ProtoReflect.Descriptor instead. +func (*Package) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *Package) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Package) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *Package) GetPurl() string { + if x != nil { + return x.Purl + } + return "" +} + +type Policy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // last_checked holds when this policy was last evaluated. + LastChecked *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=last_checked,json=lastChecked,proto3" json:"last_checked,omitempty"` + // valid holds whether the policy evaluation was successful. + Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` + // diagnostic holds any messages surfaced by the policy evaluation. + Diagnostic string `protobuf:"bytes,3,opt,name=diagnostic,proto3" json:"diagnostic,omitempty"` +} + +func (x *Policy) Reset() { + *x = Policy{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Policy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Policy) ProtoMessage() {} + +func (x *Policy) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Policy.ProtoReflect.Descriptor instead. +func (*Policy) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *Policy) GetLastChecked() *timestamppb.Timestamp { + if x != nil { + return x.LastChecked + } + return nil +} + +func (x *Policy) GetValid() bool { + if x != nil { + return x.Valid + } + return false +} + +func (x *Policy) GetDiagnostic() string { + if x != nil { + return x.Diagnostic + } + return "" +} + +type RecordList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Record `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *RecordList) Reset() { + *x = RecordList{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordList) ProtoMessage() {} + +func (x *RecordList) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordList.ProtoReflect.Descriptor instead. +func (*RecordList) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{6} +} + +func (x *RecordList) GetItems() []*Record { + if x != nil { + return x.Items + } + return nil +} + +type RecordFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UID of the record. + Id string `protobuf:"bytes,5,opt,name=id,proto3" json:"id,omitempty"` + // uidp filters records based on their position in the group hierarchy. + Uidp *v1.UIDPFilter `protobuf:"bytes,6,opt,name=uidp,proto3" json:"uidp,omitempty"` + // image is specified if a specific Record is desired. + Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` + // predicate specifies to fetch Records where either there's no + // LastRefreshed for this predicate type, or if it needs to be refreshed. + Predicate string `protobuf:"bytes,2,opt,name=predicate,proto3" json:"predicate,omitempty"` + // cluster is specified if restricting to a given cluster id. + // This field is required. + Cluster string `protobuf:"bytes,3,opt,name=cluster,proto3" json:"cluster,omitempty"` + // active_since is the timestamp after which returned records should have been active. + // This applies to when an image was "last seen". + ActiveSince *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` +} + +func (x *RecordFilter) Reset() { + *x = RecordFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RecordFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecordFilter) ProtoMessage() {} + +func (x *RecordFilter) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecordFilter.ProtoReflect.Descriptor instead. +func (*RecordFilter) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{7} +} + +func (x *RecordFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RecordFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *RecordFilter) GetImage() string { + if x != nil { + return x.Image + } + return "" +} + +func (x *RecordFilter) GetPredicate() string { + if x != nil { + return x.Predicate + } + return "" +} + +func (x *RecordFilter) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +func (x *RecordFilter) GetActiveSince() *timestamppb.Timestamp { + if x != nil { + return x.ActiveSince + } + return nil +} + +// TODO: Replace with upstream proto messages wherever possible. +type GroupVersionKind struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` +} + +func (x *GroupVersionKind) Reset() { + *x = GroupVersionKind{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupVersionKind) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupVersionKind) ProtoMessage() {} + +func (x *GroupVersionKind) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupVersionKind.ProtoReflect.Descriptor instead. +func (*GroupVersionKind) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{8} +} + +func (x *GroupVersionKind) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *GroupVersionKind) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *GroupVersionKind) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +// Workload contexts are added to existence records that have been +// observed running on a cluster. +type Context_Workload struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kind *GroupVersionKind `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Uid string `protobuf:"bytes,4,opt,name=uid,proto3" json:"uid,omitempty"` +} + +func (x *Context_Workload) Reset() { + *x = Context_Workload{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Context_Workload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Context_Workload) ProtoMessage() {} + +func (x *Context_Workload) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Context_Workload.ProtoReflect.Descriptor instead. +func (*Context_Workload) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{2, 0} +} + +func (x *Context_Workload) GetKind() *GroupVersionKind { + if x != nil { + return x.Kind + } + return nil +} + +func (x *Context_Workload) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *Context_Workload) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Context_Workload) GetUid() string { + if x != nil { + return x.Uid + } + return "" +} + +// Ancestry relationships are added to records when a "base image" +// relationship has been uncovered. This context is added to BOTH +// records with their respective roles. The base image will get +// the Role BASE, and the derivative image will get the Rile DERIVED. +type Context_Ancestry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Role Context_Ancestry_Role `protobuf:"varint,1,opt,name=role,proto3,enum=chainguard.platform.tenant.Context_Ancestry_Role" json:"role,omitempty"` + // The id of the other image's record in this ancestry relationship. + // If our Role is BASE, then this will hold the ID of the DERIVED + // image's record, and vice versa. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *Context_Ancestry) Reset() { + *x = Context_Ancestry{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Context_Ancestry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Context_Ancestry) ProtoMessage() {} + +func (x *Context_Ancestry) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Context_Ancestry.ProtoReflect.Descriptor instead. +func (*Context_Ancestry) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{2, 1} +} + +func (x *Context_Ancestry) GetRole() Context_Ancestry_Role { + if x != nil { + return x.Role + } + return Context_Ancestry_UNKNOWN +} + +func (x *Context_Ancestry) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Variant relationships are added to records when we find an "index" +// containing multiple different variations (typically os/arch) of the +// same logical image. These are referred to as "OCI Image Index", +// "Docker Manifest List", and occasionally "fat images". This context +// is added to ALL records including the INDEX and all VARIANTs of that +// index. The INDEX will typically contain N contexts carrying the Role +// INDEX, the id of the VARIANT's record, and the version information +// that discriminates that VARIANT from other VARIANTs. The VARIANT +// will typically (but not always!) contain 1 context varrying the Role +// VARIANT, the id of the INDEX's record, and the version information +// that discriminates it among the other VARIANTs in the INDEX. +type Context_Variant struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Role Context_Variant_Role `protobuf:"varint,1,opt,name=role,proto3,enum=chainguard.platform.tenant.Context_Variant_Role" json:"role,omitempty"` + // The id of the image index's record linking this + // image (transitively) to the cluster. + Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + // The version information distinguishing this variant + // from other possible variants of the index. + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *Context_Variant) Reset() { + *x = Context_Variant{} + if protoimpl.UnsafeEnabled { + mi := &file_record_platform_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Context_Variant) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Context_Variant) ProtoMessage() {} + +func (x *Context_Variant) ProtoReflect() protoreflect.Message { + mi := &file_record_platform_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Context_Variant.ProtoReflect.Descriptor instead. +func (*Context_Variant) Descriptor() ([]byte, []int) { + return file_record_platform_proto_rawDescGZIP(), []int{2, 2} +} + +func (x *Context_Variant) GetRole() Context_Variant_Role { + if x != nil { + return x.Role + } + return Context_Variant_UNKNOWN +} + +func (x *Context_Variant) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Context_Variant) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +var File_record_platform_proto protoreflect.FileDescriptor + +var file_record_platform_proto_rawDesc = []byte{ + 0x0a, 0x15, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, + 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xae, 0x04, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, + 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, + 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, + 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x65, 0x64, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x66, 0x72, 0x65, + 0x73, 0x68, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x73, 0x62, 0x6f, 0x6d, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x05, 0x73, 0x62, 0x6f, 0x6d, 0x73, 0x12, 0x46, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x1a, 0x5c, 0x0a, 0x12, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x75, 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, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, + 0x08, 0x10, 0x09, 0x22, 0xe1, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x22, 0x29, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x53, 0x53, 0x10, 0x01, 0x12, 0x08, 0x0a, + 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x02, 0x22, 0x99, 0x06, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x4a, 0x0a, 0x08, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x08, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x4a, 0x0a, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x74, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, + 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, + 0x74, 0x72, 0x79, 0x12, 0x47, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x1a, 0x90, 0x01, 0x0a, + 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x40, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x1a, + 0x8d, 0x01, 0x0a, 0x08, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x12, 0x45, 0x0a, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, + 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, + 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x22, 0x2a, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x41, 0x53, 0x45, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x52, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x1a, + 0xa6, 0x01, 0x0a, 0x07, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x72, + 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2b, 0x0a, 0x04, 0x52, + 0x6f, 0x6c, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x56, + 0x41, 0x52, 0x49, 0x41, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x22, 0x47, 0x0a, 0x04, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x3f, 0x0a, 0x08, 0x70, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x07, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x22, 0x83, 0x01, 0x0a, 0x06, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x61, + 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, + 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, + 0x46, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, + 0x75, 0x69, 0x64, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, + 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, + 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, + 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x56, 0x0a, 0x10, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x32, + 0xa1, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, + 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xdb, + 0x04, 0x10, 0x01, 0x42, 0x72, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1a, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_record_platform_proto_rawDescOnce sync.Once + file_record_platform_proto_rawDescData = file_record_platform_proto_rawDesc +) + +func file_record_platform_proto_rawDescGZIP() []byte { + file_record_platform_proto_rawDescOnce.Do(func() { + file_record_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_record_platform_proto_rawDescData) + }) + return file_record_platform_proto_rawDescData +} + +var file_record_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_record_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_record_platform_proto_goTypes = []interface{}{ + (RecordStatus_Result)(0), // 0: chainguard.platform.tenant.RecordStatus.Result + (Context_Ancestry_Role)(0), // 1: chainguard.platform.tenant.Context.Ancestry.Role + (Context_Variant_Role)(0), // 2: chainguard.platform.tenant.Context.Variant.Role + (*Record)(nil), // 3: chainguard.platform.tenant.Record + (*RecordStatus)(nil), // 4: chainguard.platform.tenant.RecordStatus + (*Context)(nil), // 5: chainguard.platform.tenant.Context + (*Sbom)(nil), // 6: chainguard.platform.tenant.Sbom + (*Package)(nil), // 7: chainguard.platform.tenant.Package + (*Policy)(nil), // 8: chainguard.platform.tenant.Policy + (*RecordList)(nil), // 9: chainguard.platform.tenant.RecordList + (*RecordFilter)(nil), // 10: chainguard.platform.tenant.RecordFilter + (*GroupVersionKind)(nil), // 11: chainguard.platform.tenant.GroupVersionKind + nil, // 12: chainguard.platform.tenant.Record.LastRefreshedEntry + nil, // 13: chainguard.platform.tenant.Record.StatusEntry + (*Context_Workload)(nil), // 14: chainguard.platform.tenant.Context.Workload + (*Context_Ancestry)(nil), // 15: chainguard.platform.tenant.Context.Ancestry + (*Context_Variant)(nil), // 16: chainguard.platform.tenant.Context.Variant + (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 18: chainguard.platform.common.UIDPFilter +} +var file_record_platform_proto_depIdxs = []int32{ + 17, // 0: chainguard.platform.tenant.Record.last_seen:type_name -> google.protobuf.Timestamp + 12, // 1: chainguard.platform.tenant.Record.last_refreshed:type_name -> chainguard.platform.tenant.Record.LastRefreshedEntry + 6, // 2: chainguard.platform.tenant.Record.sboms:type_name -> chainguard.platform.tenant.Sbom + 13, // 3: chainguard.platform.tenant.Record.status:type_name -> chainguard.platform.tenant.Record.StatusEntry + 17, // 4: chainguard.platform.tenant.RecordStatus.last_checked:type_name -> google.protobuf.Timestamp + 0, // 5: chainguard.platform.tenant.RecordStatus.result:type_name -> chainguard.platform.tenant.RecordStatus.Result + 17, // 6: chainguard.platform.tenant.Context.last_seen:type_name -> google.protobuf.Timestamp + 14, // 7: chainguard.platform.tenant.Context.workload:type_name -> chainguard.platform.tenant.Context.Workload + 15, // 8: chainguard.platform.tenant.Context.ancestry:type_name -> chainguard.platform.tenant.Context.Ancestry + 16, // 9: chainguard.platform.tenant.Context.variant:type_name -> chainguard.platform.tenant.Context.Variant + 7, // 10: chainguard.platform.tenant.Sbom.packages:type_name -> chainguard.platform.tenant.Package + 17, // 11: chainguard.platform.tenant.Policy.last_checked:type_name -> google.protobuf.Timestamp + 3, // 12: chainguard.platform.tenant.RecordList.items:type_name -> chainguard.platform.tenant.Record + 18, // 13: chainguard.platform.tenant.RecordFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 17, // 14: chainguard.platform.tenant.RecordFilter.active_since:type_name -> google.protobuf.Timestamp + 17, // 15: chainguard.platform.tenant.Record.LastRefreshedEntry.value:type_name -> google.protobuf.Timestamp + 4, // 16: chainguard.platform.tenant.Record.StatusEntry.value:type_name -> chainguard.platform.tenant.RecordStatus + 11, // 17: chainguard.platform.tenant.Context.Workload.kind:type_name -> chainguard.platform.tenant.GroupVersionKind + 1, // 18: chainguard.platform.tenant.Context.Ancestry.role:type_name -> chainguard.platform.tenant.Context.Ancestry.Role + 2, // 19: chainguard.platform.tenant.Context.Variant.role:type_name -> chainguard.platform.tenant.Context.Variant.Role + 10, // 20: chainguard.platform.tenant.Records.List:input_type -> chainguard.platform.tenant.RecordFilter + 9, // 21: chainguard.platform.tenant.Records.List:output_type -> chainguard.platform.tenant.RecordList + 21, // [21:22] is the sub-list for method output_type + 20, // [20:21] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name +} + +func init() { file_record_platform_proto_init() } +func file_record_platform_proto_init() { + if File_record_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_record_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Record); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Context); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sbom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Package); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Policy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RecordFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupVersionKind); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Context_Workload); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Context_Ancestry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_record_platform_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Context_Variant); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_record_platform_proto_msgTypes[2].OneofWrappers = []interface{}{ + (*Context_Workload_)(nil), + (*Context_Ancestry_)(nil), + (*Context_Variant_)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_record_platform_proto_rawDesc, + NumEnums: 3, + NumMessages: 14, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_record_platform_proto_goTypes, + DependencyIndexes: file_record_platform_proto_depIdxs, + EnumInfos: file_record_platform_proto_enumTypes, + MessageInfos: file_record_platform_proto_msgTypes, + }.Build() + File_record_platform_proto = out.File + file_record_platform_proto_rawDesc = nil + file_record_platform_proto_goTypes = nil + file_record_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/record.platform.pb.gw.go b/proto/platform/tenant/v1/record.platform.pb.gw.go new file mode 100644 index 00000000..ee0f69c1 --- /dev/null +++ b/proto/platform/tenant/v1/record.platform.pb.gw.go @@ -0,0 +1,205 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: record.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_Records_List_0 = &utilities.DoubleArray{Encoding: map[string]int{"cluster": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Records_List_0(ctx context.Context, marshaler runtime.Marshaler, client RecordsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RecordFilter + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["cluster"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cluster") + } + + protoReq.Cluster, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cluster", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Records_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Records_List_0(ctx context.Context, marshaler runtime.Marshaler, server RecordsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RecordFilter + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["cluster"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cluster") + } + + protoReq.Cluster, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cluster", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Records_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterRecordsHandlerServer registers the http handlers for service Records to "mux". +// UnaryRPC :call RecordsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRecordsHandlerFromEndpoint instead. +func RegisterRecordsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RecordsServer) error { + + mux.Handle("GET", pattern_Records_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Records/List", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{cluster}/records")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Records_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Records_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterRecordsHandlerFromEndpoint is same as RegisterRecordsHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterRecordsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterRecordsHandler(ctx, mux, conn) +} + +// RegisterRecordsHandler registers the http handlers for service Records to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterRecordsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterRecordsHandlerClient(ctx, mux, NewRecordsClient(conn)) +} + +// RegisterRecordsHandlerClient registers the http handlers for service Records +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RecordsClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RecordsClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "RecordsClient" to call the correct interceptors. +func RegisterRecordsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RecordsClient) error { + + mux.Handle("GET", pattern_Records_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Records/List", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{cluster}/records")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Records_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Records_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Records_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"tenant", "v1", "clusters", "cluster", "records"}, "")) +) + +var ( + forward_Records_List_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/tenant/v1/record.platform.proto b/proto/platform/tenant/v1/record.platform.proto new file mode 100644 index 00000000..81a0dbf7 --- /dev/null +++ b/proto/platform/tenant/v1/record.platform.proto @@ -0,0 +1,203 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantClusterProto"; + +package chainguard.platform.tenant; + +import "google/api/annotations.proto"; +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Records { + rpc List(RecordFilter) returns (RecordList) { + option (google.api.http) = { + // TODO: I am not sure this inner cluster will work with our id. Gotta test. + get: "/tenant/v1/clusters/{cluster}/records" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_RECORDS_LIST] + unscoped: true + } + }; + } +} + +message Record { + // id holds the UIDP for this image's record + string id = 7; + + // cluster identifies the specific cluster for the record. + string cluster = 1; + + // image is the container image for the record. + string image = 2; + + // last_seen is the last time we've seen this image anywhere on this cluster. + google.protobuf.Timestamp last_seen = 3; + + // last_refreshed will hold a PredicateType => Last time it was successfully + // refreshed. + map last_refreshed = 4; + + // This field was retired and is no longer served. + reserved 5; + + repeated Sbom sboms = 6; + + // This field was retired and is no longer served. + reserved 8; + + // status is a map from analysis type (e.g. "sbom", "vuln") => RecordStatus to indidate success/failure, + // the analysis timestamp, as well as any diagnostic message in case of failures. + map status = 9; +} + +message RecordStatus { + google.protobuf.Timestamp last_checked = 1; + Result result = 2; + string diagnostic = 3; + + enum Result { + UNKNOWN = 0; + PASS = 1; + FAIL = 2; + } +} + +message Context { + // context_id is a unique ID, output only. + string context_id = 1; + + // last_seen is the last time we've seen the image_id in this context. + google.protobuf.Timestamp last_seen = 2; + + oneof context { + Workload workload = 10; + Ancestry ancestry = 11; + Variant variant = 12; + } + + // Workload contexts are added to existence records that have been + // observed running on a cluster. + message Workload { + GroupVersionKind kind = 1; + string namespace = 2; + string name = 3; + string uid = 4; + } + + // Ancestry relationships are added to records when a "base image" + // relationship has been uncovered. This context is added to BOTH + // records with their respective roles. The base image will get + // the Role BASE, and the derivative image will get the Rile DERIVED. + message Ancestry { + Role role = 1; + + // The id of the other image's record in this ancestry relationship. + // If our Role is BASE, then this will hold the ID of the DERIVED + // image's record, and vice versa. + string id = 2; + + enum Role { + UNKNOWN = 0; + BASE = 1; + DERIVED = 2; + } + } + + // Variant relationships are added to records when we find an "index" + // containing multiple different variations (typically os/arch) of the + // same logical image. These are referred to as "OCI Image Index", + // "Docker Manifest List", and occasionally "fat images". This context + // is added to ALL records including the INDEX and all VARIANTs of that + // index. The INDEX will typically contain N contexts carrying the Role + // INDEX, the id of the VARIANT's record, and the version information + // that discriminates that VARIANT from other VARIANTs. The VARIANT + // will typically (but not always!) contain 1 context varrying the Role + // VARIANT, the id of the INDEX's record, and the version information + // that discriminates it among the other VARIANTs in the INDEX. + message Variant { + Role role = 1; + + // The id of the image index's record linking this + // image (transitively) to the cluster. + string id = 2; + + // The version information distinguishing this variant + // from other possible variants of the index. + string version = 3; + + enum Role { + UNKNOWN = 0; + INDEX = 1; + VARIANT = 2; + } + } +} + +message Sbom { + repeated Package packages = 1; +} + +message Package { + string name = 1; + string version = 2; + string purl = 3; +} + +message Policy { + // last_checked holds when this policy was last evaluated. + google.protobuf.Timestamp last_checked = 1; + + // valid holds whether the policy evaluation was successful. + bool valid = 2; + + // diagnostic holds any messages surfaced by the policy evaluation. + string diagnostic = 3; + + reserved 4; +} + +message RecordList { + repeated Record items = 1; +} + +message RecordFilter { + // id is the exact UID of the record. + string id = 5; + + // uidp filters records based on their position in the group hierarchy. + chainguard.platform.common.UIDPFilter uidp = 6; + + // image is specified if a specific Record is desired. + string image = 1; + + // predicate specifies to fetch Records where either there's no + // LastRefreshed for this predicate type, or if it needs to be refreshed. + string predicate = 2; + + // cluster is specified if restricting to a given cluster id. + // This field is required. + string cluster = 3; + + // active_since is the timestamp after which returned records should have been active. + // This applies to when an image was "last seen". + google.protobuf.Timestamp active_since = 4; + + // This field was retired and is no longer served. + reserved 7; + + // Next ID: 8 +} + +// TODO: Replace with upstream proto messages wherever possible. +message GroupVersionKind { + string group = 1; + string version = 2; + string kind = 3; +} diff --git a/proto/platform/tenant/v1/record.platform_grpc.pb.go b/proto/platform/tenant/v1/record.platform_grpc.pb.go new file mode 100644 index 00000000..d94b1499 --- /dev/null +++ b/proto/platform/tenant/v1/record.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: record.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Records_List_FullMethodName = "/chainguard.platform.tenant.Records/List" +) + +// RecordsClient is the client API for Records service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type RecordsClient interface { + List(ctx context.Context, in *RecordFilter, opts ...grpc.CallOption) (*RecordList, error) +} + +type recordsClient struct { + cc grpc.ClientConnInterface +} + +func NewRecordsClient(cc grpc.ClientConnInterface) RecordsClient { + return &recordsClient{cc} +} + +func (c *recordsClient) List(ctx context.Context, in *RecordFilter, opts ...grpc.CallOption) (*RecordList, error) { + out := new(RecordList) + err := c.cc.Invoke(ctx, Records_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RecordsServer is the server API for Records service. +// All implementations must embed UnimplementedRecordsServer +// for forward compatibility +type RecordsServer interface { + List(context.Context, *RecordFilter) (*RecordList, error) + mustEmbedUnimplementedRecordsServer() +} + +// UnimplementedRecordsServer must be embedded to have forward compatible implementations. +type UnimplementedRecordsServer struct { +} + +func (UnimplementedRecordsServer) List(context.Context, *RecordFilter) (*RecordList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedRecordsServer) mustEmbedUnimplementedRecordsServer() {} + +// UnsafeRecordsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RecordsServer will +// result in compilation errors. +type UnsafeRecordsServer interface { + mustEmbedUnimplementedRecordsServer() +} + +func RegisterRecordsServer(s grpc.ServiceRegistrar, srv RecordsServer) { + s.RegisterService(&Records_ServiceDesc, srv) +} + +func _Records_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RecordFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RecordsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Records_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RecordsServer).List(ctx, req.(*RecordFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// Records_ServiceDesc is the grpc.ServiceDesc for Records service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Records_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.Records", + HandlerType: (*RecordsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _Records_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "record.platform.proto", +} diff --git a/proto/platform/tenant/v1/risk.platform.pb.go b/proto/platform/tenant/v1/risk.platform.pb.go new file mode 100644 index 00000000..0c6c18f7 --- /dev/null +++ b/proto/platform/tenant/v1/risk.platform.pb.go @@ -0,0 +1,947 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: risk.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Risk_MissingData_Type int32 + +const ( + Risk_MissingData_UNKNOWN Risk_MissingData_Type = 0 + Risk_MissingData_SIGNATURE Risk_MissingData_Type = 1 + Risk_MissingData_SBOM Risk_MissingData_Type = 2 + Risk_MissingData_POLICY Risk_MissingData_Type = 3 +) + +// Enum value maps for Risk_MissingData_Type. +var ( + Risk_MissingData_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SIGNATURE", + 2: "SBOM", + 3: "POLICY", + } + Risk_MissingData_Type_value = map[string]int32{ + "UNKNOWN": 0, + "SIGNATURE": 1, + "SBOM": 2, + "POLICY": 3, + } +) + +func (x Risk_MissingData_Type) Enum() *Risk_MissingData_Type { + p := new(Risk_MissingData_Type) + *p = x + return p +} + +func (x Risk_MissingData_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Risk_MissingData_Type) Descriptor() protoreflect.EnumDescriptor { + return file_risk_platform_proto_enumTypes[0].Descriptor() +} + +func (Risk_MissingData_Type) Type() protoreflect.EnumType { + return &file_risk_platform_proto_enumTypes[0] +} + +func (x Risk_MissingData_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Risk_MissingData_Type.Descriptor instead. +func (Risk_MissingData_Type) EnumDescriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{2, 1, 0} +} + +type Risk_Vulnerability_Severity int32 + +const ( + Risk_Vulnerability_UNKNOWN Risk_Vulnerability_Severity = 0 + Risk_Vulnerability_LOW Risk_Vulnerability_Severity = 1 + Risk_Vulnerability_MEDIUM Risk_Vulnerability_Severity = 2 + Risk_Vulnerability_HIGH Risk_Vulnerability_Severity = 3 + Risk_Vulnerability_CRITICAL Risk_Vulnerability_Severity = 4 +) + +// Enum value maps for Risk_Vulnerability_Severity. +var ( + Risk_Vulnerability_Severity_name = map[int32]string{ + 0: "UNKNOWN", + 1: "LOW", + 2: "MEDIUM", + 3: "HIGH", + 4: "CRITICAL", + } + Risk_Vulnerability_Severity_value = map[string]int32{ + "UNKNOWN": 0, + "LOW": 1, + "MEDIUM": 2, + "HIGH": 3, + "CRITICAL": 4, + } +) + +func (x Risk_Vulnerability_Severity) Enum() *Risk_Vulnerability_Severity { + p := new(Risk_Vulnerability_Severity) + *p = x + return p +} + +func (x Risk_Vulnerability_Severity) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Risk_Vulnerability_Severity) Descriptor() protoreflect.EnumDescriptor { + return file_risk_platform_proto_enumTypes[1].Descriptor() +} + +func (Risk_Vulnerability_Severity) Type() protoreflect.EnumType { + return &file_risk_platform_proto_enumTypes[1] +} + +func (x Risk_Vulnerability_Severity) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Risk_Vulnerability_Severity.Descriptor instead. +func (Risk_Vulnerability_Severity) EnumDescriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{2, 2, 0} +} + +type RiskFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` +} + +func (x *RiskFilter) Reset() { + *x = RiskFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_risk_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RiskFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RiskFilter) ProtoMessage() {} + +func (x *RiskFilter) ProtoReflect() protoreflect.Message { + mi := &file_risk_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RiskFilter.ProtoReflect.Descriptor instead. +func (*RiskFilter) Descriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *RiskFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RiskFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +type RiskList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Risk `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *RiskList) Reset() { + *x = RiskList{} + if protoimpl.UnsafeEnabled { + mi := &file_risk_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RiskList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RiskList) ProtoMessage() {} + +func (x *RiskList) ProtoReflect() protoreflect.Message { + mi := &file_risk_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RiskList.ProtoReflect.Descriptor instead. +func (*RiskList) Descriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *RiskList) GetItems() []*Risk { + if x != nil { + return x.Items + } + return nil +} + +type Risk struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Risk ID (UIDP resource + unique ID) + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Grouping identifier to associate Risks in the same UIDP + // to each other. + GroupId string `protobuf:"bytes,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // List of UIDPs that were used to determine this Risk. + Inputs []string `protobuf:"bytes,3,rep,name=inputs,proto3" json:"inputs,omitempty"` + // What kind of risk is this? Lack of signatures, vulnerability, SBOM quality, etc. + Details *Risk_Details `protobuf:"bytes,4,opt,name=details,proto3" json:"details,omitempty"` + // Output only. Free form text describing this Risk. + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + // Output only. Chainguard EDU link for more details on this Risk. + DocumentationUrl string `protobuf:"bytes,6,opt,name=documentation_url,json=documentationUrl,proto3" json:"documentation_url,omitempty"` + // Optional. Chainguard's recommendation(s) for how to resolve this Risk. + Recommendations []*Recommendation `protobuf:"bytes,7,rep,name=recommendations,proto3" json:"recommendations,omitempty"` + // Output only. When Enforce last saw this Risk. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` +} + +func (x *Risk) Reset() { + *x = Risk{} + if protoimpl.UnsafeEnabled { + mi := &file_risk_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Risk) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Risk) ProtoMessage() {} + +func (x *Risk) ProtoReflect() protoreflect.Message { + mi := &file_risk_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Risk.ProtoReflect.Descriptor instead. +func (*Risk) Descriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *Risk) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Risk) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *Risk) GetInputs() []string { + if x != nil { + return x.Inputs + } + return nil +} + +func (x *Risk) GetDetails() *Risk_Details { + if x != nil { + return x.Details + } + return nil +} + +func (x *Risk) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Risk) GetDocumentationUrl() string { + if x != nil { + return x.DocumentationUrl + } + return "" +} + +func (x *Risk) GetRecommendations() []*Recommendation { + if x != nil { + return x.Recommendations + } + return nil +} + +func (x *Risk) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +type Recommendation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Classification of what kind of remediation this is, e.g.: + // upgrade, replace, etc. + // + // Types that are assignable to Action: + // + // *Recommendation_Replace + Action isRecommendation_Action `protobuf_oneof:"action"` + // Output only. Free form text describing how this can be resolved. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Output only. Chainguard EDU link for more details on this Recommendation. + DocumentationUrl string `protobuf:"bytes,4,opt,name=documentation_url,json=documentationUrl,proto3" json:"documentation_url,omitempty"` +} + +func (x *Recommendation) Reset() { + *x = Recommendation{} + if protoimpl.UnsafeEnabled { + mi := &file_risk_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Recommendation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Recommendation) ProtoMessage() {} + +func (x *Recommendation) ProtoReflect() protoreflect.Message { + mi := &file_risk_platform_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 Recommendation.ProtoReflect.Descriptor instead. +func (*Recommendation) Descriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{3} +} + +func (m *Recommendation) GetAction() isRecommendation_Action { + if m != nil { + return m.Action + } + return nil +} + +func (x *Recommendation) GetReplace() *Recommendation_ReplaceArtifact { + if x, ok := x.GetAction().(*Recommendation_Replace); ok { + return x.Replace + } + return nil +} + +func (x *Recommendation) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Recommendation) GetDocumentationUrl() string { + if x != nil { + return x.DocumentationUrl + } + return "" +} + +type isRecommendation_Action interface { + isRecommendation_Action() +} + +type Recommendation_Replace struct { + Replace *Recommendation_ReplaceArtifact `protobuf:"bytes,1,opt,name=replace,proto3,oneof"` +} + +func (*Recommendation_Replace) isRecommendation_Action() {} + +type Risk_Details struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Data: + // + // *Risk_Details_MissingData + Data isRisk_Details_Data `protobuf_oneof:"data"` +} + +func (x *Risk_Details) Reset() { + *x = Risk_Details{} + if protoimpl.UnsafeEnabled { + mi := &file_risk_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Risk_Details) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Risk_Details) ProtoMessage() {} + +func (x *Risk_Details) ProtoReflect() protoreflect.Message { + mi := &file_risk_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Risk_Details.ProtoReflect.Descriptor instead. +func (*Risk_Details) Descriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{2, 0} +} + +func (m *Risk_Details) GetData() isRisk_Details_Data { + if m != nil { + return m.Data + } + return nil +} + +func (x *Risk_Details) GetMissingData() *Risk_MissingData { + if x, ok := x.GetData().(*Risk_Details_MissingData); ok { + return x.MissingData + } + return nil +} + +type isRisk_Details_Data interface { + isRisk_Details_Data() +} + +type Risk_Details_MissingData struct { + MissingData *Risk_MissingData `protobuf:"bytes,1,opt,name=missing_data,json=missingData,proto3,oneof"` +} + +func (*Risk_Details_MissingData) isRisk_Details_Data() {} + +type Risk_MissingData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // What kind of data is missing (e.g. signature, sbom, policy, etc.) + Type Risk_MissingData_Type `protobuf:"varint,1,opt,name=type,proto3,enum=chainguard.platform.tenant.Risk_MissingData_Type" json:"type,omitempty"` +} + +func (x *Risk_MissingData) Reset() { + *x = Risk_MissingData{} + if protoimpl.UnsafeEnabled { + mi := &file_risk_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Risk_MissingData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Risk_MissingData) ProtoMessage() {} + +func (x *Risk_MissingData) ProtoReflect() protoreflect.Message { + mi := &file_risk_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Risk_MissingData.ProtoReflect.Descriptor instead. +func (*Risk_MissingData) Descriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{2, 1} +} + +func (x *Risk_MissingData) GetType() Risk_MissingData_Type { + if x != nil { + return x.Type + } + return Risk_MissingData_UNKNOWN +} + +type Risk_Vulnerability struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Severity Risk_Vulnerability_Severity `protobuf:"varint,5,opt,name=severity,proto3,enum=chainguard.platform.tenant.Risk_Vulnerability_Severity" json:"severity,omitempty"` + // External identifier of the source of the vuln - e.g. CVE ID. + Source string `protobuf:"bytes,7,opt,name=source,proto3" json:"source,omitempty"` +} + +func (x *Risk_Vulnerability) Reset() { + *x = Risk_Vulnerability{} + if protoimpl.UnsafeEnabled { + mi := &file_risk_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Risk_Vulnerability) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Risk_Vulnerability) ProtoMessage() {} + +func (x *Risk_Vulnerability) ProtoReflect() protoreflect.Message { + mi := &file_risk_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Risk_Vulnerability.ProtoReflect.Descriptor instead. +func (*Risk_Vulnerability) Descriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{2, 2} +} + +func (x *Risk_Vulnerability) GetSeverity() Risk_Vulnerability_Severity { + if x != nil { + return x.Severity + } + return Risk_Vulnerability_UNKNOWN +} + +func (x *Risk_Vulnerability) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +type Recommendation_ReplaceArtifact struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` + // Target artifact that may be able to resolve this Risk. + To string `protobuf:"bytes,2,opt,name=to,proto3" json:"to,omitempty"` +} + +func (x *Recommendation_ReplaceArtifact) Reset() { + *x = Recommendation_ReplaceArtifact{} + if protoimpl.UnsafeEnabled { + mi := &file_risk_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Recommendation_ReplaceArtifact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Recommendation_ReplaceArtifact) ProtoMessage() {} + +func (x *Recommendation_ReplaceArtifact) ProtoReflect() protoreflect.Message { + mi := &file_risk_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Recommendation_ReplaceArtifact.ProtoReflect.Descriptor instead. +func (*Recommendation_ReplaceArtifact) Descriptor() ([]byte, []int) { + return file_risk_platform_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *Recommendation_ReplaceArtifact) GetFrom() string { + if x != nil { + return x.From + } + return "" +} + +func (x *Recommendation_ReplaceArtifact) GetTo() string { + if x != nil { + return x.To + } + return "" +} + +var File_risk_platform_proto protoreflect.FileDescriptor + +var file_risk_platform_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x72, 0x69, 0x73, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, + 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, + 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x58, 0x0a, 0x0a, 0x52, 0x69, 0x73, 0x6b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, + 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x22, 0x42, 0x0a, 0x08, 0x52, 0x69, + 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xa7, + 0x06, 0x0a, 0x04, 0x52, 0x69, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x2e, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x54, 0x0a, + 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x1a, 0x64, 0x0a, 0x07, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x51, 0x0a, 0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6e, 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x2e, + 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x0b, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x1a, 0x8e, 0x01, 0x0a, 0x0b, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x45, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, + 0x73, 0x6b, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x38, 0x0a, 0x04, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, + 0x0a, 0x09, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, + 0x04, 0x53, 0x42, 0x4f, 0x4d, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x4f, 0x4c, 0x49, 0x43, + 0x59, 0x10, 0x03, 0x1a, 0xc2, 0x01, 0x0a, 0x0d, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x53, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, + 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x22, 0x44, 0x0a, 0x08, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4c, + 0x4f, 0x57, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, + 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, + 0x49, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x04, 0x22, 0xf8, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x56, 0x0a, 0x07, 0x72, + 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, + 0x72, 0x6c, 0x1a, 0x35, 0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x32, 0x85, 0x01, 0x0a, 0x05, 0x52, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x7c, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x24, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x69, 0x73, 0x6b, 0x73, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x80, 0x05, 0x10, 0x01, 0x42, 0x69, 0x0a, 0x25, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, + 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x69, + 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_risk_platform_proto_rawDescOnce sync.Once + file_risk_platform_proto_rawDescData = file_risk_platform_proto_rawDesc +) + +func file_risk_platform_proto_rawDescGZIP() []byte { + file_risk_platform_proto_rawDescOnce.Do(func() { + file_risk_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_risk_platform_proto_rawDescData) + }) + return file_risk_platform_proto_rawDescData +} + +var file_risk_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_risk_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_risk_platform_proto_goTypes = []interface{}{ + (Risk_MissingData_Type)(0), // 0: chainguard.platform.tenant.Risk.MissingData.Type + (Risk_Vulnerability_Severity)(0), // 1: chainguard.platform.tenant.Risk.Vulnerability.Severity + (*RiskFilter)(nil), // 2: chainguard.platform.tenant.RiskFilter + (*RiskList)(nil), // 3: chainguard.platform.tenant.RiskList + (*Risk)(nil), // 4: chainguard.platform.tenant.Risk + (*Recommendation)(nil), // 5: chainguard.platform.tenant.Recommendation + (*Risk_Details)(nil), // 6: chainguard.platform.tenant.Risk.Details + (*Risk_MissingData)(nil), // 7: chainguard.platform.tenant.Risk.MissingData + (*Risk_Vulnerability)(nil), // 8: chainguard.platform.tenant.Risk.Vulnerability + (*Recommendation_ReplaceArtifact)(nil), // 9: chainguard.platform.tenant.Recommendation.ReplaceArtifact + (*v1.UIDPFilter)(nil), // 10: chainguard.platform.common.UIDPFilter + (*timestamppb.Timestamp)(nil), // 11: google.protobuf.Timestamp +} +var file_risk_platform_proto_depIdxs = []int32{ + 10, // 0: chainguard.platform.tenant.RiskFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 4, // 1: chainguard.platform.tenant.RiskList.items:type_name -> chainguard.platform.tenant.Risk + 6, // 2: chainguard.platform.tenant.Risk.details:type_name -> chainguard.platform.tenant.Risk.Details + 5, // 3: chainguard.platform.tenant.Risk.recommendations:type_name -> chainguard.platform.tenant.Recommendation + 11, // 4: chainguard.platform.tenant.Risk.last_seen:type_name -> google.protobuf.Timestamp + 9, // 5: chainguard.platform.tenant.Recommendation.replace:type_name -> chainguard.platform.tenant.Recommendation.ReplaceArtifact + 7, // 6: chainguard.platform.tenant.Risk.Details.missing_data:type_name -> chainguard.platform.tenant.Risk.MissingData + 0, // 7: chainguard.platform.tenant.Risk.MissingData.type:type_name -> chainguard.platform.tenant.Risk.MissingData.Type + 1, // 8: chainguard.platform.tenant.Risk.Vulnerability.severity:type_name -> chainguard.platform.tenant.Risk.Vulnerability.Severity + 2, // 9: chainguard.platform.tenant.Risks.List:input_type -> chainguard.platform.tenant.RiskFilter + 3, // 10: chainguard.platform.tenant.Risks.List:output_type -> chainguard.platform.tenant.RiskList + 10, // [10:11] is the sub-list for method output_type + 9, // [9:10] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_risk_platform_proto_init() } +func file_risk_platform_proto_init() { + if File_risk_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_risk_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RiskFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_risk_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RiskList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_risk_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Risk); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_risk_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Recommendation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_risk_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Risk_Details); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_risk_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Risk_MissingData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_risk_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Risk_Vulnerability); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_risk_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Recommendation_ReplaceArtifact); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_risk_platform_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*Recommendation_Replace)(nil), + } + file_risk_platform_proto_msgTypes[4].OneofWrappers = []interface{}{ + (*Risk_Details_MissingData)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_risk_platform_proto_rawDesc, + NumEnums: 2, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_risk_platform_proto_goTypes, + DependencyIndexes: file_risk_platform_proto_depIdxs, + EnumInfos: file_risk_platform_proto_enumTypes, + MessageInfos: file_risk_platform_proto_msgTypes, + }.Build() + File_risk_platform_proto = out.File + file_risk_platform_proto_rawDesc = nil + file_risk_platform_proto_goTypes = nil + file_risk_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/risk.platform.pb.gw.go b/proto/platform/tenant/v1/risk.platform.pb.gw.go new file mode 100644 index 00000000..26acbe14 --- /dev/null +++ b/proto/platform/tenant/v1/risk.platform.pb.gw.go @@ -0,0 +1,171 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: risk.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_Risks_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Risks_List_0(ctx context.Context, marshaler runtime.Marshaler, client RisksClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RiskFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Risks_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Risks_List_0(ctx context.Context, marshaler runtime.Marshaler, server RisksServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RiskFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Risks_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterRisksHandlerServer registers the http handlers for service Risks to "mux". +// UnaryRPC :call RisksServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRisksHandlerFromEndpoint instead. +func RegisterRisksHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RisksServer) error { + + mux.Handle("GET", pattern_Risks_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Risks/List", runtime.WithHTTPPathPattern("/tenant/v1/risks")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Risks_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Risks_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterRisksHandlerFromEndpoint is same as RegisterRisksHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterRisksHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterRisksHandler(ctx, mux, conn) +} + +// RegisterRisksHandler registers the http handlers for service Risks to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterRisksHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterRisksHandlerClient(ctx, mux, NewRisksClient(conn)) +} + +// RegisterRisksHandlerClient registers the http handlers for service Risks +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RisksClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RisksClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "RisksClient" to call the correct interceptors. +func RegisterRisksHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RisksClient) error { + + mux.Handle("GET", pattern_Risks_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Risks/List", runtime.WithHTTPPathPattern("/tenant/v1/risks")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Risks_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Risks_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Risks_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "risks"}, "")) +) + +var ( + forward_Risks_List_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/tenant/v1/risk.platform.proto b/proto/platform/tenant/v1/risk.platform.proto new file mode 100644 index 00000000..73bf6c94 --- /dev/null +++ b/proto/platform/tenant/v1/risk.platform.proto @@ -0,0 +1,116 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformRiskProto"; + +package chainguard.platform.tenant; + +import "google/api/annotations.proto"; +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Risks { + rpc List(RiskFilter) returns (RiskList) { + option (google.api.http) = { + get: "/tenant/v1/risks" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_RISKS_LIST] + unscoped: true + } + }; + } +} + +message RiskFilter{ + // id is the exact UID of the record. + string id = 1; + + chainguard.platform.common.UIDPFilter uidp = 2; +} + +message RiskList{ + repeated Risk items = 1; +} + +message Risk { + // Risk ID (UIDP resource + unique ID) + string id = 1; + + // Grouping identifier to associate Risks in the same UIDP + // to each other. + string group_id = 2; + + // List of UIDPs that were used to determine this Risk. + repeated string inputs = 3; + + // What kind of risk is this? Lack of signatures, vulnerability, SBOM quality, etc. + Details details = 4; + + message Details { + oneof data { + MissingData missing_data = 1; + } + } + + message MissingData { + // What kind of data is missing (e.g. signature, sbom, policy, etc.) + Type type = 1; + + enum Type { + UNKNOWN = 0; + SIGNATURE = 1; + SBOM = 2; + POLICY = 3; + } + } + + message Vulnerability { + Severity severity = 5; + + enum Severity { + UNKNOWN = 0; + LOW = 1; + MEDIUM = 2; + HIGH = 3; + CRITICAL = 4; + } + + // External identifier of the source of the vuln - e.g. CVE ID. + string source = 7; + } + + // Output only. Free form text describing this Risk. + string description = 5; + // Output only. Chainguard EDU link for more details on this Risk. + string documentation_url = 6; + + // Optional. Chainguard's recommendation(s) for how to resolve this Risk. + repeated Recommendation recommendations = 7; + + // Output only. When Enforce last saw this Risk. + google.protobuf.Timestamp last_seen = 8; +} + +message Recommendation { + // Classification of what kind of remediation this is, e.g.: + // upgrade, replace, etc. + oneof action { + ReplaceArtifact replace = 1; + } + + message ReplaceArtifact { + string from = 1; + // Target artifact that may be able to resolve this Risk. + string to = 2; + } + + // Output only. Free form text describing how this can be resolved. + string description = 3; + // Output only. Chainguard EDU link for more details on this Recommendation. + string documentation_url = 4; +} diff --git a/proto/platform/tenant/v1/risk.platform_grpc.pb.go b/proto/platform/tenant/v1/risk.platform_grpc.pb.go new file mode 100644 index 00000000..91a9739e --- /dev/null +++ b/proto/platform/tenant/v1/risk.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: risk.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Risks_List_FullMethodName = "/chainguard.platform.tenant.Risks/List" +) + +// RisksClient is the client API for Risks service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type RisksClient interface { + List(ctx context.Context, in *RiskFilter, opts ...grpc.CallOption) (*RiskList, error) +} + +type risksClient struct { + cc grpc.ClientConnInterface +} + +func NewRisksClient(cc grpc.ClientConnInterface) RisksClient { + return &risksClient{cc} +} + +func (c *risksClient) List(ctx context.Context, in *RiskFilter, opts ...grpc.CallOption) (*RiskList, error) { + out := new(RiskList) + err := c.cc.Invoke(ctx, Risks_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RisksServer is the server API for Risks service. +// All implementations must embed UnimplementedRisksServer +// for forward compatibility +type RisksServer interface { + List(context.Context, *RiskFilter) (*RiskList, error) + mustEmbedUnimplementedRisksServer() +} + +// UnimplementedRisksServer must be embedded to have forward compatible implementations. +type UnimplementedRisksServer struct { +} + +func (UnimplementedRisksServer) List(context.Context, *RiskFilter) (*RiskList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedRisksServer) mustEmbedUnimplementedRisksServer() {} + +// UnsafeRisksServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RisksServer will +// result in compilation errors. +type UnsafeRisksServer interface { + mustEmbedUnimplementedRisksServer() +} + +func RegisterRisksServer(s grpc.ServiceRegistrar, srv RisksServer) { + s.RegisterService(&Risks_ServiceDesc, srv) +} + +func _Risks_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RiskFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RisksServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Risks_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RisksServer).List(ctx, req.(*RiskFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// Risks_ServiceDesc is the grpc.ServiceDesc for Risks service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Risks_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.Risks", + HandlerType: (*RisksServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _Risks_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "risk.platform.proto", +} diff --git a/proto/platform/tenant/v1/sbom.platform.pb.go b/proto/platform/tenant/v1/sbom.platform.pb.go new file mode 100644 index 00000000..cd078fb8 --- /dev/null +++ b/proto/platform/tenant/v1/sbom.platform.pb.go @@ -0,0 +1,1058 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: sbom.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Type +type Sbom2_Source int32 + +const ( + Sbom2_UNKNOWN Sbom2_Source = 0 + Sbom2_INGESTED Sbom2_Source = 1 + Sbom2_GENERATED Sbom2_Source = 2 +) + +// Enum value maps for Sbom2_Source. +var ( + Sbom2_Source_name = map[int32]string{ + 0: "UNKNOWN", + 1: "INGESTED", + 2: "GENERATED", + } + Sbom2_Source_value = map[string]int32{ + "UNKNOWN": 0, + "INGESTED": 1, + "GENERATED": 2, + } +) + +func (x Sbom2_Source) Enum() *Sbom2_Source { + p := new(Sbom2_Source) + *p = x + return p +} + +func (x Sbom2_Source) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Sbom2_Source) Descriptor() protoreflect.EnumDescriptor { + return file_sbom_platform_proto_enumTypes[0].Descriptor() +} + +func (Sbom2_Source) Type() protoreflect.EnumType { + return &file_sbom_platform_proto_enumTypes[0] +} + +func (x Sbom2_Source) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Sbom2_Source.Descriptor instead. +func (Sbom2_Source) EnumDescriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{0, 0} +} + +type ComponentGraph_Edge_Type int32 + +const ( + ComponentGraph_Edge_UNKNOWN ComponentGraph_Edge_Type = 0 + ComponentGraph_Edge_DESCRIBES ComponentGraph_Edge_Type = 1 + ComponentGraph_Edge_CONTAINS ComponentGraph_Edge_Type = 2 + ComponentGraph_Edge_DEPENDS_ON ComponentGraph_Edge_Type = 3 + ComponentGraph_Edge_GENERATED_FROM ComponentGraph_Edge_Type = 4 // and so on...; for inspiration, see https://spdx.github.io/spdx-spec/v2.3/relationships-between-SPDX-elements/ +) + +// Enum value maps for ComponentGraph_Edge_Type. +var ( + ComponentGraph_Edge_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "DESCRIBES", + 2: "CONTAINS", + 3: "DEPENDS_ON", + 4: "GENERATED_FROM", + } + ComponentGraph_Edge_Type_value = map[string]int32{ + "UNKNOWN": 0, + "DESCRIBES": 1, + "CONTAINS": 2, + "DEPENDS_ON": 3, + "GENERATED_FROM": 4, + } +) + +func (x ComponentGraph_Edge_Type) Enum() *ComponentGraph_Edge_Type { + p := new(ComponentGraph_Edge_Type) + *p = x + return p +} + +func (x ComponentGraph_Edge_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ComponentGraph_Edge_Type) Descriptor() protoreflect.EnumDescriptor { + return file_sbom_platform_proto_enumTypes[1].Descriptor() +} + +func (ComponentGraph_Edge_Type) Type() protoreflect.EnumType { + return &file_sbom_platform_proto_enumTypes[1] +} + +func (x ComponentGraph_Edge_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ComponentGraph_Edge_Type.Descriptor instead. +func (ComponentGraph_Edge_Type) EnumDescriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{1, 1, 0} +} + +// Sbom represents a normalized SBOM that we have ingested into our datastore. +// They are linked to Signatures via ID, as in they are 'children' of Signatures +// There can be multiple of these that we keep. +type Sbom2 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The Sbom UIDP at which this Sbom resides in the hierarchy. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // raw_sbom may or may not be useful in the long term, but for now to make + // progress on this, we'll just yolo and serialize it here. + RawSbom []byte `protobuf:"bytes,2,opt,name=raw_sbom,json=rawSbom,proto3" json:"raw_sbom,omitempty"` + Graph *ComponentGraph `protobuf:"bytes,3,opt,name=graph,proto3" json:"graph,omitempty"` + // last_seen tracks the timestamp at which this sbom was last seen. + // TODO(vaikas): Does this really make any sense? + LastSeen *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + // tool holds the name of the tool that produced the SBOM. + Tool string `protobuf:"bytes,5,opt,name=tool,proto3" json:"tool,omitempty"` + // format holds whether the SBOM is SPDX, CycloneDX, or other. + Format string `protobuf:"bytes,6,opt,name=format,proto3" json:"format,omitempty"` + // generated_at holds when the SBOM was generated. + GeneratedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=generated_at,json=generatedAt,proto3" json:"generated_at,omitempty"` + // authors is zero or more authors concatenated. + Authors string `protobuf:"bytes,8,opt,name=authors,proto3" json:"authors,omitempty"` + // source is where the SBOM came from. For example, we want to know if sbom + // was generated by us, or ingested. + Source Sbom2_Source `protobuf:"varint,9,opt,name=source,proto3,enum=chainguard.platform.tenant.Sbom2_Source" json:"source,omitempty"` + // Name of the Sbom. + Name string `protobuf:"bytes,10,opt,name=name,proto3" json:"name,omitempty"` + // Short description of the Sbom + Description string `protobuf:"bytes,11,opt,name=description,proto3" json:"description,omitempty"` + // digest of the SBOM when ingested + Digest *string `protobuf:"bytes,12,opt,name=digest,proto3,oneof" json:"digest,omitempty"` +} + +func (x *Sbom2) Reset() { + *x = Sbom2{} + if protoimpl.UnsafeEnabled { + mi := &file_sbom_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sbom2) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sbom2) ProtoMessage() {} + +func (x *Sbom2) ProtoReflect() protoreflect.Message { + mi := &file_sbom_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sbom2.ProtoReflect.Descriptor instead. +func (*Sbom2) Descriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Sbom2) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Sbom2) GetRawSbom() []byte { + if x != nil { + return x.RawSbom + } + return nil +} + +func (x *Sbom2) GetGraph() *ComponentGraph { + if x != nil { + return x.Graph + } + return nil +} + +func (x *Sbom2) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (x *Sbom2) GetTool() string { + if x != nil { + return x.Tool + } + return "" +} + +func (x *Sbom2) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *Sbom2) GetGeneratedAt() *timestamppb.Timestamp { + if x != nil { + return x.GeneratedAt + } + return nil +} + +func (x *Sbom2) GetAuthors() string { + if x != nil { + return x.Authors + } + return "" +} + +func (x *Sbom2) GetSource() Sbom2_Source { + if x != nil { + return x.Source + } + return Sbom2_UNKNOWN +} + +func (x *Sbom2) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Sbom2) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Sbom2) GetDigest() string { + if x != nil && x.Digest != nil { + return *x.Digest + } + return "" +} + +type ComponentGraph struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Nodes []*ComponentGraph_Node `protobuf:"bytes,1,rep,name=nodes,proto3" json:"nodes,omitempty"` + Edges []*ComponentGraph_Edge `protobuf:"bytes,2,rep,name=edges,proto3" json:"edges,omitempty"` +} + +func (x *ComponentGraph) Reset() { + *x = ComponentGraph{} + if protoimpl.UnsafeEnabled { + mi := &file_sbom_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComponentGraph) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComponentGraph) ProtoMessage() {} + +func (x *ComponentGraph) ProtoReflect() protoreflect.Message { + mi := &file_sbom_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ComponentGraph.ProtoReflect.Descriptor instead. +func (*ComponentGraph) Descriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *ComponentGraph) GetNodes() []*ComponentGraph_Node { + if x != nil { + return x.Nodes + } + return nil +} + +func (x *ComponentGraph) GetEdges() []*ComponentGraph_Edge { + if x != nil { + return x.Edges + } + return nil +} + +type Package2 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + License string `protobuf:"bytes,4,opt,name=license,proto3" json:"license,omitempty"` + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + Purl string `protobuf:"bytes,6,opt,name=purl,proto3" json:"purl,omitempty"` +} + +func (x *Package2) Reset() { + *x = Package2{} + if protoimpl.UnsafeEnabled { + mi := &file_sbom_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Package2) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Package2) ProtoMessage() {} + +func (x *Package2) ProtoReflect() protoreflect.Message { + mi := &file_sbom_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Package2.ProtoReflect.Descriptor instead. +func (*Package2) Descriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *Package2) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Package2) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Package2) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *Package2) GetLicense() string { + if x != nil { + return x.License + } + return "" +} + +func (x *Package2) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Package2) GetPurl() string { + if x != nil { + return x.Purl + } + return "" +} + +type File2 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Types []string `protobuf:"bytes,4,rep,name=types,proto3" json:"types,omitempty"` +} + +func (x *File2) Reset() { + *x = File2{} + if protoimpl.UnsafeEnabled { + mi := &file_sbom_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *File2) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*File2) ProtoMessage() {} + +func (x *File2) ProtoReflect() protoreflect.Message { + mi := &file_sbom_platform_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 File2.ProtoReflect.Descriptor instead. +func (*File2) Descriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *File2) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *File2) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *File2) GetTypes() []string { + if x != nil { + return x.Types + } + return nil +} + +type Sbom2List struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Sbom2 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *Sbom2List) Reset() { + *x = Sbom2List{} + if protoimpl.UnsafeEnabled { + mi := &file_sbom_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sbom2List) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sbom2List) ProtoMessage() {} + +func (x *Sbom2List) ProtoReflect() protoreflect.Message { + mi := &file_sbom_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sbom2List.ProtoReflect.Descriptor instead. +func (*Sbom2List) Descriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *Sbom2List) GetItems() []*Sbom2 { + if x != nil { + return x.Items + } + return nil +} + +type Sbom2Filter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` + // active_since is the timestamp after which the records should + // have last been observed in the returned context. + ActiveSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` + // include_raw_sbom is a flag to return the raw sbom field in the record. + IncludeRawSbom bool `protobuf:"varint,4,opt,name=include_raw_sbom,json=includeRawSbom,proto3" json:"include_raw_sbom,omitempty"` +} + +func (x *Sbom2Filter) Reset() { + *x = Sbom2Filter{} + if protoimpl.UnsafeEnabled { + mi := &file_sbom_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Sbom2Filter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Sbom2Filter) ProtoMessage() {} + +func (x *Sbom2Filter) ProtoReflect() protoreflect.Message { + mi := &file_sbom_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Sbom2Filter.ProtoReflect.Descriptor instead. +func (*Sbom2Filter) Descriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *Sbom2Filter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Sbom2Filter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *Sbom2Filter) GetActiveSince() *timestamppb.Timestamp { + if x != nil { + return x.ActiveSince + } + return nil +} + +func (x *Sbom2Filter) GetIncludeRawSbom() bool { + if x != nil { + return x.IncludeRawSbom + } + return false +} + +type ComponentGraph_Node struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to TypedNode: + // + // *ComponentGraph_Node_Package + // *ComponentGraph_Node_File + TypedNode isComponentGraph_Node_TypedNode `protobuf_oneof:"typed_node"` +} + +func (x *ComponentGraph_Node) Reset() { + *x = ComponentGraph_Node{} + if protoimpl.UnsafeEnabled { + mi := &file_sbom_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComponentGraph_Node) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComponentGraph_Node) ProtoMessage() {} + +func (x *ComponentGraph_Node) ProtoReflect() protoreflect.Message { + mi := &file_sbom_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ComponentGraph_Node.ProtoReflect.Descriptor instead. +func (*ComponentGraph_Node) Descriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{1, 0} +} + +func (m *ComponentGraph_Node) GetTypedNode() isComponentGraph_Node_TypedNode { + if m != nil { + return m.TypedNode + } + return nil +} + +func (x *ComponentGraph_Node) GetPackage() *Package2 { + if x, ok := x.GetTypedNode().(*ComponentGraph_Node_Package); ok { + return x.Package + } + return nil +} + +func (x *ComponentGraph_Node) GetFile() *File2 { + if x, ok := x.GetTypedNode().(*ComponentGraph_Node_File); ok { + return x.File + } + return nil +} + +type isComponentGraph_Node_TypedNode interface { + isComponentGraph_Node_TypedNode() +} + +type ComponentGraph_Node_Package struct { + Package *Package2 `protobuf:"bytes,1,opt,name=package,proto3,oneof"` +} + +type ComponentGraph_Node_File struct { + File *File2 `protobuf:"bytes,2,opt,name=file,proto3,oneof"` +} + +func (*ComponentGraph_Node_Package) isComponentGraph_Node_TypedNode() {} + +func (*ComponentGraph_Node_File) isComponentGraph_Node_TypedNode() {} + +type ComponentGraph_Edge struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SubjectId string `protobuf:"bytes,1,opt,name=subject_id,json=subjectId,proto3" json:"subject_id,omitempty"` + PredicateId string `protobuf:"bytes,2,opt,name=predicate_id,json=predicateId,proto3" json:"predicate_id,omitempty"` + Type ComponentGraph_Edge_Type `protobuf:"varint,3,opt,name=type,proto3,enum=chainguard.platform.tenant.ComponentGraph_Edge_Type" json:"type,omitempty"` +} + +func (x *ComponentGraph_Edge) Reset() { + *x = ComponentGraph_Edge{} + if protoimpl.UnsafeEnabled { + mi := &file_sbom_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComponentGraph_Edge) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComponentGraph_Edge) ProtoMessage() {} + +func (x *ComponentGraph_Edge) ProtoReflect() protoreflect.Message { + mi := &file_sbom_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ComponentGraph_Edge.ProtoReflect.Descriptor instead. +func (*ComponentGraph_Edge) Descriptor() ([]byte, []int) { + return file_sbom_platform_proto_rawDescGZIP(), []int{1, 1} +} + +func (x *ComponentGraph_Edge) GetSubjectId() string { + if x != nil { + return x.SubjectId + } + return "" +} + +func (x *ComponentGraph_Edge) GetPredicateId() string { + if x != nil { + return x.PredicateId + } + return "" +} + +func (x *ComponentGraph_Edge) GetType() ComponentGraph_Edge_Type { + if x != nil { + return x.Type + } + return ComponentGraph_Edge_UNKNOWN +} + +var File_sbom_platform_proto protoreflect.FileDescriptor + +var file_sbom_platform_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x73, 0x62, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, + 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x86, 0x04, 0x0a, 0x05, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x72, 0x61, 0x77, 0x5f, 0x73, 0x62, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x72, 0x61, 0x77, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x40, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x52, 0x05, 0x67, 0x72, 0x61, 0x70, 0x68, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, + 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x6f, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x3d, + 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1b, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x88, 0x01, 0x01, 0x22, 0x32, 0x0a, 0x06, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x47, 0x45, 0x53, 0x54, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x44, 0x10, 0x02, + 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x9b, 0x04, 0x0a, 0x0e, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x12, 0x45, + 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x61, 0x70, 0x68, + 0x2e, 0x45, 0x64, 0x67, 0x65, 0x52, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x1a, 0x8f, 0x01, 0x0a, + 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x32, 0x48, 0x00, 0x52, 0x07, + 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x32, 0x48, 0x00, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, + 0x42, 0x0c, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0xe8, + 0x01, 0x0a, 0x04, 0x45, 0x64, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, + 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x2e, 0x45, 0x64, 0x67, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x54, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x53, 0x43, + 0x52, 0x49, 0x42, 0x45, 0x53, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x4f, 0x4e, 0x54, 0x41, + 0x49, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44, 0x53, + 0x5f, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, + 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x10, 0x04, 0x22, 0x98, 0x01, 0x0a, 0x08, 0x50, 0x61, + 0x63, 0x6b, 0x61, 0x67, 0x65, 0x32, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x70, 0x75, 0x72, 0x6c, 0x22, 0x47, 0x0a, 0x05, 0x46, 0x69, 0x6c, 0x65, 0x32, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x44, 0x0a, + 0x09, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x52, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, + 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, + 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x28, + 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x73, 0x62, + 0x6f, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x52, 0x61, 0x77, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x6f, 0x0a, 0x05, 0x53, 0x62, 0x6f, 0x6d, + 0x73, 0x12, 0x66, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x08, 0x12, 0x06, 0x0a, 0x02, 0x8a, 0x05, 0x10, 0x01, 0x42, 0x6f, 0x0a, 0x25, 0x64, 0x65, 0x76, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x76, 0x31, 0x42, 0x17, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, + 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_sbom_platform_proto_rawDescOnce sync.Once + file_sbom_platform_proto_rawDescData = file_sbom_platform_proto_rawDesc +) + +func file_sbom_platform_proto_rawDescGZIP() []byte { + file_sbom_platform_proto_rawDescOnce.Do(func() { + file_sbom_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_sbom_platform_proto_rawDescData) + }) + return file_sbom_platform_proto_rawDescData +} + +var file_sbom_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_sbom_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_sbom_platform_proto_goTypes = []interface{}{ + (Sbom2_Source)(0), // 0: chainguard.platform.tenant.Sbom2.Source + (ComponentGraph_Edge_Type)(0), // 1: chainguard.platform.tenant.ComponentGraph.Edge.Type + (*Sbom2)(nil), // 2: chainguard.platform.tenant.Sbom2 + (*ComponentGraph)(nil), // 3: chainguard.platform.tenant.ComponentGraph + (*Package2)(nil), // 4: chainguard.platform.tenant.Package2 + (*File2)(nil), // 5: chainguard.platform.tenant.File2 + (*Sbom2List)(nil), // 6: chainguard.platform.tenant.Sbom2List + (*Sbom2Filter)(nil), // 7: chainguard.platform.tenant.Sbom2Filter + (*ComponentGraph_Node)(nil), // 8: chainguard.platform.tenant.ComponentGraph.Node + (*ComponentGraph_Edge)(nil), // 9: chainguard.platform.tenant.ComponentGraph.Edge + (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 11: chainguard.platform.common.UIDPFilter +} +var file_sbom_platform_proto_depIdxs = []int32{ + 3, // 0: chainguard.platform.tenant.Sbom2.graph:type_name -> chainguard.platform.tenant.ComponentGraph + 10, // 1: chainguard.platform.tenant.Sbom2.last_seen:type_name -> google.protobuf.Timestamp + 10, // 2: chainguard.platform.tenant.Sbom2.generated_at:type_name -> google.protobuf.Timestamp + 0, // 3: chainguard.platform.tenant.Sbom2.source:type_name -> chainguard.platform.tenant.Sbom2.Source + 8, // 4: chainguard.platform.tenant.ComponentGraph.nodes:type_name -> chainguard.platform.tenant.ComponentGraph.Node + 9, // 5: chainguard.platform.tenant.ComponentGraph.edges:type_name -> chainguard.platform.tenant.ComponentGraph.Edge + 2, // 6: chainguard.platform.tenant.Sbom2List.items:type_name -> chainguard.platform.tenant.Sbom2 + 11, // 7: chainguard.platform.tenant.Sbom2Filter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 10, // 8: chainguard.platform.tenant.Sbom2Filter.active_since:type_name -> google.protobuf.Timestamp + 4, // 9: chainguard.platform.tenant.ComponentGraph.Node.package:type_name -> chainguard.platform.tenant.Package2 + 5, // 10: chainguard.platform.tenant.ComponentGraph.Node.file:type_name -> chainguard.platform.tenant.File2 + 1, // 11: chainguard.platform.tenant.ComponentGraph.Edge.type:type_name -> chainguard.platform.tenant.ComponentGraph.Edge.Type + 7, // 12: chainguard.platform.tenant.Sboms.List:input_type -> chainguard.platform.tenant.Sbom2Filter + 6, // 13: chainguard.platform.tenant.Sboms.List:output_type -> chainguard.platform.tenant.Sbom2List + 13, // [13:14] is the sub-list for method output_type + 12, // [12:13] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name +} + +func init() { file_sbom_platform_proto_init() } +func file_sbom_platform_proto_init() { + if File_sbom_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_sbom_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sbom2); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sbom_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComponentGraph); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sbom_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Package2); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sbom_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*File2); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sbom_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sbom2List); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sbom_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Sbom2Filter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sbom_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComponentGraph_Node); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sbom_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComponentGraph_Edge); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_sbom_platform_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_sbom_platform_proto_msgTypes[6].OneofWrappers = []interface{}{ + (*ComponentGraph_Node_Package)(nil), + (*ComponentGraph_Node_File)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_sbom_platform_proto_rawDesc, + NumEnums: 2, + NumMessages: 8, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_sbom_platform_proto_goTypes, + DependencyIndexes: file_sbom_platform_proto_depIdxs, + EnumInfos: file_sbom_platform_proto_enumTypes, + MessageInfos: file_sbom_platform_proto_msgTypes, + }.Build() + File_sbom_platform_proto = out.File + file_sbom_platform_proto_rawDesc = nil + file_sbom_platform_proto_goTypes = nil + file_sbom_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/sbom.platform.pb.gw.go b/proto/platform/tenant/v1/sbom.platform.pb.gw.go new file mode 100644 index 00000000..9b2cab72 --- /dev/null +++ b/proto/platform/tenant/v1/sbom.platform.pb.gw.go @@ -0,0 +1,169 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: sbom.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_Sboms_List_0(ctx context.Context, marshaler runtime.Marshaler, client SbomsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Sbom2Filter + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Sboms_List_0(ctx context.Context, marshaler runtime.Marshaler, server SbomsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq Sbom2Filter + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterSbomsHandlerServer registers the http handlers for service Sboms to "mux". +// UnaryRPC :call SbomsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSbomsHandlerFromEndpoint instead. +func RegisterSbomsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SbomsServer) error { + + mux.Handle("POST", pattern_Sboms_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Sboms/List", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Sboms/List")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Sboms_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Sboms_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterSbomsHandlerFromEndpoint is same as RegisterSbomsHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterSbomsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterSbomsHandler(ctx, mux, conn) +} + +// RegisterSbomsHandler registers the http handlers for service Sboms to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterSbomsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterSbomsHandlerClient(ctx, mux, NewSbomsClient(conn)) +} + +// RegisterSbomsHandlerClient registers the http handlers for service Sboms +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SbomsClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SbomsClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "SbomsClient" to call the correct interceptors. +func RegisterSbomsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SbomsClient) error { + + mux.Handle("POST", pattern_Sboms_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Sboms/List", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Sboms/List")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Sboms_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Sboms_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Sboms_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Sboms", "List"}, "")) +) + +var ( + forward_Sboms_List_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/tenant/v1/sbom.platform.proto b/proto/platform/tenant/v1/sbom.platform.proto new file mode 100644 index 00000000..d1bf64dc --- /dev/null +++ b/proto/platform/tenant/v1/sbom.platform.proto @@ -0,0 +1,131 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantSbomProto"; + +package chainguard.platform.tenant; + +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Sboms { + rpc List(Sbom2Filter) returns (Sbom2List) { + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_SBOMS_LIST] + unscoped: true + } + }; + } + } + +// Sbom represents a normalized SBOM that we have ingested into our datastore. +// They are linked to Signatures via ID, as in they are 'children' of Signatures +// There can be multiple of these that we keep. +message Sbom2 { + // id, The Sbom UIDP at which this Sbom resides in the hierarchy. + string id = 1; + + // raw_sbom may or may not be useful in the long term, but for now to make + // progress on this, we'll just yolo and serialize it here. + bytes raw_sbom = 2; + + ComponentGraph graph = 3; + + // last_seen tracks the timestamp at which this sbom was last seen. + // TODO(vaikas): Does this really make any sense? + google.protobuf.Timestamp last_seen = 4; + + // tool holds the name of the tool that produced the SBOM. + string tool = 5; + // format holds whether the SBOM is SPDX, CycloneDX, or other. + string format = 6; + // generated_at holds when the SBOM was generated. + google.protobuf.Timestamp generated_at = 7; + // authors is zero or more authors concatenated. + string authors = 8; + + // source is where the SBOM came from. For example, we want to know if sbom + // was generated by us, or ingested. + Source source = 9; + + // Type + enum Source { + UNKNOWN = 0; + INGESTED = 1; + GENERATED = 2; + } + // Name of the Sbom. + string name = 10; + + // Short description of the Sbom + string description = 11; + + // digest of the SBOM when ingested + optional string digest = 12; +} + +message ComponentGraph { + repeated Node nodes = 1; + repeated Edge edges = 2; + + message Node { + oneof typed_node { + Package2 package = 1; + File2 file = 2; + } + } + + message Edge { + string subject_id = 1; + string predicate_id = 2; + Type type = 3; + + enum Type { + UNKNOWN = 0; + DESCRIBES = 1; + CONTAINS = 2; + DEPENDS_ON = 3; + GENERATED_FROM = 4; + // and so on...; for inspiration, see https://spdx.github.io/spdx-spec/v2.3/relationships-between-SPDX-elements/ + } + } +} + +message Package2 { + string id = 1; + string name = 2; + string version = 3; + string license = 4; + string description = 5; + string purl = 6; +} + +message File2 { + // 3 was used for single type. + reserved 3; + + string id = 1; + string name = 2; + repeated string types = 4; +} + +message Sbom2List { + repeated Sbom2 items = 1; +} + +message Sbom2Filter { + // id is the exact UID of the record. + string id = 1; + + chainguard.platform.common.UIDPFilter uidp = 2; + + // active_since is the timestamp after which the records should + // have last been observed in the returned context. + google.protobuf.Timestamp active_since = 3; + // include_raw_sbom is a flag to return the raw sbom field in the record. + bool include_raw_sbom = 4; +} diff --git a/proto/platform/tenant/v1/sbom.platform_grpc.pb.go b/proto/platform/tenant/v1/sbom.platform_grpc.pb.go new file mode 100644 index 00000000..4f8ecc26 --- /dev/null +++ b/proto/platform/tenant/v1/sbom.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: sbom.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Sboms_List_FullMethodName = "/chainguard.platform.tenant.Sboms/List" +) + +// SbomsClient is the client API for Sboms service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SbomsClient interface { + List(ctx context.Context, in *Sbom2Filter, opts ...grpc.CallOption) (*Sbom2List, error) +} + +type sbomsClient struct { + cc grpc.ClientConnInterface +} + +func NewSbomsClient(cc grpc.ClientConnInterface) SbomsClient { + return &sbomsClient{cc} +} + +func (c *sbomsClient) List(ctx context.Context, in *Sbom2Filter, opts ...grpc.CallOption) (*Sbom2List, error) { + out := new(Sbom2List) + err := c.cc.Invoke(ctx, Sboms_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SbomsServer is the server API for Sboms service. +// All implementations must embed UnimplementedSbomsServer +// for forward compatibility +type SbomsServer interface { + List(context.Context, *Sbom2Filter) (*Sbom2List, error) + mustEmbedUnimplementedSbomsServer() +} + +// UnimplementedSbomsServer must be embedded to have forward compatible implementations. +type UnimplementedSbomsServer struct { +} + +func (UnimplementedSbomsServer) List(context.Context, *Sbom2Filter) (*Sbom2List, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedSbomsServer) mustEmbedUnimplementedSbomsServer() {} + +// UnsafeSbomsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SbomsServer will +// result in compilation errors. +type UnsafeSbomsServer interface { + mustEmbedUnimplementedSbomsServer() +} + +func RegisterSbomsServer(s grpc.ServiceRegistrar, srv SbomsServer) { + s.RegisterService(&Sboms_ServiceDesc, srv) +} + +func _Sboms_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Sbom2Filter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SbomsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Sboms_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SbomsServer).List(ctx, req.(*Sbom2Filter)) + } + return interceptor(ctx, in, info, handler) +} + +// Sboms_ServiceDesc is the grpc.ServiceDesc for Sboms service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Sboms_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.Sboms", + HandlerType: (*SbomsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _Sboms_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "sbom.platform.proto", +} diff --git a/proto/platform/tenant/v1/signature.platform.pb.go b/proto/platform/tenant/v1/signature.platform.pb.go new file mode 100644 index 00000000..894186c0 --- /dev/null +++ b/proto/platform/tenant/v1/signature.platform.pb.go @@ -0,0 +1,731 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: signature.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Signature struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The Signature UIDP at which this Signature resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name of the Signature. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // a short description of this Signature. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // last_seen tracks the timestamp at which this signature was last seen. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + // predicate_type is an optional field that captures the type of signed + // metadata this signature has signed. + // - For simple signatures (e.g. directly signed artifact), this will + // be empty to represent the "null claim". + // - For signed claims (e.g. attestations), this will hold the in-toto + // predicate type of the signed claim. + PredicateType string `protobuf:"bytes,5,opt,name=predicate_type,json=predicateType,proto3" json:"predicate_type,omitempty"` + // Types that are assignable to Kind: + // + // *Signature_None + // *Signature_Keyless_ + // *Signature_Key_ + Kind isSignature_Kind `protobuf_oneof:"kind"` +} + +func (x *Signature) Reset() { + *x = Signature{} + if protoimpl.UnsafeEnabled { + mi := &file_signature_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Signature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Signature) ProtoMessage() {} + +func (x *Signature) ProtoReflect() protoreflect.Message { + mi := &file_signature_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Signature.ProtoReflect.Descriptor instead. +func (*Signature) Descriptor() ([]byte, []int) { + return file_signature_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Signature) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Signature) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Signature) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Signature) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (x *Signature) GetPredicateType() string { + if x != nil { + return x.PredicateType + } + return "" +} + +func (m *Signature) GetKind() isSignature_Kind { + if m != nil { + return m.Kind + } + return nil +} + +func (x *Signature) GetNone() *emptypb.Empty { + if x, ok := x.GetKind().(*Signature_None); ok { + return x.None + } + return nil +} + +func (x *Signature) GetKeyless() *Signature_Keyless { + if x, ok := x.GetKind().(*Signature_Keyless_); ok { + return x.Keyless + } + return nil +} + +func (x *Signature) GetKey() *Signature_Key { + if x, ok := x.GetKind().(*Signature_Key_); ok { + return x.Key + } + return nil +} + +type isSignature_Kind interface { + isSignature_Kind() +} + +type Signature_None struct { + // none is the kind of signature that is attached when a policy + // designates an image as "statically" trusted. + None *emptypb.Empty `protobuf:"bytes,10,opt,name=none,proto3,oneof"` +} + +type Signature_Keyless_ struct { + // keyless is the kind of signature that is attached when a signature + // was produced via a "keyless" flow. + Keyless *Signature_Keyless `protobuf:"bytes,11,opt,name=keyless,proto3,oneof"` +} + +type Signature_Key_ struct { + // key is the kind of signature that is attached when a signature + // was produced via a static key pair. + Key *Signature_Key `protobuf:"bytes,12,opt,name=key,proto3,oneof"` +} + +func (*Signature_None) isSignature_Kind() {} + +func (*Signature_Keyless_) isSignature_Kind() {} + +func (*Signature_Key_) isSignature_Kind() {} + +type SignatureList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Signature `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *SignatureList) Reset() { + *x = SignatureList{} + if protoimpl.UnsafeEnabled { + mi := &file_signature_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SignatureList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SignatureList) ProtoMessage() {} + +func (x *SignatureList) ProtoReflect() protoreflect.Message { + mi := &file_signature_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SignatureList.ProtoReflect.Descriptor instead. +func (*SignatureList) Descriptor() ([]byte, []int) { + return file_signature_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *SignatureList) GetItems() []*Signature { + if x != nil { + return x.Items + } + return nil +} + +type SignatureFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` + // active_since is the timestamp after which the records should + // have last been observed in the returned context. + ActiveSince *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + PredicateType *string `protobuf:"bytes,4,opt,name=predicate_type,json=predicateType,proto3,oneof" json:"predicate_type,omitempty"` +} + +func (x *SignatureFilter) Reset() { + *x = SignatureFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_signature_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SignatureFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SignatureFilter) ProtoMessage() {} + +func (x *SignatureFilter) ProtoReflect() protoreflect.Message { + mi := &file_signature_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SignatureFilter.ProtoReflect.Descriptor instead. +func (*SignatureFilter) Descriptor() ([]byte, []int) { + return file_signature_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *SignatureFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *SignatureFilter) GetActiveSince() *timestamppb.Timestamp { + if x != nil { + return x.ActiveSince + } + return nil +} + +func (x *SignatureFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SignatureFilter) GetPredicateType() string { + if x != nil && x.PredicateType != nil { + return *x.PredicateType + } + return "" +} + +type Signature_Keyless struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Issuer string `protobuf:"bytes,1,opt,name=issuer,proto3" json:"issuer,omitempty"` + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + // TODO: Consider making this a oneof when other providers + // start producing interesting claims. + Github *Signature_Keyless_Github `protobuf:"bytes,3,opt,name=github,proto3" json:"github,omitempty"` +} + +func (x *Signature_Keyless) Reset() { + *x = Signature_Keyless{} + if protoimpl.UnsafeEnabled { + mi := &file_signature_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Signature_Keyless) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Signature_Keyless) ProtoMessage() {} + +func (x *Signature_Keyless) ProtoReflect() protoreflect.Message { + mi := &file_signature_platform_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 Signature_Keyless.ProtoReflect.Descriptor instead. +func (*Signature_Keyless) Descriptor() ([]byte, []int) { + return file_signature_platform_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *Signature_Keyless) GetIssuer() string { + if x != nil { + return x.Issuer + } + return "" +} + +func (x *Signature_Keyless) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *Signature_Keyless) GetGithub() *Signature_Keyless_Github { + if x != nil { + return x.Github + } + return nil +} + +type Signature_Key struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Signature_Key) Reset() { + *x = Signature_Key{} + if protoimpl.UnsafeEnabled { + mi := &file_signature_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Signature_Key) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Signature_Key) ProtoMessage() {} + +func (x *Signature_Key) ProtoReflect() protoreflect.Message { + mi := &file_signature_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Signature_Key.ProtoReflect.Descriptor instead. +func (*Signature_Key) Descriptor() ([]byte, []int) { + return file_signature_platform_proto_rawDescGZIP(), []int{0, 1} +} + +type Signature_Keyless_Github struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // OID: 1.3.6.1.4.1.57264.1.2 + WorkflowTrigger string `protobuf:"bytes,1,opt,name=workflow_trigger,json=workflowTrigger,proto3" json:"workflow_trigger,omitempty"` + // OID: 1.3.6.1.4.1.57264.1.3 + WorkflowSha string `protobuf:"bytes,2,opt,name=workflow_sha,json=workflowSha,proto3" json:"workflow_sha,omitempty"` + // OID: 1.3.6.1.4.1.57264.1.4 + WorkflowName string `protobuf:"bytes,3,opt,name=workflow_name,json=workflowName,proto3" json:"workflow_name,omitempty"` + // OID: 1.3.6.1.4.1.57264.1.5 + WorkflowRepo string `protobuf:"bytes,4,opt,name=workflow_repo,json=workflowRepo,proto3" json:"workflow_repo,omitempty"` + // OID: 1.3.6.1.4.1.57264.1.6 + WorkflowRef string `protobuf:"bytes,5,opt,name=workflow_ref,json=workflowRef,proto3" json:"workflow_ref,omitempty"` +} + +func (x *Signature_Keyless_Github) Reset() { + *x = Signature_Keyless_Github{} + if protoimpl.UnsafeEnabled { + mi := &file_signature_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Signature_Keyless_Github) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Signature_Keyless_Github) ProtoMessage() {} + +func (x *Signature_Keyless_Github) ProtoReflect() protoreflect.Message { + mi := &file_signature_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Signature_Keyless_Github.ProtoReflect.Descriptor instead. +func (*Signature_Keyless_Github) Descriptor() ([]byte, []int) { + return file_signature_platform_proto_rawDescGZIP(), []int{0, 0, 0} +} + +func (x *Signature_Keyless_Github) GetWorkflowTrigger() string { + if x != nil { + return x.WorkflowTrigger + } + return "" +} + +func (x *Signature_Keyless_Github) GetWorkflowSha() string { + if x != nil { + return x.WorkflowSha + } + return "" +} + +func (x *Signature_Keyless_Github) GetWorkflowName() string { + if x != nil { + return x.WorkflowName + } + return "" +} + +func (x *Signature_Keyless_Github) GetWorkflowRepo() string { + if x != nil { + return x.WorkflowRepo + } + return "" +} + +func (x *Signature_Keyless_Github) GetWorkflowRef() string { + if x != nil { + return x.WorkflowRef + } + return "" +} + +var File_signature_platform_proto protoreflect.FileDescriptor + +var file_signature_platform_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, + 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0xca, 0x05, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, + 0x65, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, + 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x6e, 0x6f, 0x6e, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x04, + 0x6e, 0x6f, 0x6e, 0x65, 0x12, 0x49, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x6c, 0x65, 0x73, 0x73, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x4b, 0x65, 0x79, + 0x6c, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x6c, 0x65, 0x73, 0x73, 0x12, + 0x3d, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x48, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x1a, 0xcf, + 0x02, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x6c, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, + 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, + 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x4c, 0x0a, 0x06, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x6c, 0x65, 0x73, 0x73, 0x2e, 0x47, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x52, 0x06, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x1a, 0xc3, 0x01, 0x0a, 0x06, 0x47, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x12, 0x29, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, + 0x77, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x68, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, + 0x53, 0x68, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, + 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x21, 0x0a, + 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x66, + 0x1a, 0x05, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, + 0x4c, 0x0a, 0x0d, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x3b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xdf, 0x01, + 0x0a, 0x0f, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, + 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x3d, 0x0a, + 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x2a, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x64, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, + 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x32, + 0x9a, 0x01, 0x0a, 0x0a, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x8b, + 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xef, 0x04, 0x10, 0x01, 0x42, 0x74, 0x0a, 0x25, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, + 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1c, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_signature_platform_proto_rawDescOnce sync.Once + file_signature_platform_proto_rawDescData = file_signature_platform_proto_rawDesc +) + +func file_signature_platform_proto_rawDescGZIP() []byte { + file_signature_platform_proto_rawDescOnce.Do(func() { + file_signature_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_signature_platform_proto_rawDescData) + }) + return file_signature_platform_proto_rawDescData +} + +var file_signature_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_signature_platform_proto_goTypes = []interface{}{ + (*Signature)(nil), // 0: chainguard.platform.tenant.Signature + (*SignatureList)(nil), // 1: chainguard.platform.tenant.SignatureList + (*SignatureFilter)(nil), // 2: chainguard.platform.tenant.SignatureFilter + (*Signature_Keyless)(nil), // 3: chainguard.platform.tenant.Signature.Keyless + (*Signature_Key)(nil), // 4: chainguard.platform.tenant.Signature.Key + (*Signature_Keyless_Github)(nil), // 5: chainguard.platform.tenant.Signature.Keyless.Github + (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 7: google.protobuf.Empty + (*v1.UIDPFilter)(nil), // 8: chainguard.platform.common.UIDPFilter +} +var file_signature_platform_proto_depIdxs = []int32{ + 6, // 0: chainguard.platform.tenant.Signature.last_seen:type_name -> google.protobuf.Timestamp + 7, // 1: chainguard.platform.tenant.Signature.none:type_name -> google.protobuf.Empty + 3, // 2: chainguard.platform.tenant.Signature.keyless:type_name -> chainguard.platform.tenant.Signature.Keyless + 4, // 3: chainguard.platform.tenant.Signature.key:type_name -> chainguard.platform.tenant.Signature.Key + 0, // 4: chainguard.platform.tenant.SignatureList.items:type_name -> chainguard.platform.tenant.Signature + 8, // 5: chainguard.platform.tenant.SignatureFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 6, // 6: chainguard.platform.tenant.SignatureFilter.active_since:type_name -> google.protobuf.Timestamp + 5, // 7: chainguard.platform.tenant.Signature.Keyless.github:type_name -> chainguard.platform.tenant.Signature.Keyless.Github + 2, // 8: chainguard.platform.tenant.Signatures.List:input_type -> chainguard.platform.tenant.SignatureFilter + 1, // 9: chainguard.platform.tenant.Signatures.List:output_type -> chainguard.platform.tenant.SignatureList + 9, // [9:10] is the sub-list for method output_type + 8, // [8:9] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name +} + +func init() { file_signature_platform_proto_init() } +func file_signature_platform_proto_init() { + if File_signature_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_signature_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Signature); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_signature_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignatureList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_signature_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SignatureFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_signature_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Signature_Keyless); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_signature_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Signature_Key); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_signature_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Signature_Keyless_Github); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_signature_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Signature_None)(nil), + (*Signature_Keyless_)(nil), + (*Signature_Key_)(nil), + } + file_signature_platform_proto_msgTypes[2].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_signature_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_signature_platform_proto_goTypes, + DependencyIndexes: file_signature_platform_proto_depIdxs, + MessageInfos: file_signature_platform_proto_msgTypes, + }.Build() + File_signature_platform_proto = out.File + file_signature_platform_proto_rawDesc = nil + file_signature_platform_proto_goTypes = nil + file_signature_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/signature.platform.proto b/proto/platform/tenant/v1/signature.platform.proto new file mode 100644 index 00000000..d8ab1e92 --- /dev/null +++ b/proto/platform/tenant/v1/signature.platform.proto @@ -0,0 +1,110 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantSignatureProto"; + +package chainguard.platform.tenant; + +import "google/api/annotations.proto"; +import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Signatures { + rpc List(SignatureFilter) returns (SignatureList) { + option (google.api.http) = { + get: "/tenant/v1/signatures" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_RECORD_SIGNATURES_LIST] + unscoped: true + } + }; + } +} + +message Signature { + // id, The Signature UIDP at which this Signature resides. + string id = 1; + + // name of the Signature. + string name = 2; + + // a short description of this Signature. + string description = 3; + + // last_seen tracks the timestamp at which this signature was last seen. + google.protobuf.Timestamp last_seen = 4; + + // predicate_type is an optional field that captures the type of signed + // metadata this signature has signed. + // - For simple signatures (e.g. directly signed artifact), this will + // be empty to represent the "null claim". + // - For signed claims (e.g. attestations), this will hold the in-toto + // predicate type of the signed claim. + string predicate_type = 5; + + oneof kind { + // none is the kind of signature that is attached when a policy + // designates an image as "statically" trusted. + google.protobuf.Empty none = 10; + + // keyless is the kind of signature that is attached when a signature + // was produced via a "keyless" flow. + Keyless keyless = 11; + + // key is the kind of signature that is attached when a signature + // was produced via a static key pair. + Key key = 12; + } + + message Keyless { + string issuer = 1; + string subject = 2; + + // TODO: Consider making this a oneof when other providers + // start producing interesting claims. + Github github = 3; + + message Github { + // OID: 1.3.6.1.4.1.57264.1.2 + string workflow_trigger = 1; + + // OID: 1.3.6.1.4.1.57264.1.3 + string workflow_sha = 2; + + // OID: 1.3.6.1.4.1.57264.1.4 + string workflow_name = 3; + + // OID: 1.3.6.1.4.1.57264.1.5 + string workflow_repo = 4; + + // OID: 1.3.6.1.4.1.57264.1.6 + string workflow_ref = 5; + } + } + + message Key { + // TODO: What useful information should we encode here? + } +} + +message SignatureList { + repeated Signature items = 1; +} + +message SignatureFilter { + chainguard.platform.common.UIDPFilter uidp = 1; + + // active_since is the timestamp after which the records should + // have last been observed in the returned context. + google.protobuf.Timestamp active_since = 2; + + string name = 3; + + optional string predicate_type = 4; +} diff --git a/proto/platform/tenant/v1/signature.platform_grpc.pb.go b/proto/platform/tenant/v1/signature.platform_grpc.pb.go new file mode 100644 index 00000000..52506e8c --- /dev/null +++ b/proto/platform/tenant/v1/signature.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: signature.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Signatures_List_FullMethodName = "/chainguard.platform.tenant.Signatures/List" +) + +// SignaturesClient is the client API for Signatures service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SignaturesClient interface { + List(ctx context.Context, in *SignatureFilter, opts ...grpc.CallOption) (*SignatureList, error) +} + +type signaturesClient struct { + cc grpc.ClientConnInterface +} + +func NewSignaturesClient(cc grpc.ClientConnInterface) SignaturesClient { + return &signaturesClient{cc} +} + +func (c *signaturesClient) List(ctx context.Context, in *SignatureFilter, opts ...grpc.CallOption) (*SignatureList, error) { + out := new(SignatureList) + err := c.cc.Invoke(ctx, Signatures_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SignaturesServer is the server API for Signatures service. +// All implementations must embed UnimplementedSignaturesServer +// for forward compatibility +type SignaturesServer interface { + List(context.Context, *SignatureFilter) (*SignatureList, error) + mustEmbedUnimplementedSignaturesServer() +} + +// UnimplementedSignaturesServer must be embedded to have forward compatible implementations. +type UnimplementedSignaturesServer struct { +} + +func (UnimplementedSignaturesServer) List(context.Context, *SignatureFilter) (*SignatureList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedSignaturesServer) mustEmbedUnimplementedSignaturesServer() {} + +// UnsafeSignaturesServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SignaturesServer will +// result in compilation errors. +type UnsafeSignaturesServer interface { + mustEmbedUnimplementedSignaturesServer() +} + +func RegisterSignaturesServer(s grpc.ServiceRegistrar, srv SignaturesServer) { + s.RegisterService(&Signatures_ServiceDesc, srv) +} + +func _Signatures_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SignatureFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SignaturesServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Signatures_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SignaturesServer).List(ctx, req.(*SignatureFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// Signatures_ServiceDesc is the grpc.ServiceDesc for Signatures service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Signatures_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.Signatures", + HandlerType: (*SignaturesServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _Signatures_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "signature.platform.proto", +} diff --git a/proto/platform/tenant/v1/test/mock_attestations.go b/proto/platform/tenant/v1/test/mock_attestations.go new file mode 100644 index 00000000..5ad40300 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_attestations.go @@ -0,0 +1,38 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.AttestationsClient = (*MockAttestationsClientt)(nil) + +type MockAttestationsClientt struct { + OnList []AttestationsOnList +} + +type AttestationsOnList struct { + Given *tenant.AttestationFilter + List *tenant.AttestationList + Error error +} + +func (m MockAttestationsClientt) List(_ context.Context, given *tenant.AttestationFilter, _ ...grpc.CallOption) (*tenant.AttestationList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_client.go b/proto/platform/tenant/v1/test/mock_client.go new file mode 100644 index 00000000..72625469 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_client.go @@ -0,0 +1,81 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +type MockTenantClient struct { + OnClose error + + ClustersClient MockClustersClient + RecordsClient MockRecordsClient + RecordContextsClient MockRecordContextsClient + SbomsClient MockSbomsClient + SignaturesClient MockSignaturesClient + PolicyResultsClient MockPolicyResultsClient + NodesClient MockNodesClient + NamespacesClient MockNamespacesClient + RisksClient MockRisksClient + WorkloadsClient MockWorkloadsClient + VulnReportsClient MockVulnReportsClient + AttestationClient MockAttestationsClientt +} + +var _ tenant.Clients = (*MockTenantClient)(nil) + +func (m MockTenantClient) Clusters() tenant.ClustersClient { + return &m.ClustersClient +} + +func (m MockTenantClient) Records() tenant.RecordsClient { + return &m.RecordsClient +} + +func (m MockTenantClient) RecordContexts() tenant.RecordContextsClient { + return &m.RecordContextsClient +} + +func (m MockTenantClient) Sboms() tenant.SbomsClient { + return &m.SbomsClient +} + +func (m MockTenantClient) Risks() tenant.RisksClient { + return &m.RisksClient +} + +func (m MockTenantClient) Signatures() tenant.SignaturesClient { + return &m.SignaturesClient +} + +func (m MockTenantClient) PolicyResults() tenant.PolicyResultsClient { + return &m.PolicyResultsClient +} + +func (m MockTenantClient) Nodes() tenant.NodesClient { + return &m.NodesClient +} + +func (m MockTenantClient) Namespaces() tenant.NamespacesClient { + return &m.NamespacesClient +} + +func (m MockTenantClient) Workloads() tenant.WorkloadsClient { + return &m.WorkloadsClient +} + +func (m MockTenantClient) VulnReports() tenant.VulnReportsClient { + return &m.VulnReportsClient +} + +func (m MockTenantClient) Attestations() tenant.AttestationsClient { + return &m.AttestationClient +} + +func (m MockTenantClient) Close() error { + return m.OnClose +} diff --git a/proto/platform/tenant/v1/test/mock_cluster.go b/proto/platform/tenant/v1/test/mock_cluster.go new file mode 100644 index 00000000..d23a82cd --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_cluster.go @@ -0,0 +1,150 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + "google.golang.org/protobuf/types/known/emptypb" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.ClustersClient = (*MockClustersClient)(nil) + +type MockClustersClient struct { + OnCreate []ClustersOnCreate + OnDelete []ClustersOnDelete + OnList []ClustersOnList + OnUpdate []ClustersOnUpdate + OnConfig []ClustersOnConfig + OnProfiles []ClustersOnProfiles + OnDiscover []ClustersOnDiscover + OnCIDR []ClustersOnCIDR +} + +type ClustersOnCreate struct { + Given *tenant.CreateClusterRequest + Created *tenant.Cluster + Error error +} + +type ClustersOnDelete struct { + Given *tenant.CreateClusterRequest + Error error +} + +type ClustersOnList struct { + Given *tenant.ClusterFilter + List *tenant.ClusterList + Error error +} + +type ClustersOnUpdate struct { + Given *tenant.Cluster + Updated *tenant.Cluster + Error error +} + +type ClustersOnConfig struct { + Given *tenant.ClusterConfigRequest + Config *tenant.ClusterConfigResponse + Error error +} + +type ClustersOnProfiles struct { + Given *tenant.ClusterProfilesRequest + Config *tenant.ClusterProfilesResponse + Error error +} + +type ClustersOnDiscover struct { + Given *tenant.ClusterDiscoveryRequest + Config *tenant.ClusterDiscoveryResponse + Error error +} + +type ClustersOnCIDR struct { + Given *tenant.ClusterCIDRRequest + Config *tenant.ClusterCIDRResponse + Error error +} + +func (m MockClustersClient) Create(_ context.Context, given *tenant.CreateClusterRequest, _ ...grpc.CallOption) (*tenant.Cluster, error) { + for _, o := range m.OnCreate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Created, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockClustersClient) Delete(_ context.Context, given *tenant.DeleteClusterRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { + for _, o := range m.OnDelete { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return &emptypb.Empty{}, o.Error + } + } + return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) +} + +func (m MockClustersClient) List(_ context.Context, given *tenant.ClusterFilter, _ ...grpc.CallOption) (*tenant.ClusterList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockClustersClient) Update(_ context.Context, given *tenant.Cluster, _ ...grpc.CallOption) (*tenant.Cluster, error) { + for _, o := range m.OnUpdate { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Updated, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockClustersClient) Config(_ context.Context, given *tenant.ClusterConfigRequest, _ ...grpc.CallOption) (*tenant.ClusterConfigResponse, error) { + for _, o := range m.OnConfig { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Config, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockClustersClient) Profiles(_ context.Context, given *tenant.ClusterProfilesRequest, _ ...grpc.CallOption) (*tenant.ClusterProfilesResponse, error) { + for _, o := range m.OnProfiles { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Config, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockClustersClient) Discover(_ context.Context, given *tenant.ClusterDiscoveryRequest, _ ...grpc.CallOption) (*tenant.ClusterDiscoveryResponse, error) { + for _, o := range m.OnDiscover { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Config, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + +func (m MockClustersClient) CIDR(_ context.Context, given *tenant.ClusterCIDRRequest, _ ...grpc.CallOption) (*tenant.ClusterCIDRResponse, error) { + for _, o := range m.OnCIDR { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Config, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_contexts.go b/proto/platform/tenant/v1/test/mock_contexts.go new file mode 100644 index 00000000..1bf9a53a --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_contexts.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.RecordContextsClient = (*MockRecordContextsClient)(nil) + +type MockRecordContextsClient struct { + OnList []RecordContextsOnList +} + +type RecordContextsOnList struct { + Given *tenant.RecordContextFilter + List *tenant.RecordContextList + Error error +} + +func (m MockRecordContextsClient) List(_ context.Context, given *tenant.RecordContextFilter, _ ...grpc.CallOption) (*tenant.RecordContextList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_namespaces.go b/proto/platform/tenant/v1/test/mock_namespaces.go new file mode 100644 index 00000000..5d8a0129 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_namespaces.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.NamespacesClient = (*MockNamespacesClient)(nil) + +type MockNamespacesClient struct { + OnList []NamespacesOnList +} + +type NamespacesOnList struct { + Given *tenant.NamespaceFilter + List *tenant.NamespaceList + Error error +} + +func (m MockNamespacesClient) List(_ context.Context, given *tenant.NamespaceFilter, _ ...grpc.CallOption) (*tenant.NamespaceList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_nodes.go b/proto/platform/tenant/v1/test/mock_nodes.go new file mode 100644 index 00000000..4bbcb6f9 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_nodes.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.NodesClient = (*MockNodesClient)(nil) + +type MockNodesClient struct { + OnList []NodesOnList +} + +type NodesOnList struct { + Given *tenant.NodeFilter + List *tenant.NodeList + Error error +} + +func (m MockNodesClient) List(_ context.Context, given *tenant.NodeFilter, _ ...grpc.CallOption) (*tenant.NodeList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_policy_results.go b/proto/platform/tenant/v1/test/mock_policy_results.go new file mode 100644 index 00000000..790caa73 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_policy_results.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.PolicyResultsClient = (*MockPolicyResultsClient)(nil) + +type MockPolicyResultsClient struct { + OnList []PolicyResultsOnList +} + +type PolicyResultsOnList struct { + Given *tenant.PolicyResultFilter + List *tenant.PolicyResultList + Error error +} + +func (m MockPolicyResultsClient) List(_ context.Context, given *tenant.PolicyResultFilter, _ ...grpc.CallOption) (*tenant.PolicyResultList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_records.go b/proto/platform/tenant/v1/test/mock_records.go new file mode 100644 index 00000000..c2ae2a64 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_records.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.RecordsClient = (*MockRecordsClient)(nil) + +type MockRecordsClient struct { + OnList []RecordsOnList +} + +type RecordsOnList struct { + Given *tenant.RecordFilter + List *tenant.RecordList + Error error +} + +func (m MockRecordsClient) List(_ context.Context, given *tenant.RecordFilter, _ ...grpc.CallOption) (*tenant.RecordList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_risks.go b/proto/platform/tenant/v1/test/mock_risks.go new file mode 100644 index 00000000..2cbb4a93 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_risks.go @@ -0,0 +1,38 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.RisksClient = (*MockRisksClient)(nil) + +type MockRisksClient struct { + OnList []RisksOnList +} + +type RisksOnList struct { + Given *tenant.RiskFilter + List *tenant.RiskList + Error error +} + +func (m MockRisksClient) List(_ context.Context, given *tenant.RiskFilter, _ ...grpc.CallOption) (*tenant.RiskList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_sboms.go b/proto/platform/tenant/v1/test/mock_sboms.go new file mode 100644 index 00000000..3e94ccaf --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_sboms.go @@ -0,0 +1,38 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.SbomsClient = (*MockSbomsClient)(nil) + +type MockSbomsClient struct { + OnList []SbomsOnList +} + +type SbomsOnList struct { + Given *tenant.Sbom2Filter + List *tenant.Sbom2List + Error error +} + +func (m MockSbomsClient) List(_ context.Context, given *tenant.Sbom2Filter, _ ...grpc.CallOption) (*tenant.Sbom2List, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_signatures.go b/proto/platform/tenant/v1/test/mock_signatures.go new file mode 100644 index 00000000..098311e4 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_signatures.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.SignaturesClient = (*MockSignaturesClient)(nil) + +type MockSignaturesClient struct { + OnList []SignaturesOnList +} + +type SignaturesOnList struct { + Given *tenant.SignatureFilter + List *tenant.SignatureList + Error error +} + +func (m MockSignaturesClient) List(_ context.Context, given *tenant.SignatureFilter, _ ...grpc.CallOption) (*tenant.SignatureList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_vuln.go b/proto/platform/tenant/v1/test/mock_vuln.go new file mode 100644 index 00000000..60a2d753 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_vuln.go @@ -0,0 +1,38 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.VulnReportsClient = (*MockVulnReportsClient)(nil) + +type MockVulnReportsClient struct { + OnList []VulnReportsOnList +} + +type VulnReportsOnList struct { + Given *tenant.VulnReportFilter + List *tenant.VulnReportList + Error error +} + +func (m MockVulnReportsClient) List(_ context.Context, given *tenant.VulnReportFilter, _ ...grpc.CallOption) (*tenant.VulnReportList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/test/mock_workloads.go b/proto/platform/tenant/v1/test/mock_workloads.go new file mode 100644 index 00000000..caad4974 --- /dev/null +++ b/proto/platform/tenant/v1/test/mock_workloads.go @@ -0,0 +1,38 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + + "github.com/google/go-cmp/cmp" + "google.golang.org/grpc" + "google.golang.org/protobuf/testing/protocmp" + + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" +) + +var _ tenant.WorkloadsClient = (*MockWorkloadsClient)(nil) + +type MockWorkloadsClient struct { + OnList []WorkloadsOnList +} + +type WorkloadsOnList struct { + Given *tenant.WorkloadFilter + List *tenant.WorkloadList + Error error +} + +func (m MockWorkloadsClient) List(_ context.Context, given *tenant.WorkloadFilter, _ ...grpc.CallOption) (*tenant.WorkloadList, error) { + for _, o := range m.OnList { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} diff --git a/proto/platform/tenant/v1/vuln.platform.pb.go b/proto/platform/tenant/v1/vuln.platform.pb.go new file mode 100644 index 00000000..8712768f --- /dev/null +++ b/proto/platform/tenant/v1/vuln.platform.pb.go @@ -0,0 +1,1138 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: vuln.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type VulnerabilityRecord_Severity int32 + +const ( + VulnerabilityRecord_UNKNOWN VulnerabilityRecord_Severity = 0 + VulnerabilityRecord_LOW VulnerabilityRecord_Severity = 1 + VulnerabilityRecord_MEDIUM VulnerabilityRecord_Severity = 2 + VulnerabilityRecord_HIGH VulnerabilityRecord_Severity = 3 + VulnerabilityRecord_CRITICAL VulnerabilityRecord_Severity = 4 +) + +// Enum value maps for VulnerabilityRecord_Severity. +var ( + VulnerabilityRecord_Severity_name = map[int32]string{ + 0: "UNKNOWN", + 1: "LOW", + 2: "MEDIUM", + 3: "HIGH", + 4: "CRITICAL", + } + VulnerabilityRecord_Severity_value = map[string]int32{ + "UNKNOWN": 0, + "LOW": 1, + "MEDIUM": 2, + "HIGH": 3, + "CRITICAL": 4, + } +) + +func (x VulnerabilityRecord_Severity) Enum() *VulnerabilityRecord_Severity { + p := new(VulnerabilityRecord_Severity) + *p = x + return p +} + +func (x VulnerabilityRecord_Severity) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VulnerabilityRecord_Severity) Descriptor() protoreflect.EnumDescriptor { + return file_vuln_platform_proto_enumTypes[0].Descriptor() +} + +func (VulnerabilityRecord_Severity) Type() protoreflect.EnumType { + return &file_vuln_platform_proto_enumTypes[0] +} + +func (x VulnerabilityRecord_Severity) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use VulnerabilityRecord_Severity.Descriptor instead. +func (VulnerabilityRecord_Severity) EnumDescriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{3, 0} +} + +type Fix_State int32 + +const ( + Fix_UNKNOWN Fix_State = 0 + Fix_FIXED Fix_State = 1 + Fix_NOT_FIXED Fix_State = 2 + Fix_WONT_FIX Fix_State = 3 +) + +// Enum value maps for Fix_State. +var ( + Fix_State_name = map[int32]string{ + 0: "UNKNOWN", + 1: "FIXED", + 2: "NOT_FIXED", + 3: "WONT_FIX", + } + Fix_State_value = map[string]int32{ + "UNKNOWN": 0, + "FIXED": 1, + "NOT_FIXED": 2, + "WONT_FIX": 3, + } +) + +func (x Fix_State) Enum() *Fix_State { + p := new(Fix_State) + *p = x + return p +} + +func (x Fix_State) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Fix_State) Descriptor() protoreflect.EnumDescriptor { + return file_vuln_platform_proto_enumTypes[1].Descriptor() +} + +func (Fix_State) Type() protoreflect.EnumType { + return &file_vuln_platform_proto_enumTypes[1] +} + +func (x Fix_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Fix_State.Descriptor instead. +func (Fix_State) EnumDescriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{4, 0} +} + +type VulnReport struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The VulnReport UIDP at which this VulnReport resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // vulnerability_db_last_build_time holds the time when the vulnerability database was built last time. + VulnerabilityDbLastBuildTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=vulnerability_db_last_build_time,json=vulnerabilityDbLastBuildTime,proto3" json:"vulnerability_db_last_build_time,omitempty"` + // Report's list of vulnerability matches(s). + VulnerabilityMatches []*VulnerabilityMatch `protobuf:"bytes,3,rep,name=vulnerability_matches,json=vulnerabilityMatches,proto3" json:"vulnerability_matches,omitempty"` + // scanner contains some information about the scanner used to generate the report. + Scanner *Scanner `protobuf:"bytes,4,opt,name=scanner,proto3" json:"scanner,omitempty"` + // report_generation tracks the timestamp at which this report was generated. + ReportGeneration *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=report_generation,json=reportGeneration,proto3" json:"report_generation,omitempty"` + // raw_vuln_report may or may not be useful in the long term, but for now to make + // progress on this, we'll just yolo and serialize it here. + RawVulnReport []byte `protobuf:"bytes,6,opt,name=raw_vuln_report,json=rawVulnReport,proto3" json:"raw_vuln_report,omitempty"` + // last_seen tracks the timestamp at which this vuln report was last seen. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` +} + +func (x *VulnReport) Reset() { + *x = VulnReport{} + if protoimpl.UnsafeEnabled { + mi := &file_vuln_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnReport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnReport) ProtoMessage() {} + +func (x *VulnReport) ProtoReflect() protoreflect.Message { + mi := &file_vuln_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VulnReport.ProtoReflect.Descriptor instead. +func (*VulnReport) Descriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *VulnReport) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VulnReport) GetVulnerabilityDbLastBuildTime() *timestamppb.Timestamp { + if x != nil { + return x.VulnerabilityDbLastBuildTime + } + return nil +} + +func (x *VulnReport) GetVulnerabilityMatches() []*VulnerabilityMatch { + if x != nil { + return x.VulnerabilityMatches + } + return nil +} + +func (x *VulnReport) GetScanner() *Scanner { + if x != nil { + return x.Scanner + } + return nil +} + +func (x *VulnReport) GetReportGeneration() *timestamppb.Timestamp { + if x != nil { + return x.ReportGeneration + } + return nil +} + +func (x *VulnReport) GetRawVulnReport() []byte { + if x != nil { + return x.RawVulnReport + } + return nil +} + +func (x *VulnReport) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +type Scanner struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // name contains the vendor name of the scanner. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // version holds the version of the used scanner to generate the report. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *Scanner) Reset() { + *x = Scanner{} + if protoimpl.UnsafeEnabled { + mi := &file_vuln_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Scanner) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Scanner) ProtoMessage() {} + +func (x *Scanner) ProtoReflect() protoreflect.Message { + mi := &file_vuln_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Scanner.ProtoReflect.Descriptor instead. +func (*Scanner) Descriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *Scanner) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Scanner) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +type VulnerabilityMatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Vulnerability holds information about the found vulnerability. + Vulnerability *VulnerabilityRecord `protobuf:"bytes,1,opt,name=vulnerability,proto3" json:"vulnerability,omitempty"` + // Package affected by this vulnerability. + Pkg *Package2 `protobuf:"bytes,2,opt,name=pkg,proto3" json:"pkg,omitempty"` + // Fix related data about this vulnerability. + Fix *Fix `protobuf:"bytes,3,opt,name=fix,proto3,oneof" json:"fix,omitempty"` +} + +func (x *VulnerabilityMatch) Reset() { + *x = VulnerabilityMatch{} + if protoimpl.UnsafeEnabled { + mi := &file_vuln_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnerabilityMatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnerabilityMatch) ProtoMessage() {} + +func (x *VulnerabilityMatch) ProtoReflect() protoreflect.Message { + mi := &file_vuln_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VulnerabilityMatch.ProtoReflect.Descriptor instead. +func (*VulnerabilityMatch) Descriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *VulnerabilityMatch) GetVulnerability() *VulnerabilityRecord { + if x != nil { + return x.Vulnerability + } + return nil +} + +func (x *VulnerabilityMatch) GetPkg() *Package2 { + if x != nil { + return x.Pkg + } + return nil +} + +func (x *VulnerabilityMatch) GetFix() *Fix { + if x != nil { + return x.Fix + } + return nil +} + +type VulnerabilityRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id of the vulnerability e.g. CVE_1231-12. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // a short description of this vulnerability. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // severity is the value representing the severity of the vulnerability + Severity VulnerabilityRecord_Severity `protobuf:"varint,3,opt,name=severity,proto3,enum=chainguard.platform.tenant.VulnerabilityRecord_Severity" json:"severity,omitempty"` + // source from where the vulnerability information was obtained, e.g. nvd, github, osv. + Source string `protobuf:"bytes,4,opt,name=source,proto3" json:"source,omitempty"` + // List of cvss information about the exploitability of the vulnerability. + Cvss []*VulnerabilityRecord_Cvss `protobuf:"bytes,5,rep,name=cvss,proto3" json:"cvss,omitempty"` + // List of cpe_uri on which the vulnerability was found. + CpeUri []string `protobuf:"bytes,6,rep,name=cpe_uri,json=cpeUri,proto3" json:"cpe_uri,omitempty"` + // URLs related to this vulnerability. + RelatedUrls []string `protobuf:"bytes,7,rep,name=related_urls,json=relatedUrls,proto3" json:"related_urls,omitempty"` + // advisories related to this vulnerability. + Advisories map[string]string `protobuf:"bytes,8,rep,name=advisories,proto3" json:"advisories,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // related vulnerabilities to the main vulnerability reported here. + RelatedVulnerabilities []*VulnerabilityRecord_RelatedVulnerability `protobuf:"bytes,9,rep,name=related_vulnerabilities,json=relatedVulnerabilities,proto3" json:"related_vulnerabilities,omitempty"` + // display_id is the normalized value of the vulnerability ID often defined by a CVE-ID. + DisplayId string `protobuf:"bytes,10,opt,name=display_id,json=displayId,proto3" json:"display_id,omitempty"` +} + +func (x *VulnerabilityRecord) Reset() { + *x = VulnerabilityRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_vuln_platform_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnerabilityRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnerabilityRecord) ProtoMessage() {} + +func (x *VulnerabilityRecord) ProtoReflect() protoreflect.Message { + mi := &file_vuln_platform_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 VulnerabilityRecord.ProtoReflect.Descriptor instead. +func (*VulnerabilityRecord) Descriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{3} +} + +func (x *VulnerabilityRecord) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VulnerabilityRecord) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *VulnerabilityRecord) GetSeverity() VulnerabilityRecord_Severity { + if x != nil { + return x.Severity + } + return VulnerabilityRecord_UNKNOWN +} + +func (x *VulnerabilityRecord) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (x *VulnerabilityRecord) GetCvss() []*VulnerabilityRecord_Cvss { + if x != nil { + return x.Cvss + } + return nil +} + +func (x *VulnerabilityRecord) GetCpeUri() []string { + if x != nil { + return x.CpeUri + } + return nil +} + +func (x *VulnerabilityRecord) GetRelatedUrls() []string { + if x != nil { + return x.RelatedUrls + } + return nil +} + +func (x *VulnerabilityRecord) GetAdvisories() map[string]string { + if x != nil { + return x.Advisories + } + return nil +} + +func (x *VulnerabilityRecord) GetRelatedVulnerabilities() []*VulnerabilityRecord_RelatedVulnerability { + if x != nil { + return x.RelatedVulnerabilities + } + return nil +} + +func (x *VulnerabilityRecord) GetDisplayId() string { + if x != nil { + return x.DisplayId + } + return "" +} + +type Fix struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of in versions of the package on which the vulnerability has been solved. + Versions []string `protobuf:"bytes,1,rep,name=versions,proto3" json:"versions,omitempty"` + // state reflects the state of the fix, e.g. fixed, unknown, not-fixed, won't-fix. + State Fix_State `protobuf:"varint,2,opt,name=state,proto3,enum=chainguard.platform.tenant.Fix_State" json:"state,omitempty"` +} + +func (x *Fix) Reset() { + *x = Fix{} + if protoimpl.UnsafeEnabled { + mi := &file_vuln_platform_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Fix) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Fix) ProtoMessage() {} + +func (x *Fix) ProtoReflect() protoreflect.Message { + mi := &file_vuln_platform_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Fix.ProtoReflect.Descriptor instead. +func (*Fix) Descriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{4} +} + +func (x *Fix) GetVersions() []string { + if x != nil { + return x.Versions + } + return nil +} + +func (x *Fix) GetState() Fix_State { + if x != nil { + return x.State + } + return Fix_UNKNOWN +} + +type VulnReportList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*VulnReport `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *VulnReportList) Reset() { + *x = VulnReportList{} + if protoimpl.UnsafeEnabled { + mi := &file_vuln_platform_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnReportList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnReportList) ProtoMessage() {} + +func (x *VulnReportList) ProtoReflect() protoreflect.Message { + mi := &file_vuln_platform_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VulnReportList.ProtoReflect.Descriptor instead. +func (*VulnReportList) Descriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{5} +} + +func (x *VulnReportList) GetItems() []*VulnReport { + if x != nil { + return x.Items + } + return nil +} + +type VulnReportFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id is the exact UID of the record. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` + // active_since is the timestamp after which the records should + // have last been observed in the returned context. + ActiveSince *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` + // include_raw_vuln_report is a flag to return a list of reports containing the raw report. + IncludeRawVulnReport bool `protobuf:"varint,6,opt,name=include_raw_vuln_report,json=includeRawVulnReport,proto3" json:"include_raw_vuln_report,omitempty"` +} + +func (x *VulnReportFilter) Reset() { + *x = VulnReportFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_vuln_platform_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnReportFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnReportFilter) ProtoMessage() {} + +func (x *VulnReportFilter) ProtoReflect() protoreflect.Message { + mi := &file_vuln_platform_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VulnReportFilter.ProtoReflect.Descriptor instead. +func (*VulnReportFilter) Descriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{6} +} + +func (x *VulnReportFilter) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VulnReportFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +func (x *VulnReportFilter) GetActiveSince() *timestamppb.Timestamp { + if x != nil { + return x.ActiveSince + } + return nil +} + +func (x *VulnReportFilter) GetIncludeRawVulnReport() bool { + if x != nil { + return x.IncludeRawVulnReport + } + return false +} + +type VulnerabilityRecord_Cvss struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // CVSS score is on a scale of 0 - 10 where 0 indicates low severity and 10 indicates high severity. + Score string `protobuf:"bytes,1,opt,name=score,proto3" json:"score,omitempty"` + // CVSS version used to populate score and severity. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *VulnerabilityRecord_Cvss) Reset() { + *x = VulnerabilityRecord_Cvss{} + if protoimpl.UnsafeEnabled { + mi := &file_vuln_platform_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnerabilityRecord_Cvss) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnerabilityRecord_Cvss) ProtoMessage() {} + +func (x *VulnerabilityRecord_Cvss) ProtoReflect() protoreflect.Message { + mi := &file_vuln_platform_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VulnerabilityRecord_Cvss.ProtoReflect.Descriptor instead. +func (*VulnerabilityRecord_Cvss) Descriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *VulnerabilityRecord_Cvss) GetScore() string { + if x != nil { + return x.Score + } + return "" +} + +func (x *VulnerabilityRecord_Cvss) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +type VulnerabilityRecord_RelatedVulnerability struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID of the vulnerability. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Source from where the vulnerability information was obtained, e.g. nvd, github, osv. + Source string `protobuf:"bytes,2,opt,name=source,proto3" json:"source,omitempty"` +} + +func (x *VulnerabilityRecord_RelatedVulnerability) Reset() { + *x = VulnerabilityRecord_RelatedVulnerability{} + if protoimpl.UnsafeEnabled { + mi := &file_vuln_platform_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VulnerabilityRecord_RelatedVulnerability) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VulnerabilityRecord_RelatedVulnerability) ProtoMessage() {} + +func (x *VulnerabilityRecord_RelatedVulnerability) ProtoReflect() protoreflect.Message { + mi := &file_vuln_platform_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VulnerabilityRecord_RelatedVulnerability.ProtoReflect.Descriptor instead. +func (*VulnerabilityRecord_RelatedVulnerability) Descriptor() ([]byte, []int) { + return file_vuln_platform_proto_rawDescGZIP(), []int{3, 2} +} + +func (x *VulnerabilityRecord_RelatedVulnerability) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *VulnerabilityRecord_RelatedVulnerability) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +var File_vuln_platform_proto protoreflect.FileDescriptor + +var file_vuln_platform_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x76, 0x75, 0x6c, 0x6e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, + 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, + 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x13, 0x73, 0x62, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xce, 0x03, 0x0a, 0x0a, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, + 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x63, 0x0a, 0x15, 0x76, 0x75, 0x6c, 0x6e, + 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x14, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x3d, 0x0a, + 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, + 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x47, 0x0a, 0x11, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x61, 0x77, 0x5f, 0x76, 0x75, 0x6c, + 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, + 0x72, 0x61, 0x77, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x37, 0x0a, + 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, + 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x22, 0x37, 0x0a, 0x07, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0xe3, 0x01, 0x0a, 0x12, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x55, 0x0a, 0x0d, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, + 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0d, + 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x36, 0x0a, + 0x03, 0x70, 0x6b, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x32, + 0x52, 0x03, 0x70, 0x6b, 0x67, 0x12, 0x36, 0x0a, 0x03, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x46, 0x69, 0x78, 0x48, 0x00, 0x52, 0x03, 0x66, 0x69, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, + 0x04, 0x5f, 0x66, 0x69, 0x78, 0x22, 0xb7, 0x06, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x54, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, + 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x73, 0x65, 0x76, + 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x48, 0x0a, + 0x04, 0x63, 0x76, 0x73, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x43, 0x76, 0x73, + 0x73, 0x52, 0x04, 0x63, 0x76, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x70, 0x65, 0x5f, 0x75, + 0x72, 0x69, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x70, 0x65, 0x55, 0x72, 0x69, + 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x72, 0x6c, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x55, + 0x72, 0x6c, 0x73, 0x12, 0x5f, 0x0a, 0x0a, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 0x65, + 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x41, 0x64, 0x76, 0x69, 0x73, 0x6f, 0x72, + 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x64, 0x76, 0x69, 0x73, 0x6f, + 0x72, 0x69, 0x65, 0x73, 0x12, 0x7d, 0x0a, 0x17, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x56, 0x75, + 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x16, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x65, 0x64, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x69, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x49, 0x64, 0x1a, 0x36, 0x0a, 0x04, 0x43, 0x76, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x64, + 0x76, 0x69, 0x73, 0x6f, 0x72, 0x69, 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, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x14, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x65, 0x64, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x44, 0x0a, 0x08, 0x53, 0x65, 0x76, + 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, + 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, + 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x49, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x04, 0x22, + 0x9c, 0x01, 0x0a, 0x03, 0x46, 0x69, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x46, 0x69, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x22, 0x3c, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x58, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x10, 0x02, + 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x4f, 0x4e, 0x54, 0x5f, 0x46, 0x49, 0x58, 0x10, 0x03, 0x22, 0x4e, + 0x0a, 0x0e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x3c, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, + 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xe0, + 0x01, 0x0a, 0x10, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, + 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, + 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x35, + 0x0a, 0x17, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x76, 0x75, + 0x6c, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x61, 0x77, 0x56, 0x75, 0x6c, 0x6e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, + 0x05, 0x32, 0x9e, 0x01, 0x0a, 0x0b, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x73, 0x12, 0x8e, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x94, 0x05, + 0x10, 0x01, 0x42, 0x6f, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_vuln_platform_proto_rawDescOnce sync.Once + file_vuln_platform_proto_rawDescData = file_vuln_platform_proto_rawDesc +) + +func file_vuln_platform_proto_rawDescGZIP() []byte { + file_vuln_platform_proto_rawDescOnce.Do(func() { + file_vuln_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_vuln_platform_proto_rawDescData) + }) + return file_vuln_platform_proto_rawDescData +} + +var file_vuln_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_vuln_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_vuln_platform_proto_goTypes = []interface{}{ + (VulnerabilityRecord_Severity)(0), // 0: chainguard.platform.tenant.VulnerabilityRecord.Severity + (Fix_State)(0), // 1: chainguard.platform.tenant.Fix.State + (*VulnReport)(nil), // 2: chainguard.platform.tenant.VulnReport + (*Scanner)(nil), // 3: chainguard.platform.tenant.Scanner + (*VulnerabilityMatch)(nil), // 4: chainguard.platform.tenant.VulnerabilityMatch + (*VulnerabilityRecord)(nil), // 5: chainguard.platform.tenant.VulnerabilityRecord + (*Fix)(nil), // 6: chainguard.platform.tenant.Fix + (*VulnReportList)(nil), // 7: chainguard.platform.tenant.VulnReportList + (*VulnReportFilter)(nil), // 8: chainguard.platform.tenant.VulnReportFilter + (*VulnerabilityRecord_Cvss)(nil), // 9: chainguard.platform.tenant.VulnerabilityRecord.Cvss + nil, // 10: chainguard.platform.tenant.VulnerabilityRecord.AdvisoriesEntry + (*VulnerabilityRecord_RelatedVulnerability)(nil), // 11: chainguard.platform.tenant.VulnerabilityRecord.RelatedVulnerability + (*timestamppb.Timestamp)(nil), // 12: google.protobuf.Timestamp + (*Package2)(nil), // 13: chainguard.platform.tenant.Package2 + (*v1.UIDPFilter)(nil), // 14: chainguard.platform.common.UIDPFilter +} +var file_vuln_platform_proto_depIdxs = []int32{ + 12, // 0: chainguard.platform.tenant.VulnReport.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp + 4, // 1: chainguard.platform.tenant.VulnReport.vulnerability_matches:type_name -> chainguard.platform.tenant.VulnerabilityMatch + 3, // 2: chainguard.platform.tenant.VulnReport.scanner:type_name -> chainguard.platform.tenant.Scanner + 12, // 3: chainguard.platform.tenant.VulnReport.report_generation:type_name -> google.protobuf.Timestamp + 12, // 4: chainguard.platform.tenant.VulnReport.last_seen:type_name -> google.protobuf.Timestamp + 5, // 5: chainguard.platform.tenant.VulnerabilityMatch.vulnerability:type_name -> chainguard.platform.tenant.VulnerabilityRecord + 13, // 6: chainguard.platform.tenant.VulnerabilityMatch.pkg:type_name -> chainguard.platform.tenant.Package2 + 6, // 7: chainguard.platform.tenant.VulnerabilityMatch.fix:type_name -> chainguard.platform.tenant.Fix + 0, // 8: chainguard.platform.tenant.VulnerabilityRecord.severity:type_name -> chainguard.platform.tenant.VulnerabilityRecord.Severity + 9, // 9: chainguard.platform.tenant.VulnerabilityRecord.cvss:type_name -> chainguard.platform.tenant.VulnerabilityRecord.Cvss + 10, // 10: chainguard.platform.tenant.VulnerabilityRecord.advisories:type_name -> chainguard.platform.tenant.VulnerabilityRecord.AdvisoriesEntry + 11, // 11: chainguard.platform.tenant.VulnerabilityRecord.related_vulnerabilities:type_name -> chainguard.platform.tenant.VulnerabilityRecord.RelatedVulnerability + 1, // 12: chainguard.platform.tenant.Fix.state:type_name -> chainguard.platform.tenant.Fix.State + 2, // 13: chainguard.platform.tenant.VulnReportList.items:type_name -> chainguard.platform.tenant.VulnReport + 14, // 14: chainguard.platform.tenant.VulnReportFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 12, // 15: chainguard.platform.tenant.VulnReportFilter.active_since:type_name -> google.protobuf.Timestamp + 8, // 16: chainguard.platform.tenant.VulnReports.List:input_type -> chainguard.platform.tenant.VulnReportFilter + 7, // 17: chainguard.platform.tenant.VulnReports.List:output_type -> chainguard.platform.tenant.VulnReportList + 17, // [17:18] is the sub-list for method output_type + 16, // [16:17] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name +} + +func init() { file_vuln_platform_proto_init() } +func file_vuln_platform_proto_init() { + if File_vuln_platform_proto != nil { + return + } + file_sbom_platform_proto_init() + if !protoimpl.UnsafeEnabled { + file_vuln_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnReport); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_vuln_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Scanner); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_vuln_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnerabilityMatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_vuln_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnerabilityRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_vuln_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Fix); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_vuln_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnReportList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_vuln_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnReportFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_vuln_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnerabilityRecord_Cvss); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_vuln_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VulnerabilityRecord_RelatedVulnerability); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_vuln_platform_proto_msgTypes[2].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_vuln_platform_proto_rawDesc, + NumEnums: 2, + NumMessages: 10, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_vuln_platform_proto_goTypes, + DependencyIndexes: file_vuln_platform_proto_depIdxs, + EnumInfos: file_vuln_platform_proto_enumTypes, + MessageInfos: file_vuln_platform_proto_msgTypes, + }.Build() + File_vuln_platform_proto = out.File + file_vuln_platform_proto_rawDesc = nil + file_vuln_platform_proto_goTypes = nil + file_vuln_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/vuln.platform.pb.gw.go b/proto/platform/tenant/v1/vuln.platform.pb.gw.go new file mode 100644 index 00000000..617e95a6 --- /dev/null +++ b/proto/platform/tenant/v1/vuln.platform.pb.gw.go @@ -0,0 +1,171 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: vuln.platform.proto + +/* +Package v1 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package v1 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_VulnReports_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_VulnReports_List_0(ctx context.Context, marshaler runtime.Marshaler, client VulnReportsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VulnReportFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VulnReports_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_VulnReports_List_0(ctx context.Context, marshaler runtime.Marshaler, server VulnReportsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VulnReportFilter + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_VulnReports_List_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.List(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterVulnReportsHandlerServer registers the http handlers for service VulnReports to "mux". +// UnaryRPC :call VulnReportsServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterVulnReportsHandlerFromEndpoint instead. +func RegisterVulnReportsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server VulnReportsServer) error { + + mux.Handle("GET", pattern_VulnReports_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.VulnReports/List", runtime.WithHTTPPathPattern("/tenant/v1/vulnreports")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_VulnReports_List_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VulnReports_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterVulnReportsHandlerFromEndpoint is same as RegisterVulnReportsHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterVulnReportsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterVulnReportsHandler(ctx, mux, conn) +} + +// RegisterVulnReportsHandler registers the http handlers for service VulnReports to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterVulnReportsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterVulnReportsHandlerClient(ctx, mux, NewVulnReportsClient(conn)) +} + +// RegisterVulnReportsHandlerClient registers the http handlers for service VulnReports +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "VulnReportsClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "VulnReportsClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "VulnReportsClient" to call the correct interceptors. +func RegisterVulnReportsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client VulnReportsClient) error { + + mux.Handle("GET", pattern_VulnReports_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.VulnReports/List", runtime.WithHTTPPathPattern("/tenant/v1/vulnreports")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_VulnReports_List_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_VulnReports_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_VulnReports_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "vulnreports"}, "")) +) + +var ( + forward_VulnReports_List_0 = runtime.ForwardResponseMessage +) diff --git a/proto/platform/tenant/v1/vuln.platform.proto b/proto/platform/tenant/v1/vuln.platform.proto new file mode 100644 index 00000000..c9ba3738 --- /dev/null +++ b/proto/platform/tenant/v1/vuln.platform.proto @@ -0,0 +1,162 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantVulnProto"; + +package chainguard.platform.tenant; + +import "google/api/annotations.proto"; +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; +import "sbom.platform.proto"; + +service VulnReports { + rpc List(VulnReportFilter) returns (VulnReportList) { + option (google.api.http) = { + get: "/tenant/v1/vulnreports" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_VULN_REPORTS_LIST] + unscoped: true + } + }; + } +} + +message VulnReport { + // id, The VulnReport UIDP at which this VulnReport resides. + string id = 1; + + // vulnerability_db_last_build_time holds the time when the vulnerability database was built last time. + google.protobuf.Timestamp vulnerability_db_last_build_time = 2; + + // Report's list of vulnerability matches(s). + repeated VulnerabilityMatch vulnerability_matches = 3; + + // scanner contains some information about the scanner used to generate the report. + Scanner scanner = 4; + + // report_generation tracks the timestamp at which this report was generated. + google.protobuf.Timestamp report_generation = 5; + + // raw_vuln_report may or may not be useful in the long term, but for now to make + // progress on this, we'll just yolo and serialize it here. + bytes raw_vuln_report = 6; + + // last_seen tracks the timestamp at which this vuln report was last seen. + google.protobuf.Timestamp last_seen = 7; +} + +message Scanner { + // name contains the vendor name of the scanner. + string name = 1; + // version holds the version of the used scanner to generate the report. + string version = 2; +} + +message VulnerabilityMatch { + // Vulnerability holds information about the found vulnerability. + VulnerabilityRecord vulnerability = 1; + + // Package affected by this vulnerability. + Package2 pkg = 2; + + // Fix related data about this vulnerability. + optional Fix fix = 3; +} + +message VulnerabilityRecord { + // id of the vulnerability e.g. CVE_1231-12. + string id = 1; + + // a short description of this vulnerability. + string description = 2; + + // severity is the value representing the severity of the vulnerability + Severity severity = 3; + + enum Severity { + UNKNOWN = 0; + LOW = 1; + MEDIUM = 2; + HIGH = 3; + CRITICAL = 4; + } + + // source from where the vulnerability information was obtained, e.g. nvd, github, osv. + string source = 4; + + // List of cvss information about the exploitability of the vulnerability. + repeated Cvss cvss = 5; + + message Cvss { + // CVSS score is on a scale of 0 - 10 where 0 indicates low severity and 10 indicates high severity. + string score = 1; + // CVSS version used to populate score and severity. + string version = 2; + } + + // List of cpe_uri on which the vulnerability was found. + repeated string cpe_uri = 6; + + // URLs related to this vulnerability. + repeated string related_urls = 7; + + // advisories related to this vulnerability. + map advisories = 8; + + message RelatedVulnerability { + // ID of the vulnerability. + string id = 1; + // Source from where the vulnerability information was obtained, e.g. nvd, github, osv. + string source = 2; + } + + // related vulnerabilities to the main vulnerability reported here. + repeated RelatedVulnerability related_vulnerabilities = 9; + + // display_id is the normalized value of the vulnerability ID often defined by a CVE-ID. + string display_id = 10; +} + +message Fix { + // List of in versions of the package on which the vulnerability has been solved. + repeated string versions = 1; + + // state reflects the state of the fix, e.g. fixed, unknown, not-fixed, won't-fix. + State state = 2; + enum State { + UNKNOWN = 0; + FIXED = 1; + NOT_FIXED = 2; + WONT_FIX = 3; + } +} + +message VulnReportList { + repeated VulnReport items = 1; +} + +message VulnReportFilter { + // id is the exact UID of the record. + string id = 1; + + chainguard.platform.common.UIDPFilter uidp = 2; + + // This field was retired and is no longer served. + reserved 3; + + // This field was retired and is no longer served. + reserved 4; + + // active_since is the timestamp after which the records should + // have last been observed in the returned context. + google.protobuf.Timestamp active_since = 5; + + // include_raw_vuln_report is a flag to return a list of reports containing the raw report. + bool include_raw_vuln_report = 6; +} diff --git a/proto/platform/tenant/v1/vuln.platform_grpc.pb.go b/proto/platform/tenant/v1/vuln.platform_grpc.pb.go new file mode 100644 index 00000000..818be6ab --- /dev/null +++ b/proto/platform/tenant/v1/vuln.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: vuln.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + VulnReports_List_FullMethodName = "/chainguard.platform.tenant.VulnReports/List" +) + +// VulnReportsClient is the client API for VulnReports service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type VulnReportsClient interface { + List(ctx context.Context, in *VulnReportFilter, opts ...grpc.CallOption) (*VulnReportList, error) +} + +type vulnReportsClient struct { + cc grpc.ClientConnInterface +} + +func NewVulnReportsClient(cc grpc.ClientConnInterface) VulnReportsClient { + return &vulnReportsClient{cc} +} + +func (c *vulnReportsClient) List(ctx context.Context, in *VulnReportFilter, opts ...grpc.CallOption) (*VulnReportList, error) { + out := new(VulnReportList) + err := c.cc.Invoke(ctx, VulnReports_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// VulnReportsServer is the server API for VulnReports service. +// All implementations must embed UnimplementedVulnReportsServer +// for forward compatibility +type VulnReportsServer interface { + List(context.Context, *VulnReportFilter) (*VulnReportList, error) + mustEmbedUnimplementedVulnReportsServer() +} + +// UnimplementedVulnReportsServer must be embedded to have forward compatible implementations. +type UnimplementedVulnReportsServer struct { +} + +func (UnimplementedVulnReportsServer) List(context.Context, *VulnReportFilter) (*VulnReportList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedVulnReportsServer) mustEmbedUnimplementedVulnReportsServer() {} + +// UnsafeVulnReportsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to VulnReportsServer will +// result in compilation errors. +type UnsafeVulnReportsServer interface { + mustEmbedUnimplementedVulnReportsServer() +} + +func RegisterVulnReportsServer(s grpc.ServiceRegistrar, srv VulnReportsServer) { + s.RegisterService(&VulnReports_ServiceDesc, srv) +} + +func _VulnReports_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VulnReportFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(VulnReportsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: VulnReports_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(VulnReportsServer).List(ctx, req.(*VulnReportFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// VulnReports_ServiceDesc is the grpc.ServiceDesc for VulnReports service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var VulnReports_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.VulnReports", + HandlerType: (*VulnReportsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _VulnReports_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "vuln.platform.proto", +} diff --git a/proto/platform/tenant/v1/workload.platform.pb.go b/proto/platform/tenant/v1/workload.platform.pb.go new file mode 100644 index 00000000..2f5c4958 --- /dev/null +++ b/proto/platform/tenant/v1/workload.platform.pb.go @@ -0,0 +1,436 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: workload.platform.proto + +package v1 + +import ( + _ "chainguard.dev/sdk/proto/annotations" + v1 "chainguard.dev/sdk/proto/platform/common/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Workload struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // id, The Workload UIDP at which this Workload resides. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // name of the Workload. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // a short description of this Workload. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // remote_id is the remote ID of this Workload. + RemoteId string `protobuf:"bytes,4,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` + Labels string `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` + ApiVersion string `protobuf:"bytes,6,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` + Kind string `protobuf:"bytes,7,opt,name=kind,proto3" json:"kind,omitempty"` + // last_seen tracks the timestamp at which this workload was last seen. + LastSeen *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + // owner_id is the remote_id of the Workload that is referenced via a + // "controller" owner reference by this workload. + OwnerId string `protobuf:"bytes,9,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` +} + +func (x *Workload) Reset() { + *x = Workload{} + if protoimpl.UnsafeEnabled { + mi := &file_workload_platform_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Workload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Workload) ProtoMessage() {} + +func (x *Workload) ProtoReflect() protoreflect.Message { + mi := &file_workload_platform_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Workload.ProtoReflect.Descriptor instead. +func (*Workload) Descriptor() ([]byte, []int) { + return file_workload_platform_proto_rawDescGZIP(), []int{0} +} + +func (x *Workload) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Workload) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Workload) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Workload) GetRemoteId() string { + if x != nil { + return x.RemoteId + } + return "" +} + +func (x *Workload) GetLabels() string { + if x != nil { + return x.Labels + } + return "" +} + +func (x *Workload) GetApiVersion() string { + if x != nil { + return x.ApiVersion + } + return "" +} + +func (x *Workload) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *Workload) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (x *Workload) GetOwnerId() string { + if x != nil { + return x.OwnerId + } + return "" +} + +type WorkloadList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*Workload `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *WorkloadList) Reset() { + *x = WorkloadList{} + if protoimpl.UnsafeEnabled { + mi := &file_workload_platform_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkloadList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkloadList) ProtoMessage() {} + +func (x *WorkloadList) ProtoReflect() protoreflect.Message { + mi := &file_workload_platform_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkloadList.ProtoReflect.Descriptor instead. +func (*WorkloadList) Descriptor() ([]byte, []int) { + return file_workload_platform_proto_rawDescGZIP(), []int{1} +} + +func (x *WorkloadList) GetItems() []*Workload { + if x != nil { + return x.Items + } + return nil +} + +type WorkloadFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // remote_id is the remote ID of this Workload. + RemoteId string `protobuf:"bytes,2,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` + // active_since is the timestamp after which returned workloads + // should have been active (last seen). + ActiveSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` + // name filters on the resource name. + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + // Return only the workloads owned by a particular remote_id. + OwnerId string `protobuf:"bytes,5,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` + Uidp *v1.UIDPFilter `protobuf:"bytes,100,opt,name=uidp,proto3" json:"uidp,omitempty"` +} + +func (x *WorkloadFilter) Reset() { + *x = WorkloadFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_workload_platform_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkloadFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkloadFilter) ProtoMessage() {} + +func (x *WorkloadFilter) ProtoReflect() protoreflect.Message { + mi := &file_workload_platform_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WorkloadFilter.ProtoReflect.Descriptor instead. +func (*WorkloadFilter) Descriptor() ([]byte, []int) { + return file_workload_platform_proto_rawDescGZIP(), []int{2} +} + +func (x *WorkloadFilter) GetRemoteId() string { + if x != nil { + return x.RemoteId + } + return "" +} + +func (x *WorkloadFilter) GetActiveSince() *timestamppb.Timestamp { + if x != nil { + return x.ActiveSince + } + return nil +} + +func (x *WorkloadFilter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *WorkloadFilter) GetOwnerId() string { + if x != nil { + return x.OwnerId + } + return "" +} + +func (x *WorkloadFilter) GetUidp() *v1.UIDPFilter { + if x != nil { + return x.Uidp + } + return nil +} + +var File_workload_platform_proto protoreflect.FileDescriptor + +var file_workload_platform_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8e, 0x02, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x4a, 0x0a, 0x0c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, + 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, + 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, + 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x32, 0x79, 0x0a, + 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x6c, 0x0a, 0x04, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, + 0x12, 0x06, 0x0a, 0x02, 0xb3, 0x09, 0x10, 0x01, 0x42, 0x73, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, + 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, + 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_workload_platform_proto_rawDescOnce sync.Once + file_workload_platform_proto_rawDescData = file_workload_platform_proto_rawDesc +) + +func file_workload_platform_proto_rawDescGZIP() []byte { + file_workload_platform_proto_rawDescOnce.Do(func() { + file_workload_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_workload_platform_proto_rawDescData) + }) + return file_workload_platform_proto_rawDescData +} + +var file_workload_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_workload_platform_proto_goTypes = []interface{}{ + (*Workload)(nil), // 0: chainguard.platform.tenant.Workload + (*WorkloadList)(nil), // 1: chainguard.platform.tenant.WorkloadList + (*WorkloadFilter)(nil), // 2: chainguard.platform.tenant.WorkloadFilter + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 4: chainguard.platform.common.UIDPFilter +} +var file_workload_platform_proto_depIdxs = []int32{ + 3, // 0: chainguard.platform.tenant.Workload.last_seen:type_name -> google.protobuf.Timestamp + 0, // 1: chainguard.platform.tenant.WorkloadList.items:type_name -> chainguard.platform.tenant.Workload + 3, // 2: chainguard.platform.tenant.WorkloadFilter.active_since:type_name -> google.protobuf.Timestamp + 4, // 3: chainguard.platform.tenant.WorkloadFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 2, // 4: chainguard.platform.tenant.Workloads.List:input_type -> chainguard.platform.tenant.WorkloadFilter + 1, // 5: chainguard.platform.tenant.Workloads.List:output_type -> chainguard.platform.tenant.WorkloadList + 5, // [5:6] is the sub-list for method output_type + 4, // [4:5] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_workload_platform_proto_init() } +func file_workload_platform_proto_init() { + if File_workload_platform_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_workload_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Workload); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_workload_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkloadList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_workload_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkloadFilter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_workload_platform_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_workload_platform_proto_goTypes, + DependencyIndexes: file_workload_platform_proto_depIdxs, + MessageInfos: file_workload_platform_proto_msgTypes, + }.Build() + File_workload_platform_proto = out.File + file_workload_platform_proto_rawDesc = nil + file_workload_platform_proto_goTypes = nil + file_workload_platform_proto_depIdxs = nil +} diff --git a/proto/platform/tenant/v1/workload.platform.proto b/proto/platform/tenant/v1/workload.platform.proto new file mode 100644 index 00000000..cd8fbe36 --- /dev/null +++ b/proto/platform/tenant/v1/workload.platform.proto @@ -0,0 +1,71 @@ +syntax = "proto3"; + +option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; +option java_multiple_files = true; +option java_package = "dev.chainguard.sdk.platform.tenant.v1"; +option java_outer_classname = "PlatformTenantWorkloadProto"; + +package chainguard.platform.tenant; + +import "google/protobuf/timestamp.proto"; +import "annotations/auth.proto"; +import "platform/common/v1/uidp.platform.proto"; + +service Workloads { + rpc List(WorkloadFilter) returns (WorkloadList) { + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_TENANT_WORKLOADS_LIST] + unscoped: true + } + }; + } +} + +message Workload { + // id, The Workload UIDP at which this Workload resides. + string id = 1; + + // name of the Workload. + string name = 2; + + // a short description of this Workload. + string description = 3; + + // remote_id is the remote ID of this Workload. + string remote_id = 4; + + string labels = 5; + + string api_version = 6; + string kind = 7; + + // last_seen tracks the timestamp at which this workload was last seen. + google.protobuf.Timestamp last_seen = 8; + + // owner_id is the remote_id of the Workload that is referenced via a + // "controller" owner reference by this workload. + string owner_id = 9; +} + +message WorkloadList { + repeated Workload items = 1; +} + +message WorkloadFilter { + // remote_id is the remote ID of this Workload. + string remote_id = 2; + + // active_since is the timestamp after which returned workloads + // should have been active (last seen). + google.protobuf.Timestamp active_since = 3; + + // name filters on the resource name. + string name = 4; + + // Return only the workloads owned by a particular remote_id. + string owner_id = 5; + + + chainguard.platform.common.UIDPFilter uidp = 100; +} diff --git a/proto/platform/tenant/v1/workload.platform_grpc.pb.go b/proto/platform/tenant/v1/workload.platform_grpc.pb.go new file mode 100644 index 00000000..99be2bb1 --- /dev/null +++ b/proto/platform/tenant/v1/workload.platform_grpc.pb.go @@ -0,0 +1,109 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.21.12 +// source: workload.platform.proto + +package v1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + Workloads_List_FullMethodName = "/chainguard.platform.tenant.Workloads/List" +) + +// WorkloadsClient is the client API for Workloads service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type WorkloadsClient interface { + List(ctx context.Context, in *WorkloadFilter, opts ...grpc.CallOption) (*WorkloadList, error) +} + +type workloadsClient struct { + cc grpc.ClientConnInterface +} + +func NewWorkloadsClient(cc grpc.ClientConnInterface) WorkloadsClient { + return &workloadsClient{cc} +} + +func (c *workloadsClient) List(ctx context.Context, in *WorkloadFilter, opts ...grpc.CallOption) (*WorkloadList, error) { + out := new(WorkloadList) + err := c.cc.Invoke(ctx, Workloads_List_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// WorkloadsServer is the server API for Workloads service. +// All implementations must embed UnimplementedWorkloadsServer +// for forward compatibility +type WorkloadsServer interface { + List(context.Context, *WorkloadFilter) (*WorkloadList, error) + mustEmbedUnimplementedWorkloadsServer() +} + +// UnimplementedWorkloadsServer must be embedded to have forward compatible implementations. +type UnimplementedWorkloadsServer struct { +} + +func (UnimplementedWorkloadsServer) List(context.Context, *WorkloadFilter) (*WorkloadList, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedWorkloadsServer) mustEmbedUnimplementedWorkloadsServer() {} + +// UnsafeWorkloadsServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to WorkloadsServer will +// result in compilation errors. +type UnsafeWorkloadsServer interface { + mustEmbedUnimplementedWorkloadsServer() +} + +func RegisterWorkloadsServer(s grpc.ServiceRegistrar, srv WorkloadsServer) { + s.RegisterService(&Workloads_ServiceDesc, srv) +} + +func _Workloads_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WorkloadFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkloadsServer).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Workloads_List_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkloadsServer).List(ctx, req.(*WorkloadFilter)) + } + return interceptor(ctx, in, info, handler) +} + +// Workloads_ServiceDesc is the grpc.ServiceDesc for Workloads service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Workloads_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "chainguard.platform.tenant.Workloads", + HandlerType: (*WorkloadsServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "List", + Handler: _Workloads_List_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "workload.platform.proto", +} diff --git a/proto/platform/test/mock_clients.go b/proto/platform/test/mock_clients.go new file mode 100644 index 00000000..b6dd728a --- /dev/null +++ b/proto/platform/test/mock_clients.go @@ -0,0 +1,86 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "chainguard.dev/sdk/proto/platform" + advisory "chainguard.dev/sdk/proto/platform/advisory/v1" + advisorytest "chainguard.dev/sdk/proto/platform/advisory/v1/test" + auth "chainguard.dev/sdk/proto/platform/auth/v1" + authtest "chainguard.dev/sdk/proto/platform/auth/v1/test" + iam "chainguard.dev/sdk/proto/platform/iam/v1" + iamtest "chainguard.dev/sdk/proto/platform/iam/v1/test" + oidc "chainguard.dev/sdk/proto/platform/oidc/v1" + oidctest "chainguard.dev/sdk/proto/platform/oidc/v1/test" + ping "chainguard.dev/sdk/proto/platform/ping/v1" + pingtest "chainguard.dev/sdk/proto/platform/ping/v1/test" + registry "chainguard.dev/sdk/proto/platform/registry/v1" + registrytest "chainguard.dev/sdk/proto/platform/registry/v1/test" + tenant "chainguard.dev/sdk/proto/platform/tenant/v1" + tenanttest "chainguard.dev/sdk/proto/platform/tenant/v1/test" +) + +var _ platform.Clients = (*MockPlatformClients)(nil) + +type MockPlatformClients struct { + OnError error + + IAMClient iamtest.MockIAMClient + TenantClient tenanttest.MockTenantClient + RegistryClient registrytest.MockRegistryClients + AdvisoryClient advisorytest.MockSecurityAdvisoryClients + PingClient pingtest.MockPingServiceClients +} + +func (m MockPlatformClients) Close() error { + return m.OnError +} + +func (m MockPlatformClients) IAM() iam.Clients { + return m.IAMClient +} + +func (m MockPlatformClients) Tenant() tenant.Clients { + return m.TenantClient +} + +func (m MockPlatformClients) Registry() registry.Clients { + return m.RegistryClient +} + +func (m MockPlatformClients) Advisory() advisory.Clients { + return m.AdvisoryClient +} + +func (m MockPlatformClients) Ping() ping.Clients { + return m.PingClient +} + +var _ platform.OIDCClients = (*MockOIDCClients)(nil) + +type MockOIDCClients struct { + OnError error + + AuthClient authtest.MockAuthClient + OIDCClient oidctest.MockOIDCClient + PingClient pingtest.MockPingServiceClients +} + +func (m MockOIDCClients) Close() error { + return m.OnError +} + +func (m MockOIDCClients) Auth() auth.AuthClient { + return m.AuthClient +} + +func (m MockOIDCClients) OIDC() oidc.Clients { + return m.OIDCClient +} + +func (m MockOIDCClients) OIDCPing() ping.Clients { + return m.PingClient +} diff --git a/proto/platform/test/mock_server.go b/proto/platform/test/mock_server.go new file mode 100644 index 00000000..7a0471c2 --- /dev/null +++ b/proto/platform/test/mock_server.go @@ -0,0 +1,45 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package test + +import ( + "context" + "fmt" + "testing" + + delegate "chainguard.dev/go-grpc-kit/pkg/options" + iam "chainguard.dev/sdk/proto/platform/iam/v1" + iamtest "chainguard.dev/sdk/proto/platform/iam/v1/test" + "google.golang.org/grpc" + "google.golang.org/grpc/test/bufconn" +) + +type MockPlatformServer struct { + GroupServer iamtest.MockGroupsServer +} + +// StartPlatformServer starts the mock server and returns the connection string. +func (m *MockPlatformServer) StartPlatformServer(_ context.Context, t *testing.T) string { + t.Helper() + lis := bufconn.Listen(1024 * 1024) + testScheme := delegate.RegisterListenerForTest(lis) + t.Cleanup(func() { + delegate.UnregisterTestListener(testScheme) + }) + s := grpc.NewServer() + iam.RegisterGroupsServer(s, m.GroupServer) + go func() { + t.Helper() + if err := s.Serve(lis); err != nil { + panic(fmt.Sprintf("Server exited with error: %v", err)) + } + }() + t.Cleanup(func() { + s.GracefulStop() + }) + + return fmt.Sprintf("%s://%s", testScheme, lis.Addr().String()) +} diff --git a/sts/sts.go b/sts/sts.go new file mode 100644 index 00000000..b18619fd --- /dev/null +++ b/sts/sts.go @@ -0,0 +1,314 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package sts + +import ( + "bytes" + "context" + "crypto/tls" + "fmt" + "io" + "net/http" + "net/url" + + oidc "chainguard.dev/sdk/proto/platform/oidc/v1" + "golang.org/x/oauth2" + "google.golang.org/grpc/metadata" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/proto" +) + +const GulfstreamAudience = "gulfstream" + +// Exchanger is an interface for exchanging a third-party token for a Chainguard +// token. +type Exchanger interface { + // Exchange performs the actual token exchange, sending "token" to the + // Chainguard issuer's STS interface, and receiving bytes or an error. + Exchange(ctx context.Context, token string, opts ...ExchangerOption) (string, error) + + // Refresh exchanges a refresh token for a new access token and refresh token. + Refresh(ctx context.Context, token string, opts ...ExchangerOption) (accessToken string, refreshToken string, err error) +} + +// New creates a new Exchanger that works against the provided issuer's STS +// endpoint, and requests token with the specified audience. It's behavior +// can be further customized via optional ExchangerOption parameters. +func New(issuer, audience string, opts ...ExchangerOption) Exchanger { + i := &impl{ + opts: options{ + issuer: issuer, + audience: audience, + }, + } + for _, opt := range opts { + opt(&i.opts) + } + + return i +} + +// Exchange performs an OIDC token exchange with the correct Exchanger based on the provided options. +func Exchange(ctx context.Context, issuer, audience, idToken string, exchangerOptions ...ExchangerOption) (string, error) { + opts := options{ + issuer: issuer, + audience: audience, + } + for _, eo := range exchangerOptions { + eo(&opts) + } + + var e Exchanger + if opts.http1Downgrade { + e = &HTTP1DowngradeExchanger{opts: opts} + } else { + e = &impl{opts: opts} + } + return e.Exchange(ctx, idToken, exchangerOptions...) +} + +type impl struct { + opts options +} + +type options struct { + issuer string + audience string + cluster string + userAgent string + scope string + capabilities []string + identity string + includeUpstreamToken bool + http1Downgrade bool +} + +var _ Exchanger = (*impl)(nil) + +// Stubbed when testing +var oidcNewClients = oidc.NewClients + +// Exchange implements Exchanger +func (i *impl) Exchange(ctx context.Context, token string, opts ...ExchangerOption) (string, error) { + o := i.opts + for _, opt := range opts { + opt(&o) + } + + c, err := oidcNewClients(ctx, o.issuer, fmt.Sprintf("Bearer %s", token), oidc.WithUserAgent(o.userAgent)) + if err != nil { + return "", err + } + defer c.Close() + + resp, err := c.STS().Exchange(ctx, &oidc.ExchangeRequest{ + Aud: []string{o.audience}, + Scope: o.scope, + Cluster: o.cluster, + Identity: o.identity, + IncludeUpstreamToken: o.includeUpstreamToken, + Cap: o.capabilities, + }) + if err != nil { + return "", err + } + return resp.Token, nil +} + +// Refresh implements Exchanger +func (i *impl) Refresh(ctx context.Context, token string, opts ...ExchangerOption) (string, string, error) { + o := i.opts + for _, opt := range opts { + opt(&o) + } + + c, err := oidcNewClients(ctx, o.issuer, fmt.Sprintf("Bearer %s", token), oidc.WithUserAgent(o.userAgent)) + if err != nil { + return "", "", err + } + defer c.Close() + + resp, err := c.STS().ExchangeRefreshToken(ctx, &oidc.ExchangeRefreshTokenRequest{ + Aud: []string{o.audience}, + Scope: o.scope, + Cap: o.capabilities, + }) + if err != nil { + return "", "", err + } + return resp.GetToken().GetToken(), resp.GetRefreshToken().GetToken(), err +} + +// ExchangerOption is a way of customizing the behavior of the Exchanger +// constructed via New() +type ExchangerOption func(*options) + +// WithUserAgent sets the user agent sent by the Exchanger. +func WithUserAgent(agent string) ExchangerOption { + return func(i *options) { + i.userAgent = agent + } +} + +// WithCluster sets the cluster parameter sent by the Exchanger. +// +// Only one of cluster or scope may be set. +func WithCluster(cluster string) ExchangerOption { + return func(i *options) { + i.cluster = cluster + } +} + +// WithScope sets the scope parameter sent by the Exchanger. +// +// Only one of cluster or scope may be set. +func WithScope(scope string) ExchangerOption { + return func(i *options) { + i.scope = scope + } +} + +// WithCapabilities sets the capabilities sent by the Exchanger. +func WithCapabilities(cap ...string) ExchangerOption { + return func(i *options) { + i.capabilities = cap + } +} + +// WithIdentity sets the the unique ID of the identity so that STS exchange can +// look up pre-stored verification keys without ambiguity +func WithIdentity(uid string) ExchangerOption { + return func(i *options) { + i.identity = uid + } +} + +// WithIncludeUpstreamToken requests that the upstream token be included in the returned +// STS token. +func WithIncludeUpstreamToken() ExchangerOption { + return func(i *options) { + i.includeUpstreamToken = true + } +} + +// WithHTTP1Downgrade signals Exchange to use HTTP1DowngradeExchanger in the STS exchange. +func WithHTTP1Downgrade() ExchangerOption { + return func(i *options) { + i.http1Downgrade = true + } +} + +type HTTP1DowngradeExchanger struct { + opts options +} + +func NewHTTP1DowngradeExchanger(issuer, audience string, opts ...ExchangerOption) *HTTP1DowngradeExchanger { + i := &HTTP1DowngradeExchanger{ + opts: options{ + issuer: issuer, + audience: audience, + }, + } + for _, opt := range opts { + opt(&i.opts) + } + return i +} + +func (i *HTTP1DowngradeExchanger) doHTTP1(ctx context.Context, + auth string, + path string, in proto.Message, out proto.Message, opts options) error { + body, err := protojson.Marshal(in) + if err != nil { + return err + } + u, err := url.JoinPath(i.opts.issuer, path) + if err != nil { + return err + } + req, err := http.NewRequestWithContext(ctx, http.MethodPost, u, bytes.NewReader(body)) + if err != nil { + return err + } + req.Header.Set("Content-Type", "application/json") + if opts.userAgent != "" { + req.Header.Set("User-Agent", opts.userAgent) + } + + if md, ok := metadata.FromOutgoingContext(ctx); ok { + for k, v := range md { + for _, vv := range v { + req.Header.Add(k, vv) + } + } + } + + // Explicitly disable HTTP/2 support by setting the + // client Transport's TLSNextProto to an empty map. + // ref: https://pkg.go.dev/net/http#hdr-HTTP_2 + client := &http.Client{ + Transport: &oauth2.Transport{ + Base: &http.Transport{ + TLSNextProto: map[string]func(string, *tls.Conn) http.RoundTripper{}, + }, + Source: oauth2.StaticTokenSource(&oauth2.Token{AccessToken: auth}), + }, + } + resp, err := client.Do(req) + if err != nil { + return err + } + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("%s", resp.Status) + } + + b, err := io.ReadAll(resp.Body) + if err != nil { + return err + } + defer resp.Body.Close() + return protojson.Unmarshal(b, out) +} + +func (i *HTTP1DowngradeExchanger) Exchange(ctx context.Context, token string, opts ...ExchangerOption) (string, error) { + o := i.opts + for _, opt := range opts { + opt(&o) + } + in := &oidc.ExchangeRequest{ + Aud: []string{o.audience}, + Scope: o.scope, + Cluster: o.cluster, + Identity: o.identity, + IncludeUpstreamToken: o.includeUpstreamToken, + Cap: o.capabilities, + } + out := new(oidc.RawToken) + if err := i.doHTTP1(ctx, token, "/sts/exchange", in, out, o); err != nil { + return "", err + } + return out.Token, nil +} + +func (i *HTTP1DowngradeExchanger) Refresh(ctx context.Context, token string, opts ...ExchangerOption) (string, string, error) { + o := i.opts + for _, opt := range opts { + opt(&o) + } + + in := &oidc.ExchangeRefreshTokenRequest{ + Aud: []string{o.audience}, + Scope: o.scope, + Cap: o.capabilities, + } + + out := new(oidc.TokenPair) + if err := i.doHTTP1(ctx, token, "sts/access_token", in, out, o); err != nil { + return "", "", err + } + + return out.GetToken().Token, out.GetRefreshToken().Token, nil +} diff --git a/sts/sts_test.go b/sts/sts_test.go new file mode 100644 index 00000000..d2c81592 --- /dev/null +++ b/sts/sts_test.go @@ -0,0 +1,424 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package sts + +import ( + "context" + "errors" + "testing" + + oidc "chainguard.dev/sdk/proto/platform/oidc/v1" + "chainguard.dev/sdk/proto/platform/oidc/v1/test" + "github.com/google/go-cmp/cmp" +) + +func TestRefresh(t *testing.T) { + tests := map[string]struct { + issuer string + audience string + newOpts []ExchangerOption + exchangeOpts []ExchangerOption + wantToken string + wantRefreshToken string + wantErr bool + clientMock test.MockOIDCClient + }{ + "zero options": { + issuer: "bar", + audience: "baz", + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnGetAccessToken: []test.STSOnGetAccessToken{{ + Given: &oidc.ExchangeRefreshTokenRequest{ + Aud: []string{"baz"}, + }, + Exchanged: &oidc.TokenPair{ + Token: &oidc.RawToken{Token: "token!"}, + RefreshToken: &oidc.RawToken{Token: "refresh token!"}, + }, + }}, + }, + }, + wantToken: "token!", + wantRefreshToken: "refresh token!", + }, + "basic error plumbing": { + issuer: "bar", + audience: "baz", + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnGetAccessToken: []test.STSOnGetAccessToken{{ + Given: &oidc.ExchangeRefreshTokenRequest{ + Aud: []string{"baz"}, + }, + Error: errors.New("unexpected EOF"), + }}, + }, + }, + wantErr: true, + }, + "capabilities and scope": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithCapabilities("registry.push"), + WithScope("derp"), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnGetAccessToken: []test.STSOnGetAccessToken{{ + Given: &oidc.ExchangeRefreshTokenRequest{ + Aud: []string{"baz"}, + Cap: []string{"registry.push"}, + Scope: "derp", + }, + Exchanged: &oidc.TokenPair{ + Token: &oidc.RawToken{Token: "token!"}, + RefreshToken: &oidc.RawToken{Token: "refresh token"}, + }, + }}, + }, + }, + wantToken: "token!", + wantRefreshToken: "refresh token", + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + oidcNewClients = func(_ context.Context, issuer string, token string, opts ...oidc.ClientOption) (oidc.Clients, error) { + return test.clientMock, nil + } + + exch := New(test.issuer, test.audience, test.newOpts...) + token, refreshToken, gotErr := exch.Refresh(context.Background(), "foo", test.exchangeOpts...) + if gotErr != nil && !test.wantErr { + t.Error("got err: ", gotErr, "and expected no error") + } + if diff := cmp.Diff(token, test.wantToken); diff != "" { + t.Error("Got unexpected diff in token: ", diff) + } + if diff := cmp.Diff(refreshToken, test.wantRefreshToken); diff != "" { + t.Error("Got unexpected diff in refresh token: ", diff) + } + }) + } +} +func TestImplExchange(t *testing.T) { + tests := map[string]struct { + issuer string + audience string + newOpts []ExchangerOption + exchangeOpts []ExchangerOption + want string + wantErr bool + clientMock test.MockOIDCClient + }{ + "zero options": { + issuer: "bar", + audience: "baz", + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + }, + Exchanged: &oidc.RawToken{Token: "token!"}, + }}, + }, + }, + want: "token!", + }, + "basic error plumbing": { + issuer: "bar", + audience: "baz", + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + }, + Error: errors.New("unexpected EOF"), + }}, + }, + }, + wantErr: true, + }, + "capabilities and scope on create": { + issuer: "bar", + audience: "baz", + newOpts: []ExchangerOption{ + WithCapabilities("registry.push"), + WithScope("derp"), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + Cap: []string{"registry.push"}, + Scope: "derp", + }, + Exchanged: &oidc.RawToken{Token: "token!"}, + }}, + }, + }, + want: "token!", + }, + "capabilities and scope on exchange": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithCapabilities("registry.push"), + WithScope("derp"), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + Cap: []string{"registry.push"}, + Scope: "derp", + }, + Exchanged: &oidc.RawToken{Token: "token!"}, + }}, + }, + }, + want: "token!", + }, + "identity": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithIdentity("my-identity"), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + Identity: "my-identity", + }, + Exchanged: &oidc.RawToken{Token: "token foo"}, + }}, + }, + }, + want: "token foo", + }, + "include upstream": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithIncludeUpstreamToken(), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + IncludeUpstreamToken: true, + }, + Exchanged: &oidc.RawToken{Token: "tokenz"}, + }}, + }, + }, + want: "tokenz", + }, + "cluster": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithCluster("kind i presume"), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + Cluster: "kind i presume", + }, + Exchanged: &oidc.RawToken{Token: "tokenz"}, + }}, + }, + }, + want: "tokenz", + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + oidcNewClients = func(_ context.Context, issuer string, token string, opts ...oidc.ClientOption) (oidc.Clients, error) { + return test.clientMock, nil + } + + exch := New(test.issuer, test.audience, test.newOpts...) + gotToken, gotErr := exch.Exchange(context.Background(), "foo", test.exchangeOpts...) + if gotErr != nil && !test.wantErr { + t.Error("got err: ", gotErr, "and expected no error") + } + if diff := cmp.Diff(gotToken, test.want); diff != "" { + t.Error("Got unexpected diff in token: ", diff) + } + }) + } +} + +func TestExchange(t *testing.T) { + tests := map[string]struct { + issuer string + audience string + exchangeOpts []ExchangerOption + want string + wantErr bool + clientMock test.MockOIDCClient + }{ + "zero options": { + issuer: "bar", + audience: "baz", + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + }, + Exchanged: &oidc.RawToken{Token: "token!"}, + }}, + }, + }, + want: "token!", + }, + "basic error plumbing": { + issuer: "bar", + audience: "baz", + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + }, + Error: errors.New("unexpected EOF"), + }}, + }, + }, + wantErr: true, + }, + "capabilities and scope on create": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithCapabilities("registry.push"), + WithScope("derp"), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + Cap: []string{"registry.push"}, + Scope: "derp", + }, + Exchanged: &oidc.RawToken{Token: "token!"}, + }}, + }, + }, + want: "token!", + }, + "capabilities and scope on exchange": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithCapabilities("registry.push"), + WithScope("derp"), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + Cap: []string{"registry.push"}, + Scope: "derp", + }, + Exchanged: &oidc.RawToken{Token: "token!"}, + }}, + }, + }, + want: "token!", + }, + "identity": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithIdentity("my-identity"), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + Identity: "my-identity", + }, + Exchanged: &oidc.RawToken{Token: "token foo"}, + }}, + }, + }, + want: "token foo", + }, + "include upstream": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithIncludeUpstreamToken(), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + IncludeUpstreamToken: true, + }, + Exchanged: &oidc.RawToken{Token: "tokenz"}, + }}, + }, + }, + want: "tokenz", + }, + "cluster": { + issuer: "bar", + audience: "baz", + exchangeOpts: []ExchangerOption{ + WithCluster("kind i presume"), + }, + clientMock: test.MockOIDCClient{ + STSClient: test.MockSTSClient{ + OnExchange: []test.STSOnExchange{{ + Given: &oidc.ExchangeRequest{ + Aud: []string{"baz"}, + Cluster: "kind i presume", + }, + Exchanged: &oidc.RawToken{Token: "tokenz"}, + }}, + }, + }, + want: "tokenz", + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + oidcNewClients = func(_ context.Context, issuer string, token string, opts ...oidc.ClientOption) (oidc.Clients, error) { + return test.clientMock, nil + } + + gotToken, gotErr := Exchange(context.Background(), test.issuer, test.audience, "foo", test.exchangeOpts...) + if gotErr != nil && !test.wantErr { + t.Error("got err: ", gotErr, "and expected no error") + } + if diff := cmp.Diff(gotToken, test.want); diff != "" { + t.Error("Got unexpected diff in token: ", diff) + } + }) + } +} diff --git a/sts/tokensource.go b/sts/tokensource.go new file mode 100644 index 00000000..0f79b6a7 --- /dev/null +++ b/sts/tokensource.go @@ -0,0 +1,44 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package sts + +import ( + "context" + "fmt" + "time" + + "golang.org/x/oauth2" +) + +// NewTokenSource creates an oauth2.TokenSource by wrapping another TokenSource +// in a Chainguard STS exchange brokered by the provided Exchanger. +func NewTokenSource(ts oauth2.TokenSource, xchg Exchanger) oauth2.TokenSource { + return &stsTokenSource{ + ts: ts, + xchg: xchg, + } +} + +type stsTokenSource struct { + ts oauth2.TokenSource + xchg Exchanger +} + +// Token implements oauth2.TokenSource +func (sts *stsTokenSource) Token() (*oauth2.Token, error) { + tok, err := sts.ts.Token() + if err != nil { + return nil, fmt.Errorf("fetching base token: %w", err) + } + idt, err := sts.xchg.Exchange(context.Background(), tok.AccessToken) + if err != nil { + return nil, fmt.Errorf("exchanging base token: %w", err) + } + return &oauth2.Token{ + AccessToken: idt, + Expiry: time.Now().Add(time.Hour), + }, nil +} diff --git a/uidp/ancestry.go b/uidp/ancestry.go new file mode 100644 index 00000000..11f106aa --- /dev/null +++ b/uidp/ancestry.go @@ -0,0 +1,75 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package uidp + +import ( + "path" + "regexp" + "strings" +) + +// IsAncestor checks whether the "parent" UIDP is an ancestor (non-inclusive) +// of the given "child" UIDP. +func IsAncestor(parent, child string) bool { + return strings.HasPrefix(child, parent+"/") +} + +// InRoot checks whether the UIDP is in the root, as opposed to within a group +func InRoot(child string) bool { + return !strings.Contains(child, "/") +} + +// IsAncestorOrSelf checks whether the "parent" UIDP is an ancestor (inclusive) +// of the given "child" UIDP. +func IsAncestorOrSelf(parent, child string) bool { + return child == parent || IsAncestor(parent, child) +} + +// Parent returns the "parent" UIDP for a child UIDP. Returns / if parent is root. +// +// Example: +// +// Parent("a/b/c") returns "a/b" +// Parent("a") returns "/" +func Parent(child string) string { + // path.Dir returns "." if the child is already at the root + if p := path.Dir(child); p != "." { + return p + } + return "/" +} + +// Parents returns all "parent" UIDP for a child UIDP. Returns empty slice if parent is root. +// +// Example: +// +// Parents("a/b/c/d") returns ["a/b/c", "a/b", "a"] +func Parents(child string) []string { + parents := make([]string, 0, strings.Count(child, "/")) + for p := Parent(child); p != "/"; p = Parent(p) { + parents = append(parents, p) + } + return parents +} + +// Ancestry returns all parent UIDPs and the child. Returns only the child if it is root. +// +// Example: +// +// Ancestry("a/b/c/d") returns ["a/b/c/d", "a/b/c", "a/b", "a"] +func Ancestry(child string) []string { + ancestry := make([]string, 0, strings.Count(child, "/")+1) + ancestry = append(ancestry, child) + for p := Parent(child); p != "/"; p = Parent(p) { + ancestry = append(ancestry, p) + } + return ancestry +} + +// Valid returns true for valid UIDP values. +// The base segment of a UIDP is 20 hex-encoded bytes (40 characters). This may +// be followed by zero or more parts with 8 hex-encoded bytes (16 characters). +var Valid = regexp.MustCompile(`^[0-9a-f]{40}(?:/[0-9a-f]{16})*$`).MatchString diff --git a/uidp/ancestry_test.go b/uidp/ancestry_test.go new file mode 100644 index 00000000..5c2eb69d --- /dev/null +++ b/uidp/ancestry_test.go @@ -0,0 +1,177 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package uidp + +import ( + "reflect" + "testing" +) + +func TestAncestorExclusive(t *testing.T) { + tests := []struct { + name string + parent string + child string + want bool + }{{ + name: "direct parent", + parent: "a/b", + child: "a/b/c", + want: true, + }, { + name: "grand parent", + parent: "a", + child: "a/b/c", + want: true, + }, { + name: "self", + parent: "a/b/c", + child: "a/b/c", + want: false, // This should be the main difference from below + }, { + name: "child", + parent: "a/b/c/d", + child: "a/b/c", + want: false, + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + got := IsAncestor(test.parent, test.child) + if got != test.want { + t.Errorf("IsAncestor(%q, %q) = %v, wanted %v", test.parent, test.child, got, test.want) + } + }) + } +} + +func TestAncestorInclusive(t *testing.T) { + tests := []struct { + name string + parent string + child string + want bool + }{{ + name: "direct parent", + parent: "a/b", + child: "a/b/c", + want: true, + }, { + name: "grand parent", + parent: "a", + child: "a/b/c", + want: true, + }, { + name: "self", + parent: "a/b/c", + child: "a/b/c", + want: true, // This should be the main difference from above + }, { + name: "child", + parent: "a/b/c/d", + child: "a/b/c", + want: false, + }} + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + got := IsAncestorOrSelf(test.parent, test.child) + if got != test.want { + t.Errorf("IsAncestor(%q, %q) = %v, wanted %v", test.parent, test.child, got, test.want) + } + }) + } +} + +func TestInRoot(t *testing.T) { + tests := []struct { + id string + want bool + }{ + {"x", true}, + {"xyz", true}, + {"x/y", false}, + {"x/y/z", false}, + } + + for _, test := range tests { + t.Run(test.id, func(t *testing.T) { + got := InRoot(test.id) + if got != test.want { + t.Errorf("InRoot(%q) = %v, wanted %v", test.id, got, test.want) + } + }) + } +} + +func TestParent(t *testing.T) { + tests := []struct { + id string + want string + }{ + {"x", "/"}, + {"xyz", "/"}, + {"x/y", "x"}, + {"x/y/z", "x/y"}, + } + + for _, test := range tests { + t.Run(test.id, func(t *testing.T) { + got := Parent(test.id) + if got != test.want { + t.Errorf("Parent(%q) = %q, wanted %q", test.id, got, test.want) + } + }) + } +} + +func TestParents(t *testing.T) { + tests := []struct { + id string + want []string + }{ + {"x", []string{}}, + {"xyz", []string{}}, + {"x/y", []string{"x"}}, + {"x/y/z", []string{"x/y", "x"}}, + {"", []string{}}, + {"/", []string{}}, + {"//", []string{}}, + } + + for _, test := range tests { + t.Run(test.id, func(t *testing.T) { + got := Parents(test.id) + if !reflect.DeepEqual(got, test.want) { + t.Errorf("Parent(%q) = %q, wanted %q", test.id, got, test.want) + } + }) + } +} + +func TestAncestry(t *testing.T) { + tests := []struct { + id string + want []string + }{ + {"x", []string{"x"}}, + {"xyz", []string{"xyz"}}, + {"x/y", []string{"x/y", "x"}}, + {"x/y/z", []string{"x/y/z", "x/y", "x"}}, + {"", []string{""}}, + {"/", []string{"/"}}, + {"//", []string{"//"}}, + } + + for _, test := range tests { + t.Run(test.id, func(t *testing.T) { + got := Ancestry(test.id) + if !reflect.DeepEqual(got, test.want) { + t.Errorf("Parent(%q) = %q, wanted %q", test.id, got, test.want) + } + }) + } +} diff --git a/uidp/doc.go b/uidp/doc.go new file mode 100644 index 00000000..97dc9fe8 --- /dev/null +++ b/uidp/doc.go @@ -0,0 +1,8 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +// Package uidp contains utilities for reasoning about and manipulating the +// Chainguard IAM "UIDP" (UID Path) concept. +package uidp diff --git a/uidp/uid.go b/uidp/uid.go new file mode 100644 index 00000000..302034f5 --- /dev/null +++ b/uidp/uid.go @@ -0,0 +1,65 @@ +/* +Copyright 2021 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package uidp + +import ( + "crypto/rand" + "encoding/hex" + "fmt" +) + +// NOTE: We are using UID over UUID for 2 reasons: +// 1. UUIDs are very large. +// 2. UUIDs are not very random. +// Ref: https://neilmadden.blog/2018/08/30/moving-away-from-uuids/ + +// UID will is used for the primary key for items that must be globally unique. +// - A UID is 20 bytes of random bytes, URL safe hex encoded. +type UID string + +// SUID is be used to form the primary key for items that must be unique within some scoping (non-global). +// - A SUID is 8 random bytes, URL safe hex encoded. +type SUID string + +// UIDP is be used to denote the fully-qualified path for scoped keys. +// - A UIDP will consist of '/' delimited SUID segments with a UID root, following POSIX directory semantics. +// - The "basename" SUID is our key within the scoping of the "dirname" UIDP. +type UIDP string + +func NewUID() UID { + token := make([]byte, 20) + _, _ = rand.Read(token) + return UID(hex.EncodeToString(token)) +} + +func NewSUID() SUID { + token := make([]byte, 8) + _, _ = rand.Read(token) + return SUID(hex.EncodeToString(token)) +} + +func NewUIDP(path UIDP) UIDP { + if len(path) == 0 { + return UIDP(NewUID()) + } + return UIDP(fmt.Sprintf("%s/%s", path, NewSUID())) +} + +func (u UIDP) NewChild() UIDP { + return NewUIDP(u) +} + +func (u UID) String() string { + return string(u) +} + +func (u SUID) String() string { + return string(u) +} + +func (u UIDP) String() string { + return string(u) +} diff --git a/uidp/uid_test.go b/uidp/uid_test.go new file mode 100644 index 00000000..e7f9e540 --- /dev/null +++ b/uidp/uid_test.go @@ -0,0 +1,20 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package uidp + +import "testing" + +func TestUIDPValidity(t *testing.T) { + var uidp UIDP + + for i := 0; i < 5; i++ { + uidp = uidp.NewChild() + + if !Valid(string(uidp)) { + t.Errorf("Invalid UIDP: %s", uidp) + } + } +} diff --git a/validation/aws_account.go b/validation/aws_account.go new file mode 100644 index 00000000..3a378cb6 --- /dev/null +++ b/validation/aws_account.go @@ -0,0 +1,30 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "fmt" + "regexp" +) + +const awsAccountPattern = `^[0-9]{12}$` + +var ( + awsAccountPatternCompiled = regexp.MustCompile(awsAccountPattern) + + // ErrInvalidAWSAccount describes invalid AWS Account IDs by sharing the + // regular expression they must match + ErrInvalidAWSAccount = fmt.Errorf("AWS account ID must match %q", awsAccountPattern) +) + +// ValidateAWSAccount checks an AWS account id is valid. AWS Accounts must be a +// 12 digit number. +func ValidateAWSAccount(id string) error { + if awsAccountPatternCompiled.MatchString(id) { + return nil + } + return ErrInvalidAWSAccount +} diff --git a/validation/aws_account_test.go b/validation/aws_account_test.go new file mode 100644 index 00000000..19fba577 --- /dev/null +++ b/validation/aws_account_test.go @@ -0,0 +1,32 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "testing" +) + +func TestValidateAWSAccount(t *testing.T) { + tests := map[string]struct { + Input string + Expect bool + }{ + "valid": {"123456789012", true}, + "empty": {"", false}, + "letters": {"12345678901a", false}, + "too short": {"123", false}, + "too long": {"1234567890123", false}, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + got := ValidateAWSAccount(tt.Input) + if (got == nil) != tt.Expect { + t.Errorf("Expected GroupName(`%s`) to return (err == nil) == %v, but got %v", tt.Input, tt.Expect, got) + } + }) + } +} diff --git a/validation/bundles.go b/validation/bundles.go new file mode 100644 index 00000000..d9f3282f --- /dev/null +++ b/validation/bundles.go @@ -0,0 +1,30 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "fmt" + "regexp" +) + +const bundlePattern = `^[a-z]+(:[a-z]+)?$` + +var ( + bundlePatternCompiled = regexp.MustCompile(bundlePattern) + + // ErrInvalidBundles describes invalid bundle(s) by sharing the regular expression + // they must match + ErrInvalidBundles = fmt.Errorf("each bundle item must match %q", bundlePattern) +) + +func ValidateBundles(bundles []string) error { + for _, bundle := range bundles { + if !bundlePatternCompiled.MatchString(bundle) { + return ErrInvalidBundles + } + } + return nil +} diff --git a/validation/bundles_test.go b/validation/bundles_test.go new file mode 100644 index 00000000..19e35be7 --- /dev/null +++ b/validation/bundles_test.go @@ -0,0 +1,37 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "testing" +) + +func TestValidateBundles(t *testing.T) { + tests := map[string]struct { + Input []string + Expect bool + }{ + "valid": {[]string{"boo"}, true}, + "valid colon": {[]string{"bundle:boo", "tag:something"}, true}, + "start with colon": {[]string{":boo"}, false}, + "end with colon": {[]string{"boo:"}, false}, + "multiple colons": {[]string{"boo:haha:ra"}, false}, + "empty": {[]string{""}, false}, + "no slashes": {[]string{"foo/bar"}, false}, + "spaces are not alright": {[]string{"chainguard engineering"}, false}, + "other whitespace is bad": {[]string{"\r\n\tderp"}, false}, + "no uppercase": {[]string{"DERP"}, false}, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + got := ValidateBundles(tt.Input) + if (got == nil) != tt.Expect { + t.Errorf("Expected Bundles(`%s`) to return (err == nil) == %v, but got %v", tt.Input, tt.Expect, got) + } + }) + } +} diff --git a/validation/enforcer_options.go b/validation/enforcer_options.go new file mode 100644 index 00000000..2b56bb9c --- /dev/null +++ b/validation/enforcer_options.go @@ -0,0 +1,27 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "k8s.io/apimachinery/pkg/util/sets" +) + +const ( + EnforcerOptionWebhookFailOpen = "webhook_fail_open" + EnforcerOptionEnableCIPCache = "enable_cip_cache" + EnforcerOptionNamespaceEnforcementMode = "namespace_enforcement_mode" + + NamespaceEnforcementModeOptOut = "opt-out" + NamespaceEnforcementModeOptIn = "opt-in" +) + +var ( + // ValidNamespaceEnforcementModeOpts are valid webhook label selection options for a managed cluster + ValidNamespaceEnforcementModeOpts = sets.NewString(NamespaceEnforcementModeOptIn, NamespaceEnforcementModeOptOut) + + // ValidEnforcerOptions are valid field names of enforcer options available + ValidEnforcerOptions = sets.NewString(EnforcerOptionWebhookFailOpen, EnforcerOptionEnableCIPCache, EnforcerOptionNamespaceEnforcementMode) +) diff --git a/validation/name.go b/validation/name.go new file mode 100644 index 00000000..545ff8d5 --- /dev/null +++ b/validation/name.go @@ -0,0 +1,28 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "fmt" + "regexp" +) + +const namePattern = `^[a-z0-9 ._-]{1,}$` + +var ( + namePatternCompiled = regexp.MustCompile(namePattern) + + // ErrInvalidName describes invalid names by sharing the regular expression + // they must match + ErrInvalidName = fmt.Errorf("name must match %q", namePattern) +) + +func ValidateName(name string) error { + if namePatternCompiled.MatchString(name) { + return nil + } + return ErrInvalidName +} diff --git a/validation/name_test.go b/validation/name_test.go new file mode 100644 index 00000000..05a52f8b --- /dev/null +++ b/validation/name_test.go @@ -0,0 +1,34 @@ +/* +Copyright 2022 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "testing" +) + +func TestValidateName(t *testing.T) { + tests := map[string]struct { + Input string + Expect bool + }{ + "valid": {"boo.foo_-", true}, + "empty": {"", false}, + "no slashes": {"foo/bar", false}, + "spaces are alright": {"chainguard engineering", true}, + "no spaces are alright too": {"chainguarddemo", true}, + "other whitespace is bad": {"\r\n\tderp", false}, + "no uppercase": {"DERP", false}, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + got := ValidateName(tt.Input) + if (got == nil) != tt.Expect { + t.Errorf("Expected GroupName(`%s`) to return (err == nil) == %v, but got %v", tt.Input, tt.Expect, got) + } + }) + } +} diff --git a/validation/readme.go b/validation/readme.go new file mode 100644 index 00000000..a3a6e609 --- /dev/null +++ b/validation/readme.go @@ -0,0 +1,66 @@ +/* +Copyright 2024 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "fmt" + "html" + "regexp" + "strings" + + "github.com/google/go-cmp/cmp" + "github.com/microcosm-cc/bluemonday" + "github.com/russross/blackfriday/v2" +) + +var ErrUnsafeReadme = fmt.Errorf("readme contained unsafe html content") + +// ValidateReadme validates the contents of a Markdown README.md file. +// If the contents are invalid, a string will be returned containing the +// diff of what the Markdown would look like as HTML if properly sanitized. +func ValidateReadme(readme string) (string, error) { + // Treat empty readme as valid, prevent further processing + if readme == "" { + return "", nil + } + unsafe := readmeToHTML(readme) + safe := sanitizeHTML(unsafe) + // After converting the Markdown to HTML, + // make sure there is no diff after sanitizing it. + // Unescape any encoded HTML tags for proper comparison. + if diff := cmp.Diff(unescapeHTML(unsafe), unescapeHTML(safe)); diff != "" { + return diff, ErrUnsafeReadme + } + return "", nil +} + +func readmeToHTML(rawMarkdown string) string { + s := string(blackfriday.Run([]byte(rawMarkdown))) + // Fix issue where single tags get extra space on conversion (e.g. "
") + s = strings.ReplaceAll(s, " />", "/>") + return s +} + +var bluemondayPolicy = func() *bluemonday.Policy { + p := bluemonday.UGCPolicy() + // Allow fenced code block classes + p = p.AllowAttrs("class").Matching(regexp.MustCompile("^language-[a-zA-Z0-9]+$")).OnElements("code") + // Allow links without ref="nofollow" which are not set automatically on links on markdown conversion + p = p.RequireNoFollowOnLinks(false) + // Allow custom height and width on images + p = p.AllowAttrs("width", "height").OnElements("img") + // Allow HTML comments + p.AllowComments() + return p +}() + +func sanitizeHTML(unsafeHTML string) string { + return bluemondayPolicy.Sanitize(unsafeHTML) +} + +func unescapeHTML(safeHTML string) string { + return html.UnescapeString(safeHTML) +} diff --git a/validation/readme_test.go b/validation/readme_test.go new file mode 100644 index 00000000..2d860247 --- /dev/null +++ b/validation/readme_test.go @@ -0,0 +1,75 @@ +/* +Copyright 2024 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "testing" +) + +const ( + safeReadme = ` + +# safe + + + +[click here](./other.md) + + +--- + +Here is some dangerous code inside a code block: + + +` + "```go" + ` +Hello World +` + "```" + + unsafeReadme1 = ` + +# unsafe + + + +[click here](./other.md) + + +--- + +Here is some dangerous code outside a code block: + +Hello World +` + + unsafeReadme2 = ` +# unsafe + +TAKE THAT!!!!!!! + + +` +) + +func TestValidateReadme(t *testing.T) { + tests := map[string]struct { + Input string + Expect bool + }{ + "empty": {"", true}, + "safe": {safeReadme, true}, + "unsafe 1": {unsafeReadme1, false}, + "unsafe 2": {unsafeReadme2, false}, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + diff, got := ValidateReadme(tt.Input) + if (got == nil) != tt.Expect { + t.Errorf("Expected ValidateReadme(`%s`) to return (err == nil) == %v, but got %v. diff: %s", tt.Input, tt.Expect, got, diff) + } + }) + } +} diff --git a/validation/tag.go b/validation/tag.go new file mode 100644 index 00000000..79c29594 --- /dev/null +++ b/validation/tag.go @@ -0,0 +1,29 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "fmt" + "regexp" +) + +// From https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pulling-manifests +const tagPattern = `^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,127}$` + +var ( + tagPatternCompiled = regexp.MustCompile(tagPattern) + + // ErrInvalidTag describes invalid tags by sharing the regular expression + // they must match + ErrInvalidTag = fmt.Errorf("tag must match %q", tagPattern) +) + +func ValidateTag(tag string) error { + if tagPatternCompiled.MatchString(tag) { + return nil + } + return ErrInvalidTag +} diff --git a/validation/tag_test.go b/validation/tag_test.go new file mode 100644 index 00000000..00b8d243 --- /dev/null +++ b/validation/tag_test.go @@ -0,0 +1,40 @@ +/* +Copyright 2023 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package validation + +import ( + "testing" +) + +func TestValidateTag(t *testing.T) { + tests := map[string]struct { + Input string + Expect bool + }{ + "valid": {"latest", true}, + "version": {"1.2.3-r1", true}, + "uppercase is ok": {"DERP", true}, + "128 chars is ok": {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", true}, + "129 chars is not ok": {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", false}, + "empty": {"", false}, + "no slashes": {"foo/bar", false}, + "no colons": {"foo:bar", false}, + "no spaces in middle": {"chainguard engineering", false}, + "no leading spaces": {" chainguardengineering", false}, + "no spaces both sides": {" chainguardengineering ", false}, + "no trailing spacess": {"chainguardengineering ", false}, + "other whitespace is bad": {"\r\n\tderp", false}, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + got := ValidateTag(tt.Input) + if (got == nil) != tt.Expect { + t.Errorf("Expected ValidateTag(`%s`) to return (err == nil) == %v, but got %v", tt.Input, tt.Expect, got) + } + }) + } +} From 8fddf121647d9efb14ef6de478c6948e66fa2f20 Mon Sep 17 00:00:00 2001 From: Billy Lynch <1844673+wlynch@users.noreply.github.com> Date: Thu, 29 Feb 2024 15:56:32 -0500 Subject: [PATCH 03/41] Export fa595ecbc97449df8f6f65b7638db9a08bc32b5f Export: fa595ecbc97449df8f6f65b7638db9a08bc32b5f --- .github/chainguard/mono-readonly.sts.yaml | 10 +++ .github/chainguard/mono.sts.yaml | 11 ++++ .github/workflows/test.yaml | 41 ++++++++++++ .github/workflows/verify.yaml | 79 +++++++++++++++++++++++ 4 files changed, 141 insertions(+) create mode 100644 .github/chainguard/mono-readonly.sts.yaml create mode 100644 .github/chainguard/mono.sts.yaml create mode 100644 .github/workflows/test.yaml create mode 100644 .github/workflows/verify.yaml diff --git a/.github/chainguard/mono-readonly.sts.yaml b/.github/chainguard/mono-readonly.sts.yaml new file mode 100644 index 00000000..e3702ffb --- /dev/null +++ b/.github/chainguard/mono-readonly.sts.yaml @@ -0,0 +1,10 @@ +# Copyright 2024 Chainguard, Inc. +# SPDX-License-Identifier: Apache-2.0 + +issuer: https://token.actions.githubusercontent.com +subject_pattern: repo:chainguard-dev/mono:pull_request +claim_pattern: + job_workflow_ref: chainguard-dev/mono/.github/workflows/export-sdk.yaml@.* + +permissions: + contents: read diff --git a/.github/chainguard/mono.sts.yaml b/.github/chainguard/mono.sts.yaml new file mode 100644 index 00000000..7e2cfc2a --- /dev/null +++ b/.github/chainguard/mono.sts.yaml @@ -0,0 +1,11 @@ +# Copyright 2024 Chainguard, Inc. +# SPDX-License-Identifier: Apache-2.0 + +issuer: https://token.actions.githubusercontent.com +subject_pattern: repo:chainguard-dev/mono:ref:refs/heads/main +claim_pattern: + job_workflow_ref: chainguard-dev/mono/.github/workflows/export-sdk.yaml@refs/heads/main + +permissions: + contents: write + pull_requests: write diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 00000000..115918e2 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,41 @@ +# Copyright 2023 Chainguard, Inc. +# SPDX-License-Identifier: Apache-2.0 + +name: Test + +on: + pull_request: + branches: [ 'main', 'release-*' ] + push: + branches: [ 'main', 'release-*' ] + +jobs: + + test: + runs-on: ubuntu-latest + steps: + - name: Check out code onto GOPATH + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + # https://github.com/mvdan/github-actions-golang#how-do-i-set-up-caching-between-builds + - uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 + with: + # In order: + # * Module download cache + # * Build cache (Linux) + path: | + ~/go/pkg/mod + ~/.cache/go-build + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + + - name: Set up Go + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 + with: + go-version-file: './go.mod' + check-latest: true + + - run: | + # Exclude running unit tests against third_party repos. + go test -race $(go list ./... | grep -v third_party/) diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml new file mode 100644 index 00000000..267b0870 --- /dev/null +++ b/.github/workflows/verify.yaml @@ -0,0 +1,79 @@ +# Copyright 2023 Chainguard, Inc. +# SPDX-License-Identifier: Apache-2.0 + +name: Verify + +on: + pull_request: + branches: [ 'main', 'release-*' ] + push: + branches: [ 'main', 'release-*' ] + +jobs: + + verify: + name: Verify Codegen + runs-on: ubuntu-latest + + env: + GOPATH: ${{ github.workspace }} + + steps: + - name: Check out code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + path: ./src/github.com/${{ github.repository }} + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 + with: + go-version-file: './src/github.com/${{ github.repository }}/go.mod' + check-latest: true + + # https://github.com/mvdan/github-actions-golang#how-do-i-set-up-caching-between-builds + - uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 + with: + # In order: + # * Module download cache + # * Build cache (Linux) + path: | + ~/go/pkg/mod + ~/.cache/go-build + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + + #- name: Install protoc + # uses: arduino/setup-protoc@v1.1.2 + # arduino/setup-protoc@v1.1.2 can't install latest releases of protoc due + # to protoc changing their version naming scheme: + # https://github.com/arduino/setup-protoc/issues/33 + - name: Install Protoc + run: | + cd "$(mktemp -d)" + wget -O protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-linux-x86_64.zip + unzip protoc.zip -d . + chmod +x ./bin/protoc + echo "$(pwd)/bin" >> "$GITHUB_PATH" + + - name: Install Dependencies + run: | + cd $(mktemp -d) + go install github.com/google/go-licenses@ceb292363ec84358c9a276ef23aa0de893e59b84 + go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1 + go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 + go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.10.0 + go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.10.0 + + - name: Update Codegen + shell: bash + working-directory: ./src/github.com/${{ github.repository }} + run: | + ./hack/update-codegen.sh + + - name: Verify + uses: chainguard-dev/actions/nodiff@main + with: + path: ./src/github.com/${{ github.repository }} + fixup-command: "./hack/update-codegen.sh" From adf12f2609a6d8cd0d5307bcce53831196b8a923 Mon Sep 17 00:00:00 2001 From: Colin Douglas <16968564+cmdpdx@users.noreply.github.com> Date: Fri, 1 Mar 2024 17:27:36 -0800 Subject: [PATCH 04/41] Export d8946d6df5292634222c9592e1e65b328232cb12 Export: d8946d6df5292634222c9592e1e65b328232cb12 --- auth/login/login.go | 11 +++++++++- auth/login/login_test.go | 46 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 auth/login/login_test.go diff --git a/auth/login/login.go b/auth/login/login.go index 256f64dd..67411409 100644 --- a/auth/login/login.go +++ b/auth/login/login.go @@ -17,6 +17,15 @@ import ( "github.com/pkg/browser" ) +// OpenBrowserError wraps the error returned from browser.OpenURL, +// since this can take a few different forms depending on the OS. +type OpenBrowserError struct { + err error +} + +func (e *OpenBrowserError) Error() string { return "failed to open browser: " + e.err.Error() } +func (e *OpenBrowserError) Unwrap() error { return e.err } + func Login(ctx context.Context, opts ...Option) (token string, refreshToken string, err error) { conf, err := newConfigFromOptions(opts...) if err != nil { @@ -68,7 +77,7 @@ func Login(ctx context.Context, opts ...Option) (token string, refreshToken stri fmt.Fprintf(os.Stderr, "Opening browser to %s\n", u) err = browser.OpenURL(u) if err != nil { - return "", "", err + return "", "", &OpenBrowserError{err} } token, err = s.Token() diff --git a/auth/login/login_test.go b/auth/login/login_test.go new file mode 100644 index 00000000..2a4b92f3 --- /dev/null +++ b/auth/login/login_test.go @@ -0,0 +1,46 @@ +/* +Copyright 2024 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package login + +import ( + "errors" + "testing" +) + +func TestOpenBrowserErrorAs(t *testing.T) { + tests := map[string]struct { + err error + want bool + }{ + "nil": { + err: nil, + want: false, + }, + "success": { + err: &OpenBrowserError{ + errors.New("unit test"), + }, + want: true, + }, + "failure": { + err: errors.New("unit test"), + want: false, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + var want *OpenBrowserError + got := errors.As(test.err, &want) + if got != test.want { + t.Errorf("As() expected %t, got %t", test.want, got) + } + if got { + t.Log(want.Error()) + } + }) + } +} From b29644c669af265f285fd327c642f55c4195ee6c Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Wed, 6 Mar 2024 14:08:24 -0800 Subject: [PATCH 05/41] Export 366f1da5c34d5032aaec07338e8ad4dd56e0ef7a Export: 366f1da5c34d5032aaec07338e8ad4dd56e0ef7a --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index dbe084d2..0cd031ca 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/aws/aws-sdk-go-v2 v1.24.1 github.com/bits-and-blooms/bitset v1.13.0 github.com/chainguard-dev/clog v1.3.1 - github.com/cloudevents/sdk-go/v2 v2.15.0 + github.com/cloudevents/sdk-go/v2 v2.15.2 github.com/coreos/go-oidc/v3 v3.9.0 github.com/google/go-cmp v0.6.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 diff --git a/go.sum b/go.sum index 4ca5f6bb..8fb546f0 100644 --- a/go.sum +++ b/go.sum @@ -74,8 +74,8 @@ github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chainguard-dev/clog v1.3.1 h1:CDNCty5WKQhJzoOPubk0GdXt+bPQyargmfClqebrpaQ= github.com/chainguard-dev/clog v1.3.1/go.mod h1:cV516KZWqYc/phZsCNwF36u/KMGS+Gj5Uqeb8Hlp95Y= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudevents/sdk-go/v2 v2.15.0 h1:aKnhLQhyoJXqEECQdOIZnbZ9VupqlidE6hedugDGr+I= -github.com/cloudevents/sdk-go/v2 v2.15.0/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= +github.com/cloudevents/sdk-go/v2 v2.15.2 h1:54+I5xQEnI73RBhWHxbI1XJcqOFOVJN85vb41+8mHUc= +github.com/cloudevents/sdk-go/v2 v2.15.2/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101 h1:7To3pQ+pZo0i3dsWEbinPNFs5gPSBOsJtx3wTT94VBY= github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= From 3fdd2407fd470bd9911a2fdd08a268fe1b8777b9 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Thu, 7 Mar 2024 17:02:13 -0800 Subject: [PATCH 06/41] Export 46919699f0ed78d12ace5f21a1da159ea554deb0 Export: 46919699f0ed78d12ace5f21a1da159ea554deb0 --- go.mod | 4 ++-- go.sum | 21 +++++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 0cd031ca..153f4e33 100644 --- a/go.mod +++ b/go.mod @@ -67,7 +67,7 @@ require ( github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-jose/go-jose/v3 v3.0.1 // indirect + github.com/go-jose/go-jose/v3 v3.0.3 // indirect github.com/go-logr/logr v1.3.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -142,7 +142,7 @@ require ( google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect - gopkg.in/go-jose/go-jose.v2 v2.6.2 // indirect + gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 8fb546f0..ba1109cc 100644 --- a/go.sum +++ b/go.sum @@ -106,8 +106,8 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA= -github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= +github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -314,7 +314,6 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -358,7 +357,6 @@ go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -374,6 +372,7 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -388,6 +387,8 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -399,6 +400,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -416,16 +418,22 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= @@ -441,6 +449,7 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -493,8 +502,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/go-jose/go-jose.v2 v2.6.2 h1:Rl5+9rA0kG3vsO1qhncMPRT5eHICihAMQYJkD7u/i4M= -gopkg.in/go-jose/go-jose.v2 v2.6.2/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= +gopkg.in/go-jose/go-jose.v2 v2.6.3 h1:nt80fvSDlhKWQgSWyHyy5CfmlQr+asih51R8PTWNKKs= +gopkg.in/go-jose/go-jose.v2 v2.6.3/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= From 672702a7a4cf1412ae94ca9af795e991eee4e5de Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Fri, 8 Mar 2024 07:23:06 -0800 Subject: [PATCH 07/41] Export b16af0c354e9f028fc0329e091fdfe5dfb304b3e Export: b16af0c354e9f028fc0329e091fdfe5dfb304b3e --- .github/workflows/verify.yaml | 2 +- README.md | 2 +- go.mod | 4 +- go.sum | 8 +- proto/annotations/auth.pb.go | 2 +- proto/annotations/events.pb.go | 2 +- proto/capabilities/capabilities.pb.go | 368 +++++++++--------- .../advisory/v1/advisory.platform.pb.go | 2 +- proto/platform/auth/v1/auth.platform.pb.go | 6 +- proto/platform/common/v1/uidp.platform.pb.go | 2 +- .../events/v1/identities.platform.pb.go | 12 +- .../events/v1/subscriptions.platform.pb.go | 12 +- .../v1/account_associations.platform.pb.go | 22 +- proto/platform/iam/v1/group.platform.pb.go | 12 +- .../iam/v1/group_invites.platform.pb.go | 8 +- proto/platform/iam/v1/identity.platform.pb.go | 12 +- .../iam/v1/identity_providers.platform.pb.go | 20 +- proto/platform/iam/v1/policies.platform.pb.go | 16 +- proto/platform/iam/v1/role.platform.pb.go | 16 +- .../iam/v1/role_binding.platform.pb.go | 20 +- proto/platform/iam/v1/sigstore.platform.pb.go | 12 +- proto/platform/oidc/v1/oidc.platform.pb.go | 6 +- proto/platform/ping/v1/ping.platform.pb.go | 2 +- .../registry/v1/registry.platform.pb.go | 28 +- .../tenant/v1/attestation.platform.pb.go | 2 +- .../platform/tenant/v1/cluster.platform.pb.go | 20 +- .../platform/tenant/v1/context.platform.pb.go | 2 +- .../tenant/v1/namespace.platform.pb.go | 2 +- proto/platform/tenant/v1/node.platform.pb.go | 2 +- .../tenant/v1/policy_results.platform.pb.go | 2 +- .../platform/tenant/v1/record.platform.pb.go | 2 +- proto/platform/tenant/v1/risk.platform.pb.go | 2 +- proto/platform/tenant/v1/sbom.platform.pb.go | 2 +- .../tenant/v1/signature.platform.pb.go | 2 +- proto/platform/tenant/v1/vuln.platform.pb.go | 2 +- .../tenant/v1/workload.platform.pb.go | 2 +- 36 files changed, 319 insertions(+), 319 deletions(-) diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml index 267b0870..7b8366ca 100644 --- a/.github/workflows/verify.yaml +++ b/.github/workflows/verify.yaml @@ -61,7 +61,7 @@ jobs: run: | cd $(mktemp -d) go install github.com/google/go-licenses@ceb292363ec84358c9a276ef23aa0de893e59b84 - go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1 + go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.33.0 go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.10.0 go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.10.0 diff --git a/README.md b/README.md index 251625f5..6664b400 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ We currently require `protoc` v21.12. Install `protoc` codegen dependencies: ```shell -go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28.1 +go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.33.0 go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.10.0 go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.10.0 diff --git a/go.mod b/go.mod index 153f4e33..0a8faf14 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe google.golang.org/grpc v1.61.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.32.0 + google.golang.org/protobuf v1.33.0 gopkg.in/square/go-jose.v2 v2.6.0 k8s.io/api v0.29.1 k8s.io/apimachinery v0.29.1 @@ -73,7 +73,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v5 v5.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/google/go-containerregistry v0.18.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/s2a-go v0.1.7 // indirect diff --git a/go.sum b/go.sum index ba1109cc..0b3c500e 100644 --- a/go.sum +++ b/go.sum @@ -145,8 +145,8 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 h1:0VpGH+cDhbDtdcweoyCVsF3fhN8kejK6rFe/2FFX2nU= github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49/go.mod h1:BkkQ4L1KS1xMt2aWSPStnn55ChGC0DPOn2FQYj+f25M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -496,8 +496,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/proto/annotations/auth.pb.go b/proto/annotations/auth.pb.go index a7aeace6..32414401 100644 --- a/proto/annotations/auth.pb.go +++ b/proto/annotations/auth.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: auth.proto diff --git a/proto/annotations/events.pb.go b/proto/annotations/events.pb.go index f04beef8..9c6a02d6 100644 --- a/proto/annotations/events.pb.go +++ b/proto/annotations/events.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: events.proto diff --git a/proto/capabilities/capabilities.pb.go b/proto/capabilities/capabilities.pb.go index 344a7418..607c9f62 100644 --- a/proto/capabilities/capabilities.pb.go +++ b/proto/capabilities/capabilities.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: capabilities.proto @@ -329,269 +329,269 @@ var file_capabilities_proto_rawDesc = []byte{ 0x93, 0x21, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x33, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x43, 0x52, - 0x45, 0x41, 0x54, 0x45, 0x10, 0x65, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x01, + 0x45, 0x41, 0x54, 0x45, 0x10, 0x65, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x01, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, - 0x50, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x66, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0xa8, 0xcb, 0x91, 0x4d, 0x02, 0x12, 0x2f, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, + 0x50, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x66, 0x1a, 0x18, 0xa8, 0xcb, 0x91, + 0x4d, 0x02, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x67, 0x1a, 0x16, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x6c, 0x69, 0x73, - 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x03, 0x12, 0x33, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, + 0xa8, 0xcb, 0x91, 0x4d, 0x03, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, - 0x68, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x04, 0x12, 0x42, 0x0a, 0x1c, 0x43, + 0x68, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x04, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc9, 0x01, 0x1a, 0x1f, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x05, 0x12, + 0xa8, 0xcb, 0x91, 0x4d, 0x05, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcb, 0x01, - 0x1a, 0x1d, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x12, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x06, 0x12, + 0x1a, 0x1d, 0xa8, 0xcb, 0x91, 0x4d, 0x06, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x12, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, - 0xcc, 0x01, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, - 0x91, 0x4d, 0x07, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, + 0xcc, 0x01, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x07, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xad, 0x02, 0x1a, 0x17, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x08, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x41, 0x50, 0x5f, 0x49, + 0xa8, 0xcb, 0x91, 0x4d, 0x08, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x73, + 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, - 0xae, 0x02, 0x1a, 0x17, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x09, 0x12, 0x2e, 0x0a, 0x12, 0x43, + 0xae, 0x02, 0x1a, 0x17, 0xa8, 0xcb, 0x91, 0x4d, 0x09, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, + 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0xaf, 0x02, 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x0a, 0x12, 0x32, 0x0a, 0x14, 0x43, + 0x54, 0x10, 0xaf, 0x02, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x0a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, + 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x14, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x53, 0x5f, 0x44, 0x45, 0x4c, - 0x45, 0x54, 0x45, 0x10, 0xb0, 0x02, 0x1a, 0x17, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x6f, - 0x6c, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x0b, 0x12, + 0x45, 0x54, 0x45, 0x10, 0xb0, 0x02, 0x1a, 0x17, 0xa8, 0xcb, 0x91, 0x4d, 0x0b, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, - 0x91, 0x03, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, - 0x91, 0x4d, 0x0c, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, + 0x91, 0x03, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x0c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, + 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0x92, 0x03, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, 0x6f, - 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x0d, 0x12, 0x3e, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x49, + 0x41, 0x54, 0x45, 0x10, 0x92, 0x03, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x0d, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x14, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x93, 0x03, 0x1a, 0x1d, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x12, - 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x6c, 0x69, - 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x0e, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x93, 0x03, 0x1a, 0x1d, 0xa8, 0xcb, 0x91, 0x4d, 0x0e, 0x9a, + 0xaf, 0xa8, 0xd2, 0x05, 0x12, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x53, - 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x94, 0x03, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, - 0x05, 0x14, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x0f, 0x12, 0x3b, 0x0a, 0x1a, 0x43, + 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x94, 0x03, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, + 0x0f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, - 0x52, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xf5, 0x03, 0x1a, 0x1a, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x10, 0x12, 0x3b, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, + 0x52, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xf5, 0x03, 0x1a, 0x1a, 0xa8, 0xcb, + 0x91, 0x4d, 0x10, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, - 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xf6, 0x03, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, - 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0xa8, 0xcb, 0x91, 0x4d, 0x11, 0x12, 0x37, 0x0a, 0x18, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, + 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xf6, 0x03, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x11, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0xf7, 0x03, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x12, 0x12, 0x3b, + 0x54, 0x10, 0xf7, 0x03, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x12, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, + 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xf8, 0x03, 0x1a, - 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x13, 0x12, 0x3f, 0x0a, 0x1c, 0x43, + 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x13, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x10, 0xf9, 0x03, 0x1a, 0x1c, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0xa8, 0xcb, 0x91, 0x4d, 0x33, 0x12, 0x35, 0x0a, 0x17, + 0xa8, 0xcb, 0x91, 0x4d, 0x33, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, - 0x44, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x04, 0x1a, 0x17, 0x9a, 0xaf, 0xa8, 0xd2, - 0x05, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, - 0x91, 0x4d, 0x14, 0x12, 0x45, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, + 0x44, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdb, 0x04, 0x1a, 0x17, 0xa8, 0xcb, 0x91, 0x4d, + 0x14, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x6c, + 0x69, 0x73, 0x74, 0x12, 0x45, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, - 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe5, 0x04, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, - 0x14, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, - 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x30, 0x12, 0x49, 0x0a, 0x21, 0x43, 0x41, + 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xe5, 0x04, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x30, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, - 0xef, 0x04, 0x1a, 0x21, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x16, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, - 0xa8, 0xcb, 0x91, 0x4d, 0x31, 0x12, 0x51, 0x0a, 0x25, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, + 0xef, 0x04, 0x1a, 0x21, 0xa8, 0xcb, 0x91, 0x4d, 0x31, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x16, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, + 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x25, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x52, 0x45, 0x53, 0x55, 0x4c, 0x54, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xf9, - 0x04, 0x1a, 0x25, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1a, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x2e, 0x6c, - 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x32, 0x12, 0x31, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, + 0x04, 0x1a, 0x25, 0xa8, 0xcb, 0x91, 0x4d, 0x32, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1a, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x49, 0x53, 0x4b, 0x53, 0x5f, 0x4c, 0x49, 0x53, - 0x54, 0x10, 0x80, 0x05, 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x72, 0x69, 0x73, 0x6b, - 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x44, 0x12, 0x31, 0x0a, 0x15, 0x43, + 0x54, 0x10, 0x80, 0x05, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x44, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, + 0x0a, 0x72, 0x69, 0x73, 0x6b, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x53, 0x42, 0x4f, 0x4d, 0x53, 0x5f, - 0x4c, 0x49, 0x53, 0x54, 0x10, 0x8a, 0x05, 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x73, - 0x62, 0x6f, 0x6d, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x45, 0x12, 0x3f, + 0x4c, 0x49, 0x53, 0x54, 0x10, 0x8a, 0x05, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x45, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x0a, 0x73, 0x62, 0x6f, 0x6d, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x56, 0x55, 0x4c, 0x4e, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x94, - 0x05, 0x1a, 0x1c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x76, 0x75, 0x6c, 0x6e, 0x5f, 0x72, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x46, 0x12, + 0x05, 0x1a, 0x1c, 0xa8, 0xcb, 0x91, 0x4d, 0x46, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x76, 0x75, + 0x6c, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x45, 0x53, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, - 0x9e, 0x05, 0x1a, 0x1c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x47, + 0x9e, 0x05, 0x1a, 0x1c, 0xa8, 0xcb, 0x91, 0x4d, 0x47, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x11, 0x61, + 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, - 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xbd, 0x05, 0x1a, 0x26, 0x9a, 0xaf, 0xa8, 0xd2, - 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, - 0x4d, 0x15, 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, + 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xbd, 0x05, 0x1a, 0x26, 0xa8, 0xcb, 0x91, 0x4d, + 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, + 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xbe, 0x05, 0x1a, 0x26, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, - 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, - 0xcb, 0x91, 0x4d, 0x16, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, + 0x4e, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xbe, 0x05, 0x1a, 0x26, 0xa8, 0xcb, + 0x91, 0x4d, 0x16, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, - 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xbf, 0x05, 0x1a, 0x24, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x19, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, - 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, - 0x4d, 0x17, 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, + 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xbf, 0x05, 0x1a, 0x24, 0xa8, 0xcb, + 0x91, 0x4d, 0x17, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, + 0x73, 0x74, 0x12, 0x50, 0x0a, 0x23, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x41, 0x53, 0x53, 0x4f, 0x43, 0x49, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xc0, 0x05, 0x1a, 0x26, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, - 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, - 0xcb, 0x91, 0x4d, 0x18, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, + 0x4e, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xc0, 0x05, 0x1a, 0x26, 0xa8, 0xcb, + 0x91, 0x4d, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xa1, 0x06, - 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x19, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, + 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x19, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0xa2, 0x06, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x1a, + 0x41, 0x54, 0x45, 0x10, 0xa2, 0x06, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x1a, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, 0x4c, 0x49, - 0x43, 0x59, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa3, 0x06, 0x1a, 0x16, 0x9a, 0xaf, 0xa8, 0xd2, - 0x05, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, - 0x4d, 0x1b, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, + 0x43, 0x59, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa3, 0x06, 0x1a, 0x16, 0xa8, 0xcb, 0x91, 0x4d, + 0x1b, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6c, 0x69, + 0x73, 0x74, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xa4, 0x06, 0x1a, 0x18, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x1c, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, + 0xa8, 0xcb, 0x91, 0x4d, 0x1c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x52, 0x45, - 0x41, 0x54, 0x45, 0x10, 0x85, 0x07, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, - 0x4d, 0x1d, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, + 0x41, 0x54, 0x45, 0x10, 0x85, 0x07, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x1d, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x86, 0x07, - 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x1e, 0x12, 0x34, 0x0a, 0x15, + 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x1e, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x87, 0x07, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, - 0x4d, 0x1f, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x87, 0x07, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x1f, 0x9a, + 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x6c, 0x69, + 0x73, 0x74, 0x12, 0x38, 0x0a, 0x17, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x88, 0x07, - 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x20, 0x12, 0x31, 0x0a, 0x15, + 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x20, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x53, - 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xeb, 0x07, 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x21, 0x12, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xeb, 0x07, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x21, 0x9a, + 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcf, 0x08, - 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x22, 0x12, 0x39, 0x0a, 0x19, + 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x22, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x19, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x45, 0x4e, 0x41, 0x4e, 0x54, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x4c, - 0x4f, 0x41, 0x44, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xb3, 0x09, 0x1a, 0x19, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2e, 0x6c, 0x69, - 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x23, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, + 0x4f, 0x41, 0x44, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xb3, 0x09, 0x1a, 0x19, 0xa8, 0xcb, + 0x91, 0x4d, 0x23, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x95, 0x0a, 0x1a, - 0x24, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0xa8, 0xcb, 0x91, 0x4d, 0x34, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, + 0x24, 0xa8, 0xcb, 0x91, 0x4d, 0x34, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, - 0x45, 0x52, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x96, 0x0a, 0x1a, 0x24, 0x9a, - 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, - 0x91, 0x4d, 0x35, 0x12, 0x48, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, + 0x45, 0x52, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x96, 0x0a, 0x1a, 0x24, 0xa8, + 0xcb, 0x91, 0x4d, 0x35, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, - 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x97, 0x0a, 0x1a, 0x22, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, - 0x17, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x36, 0x12, 0x4c, 0x0a, + 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x97, 0x0a, 0x1a, 0x22, 0xa8, 0xcb, 0x91, 0x4d, 0x36, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x17, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x21, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x53, 0x5f, 0x44, 0x45, 0x4c, 0x45, - 0x54, 0x45, 0x10, 0x98, 0x0a, 0x1a, 0x24, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x19, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x37, 0x12, 0x44, 0x0a, 0x1e, 0x43, + 0x54, 0x45, 0x10, 0x98, 0x0a, 0x1a, 0x24, 0xa8, 0xcb, 0x91, 0x4d, 0x37, 0x9a, 0xaf, 0xa8, 0xd2, + 0x05, 0x19, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x44, 0x0a, 0x1e, 0x43, 0x41, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xdd, 0x0b, - 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, - 0x24, 0x12, 0x44, 0x0a, 0x1e, 0x43, 0x41, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, + 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x24, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x12, 0x44, 0x0a, 0x1e, 0x43, 0x41, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x1a, 0x1f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x25, 0x12, 0x40, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x45, + 0x41, 0x54, 0x45, 0x10, 0xde, 0x0b, 0x1a, 0x1f, 0xa8, 0xcb, 0x91, 0x4d, 0x25, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x1c, 0x43, 0x41, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdf, 0x0b, 0x1a, 0x1d, 0x9a, 0xaf, 0xa8, 0xd2, - 0x05, 0x12, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x26, 0x12, 0x44, 0x0a, 0x1e, 0x43, 0x41, 0x50, + 0x4f, 0x4e, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xdf, 0x0b, 0x1a, 0x1d, 0xa8, 0xcb, 0x91, 0x4d, + 0x26, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x12, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x1e, 0x43, 0x41, 0x50, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xe0, 0x0b, 0x1a, 0x1f, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x27, 0x12, + 0xa8, 0xcb, 0x91, 0x4d, 0x27, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x14, 0x73, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x59, 0x5f, - 0x50, 0x55, 0x4c, 0x4c, 0x10, 0xc1, 0x0c, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x75, 0x6c, 0x6c, 0xa8, 0xcb, 0x91, 0x4d, - 0x28, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, - 0x59, 0x5f, 0x50, 0x55, 0x53, 0x48, 0x10, 0xc2, 0x0c, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, - 0x0d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x75, 0x73, 0x68, 0xa8, 0xcb, - 0x91, 0x4d, 0x29, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc3, 0x0c, 0x1a, 0x16, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, - 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, - 0x38, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x10, 0xc4, 0x0c, 0x1a, 0x16, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x72, - 0x65, 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x39, 0x12, + 0x50, 0x55, 0x4c, 0x4c, 0x10, 0xc1, 0x0c, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x28, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x0d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x75, 0x6c, + 0x6c, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, + 0x59, 0x5f, 0x50, 0x55, 0x53, 0x48, 0x10, 0xc2, 0x0c, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x29, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x70, + 0x75, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, + 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc3, 0x0c, 0x1a, 0x16, 0xa8, 0xcb, 0x91, 0x4d, 0x38, + 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x10, 0xc4, 0x0c, 0x1a, 0x16, 0xa8, 0xcb, 0x91, 0x4d, 0x39, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x0d, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x4c, 0x49, 0x53, 0x54, - 0x10, 0xc5, 0x0c, 0x1a, 0x14, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x2e, - 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x3a, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, + 0x10, 0xc5, 0x0c, 0x1a, 0x14, 0xa8, 0xcb, 0x91, 0x4d, 0x3a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x09, + 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x0f, 0x43, 0x41, 0x50, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xc6, 0x0c, 0x1a, - 0x16, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x3b, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, + 0x16, 0xa8, 0xcb, 0x91, 0x4d, 0x3b, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0b, 0x72, 0x65, 0x70, 0x6f, + 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xc7, - 0x0c, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, - 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x3c, 0x12, 0x34, 0x0a, + 0x0c, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x3c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x10, 0xc8, 0x0c, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, - 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, - 0x91, 0x4d, 0x3d, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, - 0x45, 0x53, 0x54, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc9, 0x0c, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0d, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x6c, 0x69, 0x73, 0x74, - 0xa8, 0xcb, 0x91, 0x4d, 0x3e, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, + 0x44, 0x41, 0x54, 0x45, 0x10, 0xc8, 0x0c, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x3d, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, + 0x45, 0x53, 0x54, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xc9, 0x0c, 0x1a, 0x18, 0xa8, 0xcb, 0x91, + 0x4d, 0x3e, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xca, 0x0c, 0x1a, - 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x3f, 0x12, 0x2a, 0x0a, 0x0e, 0x43, + 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x3f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x6d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xcb, 0x0c, - 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x40, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x54, - 0x41, 0x47, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xcc, 0x0c, 0x1a, 0x15, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, - 0x91, 0x4d, 0x41, 0x12, 0x26, 0x0a, 0x0c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x4c, - 0x49, 0x53, 0x54, 0x10, 0xcd, 0x0c, 0x1a, 0x13, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x74, 0x61, - 0x67, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0xa8, 0xcb, 0x91, 0x4d, 0x42, 0x12, 0x2a, 0x0a, 0x0e, 0x43, + 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x40, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, + 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x54, + 0x41, 0x47, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xcc, 0x0c, 0x1a, 0x15, 0xa8, 0xcb, + 0x91, 0x4d, 0x41, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, 0x2e, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x4c, + 0x49, 0x53, 0x54, 0x10, 0xcd, 0x0c, 0x1a, 0x13, 0xa8, 0xcb, 0x91, 0x4d, 0x42, 0x9a, 0xaf, 0xa8, + 0xd2, 0x05, 0x08, 0x74, 0x61, 0x67, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xce, 0x0c, - 0x1a, 0x15, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x43, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, + 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x43, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, + 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xa5, - 0x0d, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x2a, 0x12, 0x34, 0x0a, + 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, + 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x10, 0xa6, 0x0d, 0x1a, 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, - 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0xa8, 0xcb, - 0x91, 0x4d, 0x2b, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, - 0x4f, 0x52, 0x45, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, 0x0d, 0x1a, 0x18, 0x9a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0d, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x6c, 0x69, 0x73, 0x74, - 0xa8, 0xcb, 0x91, 0x4d, 0x2c, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, + 0x44, 0x41, 0x54, 0x45, 0x10, 0xa6, 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2b, 0x9a, 0xaf, + 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, + 0x4f, 0x52, 0x45, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, 0x0d, 0x1a, 0x18, 0xa8, 0xcb, 0x91, + 0x4d, 0x2c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xa8, 0x0d, 0x1a, - 0x1a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x2d, 0x12, 0x4c, 0x0a, 0x1f, 0x43, + 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2d, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xa9, - 0x0d, 0x1a, 0x26, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0xa8, 0xcb, 0x91, 0x4d, 0x2e, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, + 0x0d, 0x1a, 0x26, 0xa8, 0xcb, 0x91, 0x4d, 0x2e, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x73, 0x69, + 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x47, 0x55, 0x4c, 0x46, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x90, 0x4e, 0x1a, 0x15, - 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x67, 0x75, 0x6c, 0x66, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0xa8, 0xcb, 0x91, 0x4d, 0x2f, 0x3a, 0x38, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x2e, + 0xa8, 0xcb, 0x91, 0x4d, 0x2f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x67, 0x75, 0x6c, 0x66, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x38, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf3, 0x85, 0xa5, 0x5a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x3a, diff --git a/proto/platform/advisory/v1/advisory.platform.pb.go b/proto/platform/advisory/v1/advisory.platform.pb.go index bbf57c45..86fa949e 100644 --- a/proto/platform/advisory/v1/advisory.platform.pb.go +++ b/proto/platform/advisory/v1/advisory.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: advisory.platform.proto diff --git a/proto/platform/auth/v1/auth.platform.pb.go b/proto/platform/auth/v1/auth.platform.pb.go index 45718d3f..a049a7d1 100644 --- a/proto/platform/auth/v1/auth.platform.pb.go +++ b/proto/platform/auth/v1/auth.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: auth.platform.proto @@ -429,8 +429,8 @@ var file_auth_platform_proto_rawDesc = []byte{ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x22, 0x11, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x76, - 0x31, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, + 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x61, 0x75, 0x74, + 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x0a, 0x00, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x30, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x2e, diff --git a/proto/platform/common/v1/uidp.platform.pb.go b/proto/platform/common/v1/uidp.platform.pb.go index 626ce861..b96a0549 100644 --- a/proto/platform/common/v1/uidp.platform.pb.go +++ b/proto/platform/common/v1/uidp.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: uidp.platform.proto diff --git a/proto/platform/events/v1/identities.platform.pb.go b/proto/platform/events/v1/identities.platform.pb.go index 3a5a7e04..eb94e7d9 100644 --- a/proto/platform/events/v1/identities.platform.pb.go +++ b/proto/platform/events/v1/identities.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: identities.platform.proto @@ -292,8 +292,8 @@ var file_identities_platform_proto_rawDesc = []byte{ 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x12, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x69, 0x61, 0x6d, 0x2f, + 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x85, 0x07, 0x10, 0x01, 0x12, 0xd9, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, @@ -302,9 +302,9 @@ var file_identities_platform_proto_rawDesc = []byte{ 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x20, 0x32, 0x1b, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, - 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x04, 0x12, 0x02, 0x10, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, + 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x32, 0x1b, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x04, 0x12, 0x02, 0x10, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x35, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x75, 0x70, 0x64, diff --git a/proto/platform/events/v1/subscriptions.platform.pb.go b/proto/platform/events/v1/subscriptions.platform.pb.go index 98103c93..dd1799e6 100644 --- a/proto/platform/events/v1/subscriptions.platform.pb.go +++ b/proto/platform/events/v1/subscriptions.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: subscriptions.platform.proto @@ -341,11 +341,11 @@ var file_subscriptions_platform_proto_rawDesc = []byte{ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x22, 0x27, - 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xdd, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x3a, 0x0c, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, 0x2f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xdd, 0x0b, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3c, 0x0a, 0x31, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, diff --git a/proto/platform/iam/v1/account_associations.platform.pb.go b/proto/platform/iam/v1/account_associations.platform.pb.go index 3be34195..1af0b54d 100644 --- a/proto/platform/iam/v1/account_associations.platform.pb.go +++ b/proto/platform/iam/v1/account_associations.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: account_associations.platform.proto @@ -845,9 +845,9 @@ var file_account_associations_platform_proto_rawDesc = []byte{ 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x85, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2c, 0x22, 0x27, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, + 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x22, 0x27, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, + 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xbd, 0x05, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x41, 0x0a, 0x36, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, @@ -860,9 +860,9 @@ var file_account_associations_platform_proto_rawDesc = []byte{ 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x85, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2c, 0x1a, 0x27, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, + 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 0x1a, 0x27, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xbe, 0x05, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x41, 0x0a, 0x36, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, @@ -900,10 +900,10 @@ var file_account_associations_platform_proto_rawDesc = []byte{ 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x22, 0x2d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, - 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, + 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x61, 0x73, 0x73, + 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xbf, 0x05, 0x42, 0x75, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x23, 0x50, 0x6c, diff --git a/proto/platform/iam/v1/group.platform.pb.go b/proto/platform/iam/v1/group.platform.pb.go index f93c1668..47162929 100644 --- a/proto/platform/iam/v1/group.platform.pb.go +++ b/proto/platform/iam/v1/group.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: group.platform.proto @@ -393,9 +393,9 @@ var file_group_platform_proto_rawDesc = []byte{ 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, - 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1a, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, - 0x2a, 0x2a, 0x7d, 0x3a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x07, + 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x1a, + 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x07, 0x12, 0x05, 0x0a, 0x01, 0x65, 0x10, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x32, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x63, 0x72, 0x65, 0x61, @@ -405,8 +405,8 @@ var file_group_platform_proto_rawDesc = []byte{ 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x64, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1b, 0x1a, 0x16, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, + 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x1a, 0x16, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x05, 0x12, 0x03, 0x0a, 0x01, 0x66, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x32, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x75, 0x70, 0x64, diff --git a/proto/platform/iam/v1/group_invites.platform.pb.go b/proto/platform/iam/v1/group_invites.platform.pb.go index 43ee8f1f..f7ce620d 100644 --- a/proto/platform/iam/v1/group_invites.platform.pb.go +++ b/proto/platform/iam/v1/group_invites.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: group_invites.platform.proto @@ -695,9 +695,9 @@ var file_group_invites_platform_proto_rawDesc = []byte{ 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, - 0x78, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, - 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, + 0x78, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, + 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, diff --git a/proto/platform/iam/v1/identity.platform.pb.go b/proto/platform/iam/v1/identity.platform.pb.go index 94d24e99..1e88a650 100644 --- a/proto/platform/iam/v1/identity.platform.pb.go +++ b/proto/platform/iam/v1/identity.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: identity.platform.proto @@ -1082,9 +1082,9 @@ var file_identity_platform_proto_rawDesc = []byte{ 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x7a, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2d, 0x22, 0x21, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x93, 0x02, 0x2d, 0x3a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x21, 0x2f, + 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x85, 0x07, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x35, 0x0a, 0x2a, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, @@ -1095,8 +1095,8 @@ var file_identity_platform_proto_rawDesc = []byte{ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x1a, 0x1a, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, + 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x86, 0x07, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x35, 0x0a, 0x2a, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, diff --git a/proto/platform/iam/v1/identity_providers.platform.pb.go b/proto/platform/iam/v1/identity_providers.platform.pb.go index eba96e4e..886c5145 100644 --- a/proto/platform/iam/v1/identity_providers.platform.pb.go +++ b/proto/platform/iam/v1/identity_providers.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: identity_providers.platform.proto @@ -490,11 +490,11 @@ var file_identity_providers_platform_proto_rawDesc = []byte{ 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x96, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x28, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x3a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0x95, 0x0a, 0x91, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x3a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x28, 0x2f, 0x69, 0x61, 0x6d, 0x2f, + 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0x95, 0x0a, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, @@ -505,10 +505,10 @@ var file_identity_providers_platform_proto_rawDesc = []byte{ 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x1a, - 0x21, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0x96, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, + 0x01, 0x2a, 0x1a, 0x21, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0x96, 0x0a, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, diff --git a/proto/platform/iam/v1/policies.platform.pb.go b/proto/platform/iam/v1/policies.platform.pb.go index d93a6671..60a2ca7c 100644 --- a/proto/platform/iam/v1/policies.platform.pb.go +++ b/proto/platform/iam/v1/policies.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: policies.platform.proto @@ -750,10 +750,10 @@ var file_policies_platform_proto_rawDesc = []byte{ 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x1f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa1, 0x06, 0xc2, 0xf0, 0x8e, + 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x22, 0x1f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, + 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa1, 0x06, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x33, 0x0a, 0x28, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, @@ -781,9 +781,9 @@ var file_policies_platform_proto_rawDesc = []byte{ 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x1a, - 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, + 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, + 0x01, 0x2a, 0x1a, 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa2, 0x06, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x33, 0x0a, 0x28, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x75, 0x70, diff --git a/proto/platform/iam/v1/role.platform.pb.go b/proto/platform/iam/v1/role.platform.pb.go index 46241bb2..28515544 100644 --- a/proto/platform/iam/v1/role.platform.pb.go +++ b/proto/platform/iam/v1/role.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: role.platform.proto @@ -375,17 +375,17 @@ var file_role_platform_proto_rawDesc = []byte{ 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1c, 0x2f, - 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xad, 0x02, 0x12, 0x74, 0x0a, + 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x04, 0x72, + 0x6f, 0x6c, 0x65, 0x22, 0x1c, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, + 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xad, 0x02, 0x12, 0x74, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x1a, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x1a, 0x15, 0x2f, - 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, + 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, + 0x1a, 0x15, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x2f, + 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xae, 0x02, 0x12, 0x73, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, diff --git a/proto/platform/iam/v1/role_binding.platform.pb.go b/proto/platform/iam/v1/role_binding.platform.pb.go index 22969923..2b0ba2a2 100644 --- a/proto/platform/iam/v1/role_binding.platform.pb.go +++ b/proto/platform/iam/v1/role_binding.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: role_binding.platform.proto @@ -36,7 +36,7 @@ type RoleBinding struct { // group, UIDP of the group to bind. This field is ignored and will be removed // in the future. The group is always the parent of the UIDP. // - // Deprecated: Do not use. + // Deprecated: Marked as deprecated in role_binding.platform.proto. Group string `protobuf:"bytes,3,opt,name=group,proto3" json:"group,omitempty"` // role, UIDP of the Role to bind Role string `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` @@ -88,7 +88,7 @@ func (x *RoleBinding) GetIdentity() string { return "" } -// Deprecated: Do not use. +// Deprecated: Marked as deprecated in role_binding.platform.proto. func (x *RoleBinding) GetGroup() string { if x != nil { return x.Group @@ -488,10 +488,10 @@ var file_role_binding_platform_proto_rawDesc = []byte{ 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x30, 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, - 0x2a, 0x2a, 0x7d, 0x3a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x91, 0x03, 0xc2, 0xf0, 0x8e, + 0x30, 0x3a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, + 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x2a, 0x2a, + 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, @@ -501,9 +501,9 @@ var file_role_binding_platform_proto_rawDesc = []byte{ 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x1a, 0x1c, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, + 0x69, 0x6e, 0x67, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, 0x1c, + 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x92, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, diff --git a/proto/platform/iam/v1/sigstore.platform.pb.go b/proto/platform/iam/v1/sigstore.platform.pb.go index fda336a4..29503223 100644 --- a/proto/platform/iam/v1/sigstore.platform.pb.go +++ b/proto/platform/iam/v1/sigstore.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: sigstore.platform.proto @@ -591,9 +591,9 @@ var file_sigstore_platform_proto_rawDesc = []byte{ 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x3d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x1f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, - 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x08, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x8a, + 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x08, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x1f, + 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa5, 0x0d, 0x12, 0x7e, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, @@ -616,8 +616,8 @@ var file_sigstore_platform_proto_rawDesc = []byte{ 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1d, 0x1a, 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, 0x2a, + 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x1a, 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, + 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa6, 0x0d, 0x42, 0x6a, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, diff --git a/proto/platform/oidc/v1/oidc.platform.pb.go b/proto/platform/oidc/v1/oidc.platform.pb.go index 1a2b1350..d26d3b45 100644 --- a/proto/platform/oidc/v1/oidc.platform.pb.go +++ b/proto/platform/oidc/v1/oidc.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: oidc.platform.proto @@ -328,8 +328,8 @@ var file_oidc_platform_proto_rawDesc = []byte{ 0x64, 0x63, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x6f, 0x69, 0x64, 0x63, 0x2e, 0x52, 0x61, - 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x0d, - 0x2f, 0x73, 0x74, 0x73, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5a, 0x0f, 0x12, + 0x77, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x5a, 0x0f, + 0x12, 0x0d, 0x2f, 0x73, 0x74, 0x73, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x0d, 0x2f, 0x73, 0x74, 0x73, 0x2f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x97, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, diff --git a/proto/platform/ping/v1/ping.platform.pb.go b/proto/platform/ping/v1/ping.platform.pb.go index 601fda17..d55b2916 100644 --- a/proto/platform/ping/v1/ping.platform.pb.go +++ b/proto/platform/ping/v1/ping.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: ping.platform.proto diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index 5cf6d6c0..6a9dc4a3 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: registry.platform.proto @@ -2571,10 +2571,10 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, - 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x04, 0x72, 0x65, - 0x70, 0x6f, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, 0xf0, + 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, + 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, @@ -2585,9 +2585,9 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1f, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, - 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, 0x8e, + 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, + 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x75, @@ -2620,9 +2620,9 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x25, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, + 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, + 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, @@ -2633,9 +2633,9 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, - 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, 0x8e, + 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, + 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, 0x70, diff --git a/proto/platform/tenant/v1/attestation.platform.pb.go b/proto/platform/tenant/v1/attestation.platform.pb.go index 52bae515..f2036725 100644 --- a/proto/platform/tenant/v1/attestation.platform.pb.go +++ b/proto/platform/tenant/v1/attestation.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: attestation.platform.proto diff --git a/proto/platform/tenant/v1/cluster.platform.pb.go b/proto/platform/tenant/v1/cluster.platform.pb.go index 60f6a6b3..f5807936 100644 --- a/proto/platform/tenant/v1/cluster.platform.pb.go +++ b/proto/platform/tenant/v1/cluster.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: cluster.platform.proto @@ -2402,10 +2402,10 @@ var file_cluster_platform_proto_rawDesc = []byte{ 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x22, 0x7e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x22, 0x2f, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, + 0x74, 0x65, 0x72, 0x22, 0x7e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x07, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x22, 0x22, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xf5, 0x03, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x37, 0x0a, 0x2c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, @@ -2430,8 +2430,8 @@ var file_cluster_platform_proto_rawDesc = []byte{ 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x3a, 0x01, 0x2a, 0x8a, 0xaf, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xf9, 0x03, 0xf7, 0x03, 0x12, 0x85, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, @@ -2447,9 +2447,9 @@ var file_cluster_platform_proto_rawDesc = []byte{ 0x73, 0x74, 0x65, 0x72, 0x1a, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x20, 0x1a, 0x1b, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x3a, 0x01, - 0x2a, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xf6, 0x03, 0xc2, 0xf0, 0x8e, + 0x20, 0x3a, 0x01, 0x2a, 0x1a, 0x1b, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, + 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xf6, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x37, 0x0a, 0x2c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, diff --git a/proto/platform/tenant/v1/context.platform.pb.go b/proto/platform/tenant/v1/context.platform.pb.go index e909684b..1c67141d 100644 --- a/proto/platform/tenant/v1/context.platform.pb.go +++ b/proto/platform/tenant/v1/context.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: context.platform.proto diff --git a/proto/platform/tenant/v1/namespace.platform.pb.go b/proto/platform/tenant/v1/namespace.platform.pb.go index 7653afcc..a68fcab2 100644 --- a/proto/platform/tenant/v1/namespace.platform.pb.go +++ b/proto/platform/tenant/v1/namespace.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: namespace.platform.proto diff --git a/proto/platform/tenant/v1/node.platform.pb.go b/proto/platform/tenant/v1/node.platform.pb.go index e5a3eb90..629eedae 100644 --- a/proto/platform/tenant/v1/node.platform.pb.go +++ b/proto/platform/tenant/v1/node.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: node.platform.proto diff --git a/proto/platform/tenant/v1/policy_results.platform.pb.go b/proto/platform/tenant/v1/policy_results.platform.pb.go index 2f395469..29473a76 100644 --- a/proto/platform/tenant/v1/policy_results.platform.pb.go +++ b/proto/platform/tenant/v1/policy_results.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: policy_results.platform.proto diff --git a/proto/platform/tenant/v1/record.platform.pb.go b/proto/platform/tenant/v1/record.platform.pb.go index 61aafa73..fccce90c 100644 --- a/proto/platform/tenant/v1/record.platform.pb.go +++ b/proto/platform/tenant/v1/record.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: record.platform.proto diff --git a/proto/platform/tenant/v1/risk.platform.pb.go b/proto/platform/tenant/v1/risk.platform.pb.go index 0c6c18f7..36988adb 100644 --- a/proto/platform/tenant/v1/risk.platform.pb.go +++ b/proto/platform/tenant/v1/risk.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: risk.platform.proto diff --git a/proto/platform/tenant/v1/sbom.platform.pb.go b/proto/platform/tenant/v1/sbom.platform.pb.go index cd078fb8..6db35c23 100644 --- a/proto/platform/tenant/v1/sbom.platform.pb.go +++ b/proto/platform/tenant/v1/sbom.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: sbom.platform.proto diff --git a/proto/platform/tenant/v1/signature.platform.pb.go b/proto/platform/tenant/v1/signature.platform.pb.go index 894186c0..1320a8b7 100644 --- a/proto/platform/tenant/v1/signature.platform.pb.go +++ b/proto/platform/tenant/v1/signature.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: signature.platform.proto diff --git a/proto/platform/tenant/v1/vuln.platform.pb.go b/proto/platform/tenant/v1/vuln.platform.pb.go index 8712768f..2881b884 100644 --- a/proto/platform/tenant/v1/vuln.platform.pb.go +++ b/proto/platform/tenant/v1/vuln.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: vuln.platform.proto diff --git a/proto/platform/tenant/v1/workload.platform.pb.go b/proto/platform/tenant/v1/workload.platform.pb.go index 2f5c4958..d1e9eb86 100644 --- a/proto/platform/tenant/v1/workload.platform.pb.go +++ b/proto/platform/tenant/v1/workload.platform.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 +// protoc-gen-go v1.33.0 // protoc v3.21.12 // source: workload.platform.proto From ab6c55da06b7026c499b6bb20b00ffc47c8b9df6 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Fri, 8 Mar 2024 08:21:00 -0800 Subject: [PATCH 08/41] Export b1f10dd5b4cc94a7c98dba09d2b268aed30c0d2e Export: b1f10dd5b4cc94a7c98dba09d2b268aed30c0d2e --- go.mod | 7 ++++--- go.sum | 13 ++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 0a8faf14..3fc84f0c 100644 --- a/go.mod +++ b/go.mod @@ -121,6 +121,7 @@ require ( github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.1 // indirect github.com/spf13/cobra v1.8.0 // indirect github.com/spf13/pflag v1.0.5 // indirect + github.com/stretchr/testify v1.9.0 // indirect github.com/theupdateframework/go-tuf v0.7.0 // indirect github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect go.opencensus.io v0.24.0 // indirect @@ -130,11 +131,11 @@ require ( go.opentelemetry.io/otel/metric v1.21.0 // indirect go.opentelemetry.io/otel/trace v1.21.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.19.0 // indirect + golang.org/x/crypto v0.21.0 // indirect golang.org/x/net v0.21.0 // indirect golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.17.0 // indirect - golang.org/x/term v0.17.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/term v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 0b3c500e..8dd78e3a 100644 --- a/go.sum +++ b/go.sum @@ -318,8 +318,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/theupdateframework/go-tuf v0.7.0 h1:CqbQFrWo1ae3/I0UCblSbczevCCbS31Qvs5LdxRWqRI= github.com/theupdateframework/go-tuf v0.7.0/go.mod h1:uEB7WSY+7ZIugK6R1hiBMBjQftaFzn7ZCDJcp1tCUug= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= @@ -360,8 +360,9 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 h1:mchzmB1XO2pMaKFRqk/+MV3mgGG96aqaPXaMifQU47w= golang.org/x/exp v0.0.0-20231108232855-2478ac86f678/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= @@ -420,14 +421,16 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= From 0cc0929182ded85179322d8845e30b105ffcd01f Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Fri, 8 Mar 2024 08:37:16 -0800 Subject: [PATCH 09/41] Export 74d582772509b37b0ad4febe45eb450814865a95 Export: 74d582772509b37b0ad4febe45eb450814865a95 --- proto/capabilities/capabilities.pb.go | 80 +- proto/capabilities/capabilities.proto | 4 +- proto/capabilities/roles.go | 1 + .../registry/v1/registry.platform.pb.go | 1017 +++++++++++++---- .../registry/v1/registry.platform.pb.gw.go | 119 ++ .../registry/v1/registry.platform.proto | 59 + .../registry/v1/registry.platform_grpc.pb.go | 61 +- proto/platform/registry/v1/test/registry.go | 40 +- 8 files changed, 1082 insertions(+), 299 deletions(-) diff --git a/proto/capabilities/capabilities.pb.go b/proto/capabilities/capabilities.pb.go index 607c9f62..48cd9f59 100644 --- a/proto/capabilities/capabilities.pb.go +++ b/proto/capabilities/capabilities.pb.go @@ -92,6 +92,7 @@ const ( Capability_CAP_TAG_UPDATE Capability = 1612 Capability_CAP_TAG_LIST Capability = 1613 Capability_CAP_TAG_DELETE Capability = 1614 + Capability_CAP_MANIFEST_METADATA_LIST Capability = 1615 Capability_CAP_SIGSTORE_CREATE Capability = 1701 Capability_CAP_SIGSTORE_UPDATE Capability = 1702 Capability_CAP_SIGSTORE_LIST Capability = 1703 @@ -175,6 +176,7 @@ var ( 1612: "CAP_TAG_UPDATE", 1613: "CAP_TAG_LIST", 1614: "CAP_TAG_DELETE", + 1615: "CAP_MANIFEST_METADATA_LIST", 1701: "CAP_SIGSTORE_CREATE", 1702: "CAP_SIGSTORE_UPDATE", 1703: "CAP_SIGSTORE_LIST", @@ -249,6 +251,7 @@ var ( "CAP_TAG_UPDATE": 1612, "CAP_TAG_LIST": 1613, "CAP_TAG_DELETE": 1614, + "CAP_MANIFEST_METADATA_LIST": 1615, "CAP_SIGSTORE_CREATE": 1701, "CAP_SIGSTORE_UPDATE": 1702, "CAP_SIGSTORE_LIST": 1703, @@ -326,7 +329,7 @@ var file_capabilities_proto_rawDesc = []byte{ 0x2e, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, - 0x93, 0x21, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x0b, + 0xd7, 0x21, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x33, 0x0a, 0x15, 0x43, 0x41, 0x50, 0x5f, 0x49, 0x41, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x65, 0x1a, 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x01, 0x9a, 0xaf, 0xa8, @@ -570,41 +573,46 @@ var file_capabilities_proto_rawDesc = []byte{ 0xd2, 0x05, 0x08, 0x74, 0x61, 0x67, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x54, 0x41, 0x47, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xce, 0x0c, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x43, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x74, 0x61, 0x67, - 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, - 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xa5, - 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2a, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, - 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, - 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x55, 0x50, - 0x44, 0x41, 0x54, 0x45, 0x10, 0xa6, 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2b, 0x9a, 0xaf, - 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, - 0x4f, 0x52, 0x45, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, 0x0d, 0x1a, 0x18, 0xa8, 0xcb, 0x91, - 0x4d, 0x2c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, - 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0xa8, 0x0d, 0x1a, - 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2d, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x1f, 0x43, - 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x45, 0x52, 0x54, - 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0xa9, - 0x0d, 0x1a, 0x26, 0xa8, 0xcb, 0x91, 0x4d, 0x2e, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x1b, 0x73, 0x69, - 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x0e, 0x43, 0x41, 0x50, - 0x5f, 0x47, 0x55, 0x4c, 0x46, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x90, 0x4e, 0x1a, 0x15, - 0xa8, 0xcb, 0x91, 0x4d, 0x2f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x67, 0x75, 0x6c, 0x66, 0x73, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x38, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0xf3, 0x85, 0xa5, 0x5a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x3a, - 0x36, 0x0a, 0x03, 0x62, 0x69, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb5, 0x99, 0xd2, 0x09, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x03, 0x62, 0x69, 0x74, 0x42, 0x5d, 0x0a, 0x1f, 0x64, 0x65, 0x76, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x63, 0x61, - 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0x11, 0x43, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x25, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, - 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x1a, 0x43, 0x41, 0x50, 0x5f, 0x4d, + 0x41, 0x4e, 0x49, 0x46, 0x45, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xcf, 0x0c, 0x1a, 0x21, 0xa8, 0xcb, 0x91, 0x4d, 0x48, 0x9a, + 0xaf, 0xa8, 0xd2, 0x05, 0x16, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x2e, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x13, 0x43, + 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x45, 0x10, 0xa5, 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2a, 0x9a, 0xaf, 0xa8, 0xd2, + 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, + 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0xa6, 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, + 0x4d, 0x2b, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x11, 0x43, 0x41, 0x50, 0x5f, 0x53, + 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0xa7, 0x0d, 0x1a, + 0x18, 0xa8, 0xcb, 0x91, 0x4d, 0x2c, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0d, 0x73, 0x69, 0x67, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x13, 0x43, 0x41, 0x50, + 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, + 0x10, 0xa8, 0x0d, 0x1a, 0x1a, 0xa8, 0xcb, 0x91, 0x4d, 0x2d, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0f, + 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, + 0x4c, 0x0a, 0x1f, 0x43, 0x41, 0x50, 0x5f, 0x53, 0x49, 0x47, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, + 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, + 0x54, 0x45, 0x10, 0xa9, 0x0d, 0x1a, 0x26, 0xa8, 0xcb, 0x91, 0x4d, 0x2e, 0x9a, 0xaf, 0xa8, 0xd2, + 0x05, 0x1b, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x63, 0x65, 0x72, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, + 0x0e, 0x43, 0x41, 0x50, 0x5f, 0x47, 0x55, 0x4c, 0x46, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, + 0x90, 0x4e, 0x1a, 0x15, 0xa8, 0xcb, 0x91, 0x4d, 0x2f, 0x9a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x67, + 0x75, 0x6c, 0x66, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x3a, 0x38, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xf3, 0x85, 0xa5, 0x5a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x3a, 0x36, 0x0a, 0x03, 0x62, 0x69, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, + 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb5, 0x99, + 0xd2, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x62, 0x69, 0x74, 0x42, 0x5d, 0x0a, 0x1f, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, + 0x6b, 0x2e, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0x11, + 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x25, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x63, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/proto/capabilities/capabilities.proto b/proto/capabilities/capabilities.proto index fdf23627..40ad9cb9 100644 --- a/proto/capabilities/capabilities.proto +++ b/proto/capabilities/capabilities.proto @@ -116,6 +116,8 @@ enum Capability { CAP_TAG_LIST = 1613 [(name) = "tag.list", (bit) = 66]; CAP_TAG_DELETE = 1614 [(name) = "tag.delete", (bit) = 67]; + CAP_MANIFEST_METADATA_LIST = 1615 [(name) = "manifest.metadata.list", (bit) = 72]; + // Sigstore-aas CAP_SIGSTORE_CREATE = 1701 [(name) = "sigstore.create", (bit) = 42]; @@ -133,5 +135,5 @@ enum Capability { // capability? CAP_GULFSTREAM = 10000 [(name) = "gulfstream", (bit) = 47]; - // next bit: 70 + // next bit: 72 } diff --git a/proto/capabilities/roles.go b/proto/capabilities/roles.go index 4a76f7a6..12eb7f5d 100644 --- a/proto/capabilities/roles.go +++ b/proto/capabilities/roles.go @@ -104,6 +104,7 @@ var ( Capability_CAP_REPO_LIST, Capability_CAP_MANIFEST_LIST, Capability_CAP_TAG_LIST, + Capability_CAP_MANIFEST_METADATA_LIST, Capability_CAP_TENANT_RECORD_SIGNATURES_LIST, Capability_CAP_TENANT_SBOMS_LIST, diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index 6a9dc4a3..46cc6135 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -1730,6 +1730,392 @@ func (x *VulnReportRequest) GetDigest() string { return "" } +type ManifestMetadataIndexFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tag/index digest to fetch metadata for. + Digest string `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` + // The architecture to fetch metadata for. + Arch string `protobuf:"bytes,2,opt,name=arch,proto3" json:"arch,omitempty"` +} + +func (x *ManifestMetadataIndexFilter) Reset() { + *x = ManifestMetadataIndexFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ManifestMetadataIndexFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ManifestMetadataIndexFilter) ProtoMessage() {} + +func (x *ManifestMetadataIndexFilter) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[26] + 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 ManifestMetadataIndexFilter.ProtoReflect.Descriptor instead. +func (*ManifestMetadataIndexFilter) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{26} +} + +func (x *ManifestMetadataIndexFilter) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +func (x *ManifestMetadataIndexFilter) GetArch() string { + if x != nil { + return x.Arch + } + return "" +} + +type ManifestMetadataFilterEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Filter: + // + // *ManifestMetadataFilterEntry_ImageDigest + // *ManifestMetadataFilterEntry_IndexFilter + Filter isManifestMetadataFilterEntry_Filter `protobuf_oneof:"filter"` +} + +func (x *ManifestMetadataFilterEntry) Reset() { + *x = ManifestMetadataFilterEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ManifestMetadataFilterEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ManifestMetadataFilterEntry) ProtoMessage() {} + +func (x *ManifestMetadataFilterEntry) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[27] + 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 ManifestMetadataFilterEntry.ProtoReflect.Descriptor instead. +func (*ManifestMetadataFilterEntry) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{27} +} + +func (m *ManifestMetadataFilterEntry) GetFilter() isManifestMetadataFilterEntry_Filter { + if m != nil { + return m.Filter + } + return nil +} + +func (x *ManifestMetadataFilterEntry) GetImageDigest() string { + if x, ok := x.GetFilter().(*ManifestMetadataFilterEntry_ImageDigest); ok { + return x.ImageDigest + } + return "" +} + +func (x *ManifestMetadataFilterEntry) GetIndexFilter() *ManifestMetadataIndexFilter { + if x, ok := x.GetFilter().(*ManifestMetadataFilterEntry_IndexFilter); ok { + return x.IndexFilter + } + return nil +} + +type isManifestMetadataFilterEntry_Filter interface { + isManifestMetadataFilterEntry_Filter() +} + +type ManifestMetadataFilterEntry_ImageDigest struct { + // For fetching metadata for an image digest + ImageDigest string `protobuf:"bytes,1,opt,name=image_digest,json=imageDigest,proto3,oneof"` +} + +type ManifestMetadataFilterEntry_IndexFilter struct { + // For fetching metadata for an index digest + IndexFilter *ManifestMetadataIndexFilter `protobuf:"bytes,2,opt,name=index_filter,json=indexFilter,proto3,oneof"` +} + +func (*ManifestMetadataFilterEntry_ImageDigest) isManifestMetadataFilterEntry_Filter() {} + +func (*ManifestMetadataFilterEntry_IndexFilter) isManifestMetadataFilterEntry_Filter() {} + +type ManifestMetadataFilter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The UIDP of the image repo that the digests belongs to. + RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` + // List of image digests or index digest to fetch package metadata for. + // All entries specified would be retrieved. + Items []*ManifestMetadataFilterEntry `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *ManifestMetadataFilter) Reset() { + *x = ManifestMetadataFilter{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ManifestMetadataFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ManifestMetadataFilter) ProtoMessage() {} + +func (x *ManifestMetadataFilter) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[28] + 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 ManifestMetadataFilter.ProtoReflect.Descriptor instead. +func (*ManifestMetadataFilter) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{28} +} + +func (x *ManifestMetadataFilter) GetRepoId() string { + if x != nil { + return x.RepoId + } + return "" +} + +func (x *ManifestMetadataFilter) GetItems() []*ManifestMetadataFilterEntry { + if x != nil { + return x.Items + } + return nil +} + +type PkgMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // purl of package or subpackage; spec https://github.com/package-url/purl-spec + Purl string `protobuf:"bytes,1,opt,name=purl,proto3" json:"purl,omitempty"` + // if differ from purl, it means it is a subpackage + OriginPurl string `protobuf:"bytes,2,opt,name=origin_purl,json=originPurl,proto3" json:"origin_purl,omitempty"` + // date when EOL, date 0-0-0 when not eol + EolDate *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=eol_date,json=eolDate,proto3" json:"eol_date,omitempty"` + // timestamp when package was built, date 0-0-0 when build timestamp not available + BuildTimestamp *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=build_timestamp,json=buildTimestamp,proto3" json:"build_timestamp,omitempty"` + // license of package, empty if unknown + License string `protobuf:"bytes,5,opt,name=license,proto3" json:"license,omitempty"` +} + +func (x *PkgMetadata) Reset() { + *x = PkgMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PkgMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PkgMetadata) ProtoMessage() {} + +func (x *PkgMetadata) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[29] + 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 PkgMetadata.ProtoReflect.Descriptor instead. +func (*PkgMetadata) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{29} +} + +func (x *PkgMetadata) GetPurl() string { + if x != nil { + return x.Purl + } + return "" +} + +func (x *PkgMetadata) GetOriginPurl() string { + if x != nil { + return x.OriginPurl + } + return "" +} + +func (x *PkgMetadata) GetEolDate() *timestamppb.Timestamp { + if x != nil { + return x.EolDate + } + return nil +} + +func (x *PkgMetadata) GetBuildTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.BuildTimestamp + } + return nil +} + +func (x *PkgMetadata) GetLicense() string { + if x != nil { + return x.License + } + return "" +} + +type ManifestMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Digest of image that packages are associated with. + Digest string `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` + // List of packages that are part of image. + PkgMetadata []*PkgMetadata `protobuf:"bytes,2,rep,name=pkg_metadata,json=pkgMetadata,proto3" json:"pkg_metadata,omitempty"` +} + +func (x *ManifestMetadata) Reset() { + *x = ManifestMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ManifestMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ManifestMetadata) ProtoMessage() {} + +func (x *ManifestMetadata) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[30] + 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 ManifestMetadata.ProtoReflect.Descriptor instead. +func (*ManifestMetadata) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{30} +} + +func (x *ManifestMetadata) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +func (x *ManifestMetadata) GetPkgMetadata() []*PkgMetadata { + if x != nil { + return x.PkgMetadata + } + return nil +} + +type ManifestMetadataList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Items []*ManifestMetadata `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *ManifestMetadataList) Reset() { + *x = ManifestMetadataList{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ManifestMetadataList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ManifestMetadataList) ProtoMessage() {} + +func (x *ManifestMetadataList) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[31] + 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 ManifestMetadataList.ProtoReflect.Descriptor instead. +func (*ManifestMetadataList) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{31} +} + +func (x *ManifestMetadataList) GetItems() []*ManifestMetadata { + if x != nil { + return x.Items + } + return nil +} + type ChangedImageConfig_ChangedUser struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1742,7 +2128,7 @@ type ChangedImageConfig_ChangedUser struct { func (x *ChangedImageConfig_ChangedUser) Reset() { *x = ChangedImageConfig_ChangedUser{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[26] + mi := &file_registry_platform_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1755,7 +2141,7 @@ func (x *ChangedImageConfig_ChangedUser) String() string { func (*ChangedImageConfig_ChangedUser) ProtoMessage() {} func (x *ChangedImageConfig_ChangedUser) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[26] + mi := &file_registry_platform_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1797,7 +2183,7 @@ type ChangedImageConfig_ChangedWorkingDir struct { func (x *ChangedImageConfig_ChangedWorkingDir) Reset() { *x = ChangedImageConfig_ChangedWorkingDir{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[27] + mi := &file_registry_platform_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1810,7 +2196,7 @@ func (x *ChangedImageConfig_ChangedWorkingDir) String() string { func (*ChangedImageConfig_ChangedWorkingDir) ProtoMessage() {} func (x *ChangedImageConfig_ChangedWorkingDir) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[27] + mi := &file_registry_platform_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1852,7 +2238,7 @@ type ChangedImageConfig_EntrypointDiff struct { func (x *ChangedImageConfig_EntrypointDiff) Reset() { *x = ChangedImageConfig_EntrypointDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[28] + mi := &file_registry_platform_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1865,7 +2251,7 @@ func (x *ChangedImageConfig_EntrypointDiff) String() string { func (*ChangedImageConfig_EntrypointDiff) ProtoMessage() {} func (x *ChangedImageConfig_EntrypointDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[28] + mi := &file_registry_platform_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1907,7 +2293,7 @@ type ChangedImageConfig_EnvDiff struct { func (x *ChangedImageConfig_EnvDiff) Reset() { *x = ChangedImageConfig_EnvDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[29] + mi := &file_registry_platform_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1920,7 +2306,7 @@ func (x *ChangedImageConfig_EnvDiff) String() string { func (*ChangedImageConfig_EnvDiff) ProtoMessage() {} func (x *ChangedImageConfig_EnvDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[29] + mi := &file_registry_platform_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1962,7 +2348,7 @@ type ChangedImageConfig_CmdDiff struct { func (x *ChangedImageConfig_CmdDiff) Reset() { *x = ChangedImageConfig_CmdDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[30] + mi := &file_registry_platform_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1975,7 +2361,7 @@ func (x *ChangedImageConfig_CmdDiff) String() string { func (*ChangedImageConfig_CmdDiff) ProtoMessage() {} func (x *ChangedImageConfig_CmdDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[30] + mi := &file_registry_platform_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2017,7 +2403,7 @@ type ChangedImageConfig_ChangedStopSignal struct { func (x *ChangedImageConfig_ChangedStopSignal) Reset() { *x = ChangedImageConfig_ChangedStopSignal{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[31] + mi := &file_registry_platform_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2030,7 +2416,7 @@ func (x *ChangedImageConfig_ChangedStopSignal) String() string { func (*ChangedImageConfig_ChangedStopSignal) ProtoMessage() {} func (x *ChangedImageConfig_ChangedStopSignal) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[31] + mi := &file_registry_platform_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2069,7 +2455,7 @@ type ChangedImageConfig_Volume struct { func (x *ChangedImageConfig_Volume) Reset() { *x = ChangedImageConfig_Volume{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[32] + mi := &file_registry_platform_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2082,7 +2468,7 @@ func (x *ChangedImageConfig_Volume) String() string { func (*ChangedImageConfig_Volume) ProtoMessage() {} func (x *ChangedImageConfig_Volume) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[32] + mi := &file_registry_platform_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2110,7 +2496,7 @@ type ChangedImageConfig_VolumeDiff struct { func (x *ChangedImageConfig_VolumeDiff) Reset() { *x = ChangedImageConfig_VolumeDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[33] + mi := &file_registry_platform_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2123,7 +2509,7 @@ func (x *ChangedImageConfig_VolumeDiff) String() string { func (*ChangedImageConfig_VolumeDiff) ProtoMessage() {} func (x *ChangedImageConfig_VolumeDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[33] + mi := &file_registry_platform_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2166,7 +2552,7 @@ type PackagesDiff_ChangedPackageReference struct { func (x *PackagesDiff_ChangedPackageReference) Reset() { *x = PackagesDiff_ChangedPackageReference{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[36] + mi := &file_registry_platform_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2179,7 +2565,7 @@ func (x *PackagesDiff_ChangedPackageReference) String() string { func (*PackagesDiff_ChangedPackageReference) ProtoMessage() {} func (x *PackagesDiff_ChangedPackageReference) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[36] + mi := &file_registry_platform_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2559,160 +2945,225 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x2a, 0x3f, - 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x52, - 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, - 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, 0x32, - 0xd3, 0x11, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, 0x0a, - 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, + 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, + 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, + 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, + 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, + 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, + 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, + 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, + 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, + 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, + 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, + 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, + 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, 0x32, 0x9b, 0x13, 0x0a, 0x08, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, + 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, - 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, - 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, 0xf0, + 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, + 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, + 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, + 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, + 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, - 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, 0x8e, - 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, - 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, 0x0a, - 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, - 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, - 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, - 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, - 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, 0x8e, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, + 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, + 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, - 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, - 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, - 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, - 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, - 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, - 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, - 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, - 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, - 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, 0x01, - 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, 0x12, - 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, + 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, + 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, + 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, + 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, + 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, + 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, + 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, + 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, 0x66, - 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, 0x66, - 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, - 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, 0x0a, - 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, - 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, - 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xbd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, - 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, + 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, + 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, + 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, + 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, + 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, + 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, - 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, - 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, - 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, + 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, + 0xbd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, + 0xc5, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x76, 0x31, 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2728,7 +3179,7 @@ func file_registry_platform_proto_rawDescGZIP() []byte { } var file_registry_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_registry_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 37) +var file_registry_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 43) var file_registry_platform_proto_goTypes = []interface{}{ (CatalogTier)(0), // 0: chainguard.platform.registry.CatalogTier (*Repo)(nil), // 1: chainguard.platform.registry.Repo @@ -2757,93 +3208,107 @@ var file_registry_platform_proto_goTypes = []interface{}{ (*DiffImageRequest)(nil), // 24: chainguard.platform.registry.DiffImageRequest (*SbomRequest)(nil), // 25: chainguard.platform.registry.SbomRequest (*VulnReportRequest)(nil), // 26: chainguard.platform.registry.VulnReportRequest - (*ChangedImageConfig_ChangedUser)(nil), // 27: chainguard.platform.registry.ChangedImageConfig.ChangedUser - (*ChangedImageConfig_ChangedWorkingDir)(nil), // 28: chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - (*ChangedImageConfig_EntrypointDiff)(nil), // 29: chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - (*ChangedImageConfig_EnvDiff)(nil), // 30: chainguard.platform.registry.ChangedImageConfig.EnvDiff - (*ChangedImageConfig_CmdDiff)(nil), // 31: chainguard.platform.registry.ChangedImageConfig.CmdDiff - (*ChangedImageConfig_ChangedStopSignal)(nil), // 32: chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - (*ChangedImageConfig_Volume)(nil), // 33: chainguard.platform.registry.ChangedImageConfig.Volume - (*ChangedImageConfig_VolumeDiff)(nil), // 34: chainguard.platform.registry.ChangedImageConfig.VolumeDiff - nil, // 35: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - nil, // 36: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - (*PackagesDiff_ChangedPackageReference)(nil), // 37: chainguard.platform.registry.PackagesDiff.ChangedPackageReference - (*v1.UIDPFilter)(nil), // 38: chainguard.platform.common.UIDPFilter - (*timestamppb.Timestamp)(nil), // 39: google.protobuf.Timestamp - (*v11.Scanner)(nil), // 40: chainguard.platform.tenant.Scanner - (*emptypb.Empty)(nil), // 41: google.protobuf.Empty - (*v11.Sbom2)(nil), // 42: chainguard.platform.tenant.Sbom2 - (*v11.VulnReport)(nil), // 43: chainguard.platform.tenant.VulnReport + (*ManifestMetadataIndexFilter)(nil), // 27: chainguard.platform.registry.ManifestMetadataIndexFilter + (*ManifestMetadataFilterEntry)(nil), // 28: chainguard.platform.registry.ManifestMetadataFilterEntry + (*ManifestMetadataFilter)(nil), // 29: chainguard.platform.registry.ManifestMetadataFilter + (*PkgMetadata)(nil), // 30: chainguard.platform.registry.PkgMetadata + (*ManifestMetadata)(nil), // 31: chainguard.platform.registry.ManifestMetadata + (*ManifestMetadataList)(nil), // 32: chainguard.platform.registry.ManifestMetadataList + (*ChangedImageConfig_ChangedUser)(nil), // 33: chainguard.platform.registry.ChangedImageConfig.ChangedUser + (*ChangedImageConfig_ChangedWorkingDir)(nil), // 34: chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + (*ChangedImageConfig_EntrypointDiff)(nil), // 35: chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + (*ChangedImageConfig_EnvDiff)(nil), // 36: chainguard.platform.registry.ChangedImageConfig.EnvDiff + (*ChangedImageConfig_CmdDiff)(nil), // 37: chainguard.platform.registry.ChangedImageConfig.CmdDiff + (*ChangedImageConfig_ChangedStopSignal)(nil), // 38: chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + (*ChangedImageConfig_Volume)(nil), // 39: chainguard.platform.registry.ChangedImageConfig.Volume + (*ChangedImageConfig_VolumeDiff)(nil), // 40: chainguard.platform.registry.ChangedImageConfig.VolumeDiff + nil, // 41: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + nil, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + (*PackagesDiff_ChangedPackageReference)(nil), // 43: chainguard.platform.registry.PackagesDiff.ChangedPackageReference + (*v1.UIDPFilter)(nil), // 44: chainguard.platform.common.UIDPFilter + (*timestamppb.Timestamp)(nil), // 45: google.protobuf.Timestamp + (*v11.Scanner)(nil), // 46: chainguard.platform.tenant.Scanner + (*emptypb.Empty)(nil), // 47: google.protobuf.Empty + (*v11.Sbom2)(nil), // 48: chainguard.platform.tenant.Sbom2 + (*v11.VulnReport)(nil), // 49: chainguard.platform.tenant.VulnReport } var file_registry_platform_proto_depIdxs = []int32{ 0, // 0: chainguard.platform.registry.Repo.catalog_tier:type_name -> chainguard.platform.registry.CatalogTier 2, // 1: chainguard.platform.registry.Repo.sync_config:type_name -> chainguard.platform.registry.SyncConfig 1, // 2: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo 1, // 3: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo - 38, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 44, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter 9, // 5: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag - 39, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp - 38, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 39, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp + 45, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp + 44, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 45, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp 9, // 9: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag - 39, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp - 39, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp + 45, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp + 45, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp 14, // 12: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory - 39, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp + 45, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp 18, // 14: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff 21, // 15: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff 16, // 16: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff 17, // 17: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig - 27, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser - 28, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - 29, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - 30, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff - 31, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff - 32, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - 34, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff + 33, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser + 34, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + 35, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + 36, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff + 37, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff + 38, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + 40, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff 20, // 25: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference 20, // 26: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference - 37, // 27: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference + 43, // 27: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference 23, // 28: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference 23, // 29: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference 22, // 30: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata - 40, // 31: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner - 39, // 32: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp - 35, // 33: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - 36, // 34: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - 33, // 35: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 33, // 36: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 19, // 37: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference - 19, // 38: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference - 3, // 39: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest - 1, // 40: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo - 6, // 41: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter - 4, // 42: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest - 7, // 43: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest - 9, // 44: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag - 8, // 45: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest - 10, // 46: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter - 12, // 47: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter - 24, // 48: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest - 25, // 49: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest - 26, // 50: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest - 1, // 51: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo - 1, // 52: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo - 5, // 53: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList - 41, // 54: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty - 9, // 55: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag - 9, // 56: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag - 41, // 57: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty - 11, // 58: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList - 13, // 59: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList - 15, // 60: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse - 42, // 61: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 - 43, // 62: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport - 51, // [51:63] is the sub-list for method output_type - 39, // [39:51] is the sub-list for method input_type - 39, // [39:39] is the sub-list for extension type_name - 39, // [39:39] is the sub-list for extension extendee - 0, // [0:39] is the sub-list for field type_name + 46, // 31: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner + 45, // 32: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp + 27, // 33: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter + 28, // 34: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry + 45, // 35: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp + 45, // 36: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp + 30, // 37: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata + 31, // 38: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata + 41, // 39: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + 42, // 40: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + 39, // 41: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 39, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 19, // 43: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference + 19, // 44: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference + 3, // 45: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest + 1, // 46: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo + 6, // 47: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter + 4, // 48: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest + 7, // 49: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest + 9, // 50: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag + 8, // 51: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest + 10, // 52: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter + 12, // 53: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter + 24, // 54: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest + 25, // 55: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest + 26, // 56: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest + 29, // 57: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter + 1, // 58: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo + 1, // 59: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo + 5, // 60: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList + 47, // 61: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty + 9, // 62: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag + 9, // 63: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag + 47, // 64: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty + 11, // 65: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList + 13, // 66: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList + 15, // 67: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse + 48, // 68: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 + 49, // 69: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport + 32, // 70: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList + 58, // [58:71] is the sub-list for method output_type + 45, // [45:58] is the sub-list for method input_type + 45, // [45:45] is the sub-list for extension type_name + 45, // [45:45] is the sub-list for extension extendee + 0, // [0:45] is the sub-list for field type_name } func init() { file_registry_platform_proto_init() } @@ -3165,7 +3630,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_ChangedUser); i { + switch v := v.(*ManifestMetadataIndexFilter); i { case 0: return &v.state case 1: @@ -3177,7 +3642,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_ChangedWorkingDir); i { + switch v := v.(*ManifestMetadataFilterEntry); i { case 0: return &v.state case 1: @@ -3189,7 +3654,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_EntrypointDiff); i { + switch v := v.(*ManifestMetadataFilter); i { case 0: return &v.state case 1: @@ -3201,7 +3666,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_EnvDiff); i { + switch v := v.(*PkgMetadata); i { case 0: return &v.state case 1: @@ -3213,7 +3678,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_CmdDiff); i { + switch v := v.(*ManifestMetadata); i { case 0: return &v.state case 1: @@ -3225,7 +3690,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_ChangedStopSignal); i { + switch v := v.(*ManifestMetadataList); i { case 0: return &v.state case 1: @@ -3237,7 +3702,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_Volume); i { + switch v := v.(*ChangedImageConfig_ChangedUser); i { case 0: return &v.state case 1: @@ -3249,7 +3714,31 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_VolumeDiff); i { + switch v := v.(*ChangedImageConfig_ChangedWorkingDir); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_EntrypointDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_EnvDiff); i { case 0: return &v.state case 1: @@ -3261,6 +3750,54 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_CmdDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_ChangedStopSignal); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_Volume); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_VolumeDiff); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PackagesDiff_ChangedPackageReference); i { case 0: return &v.state @@ -3273,13 +3810,17 @@ func file_registry_platform_proto_init() { } } } + file_registry_platform_proto_msgTypes[27].OneofWrappers = []interface{}{ + (*ManifestMetadataFilterEntry_ImageDigest)(nil), + (*ManifestMetadataFilterEntry_IndexFilter)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_registry_platform_proto_rawDesc, NumEnums: 1, - NumMessages: 37, + NumMessages: 43, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/platform/registry/v1/registry.platform.pb.gw.go b/proto/platform/registry/v1/registry.platform.pb.gw.go index aa5a11c4..4789185d 100644 --- a/proto/platform/registry/v1/registry.platform.pb.gw.go +++ b/proto/platform/registry/v1/registry.platform.pb.gw.go @@ -763,6 +763,76 @@ func local_request_Registry_GetVulnReport_0(ctx context.Context, marshaler runti } +var ( + filter_Registry_ListManifestMetadata_0 = &utilities.DoubleArray{Encoding: map[string]int{"repo_id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Registry_ListManifestMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ManifestMetadataFilter + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListManifestMetadata_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListManifestMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_ListManifestMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ManifestMetadataFilter + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_ListManifestMetadata_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListManifestMetadata(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterRegistryHandlerServer registers the http handlers for service Registry to "mux". // UnaryRPC :call RegistryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -1057,6 +1127,30 @@ func RegisterRegistryHandlerServer(ctx context.Context, mux *runtime.ServeMux, s }) + mux.Handle("GET", pattern_Registry_ListManifestMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListManifestMetadata", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/manifestmetdata")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_ListManifestMetadata_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_ListManifestMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1350,6 +1444,27 @@ func RegisterRegistryHandlerClient(ctx context.Context, mux *runtime.ServeMux, c }) + mux.Handle("GET", pattern_Registry_ListManifestMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/ListManifestMetadata", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/manifestmetdata")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_ListManifestMetadata_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_ListManifestMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -1377,6 +1492,8 @@ var ( pattern_Registry_GetSbom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "sbom"}, "")) pattern_Registry_GetVulnReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "vulnreport"}, "")) + + pattern_Registry_ListManifestMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4}, []string{"registry", "v1", "repos", "repo_id", "manifestmetdata"}, "")) ) var ( @@ -1403,4 +1520,6 @@ var ( forward_Registry_GetSbom_0 = runtime.ForwardResponseMessage forward_Registry_GetVulnReport_0 = runtime.ForwardResponseMessage + + forward_Registry_ListManifestMetadata_0 = runtime.ForwardResponseMessage ) diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto index a62fc737..ba3c2cf1 100644 --- a/proto/platform/registry/v1/registry.platform.proto +++ b/proto/platform/registry/v1/registry.platform.proto @@ -184,6 +184,17 @@ service Registry { } }; } + + rpc ListManifestMetadata(ManifestMetadataFilter) returns (ManifestMetadataList) { + option (google.api.http) = { + get: "/registry/v1/repos/{repo_id=**}/manifestmetdata" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_MANIFEST_METADATA_LIST] + } + }; + }; } message Repo { @@ -455,3 +466,51 @@ message VulnReportRequest { // The digest of the image to get a VulnReport for. string digest = 2; } + +message ManifestMetadataIndexFilter { + // The tag/index digest to fetch metadata for. + string digest = 1; + // The architecture to fetch metadata for. + string arch = 2; +} + +message ManifestMetadataFilterEntry { + oneof filter { + // For fetching metadata for an image digest + string image_digest = 1; + // For fetching metadata for an index digest + ManifestMetadataIndexFilter index_filter = 2; + } +} + +message ManifestMetadataFilter { + // The UIDP of the image repo that the digests belongs to. + string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; + // List of image digests or index digest to fetch package metadata for. + // All entries specified would be retrieved. + repeated ManifestMetadataFilterEntry items = 2; +} + +message PkgMetadata { + // purl of package or subpackage; spec https://github.com/package-url/purl-spec + string purl = 1; + // if differ from purl, it means it is a subpackage + string origin_purl = 2; + // date when EOL, date 0-0-0 when not eol + google.protobuf.Timestamp eol_date = 3; + // timestamp when package was built, date 0-0-0 when build timestamp not available + google.protobuf.Timestamp build_timestamp = 4; + // license of package, empty if unknown + string license = 5; +} + +message ManifestMetadata { + // Digest of image that packages are associated with. + string digest = 1; + // List of packages that are part of image. + repeated PkgMetadata pkg_metadata = 2; +} + +message ManifestMetadataList { + repeated ManifestMetadata items = 1; +} diff --git a/proto/platform/registry/v1/registry.platform_grpc.pb.go b/proto/platform/registry/v1/registry.platform_grpc.pb.go index a0faf126..fe91f502 100644 --- a/proto/platform/registry/v1/registry.platform_grpc.pb.go +++ b/proto/platform/registry/v1/registry.platform_grpc.pb.go @@ -21,18 +21,19 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - Registry_CreateRepo_FullMethodName = "/chainguard.platform.registry.Registry/CreateRepo" - Registry_UpdateRepo_FullMethodName = "/chainguard.platform.registry.Registry/UpdateRepo" - Registry_ListRepos_FullMethodName = "/chainguard.platform.registry.Registry/ListRepos" - Registry_DeleteRepo_FullMethodName = "/chainguard.platform.registry.Registry/DeleteRepo" - Registry_CreateTag_FullMethodName = "/chainguard.platform.registry.Registry/CreateTag" - Registry_UpdateTag_FullMethodName = "/chainguard.platform.registry.Registry/UpdateTag" - Registry_DeleteTag_FullMethodName = "/chainguard.platform.registry.Registry/DeleteTag" - Registry_ListTags_FullMethodName = "/chainguard.platform.registry.Registry/ListTags" - Registry_ListTagHistory_FullMethodName = "/chainguard.platform.registry.Registry/ListTagHistory" - Registry_DiffImage_FullMethodName = "/chainguard.platform.registry.Registry/DiffImage" - Registry_GetSbom_FullMethodName = "/chainguard.platform.registry.Registry/GetSbom" - Registry_GetVulnReport_FullMethodName = "/chainguard.platform.registry.Registry/GetVulnReport" + Registry_CreateRepo_FullMethodName = "/chainguard.platform.registry.Registry/CreateRepo" + Registry_UpdateRepo_FullMethodName = "/chainguard.platform.registry.Registry/UpdateRepo" + Registry_ListRepos_FullMethodName = "/chainguard.platform.registry.Registry/ListRepos" + Registry_DeleteRepo_FullMethodName = "/chainguard.platform.registry.Registry/DeleteRepo" + Registry_CreateTag_FullMethodName = "/chainguard.platform.registry.Registry/CreateTag" + Registry_UpdateTag_FullMethodName = "/chainguard.platform.registry.Registry/UpdateTag" + Registry_DeleteTag_FullMethodName = "/chainguard.platform.registry.Registry/DeleteTag" + Registry_ListTags_FullMethodName = "/chainguard.platform.registry.Registry/ListTags" + Registry_ListTagHistory_FullMethodName = "/chainguard.platform.registry.Registry/ListTagHistory" + Registry_DiffImage_FullMethodName = "/chainguard.platform.registry.Registry/DiffImage" + Registry_GetSbom_FullMethodName = "/chainguard.platform.registry.Registry/GetSbom" + Registry_GetVulnReport_FullMethodName = "/chainguard.platform.registry.Registry/GetVulnReport" + Registry_ListManifestMetadata_FullMethodName = "/chainguard.platform.registry.Registry/ListManifestMetadata" ) // RegistryClient is the client API for Registry service. @@ -51,6 +52,7 @@ type RegistryClient interface { DiffImage(ctx context.Context, in *DiffImageRequest, opts ...grpc.CallOption) (*DiffImageResponse, error) GetSbom(ctx context.Context, in *SbomRequest, opts ...grpc.CallOption) (*v1.Sbom2, error) GetVulnReport(ctx context.Context, in *VulnReportRequest, opts ...grpc.CallOption) (*v1.VulnReport, error) + ListManifestMetadata(ctx context.Context, in *ManifestMetadataFilter, opts ...grpc.CallOption) (*ManifestMetadataList, error) } type registryClient struct { @@ -169,6 +171,15 @@ func (c *registryClient) GetVulnReport(ctx context.Context, in *VulnReportReques return out, nil } +func (c *registryClient) ListManifestMetadata(ctx context.Context, in *ManifestMetadataFilter, opts ...grpc.CallOption) (*ManifestMetadataList, error) { + out := new(ManifestMetadataList) + err := c.cc.Invoke(ctx, Registry_ListManifestMetadata_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // RegistryServer is the server API for Registry service. // All implementations must embed UnimplementedRegistryServer // for forward compatibility @@ -185,6 +196,7 @@ type RegistryServer interface { DiffImage(context.Context, *DiffImageRequest) (*DiffImageResponse, error) GetSbom(context.Context, *SbomRequest) (*v1.Sbom2, error) GetVulnReport(context.Context, *VulnReportRequest) (*v1.VulnReport, error) + ListManifestMetadata(context.Context, *ManifestMetadataFilter) (*ManifestMetadataList, error) mustEmbedUnimplementedRegistryServer() } @@ -228,6 +240,9 @@ func (UnimplementedRegistryServer) GetSbom(context.Context, *SbomRequest) (*v1.S func (UnimplementedRegistryServer) GetVulnReport(context.Context, *VulnReportRequest) (*v1.VulnReport, error) { return nil, status.Errorf(codes.Unimplemented, "method GetVulnReport not implemented") } +func (UnimplementedRegistryServer) ListManifestMetadata(context.Context, *ManifestMetadataFilter) (*ManifestMetadataList, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListManifestMetadata not implemented") +} func (UnimplementedRegistryServer) mustEmbedUnimplementedRegistryServer() {} // UnsafeRegistryServer may be embedded to opt out of forward compatibility for this service. @@ -457,6 +472,24 @@ func _Registry_GetVulnReport_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _Registry_ListManifestMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ManifestMetadataFilter) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).ListManifestMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_ListManifestMetadata_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).ListManifestMetadata(ctx, req.(*ManifestMetadataFilter)) + } + return interceptor(ctx, in, info, handler) +} + // Registry_ServiceDesc is the grpc.ServiceDesc for Registry service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -512,6 +545,10 @@ var Registry_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetVulnReport", Handler: _Registry_GetVulnReport_Handler, }, + { + MethodName: "ListManifestMetadata", + Handler: _Registry_ListManifestMetadata_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "registry.platform.proto", diff --git a/proto/platform/registry/v1/test/registry.go b/proto/platform/registry/v1/test/registry.go index b1e21513..82493f9c 100644 --- a/proto/platform/registry/v1/test/registry.go +++ b/proto/platform/registry/v1/test/registry.go @@ -38,18 +38,19 @@ var _ registry.RegistryClient = (*MockRegistryClient)(nil) type MockRegistryClient struct { registry.RegistryClient - OnCreateRepos []ReposOnCreate - OnDeleteRepos []ReposOnDelete - OnListRepos []ReposOnList - OnCreateTags []TagsOnCreate - OnDeleteTags []TagsOnDelete - OnUpdateTag []TagOnUpdate - OnListTags []TagsOnList - OnUpdateRepo []RepoOnUpdate - OnListTagHistory []TagHistoryOnList - OnGetSbom []SbomOnGet - OnGetVulnReport []VulnReportOnGet - OnDiffImage []DiffImage + OnCreateRepos []ReposOnCreate + OnDeleteRepos []ReposOnDelete + OnListRepos []ReposOnList + OnCreateTags []TagsOnCreate + OnDeleteTags []TagsOnDelete + OnUpdateTag []TagOnUpdate + OnListTags []TagsOnList + OnUpdateRepo []RepoOnUpdate + OnListTagHistory []TagHistoryOnList + OnGetSbom []SbomOnGet + OnGetVulnReport []VulnReportOnGet + OnDiffImage []DiffImage + OnListManifestMetadata []ManifestMetadataOnList } type DiffImage struct { @@ -122,6 +123,12 @@ type VulnReportOnGet struct { Error error } +type ManifestMetadataOnList struct { + Given *registry.ManifestMetadataFilter + List *registry.ManifestMetadataList + Error error +} + func (m MockRegistryClient) CreateRepo(_ context.Context, given *registry.CreateRepoRequest, _ ...grpc.CallOption) (*registry.Repo, error) { for _, o := range m.OnCreateRepos { if cmp.Equal(o.Given, given, protocmp.Transform()) { @@ -229,3 +236,12 @@ func (m MockRegistryClient) DiffImage(_ context.Context, given *registry.DiffIma } return nil, fmt.Errorf("mock not found for %v", given) } + +func (m MockRegistryClient) ListManifestMetadata(_ context.Context, given *registry.ManifestMetadataFilter, _ ...grpc.CallOption) (*registry.ManifestMetadataList, error) { + for _, o := range m.OnListManifestMetadata { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.List, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} From 334eabbedf7d83e47b7f88ddd24840b0cd8bfb6d Mon Sep 17 00:00:00 2001 From: Jenny Shi Date: Fri, 8 Mar 2024 16:57:32 -0500 Subject: [PATCH 10/41] Export 7f100f813caef9ebb03d126790b19726aff84bd2 Export: 7f100f813caef9ebb03d126790b19726aff84bd2 --- .../iam/v1/role_binding.platform.pb.go | 274 ++++++++++-------- .../iam/v1/role_binding.platform.proto | 3 + 2 files changed, 149 insertions(+), 128 deletions(-) diff --git a/proto/platform/iam/v1/role_binding.platform.pb.go b/proto/platform/iam/v1/role_binding.platform.pb.go index 2b0ba2a2..40b25231 100644 --- a/proto/platform/iam/v1/role_binding.platform.pb.go +++ b/proto/platform/iam/v1/role_binding.platform.pb.go @@ -13,6 +13,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" emptypb "google.golang.org/protobuf/types/known/emptypb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -331,6 +332,8 @@ type RoleBindingList_Binding struct { ClaimMatchIssuer string `protobuf:"bytes,6,opt,name=claim_match_issuer,json=claimMatchIssuer,proto3" json:"claim_match_issuer,omitempty"` // ClaimMatch subject of the bound identity. ClaimMatchSubject string `protobuf:"bytes,7,opt,name=claim_match_subject,json=claimMatchSubject,proto3" json:"claim_match_subject,omitempty"` + // created_at is the timestamp for when the role binding was created. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` } func (x *RoleBindingList_Binding) Reset() { @@ -414,6 +417,13 @@ func (x *RoleBindingList_Binding) GetClaimMatchSubject() string { return "" } +func (x *RoleBindingList_Binding) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + var File_role_binding_platform_proto protoreflect.FileDescriptor var file_role_binding_platform_proto_rawDesc = []byte{ @@ -424,119 +434,125 @@ var file_role_binding_platform_proto_rawDesc = []byte{ 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, - 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x13, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6f, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xee, 0x02, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x65, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x1a, 0x92, 0x02, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x5f, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, - 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, + 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x13, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6f, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xa9, 0x03, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, - 0x32, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x32, 0x93, 0x06, 0x0a, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0xe5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, - 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x1a, 0xcd, 0x02, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2c, 0x0a, 0x12, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, + 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x22, 0x5f, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, + 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, + 0x04, 0x75, 0x69, 0x64, 0x70, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, - 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x30, 0x3a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, - 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x2a, 0x2a, - 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x91, 0x03, 0xc2, 0xf0, 0x8e, - 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, - 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc8, 0x01, 0x0a, - 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, - 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x1a, 0x24, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, 0x1c, - 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x92, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x88, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, + 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, + 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x0b, + 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x32, 0x0a, 0x18, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, + 0x93, 0x06, 0x0a, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0xe5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x0c, 0x72, + 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, + 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc8, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, + 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, + 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, 0x1c, 0x2f, 0x69, 0x61, 0x6d, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0x92, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0x88, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, - 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x93, 0x03, - 0x10, 0x01, 0x12, 0xc4, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, - 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, - 0x2a, 0x1c, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x94, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, - 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, - 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, - 0x1b, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x52, 0x6f, 0x6c, 0x65, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, - 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x69, 0x61, 0x6d, + 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x93, 0x03, 0x10, 0x01, 0x12, 0xc4, + 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x69, + 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, + 0x12, 0x04, 0x0a, 0x02, 0x94, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, + 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -562,27 +578,29 @@ var file_role_binding_platform_proto_goTypes = []interface{}{ (*v1.UIDPFilter)(nil), // 6: chainguard.platform.common.UIDPFilter (*Group)(nil), // 7: chainguard.platform.iam.Group (*Role)(nil), // 8: chainguard.platform.iam.Role - (*emptypb.Empty)(nil), // 9: google.protobuf.Empty + (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 10: google.protobuf.Empty } var file_role_binding_platform_proto_depIdxs = []int32{ - 5, // 0: chainguard.platform.iam.RoleBindingList.items:type_name -> chainguard.platform.iam.RoleBindingList.Binding - 6, // 1: chainguard.platform.iam.RoleBindingFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 0, // 2: chainguard.platform.iam.CreateRoleBindingRequest.role_binding:type_name -> chainguard.platform.iam.RoleBinding - 7, // 3: chainguard.platform.iam.RoleBindingList.Binding.group:type_name -> chainguard.platform.iam.Group - 8, // 4: chainguard.platform.iam.RoleBindingList.Binding.role:type_name -> chainguard.platform.iam.Role - 3, // 5: chainguard.platform.iam.RoleBindings.Create:input_type -> chainguard.platform.iam.CreateRoleBindingRequest - 0, // 6: chainguard.platform.iam.RoleBindings.Update:input_type -> chainguard.platform.iam.RoleBinding - 2, // 7: chainguard.platform.iam.RoleBindings.List:input_type -> chainguard.platform.iam.RoleBindingFilter - 4, // 8: chainguard.platform.iam.RoleBindings.Delete:input_type -> chainguard.platform.iam.DeleteRoleBindingRequest - 0, // 9: chainguard.platform.iam.RoleBindings.Create:output_type -> chainguard.platform.iam.RoleBinding - 0, // 10: chainguard.platform.iam.RoleBindings.Update:output_type -> chainguard.platform.iam.RoleBinding - 1, // 11: chainguard.platform.iam.RoleBindings.List:output_type -> chainguard.platform.iam.RoleBindingList - 9, // 12: chainguard.platform.iam.RoleBindings.Delete:output_type -> google.protobuf.Empty - 9, // [9:13] is the sub-list for method output_type - 5, // [5:9] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 5, // 0: chainguard.platform.iam.RoleBindingList.items:type_name -> chainguard.platform.iam.RoleBindingList.Binding + 6, // 1: chainguard.platform.iam.RoleBindingFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 0, // 2: chainguard.platform.iam.CreateRoleBindingRequest.role_binding:type_name -> chainguard.platform.iam.RoleBinding + 7, // 3: chainguard.platform.iam.RoleBindingList.Binding.group:type_name -> chainguard.platform.iam.Group + 8, // 4: chainguard.platform.iam.RoleBindingList.Binding.role:type_name -> chainguard.platform.iam.Role + 9, // 5: chainguard.platform.iam.RoleBindingList.Binding.created_at:type_name -> google.protobuf.Timestamp + 3, // 6: chainguard.platform.iam.RoleBindings.Create:input_type -> chainguard.platform.iam.CreateRoleBindingRequest + 0, // 7: chainguard.platform.iam.RoleBindings.Update:input_type -> chainguard.platform.iam.RoleBinding + 2, // 8: chainguard.platform.iam.RoleBindings.List:input_type -> chainguard.platform.iam.RoleBindingFilter + 4, // 9: chainguard.platform.iam.RoleBindings.Delete:input_type -> chainguard.platform.iam.DeleteRoleBindingRequest + 0, // 10: chainguard.platform.iam.RoleBindings.Create:output_type -> chainguard.platform.iam.RoleBinding + 0, // 11: chainguard.platform.iam.RoleBindings.Update:output_type -> chainguard.platform.iam.RoleBinding + 1, // 12: chainguard.platform.iam.RoleBindings.List:output_type -> chainguard.platform.iam.RoleBindingList + 10, // 13: chainguard.platform.iam.RoleBindings.Delete:output_type -> google.protobuf.Empty + 10, // [10:14] is the sub-list for method output_type + 6, // [6:10] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_role_binding_platform_proto_init() } diff --git a/proto/platform/iam/v1/role_binding.platform.proto b/proto/platform/iam/v1/role_binding.platform.proto index 9ee50f0d..1041b77f 100644 --- a/proto/platform/iam/v1/role_binding.platform.proto +++ b/proto/platform/iam/v1/role_binding.platform.proto @@ -9,6 +9,7 @@ package chainguard.platform.iam; import "google/api/annotations.proto"; import "google/protobuf/empty.proto"; +import "google/protobuf/timestamp.proto"; import "annotations/auth.proto"; import "annotations/events.proto"; import "platform/common/v1/uidp.platform.proto"; @@ -107,6 +108,8 @@ message RoleBindingList { string claim_match_issuer = 6; // ClaimMatch subject of the bound identity. string claim_match_subject = 7; + // created_at is the timestamp for when the role binding was created. + google.protobuf.Timestamp created_at = 8; } repeated Binding items = 1; } From 4ab9495a7a28468750094a66432a5689aa3c0d45 Mon Sep 17 00:00:00 2001 From: Billy Lynch <1844673+wlynch@users.noreply.github.com> Date: Mon, 11 Mar 2024 16:38:42 -0400 Subject: [PATCH 11/41] Export 92f388b520656141575251f16074b63b81013d76 Export: 92f388b520656141575251f16074b63b81013d76 --- .github/chainguard/mono.sts.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/chainguard/mono.sts.yaml b/.github/chainguard/mono.sts.yaml index 7e2cfc2a..d6df301c 100644 --- a/.github/chainguard/mono.sts.yaml +++ b/.github/chainguard/mono.sts.yaml @@ -9,3 +9,4 @@ claim_pattern: permissions: contents: write pull_requests: write + workflows: write From 24a64457eef44a3acd1528cc47a6c592f599a9da Mon Sep 17 00:00:00 2001 From: Billy Lynch <1844673+wlynch@users.noreply.github.com> Date: Mon, 11 Mar 2024 17:02:37 -0400 Subject: [PATCH 12/41] Export 83b72f8e9dfa60e18bed164448ed531a1ddf8446 Export: 83b72f8e9dfa60e18bed164448ed531a1ddf8446 --- .chainguard/source.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.chainguard/source.yaml b/.chainguard/source.yaml index 4322b525..8a710d38 100644 --- a/.chainguard/source.yaml +++ b/.chainguard/source.yaml @@ -8,6 +8,8 @@ spec: identities: - subjectRegExp: .+@chainguard.dev$ issuer: https://accounts.google.com + - subject: https://github.com/chainguard-dev/mono/.github/workflows/export-sdk.yaml@refs/heads/main + issuer: https://token.actions.githubusercontent.com ctlog: url: https://rekor.sigstore.dev - key: From aee585546d304028d460ddd08340ce55a9450740 Mon Sep 17 00:00:00 2001 From: Billy Lynch <1844673+wlynch@users.noreply.github.com> Date: Tue, 12 Mar 2024 11:11:35 -0400 Subject: [PATCH 13/41] Export 1738beb92650a1583936886fcdc362bbb5dceaa5 Export: 1738beb92650a1583936886fcdc362bbb5dceaa5 --- .github/chainguard/mono.sts.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/chainguard/mono.sts.yaml b/.github/chainguard/mono.sts.yaml index d6df301c..a2efdb5a 100644 --- a/.github/chainguard/mono.sts.yaml +++ b/.github/chainguard/mono.sts.yaml @@ -4,7 +4,7 @@ issuer: https://token.actions.githubusercontent.com subject_pattern: repo:chainguard-dev/mono:ref:refs/heads/main claim_pattern: - job_workflow_ref: chainguard-dev/mono/.github/workflows/export-sdk.yaml@refs/heads/main + job_workflow_ref: chainguard-dev/mono/.github/workflows/(export|publish)-sdk.yaml@refs/heads/main permissions: contents: write From efa273aad01e91a67f0f8f4032c8a7c76a4d98f0 Mon Sep 17 00:00:00 2001 From: Colin Douglas <16968564+cmdpdx@users.noreply.github.com> Date: Mon, 18 Mar 2024 10:58:54 -0700 Subject: [PATCH 14/41] `token.RemainingLife()` will now accurately return the time remaining for refresh tokens. Export: 76252f4586032f43aaac32a0737303943108c139 --- auth/oidc.go | 25 ++++++++++++++++++------- auth/token/token.go | 9 ++++++++- auth/token/token_test.go | 38 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 62 insertions(+), 10 deletions(-) diff --git a/auth/oidc.go b/auth/oidc.go index 29cc2872..295e1dc6 100644 --- a/auth/oidc.go +++ b/auth/oidc.go @@ -130,19 +130,30 @@ func ExtractIssuerAndSubject(token string) (string, string, error) { return NormalizeIssuer(payload.Issuer), payload.Subject, nil } -func ExtractExpiry(token string) (time.Time, error) { - raw, err := decodeToken(token) - if err != nil { - return time.Time{}, err - } - +func extractExpiry(rawToken []byte) (time.Time, error) { var payload struct { Expiry int64 `json:"exp"` } - if err := json.Unmarshal(raw, &payload); err != nil { + if err := json.Unmarshal(rawToken, &payload); err != nil { return time.Time{}, fmt.Errorf("oidc: failed to unmarshal claims: %w", err) } return time.Unix(payload.Expiry, 0), nil } + +func ExtractExpiry(token string) (time.Time, error) { + raw, err := decodeToken(token) + if err != nil { + return time.Time{}, err + } + return extractExpiry(raw) +} + +func ExtractRefreshExpiry(token string) (time.Time, error) { + raw, err := base64.StdEncoding.DecodeString(token) + if err != nil { + return time.Time{}, fmt.Errorf("refresh: malformed jwt payload: %w", err) + } + return extractExpiry(raw) +} diff --git a/auth/token/token.go b/auth/token/token.go index 485e6c99..d1991926 100644 --- a/auth/token/token.go +++ b/auth/token/token.go @@ -135,8 +135,15 @@ func RemainingLife(kind Kind, audience string, less time.Duration) time.Duration // Not a big deal, life is zero. return 0 } - expiry, err := auth.ExtractExpiry(string(tok)) + var expiry time.Time + switch kind { + case KindRefresh: + expiry, err = auth.ExtractRefreshExpiry(string(tok)) + default: + expiry, err = auth.ExtractExpiry(string(tok)) + } if err != nil { + fmt.Printf("failed to extract expiry: %v\n", err) // Not a big deal, life is zero. return 0 } diff --git a/auth/token/token_test.go b/auth/token/token_test.go index a263c9ea..b414d239 100644 --- a/auth/token/token_test.go +++ b/auth/token/token_test.go @@ -6,6 +6,8 @@ SPDX-License-Identifier: Apache-2.0 package token import ( + "encoding/base64" + "encoding/json" "os" "path/filepath" "strings" @@ -23,7 +25,6 @@ func testToken(t *testing.T, audience, subject string, issuedAt time.Time, valid signer, iss := oidctest.NewIssuer(t) - // Create an OIDC token using this issuer's signer. tok, err := jwt.Signed(signer).Claims(jwt.Claims{ Issuer: iss, IssuedAt: jwt.NewNumericDate(issuedAt), @@ -38,6 +39,23 @@ func testToken(t *testing.T, audience, subject string, issuedAt time.Time, valid return tok } +func testRefreshToken(t *testing.T, issuer, audience, subject string, issuedAt time.Time, validDur time.Duration) string { + t.Helper() + + msg := jwt.Claims{ + Issuer: issuer, + Subject: subject, + Audience: jwt.Audience{audience}, + IssuedAt: jwt.NewNumericDate(issuedAt), + Expiry: jwt.NewNumericDate(issuedAt.Add(validDur)), + } + + bs, _ := json.Marshal(msg) + code := base64.StdEncoding.EncodeToString(bs) + + return code +} + func TestSave(t *testing.T) { t.Setenv("HOME", t.TempDir()) cacheDir, err := os.UserCacheDir() @@ -396,6 +414,17 @@ func TestRemainingLife(t *testing.T) { audience: "audience", less: 30 * time.Minute, want: 0, + }, { + name: "exists less 30m, 0s remain (refresh)", + token: ts{ + audience: "audience", + subject: "subject", + duration: 30 * time.Minute, + }, + kind: KindRefresh, + audience: "audience", + less: 30 * time.Minute, + want: 0, }, { name: "exists less 40m, 0s remain", token: ts{ @@ -422,7 +451,12 @@ func TestRemainingLife(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - tok := testToken(t, test.token.audience, test.token.subject, now, test.token.duration) + var tok string + if test.kind == KindAccess { + tok = testToken(t, test.token.audience, test.token.subject, now, test.token.duration) + } else { + tok = testRefreshToken(t, "https://issuer.unit-test.com", test.token.audience, test.token.subject, now, test.token.duration) + } if err := Save([]byte(tok), test.kind, test.token.audience); err != nil { t.Fatalf("Save() unexpected error=%v", err) } From 19a111107b77e07a1b243b0e3c8a84e2c66a25fa Mon Sep 17 00:00:00 2001 From: Jenny Shi Date: Tue, 19 Mar 2024 11:26:33 -0400 Subject: [PATCH 15/41] Export 4381f699d82692a42945be465fb347a454c45ce0 Export: 4381f699d82692a42945be465fb347a454c45ce0 --- .../iam/v1/group_invites.platform.pb.go | 158 ++++++++++-------- .../iam/v1/group_invites.platform.proto | 3 + 2 files changed, 88 insertions(+), 73 deletions(-) diff --git a/proto/platform/iam/v1/group_invites.platform.pb.go b/proto/platform/iam/v1/group_invites.platform.pb.go index f7ce620d..bf53afb4 100644 --- a/proto/platform/iam/v1/group_invites.platform.pb.go +++ b/proto/platform/iam/v1/group_invites.platform.pb.go @@ -203,6 +203,9 @@ type StoredGroupInvite struct { KeyId string `protobuf:"bytes,3,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` // role is the role the invited identity will be role-bound to the group with. Role *Role `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` + // email is the email address that is allowed to accept this invite code. If blank, + // anyone with the invite code an accept. + Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` } func (x *StoredGroupInvite) Reset() { @@ -265,6 +268,13 @@ func (x *StoredGroupInvite) GetRole() *Role { return nil } +func (x *StoredGroupInvite) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + type GroupInviteList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -654,7 +664,7 @@ var file_group_invites_platform_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xa9, 0x01, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, @@ -665,80 +675,82 @@ var file_group_invites_platform_proto_rawDesc = []byte{ 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0x53, 0x0a, 0x0f, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x89, - 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, - 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x32, 0x0a, 0x18, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x50, - 0x0a, 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, - 0x32, 0xb2, 0x05, 0x0a, 0x0c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, - 0x78, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, - 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, - 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x76, 0x0a, 0x0f, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x63, + 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, + 0x53, 0x0a, 0x0f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x40, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, + 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, + 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x22, 0x32, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x50, 0x0a, 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x32, 0xb2, 0x05, 0x0a, 0x0c, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x78, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, + 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, + 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, + 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, + 0x76, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x10, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, + 0x04, 0xc9, 0x01, 0x91, 0x03, 0x10, 0x01, 0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, - 0x10, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0x10, - 0x01, 0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, - 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcb, 0x01, 0x10, 0x01, 0x12, 0xc5, 0x01, - 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, - 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, - 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, + 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcb, + 0x01, 0x10, 0x01, 0x12, 0xc5, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1f, 0x2a, 0x1d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, + 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, + 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, + 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, + 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/proto/platform/iam/v1/group_invites.platform.proto b/proto/platform/iam/v1/group_invites.platform.proto index f3234539..cab17170 100644 --- a/proto/platform/iam/v1/group_invites.platform.proto +++ b/proto/platform/iam/v1/group_invites.platform.proto @@ -133,6 +133,9 @@ message StoredGroupInvite { string key_id = 3; // role is the role the invited identity will be role-bound to the group with. chainguard.platform.iam.Role role = 4; + // email is the email address that is allowed to accept this invite code. If blank, + // anyone with the invite code an accept. + string email = 5; } message GroupInviteList { From 7f58b9f3c3f027fc38ec8638d5446d7f049223a1 Mon Sep 17 00:00:00 2001 From: Jenny Shi Date: Wed, 20 Mar 2024 16:56:40 -0400 Subject: [PATCH 16/41] Export ce521e6653083bfa5591dc16334a7111af32476d Export: ce521e6653083bfa5591dc16334a7111af32476d --- .../iam/v1/group_invites.platform.pb.go | 193 ++++++++++-------- .../iam/v1/group_invites.platform.proto | 2 + 2 files changed, 105 insertions(+), 90 deletions(-) diff --git a/proto/platform/iam/v1/group_invites.platform.pb.go b/proto/platform/iam/v1/group_invites.platform.pb.go index bf53afb4..9993a303 100644 --- a/proto/platform/iam/v1/group_invites.platform.pb.go +++ b/proto/platform/iam/v1/group_invites.platform.pb.go @@ -206,6 +206,8 @@ type StoredGroupInvite struct { // email is the email address that is allowed to accept this invite code. If blank, // anyone with the invite code an accept. Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` + // created_at is the timestamp for when the invite was created. + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` } func (x *StoredGroupInvite) Reset() { @@ -275,6 +277,13 @@ func (x *StoredGroupInvite) GetEmail() string { return "" } +func (x *StoredGroupInvite) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + type GroupInviteList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -664,7 +673,7 @@ var file_group_invites_platform_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xbf, 0x01, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xfa, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, @@ -676,81 +685,84 @@ var file_group_invites_platform_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, - 0x53, 0x0a, 0x0f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x40, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, - 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x22, 0x32, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x50, 0x0a, 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x32, 0xb2, 0x05, 0x0a, 0x0c, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x78, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, - 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, - 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, - 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, - 0x76, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x10, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, - 0x04, 0xc9, 0x01, 0x91, 0x03, 0x10, 0x01, 0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, + 0x69, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, + 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x53, 0x0a, 0x0f, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, - 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcb, - 0x01, 0x10, 0x01, 0x12, 0xc5, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x1f, 0x2a, 0x1d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, - 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, - 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, - 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, - 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, + 0x89, 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x32, 0x0a, 0x18, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x50, 0x0a, 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, + 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, + 0x64, 0x32, 0xb2, 0x05, 0x0a, 0x0c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x22, 0x78, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x69, 0x61, + 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, + 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, + 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x76, 0x0a, 0x0f, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x22, 0x10, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, + 0x10, 0x01, 0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x69, 0x61, 0x6d, 0x2f, + 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcb, 0x01, 0x10, 0x01, 0x12, 0xc5, + 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x69, + 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, + 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -788,21 +800,22 @@ var file_group_invites_platform_proto_depIdxs = []int32{ 10, // 3: chainguard.platform.iam.GroupInvite.role:type_name -> chainguard.platform.iam.Role 9, // 4: chainguard.platform.iam.StoredGroupInvite.expiration:type_name -> google.protobuf.Timestamp 10, // 5: chainguard.platform.iam.StoredGroupInvite.role:type_name -> chainguard.platform.iam.Role - 2, // 6: chainguard.platform.iam.GroupInviteList.items:type_name -> chainguard.platform.iam.StoredGroupInvite - 11, // 7: chainguard.platform.iam.GroupInviteRequest.ttl:type_name -> google.protobuf.Duration - 4, // 8: chainguard.platform.iam.GroupInvites.Create:input_type -> chainguard.platform.iam.GroupInviteRequest - 4, // 9: chainguard.platform.iam.GroupInvites.CreateWithGroup:input_type -> chainguard.platform.iam.GroupInviteRequest - 6, // 10: chainguard.platform.iam.GroupInvites.List:input_type -> chainguard.platform.iam.GroupInviteFilter - 5, // 11: chainguard.platform.iam.GroupInvites.Delete:input_type -> chainguard.platform.iam.DeleteGroupInviteRequest - 1, // 12: chainguard.platform.iam.GroupInvites.Create:output_type -> chainguard.platform.iam.GroupInvite - 1, // 13: chainguard.platform.iam.GroupInvites.CreateWithGroup:output_type -> chainguard.platform.iam.GroupInvite - 3, // 14: chainguard.platform.iam.GroupInvites.List:output_type -> chainguard.platform.iam.GroupInviteList - 12, // 15: chainguard.platform.iam.GroupInvites.Delete:output_type -> google.protobuf.Empty - 12, // [12:16] is the sub-list for method output_type - 8, // [8:12] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 9, // 6: chainguard.platform.iam.StoredGroupInvite.created_at:type_name -> google.protobuf.Timestamp + 2, // 7: chainguard.platform.iam.GroupInviteList.items:type_name -> chainguard.platform.iam.StoredGroupInvite + 11, // 8: chainguard.platform.iam.GroupInviteRequest.ttl:type_name -> google.protobuf.Duration + 4, // 9: chainguard.platform.iam.GroupInvites.Create:input_type -> chainguard.platform.iam.GroupInviteRequest + 4, // 10: chainguard.platform.iam.GroupInvites.CreateWithGroup:input_type -> chainguard.platform.iam.GroupInviteRequest + 6, // 11: chainguard.platform.iam.GroupInvites.List:input_type -> chainguard.platform.iam.GroupInviteFilter + 5, // 12: chainguard.platform.iam.GroupInvites.Delete:input_type -> chainguard.platform.iam.DeleteGroupInviteRequest + 1, // 13: chainguard.platform.iam.GroupInvites.Create:output_type -> chainguard.platform.iam.GroupInvite + 1, // 14: chainguard.platform.iam.GroupInvites.CreateWithGroup:output_type -> chainguard.platform.iam.GroupInvite + 3, // 15: chainguard.platform.iam.GroupInvites.List:output_type -> chainguard.platform.iam.GroupInviteList + 12, // 16: chainguard.platform.iam.GroupInvites.Delete:output_type -> google.protobuf.Empty + 13, // [13:17] is the sub-list for method output_type + 9, // [9:13] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name } func init() { file_group_invites_platform_proto_init() } diff --git a/proto/platform/iam/v1/group_invites.platform.proto b/proto/platform/iam/v1/group_invites.platform.proto index cab17170..14c162c1 100644 --- a/proto/platform/iam/v1/group_invites.platform.proto +++ b/proto/platform/iam/v1/group_invites.platform.proto @@ -136,6 +136,8 @@ message StoredGroupInvite { // email is the email address that is allowed to accept this invite code. If blank, // anyone with the invite code an accept. string email = 5; + // created_at is the timestamp for when the invite was created. + google.protobuf.Timestamp created_at = 6; } message GroupInviteList { From f7e7b4f6f86a8751754908654272eb605443f206 Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Thu, 21 Mar 2024 08:44:38 -0400 Subject: [PATCH 17/41] Export 6f85d0d482f340af0a987a5ccbdc39bf0c97edb8 Export: 6f85d0d482f340af0a987a5ccbdc39bf0c97edb8 --- proto/annotations/doc.go | 4 ++-- proto/capabilities/doc.go | 2 +- .../advisory/v1/advisory.platform.pb.gw.go | 5 ----- proto/platform/advisory/v1/doc.go | 2 +- proto/platform/auth/v1/auth.platform.pb.gw.go | 5 ----- proto/platform/auth/v1/doc.go | 2 +- proto/platform/common/v1/doc.go | 2 +- proto/platform/events/v1/doc.go | 4 ++-- .../events/v1/identities.platform.pb.gw.go | 5 ----- .../events/v1/subscriptions.platform.pb.gw.go | 5 ----- .../v1/account_associations.platform.pb.gw.go | 5 ----- proto/platform/iam/v1/doc.go | 18 +++++++++--------- proto/platform/iam/v1/group.platform.pb.gw.go | 5 ----- .../iam/v1/group_invites.platform.pb.gw.go | 5 ----- .../platform/iam/v1/identity.platform.pb.gw.go | 5 ----- .../v1/identity_providers.platform.pb.gw.go | 5 ----- .../platform/iam/v1/policies.platform.pb.gw.go | 5 ----- proto/platform/iam/v1/role.platform.pb.gw.go | 5 ----- .../iam/v1/role_binding.platform.pb.gw.go | 5 ----- .../platform/iam/v1/sigstore.platform.pb.gw.go | 5 ----- proto/platform/oidc/v1/doc.go | 2 +- proto/platform/oidc/v1/oidc.platform.pb.gw.go | 5 ----- proto/platform/ping/v1/doc.go | 2 +- proto/platform/ping/v1/ping.platform.pb.gw.go | 5 ----- proto/platform/registry/v1/doc.go | 2 +- .../registry/v1/registry.platform.pb.gw.go | 5 ----- .../tenant/v1/attestation.platform.pb.gw.go | 5 ----- .../tenant/v1/cluster.platform.pb.gw.go | 5 ----- proto/platform/tenant/v1/doc.go | 12 ++++++------ .../tenant/v1/record.platform.pb.gw.go | 5 ----- .../platform/tenant/v1/risk.platform.pb.gw.go | 5 ----- .../platform/tenant/v1/sbom.platform.pb.gw.go | 5 ----- .../platform/tenant/v1/vuln.platform.pb.gw.go | 5 ----- 33 files changed, 26 insertions(+), 136 deletions(-) diff --git a/proto/annotations/doc.go b/proto/annotations/doc.go index 3c5444ee..705d5049 100644 --- a/proto/annotations/doc.go +++ b/proto/annotations/doc.go @@ -6,6 +6,6 @@ SPDX-License-Identifier: Apache-2.0 // Package accounts contains the GRPC client and server definitions // for implementing Auth interactions for the Console. // -//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. auth.proto -//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. events.proto +//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. auth.proto +//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. events.proto package annotations diff --git a/proto/capabilities/doc.go b/proto/capabilities/doc.go index 5765d5b9..ef8a1f50 100644 --- a/proto/capabilities/doc.go +++ b/proto/capabilities/doc.go @@ -5,5 +5,5 @@ SPDX-License-Identifier: Apache-2.0 // Package capabilities contains the proto enum with our IAM capabilities. // -//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. capabilities.proto +//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. capabilities.proto package capabilities diff --git a/proto/platform/advisory/v1/advisory.platform.pb.gw.go b/proto/platform/advisory/v1/advisory.platform.pb.gw.go index a6d9166b..11cb9e4c 100644 --- a/proto/platform/advisory/v1/advisory.platform.pb.gw.go +++ b/proto/platform/advisory/v1/advisory.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: advisory.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/advisory/v1/doc.go b/proto/platform/advisory/v1/doc.go index df562690..2692c77e 100644 --- a/proto/platform/advisory/v1/doc.go +++ b/proto/platform/advisory/v1/doc.go @@ -6,5 +6,5 @@ SPDX-License-Identifier: Apache-2.0 // Package v1 contains the v1 GRPC client and server definitions // for implementing Advisory interactions. // -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. advisory.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. advisory.platform.proto package v1 diff --git a/proto/platform/auth/v1/auth.platform.pb.gw.go b/proto/platform/auth/v1/auth.platform.pb.gw.go index 0257f6a2..8aaefdda 100644 --- a/proto/platform/auth/v1/auth.platform.pb.gw.go +++ b/proto/platform/auth/v1/auth.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: auth.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/auth/v1/doc.go b/proto/platform/auth/v1/doc.go index 409f9974..c7008077 100644 --- a/proto/platform/auth/v1/doc.go +++ b/proto/platform/auth/v1/doc.go @@ -6,5 +6,5 @@ SPDX-License-Identifier: Apache-2.0 // Package v1 contains the v1 GRPC client and server definitions // for implementing Auth interactions for the Console. // -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. auth.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. auth.platform.proto package v1 diff --git a/proto/platform/common/v1/doc.go b/proto/platform/common/v1/doc.go index 96d90e89..9c741dd3 100644 --- a/proto/platform/common/v1/doc.go +++ b/proto/platform/common/v1/doc.go @@ -3,7 +3,7 @@ Copyright 2022 Chainguard, Inc. SPDX-License-Identifier: Apache-2.0 */ -//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. uidp.platform.proto +//go:generate protoc -I . -I .. -I ../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. uidp.platform.proto // Package common contains Chainguard shared types exposed to the console. package v1 diff --git a/proto/platform/events/v1/doc.go b/proto/platform/events/v1/doc.go index 8e031d9d..a8543a27 100644 --- a/proto/platform/events/v1/doc.go +++ b/proto/platform/events/v1/doc.go @@ -4,8 +4,8 @@ SPDX-License-Identifier: Apache-2.0 */ // Generate the proto definitions -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. subscriptions.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. identities.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. subscriptions.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. identities.platform.proto // Package events contains the GRPC client and server definitions // for implementing eventing interactions for the Console. diff --git a/proto/platform/events/v1/identities.platform.pb.gw.go b/proto/platform/events/v1/identities.platform.pb.gw.go index e20b6a68..fde3a8c0 100644 --- a/proto/platform/events/v1/identities.platform.pb.gw.go +++ b/proto/platform/events/v1/identities.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: identities.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/events/v1/subscriptions.platform.pb.gw.go b/proto/platform/events/v1/subscriptions.platform.pb.gw.go index 6fa11eee..5e69dba2 100644 --- a/proto/platform/events/v1/subscriptions.platform.pb.gw.go +++ b/proto/platform/events/v1/subscriptions.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: subscriptions.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/iam/v1/account_associations.platform.pb.gw.go b/proto/platform/iam/v1/account_associations.platform.pb.gw.go index 090915e1..5f1a7325 100644 --- a/proto/platform/iam/v1/account_associations.platform.pb.gw.go +++ b/proto/platform/iam/v1/account_associations.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: account_associations.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/iam/v1/doc.go b/proto/platform/iam/v1/doc.go index 413894e6..2dbc0d23 100644 --- a/proto/platform/iam/v1/doc.go +++ b/proto/platform/iam/v1/doc.go @@ -4,15 +4,15 @@ SPDX-License-Identifier: Apache-2.0 */ // Generate the proto definitions -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. group.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. group_invites.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. role.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. role_binding.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. identity.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. account_associations.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. policies.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. identity_providers.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. sigstore.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. group.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. group_invites.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. role.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. role_binding.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. identity.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. account_associations.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. policies.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. identity_providers.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. sigstore.platform.proto // Package v1 contains the v1 GRPC client and server definitions // for implementing IAM interactions for the Console. diff --git a/proto/platform/iam/v1/group.platform.pb.gw.go b/proto/platform/iam/v1/group.platform.pb.gw.go index 7152a1c9..5e56d640 100644 --- a/proto/platform/iam/v1/group.platform.pb.gw.go +++ b/proto/platform/iam/v1/group.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: group.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/iam/v1/group_invites.platform.pb.gw.go b/proto/platform/iam/v1/group_invites.platform.pb.gw.go index d1994fca..d1e9d95c 100644 --- a/proto/platform/iam/v1/group_invites.platform.pb.gw.go +++ b/proto/platform/iam/v1/group_invites.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: group_invites.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/iam/v1/identity.platform.pb.gw.go b/proto/platform/iam/v1/identity.platform.pb.gw.go index 78f1d948..903a93bf 100644 --- a/proto/platform/iam/v1/identity.platform.pb.gw.go +++ b/proto/platform/iam/v1/identity.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: identity.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/iam/v1/identity_providers.platform.pb.gw.go b/proto/platform/iam/v1/identity_providers.platform.pb.gw.go index 6ac2c190..fdfb2ada 100644 --- a/proto/platform/iam/v1/identity_providers.platform.pb.gw.go +++ b/proto/platform/iam/v1/identity_providers.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: identity_providers.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/iam/v1/policies.platform.pb.gw.go b/proto/platform/iam/v1/policies.platform.pb.gw.go index 2ac936c3..f741781f 100644 --- a/proto/platform/iam/v1/policies.platform.pb.gw.go +++ b/proto/platform/iam/v1/policies.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: policies.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/iam/v1/role.platform.pb.gw.go b/proto/platform/iam/v1/role.platform.pb.gw.go index b4bb5afa..dcc83137 100644 --- a/proto/platform/iam/v1/role.platform.pb.gw.go +++ b/proto/platform/iam/v1/role.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: role.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/iam/v1/role_binding.platform.pb.gw.go b/proto/platform/iam/v1/role_binding.platform.pb.gw.go index 8d673504..a50a2575 100644 --- a/proto/platform/iam/v1/role_binding.platform.pb.gw.go +++ b/proto/platform/iam/v1/role_binding.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: role_binding.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/iam/v1/sigstore.platform.pb.gw.go b/proto/platform/iam/v1/sigstore.platform.pb.gw.go index b61fd0e2..db3145ae 100644 --- a/proto/platform/iam/v1/sigstore.platform.pb.gw.go +++ b/proto/platform/iam/v1/sigstore.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: sigstore.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/oidc/v1/doc.go b/proto/platform/oidc/v1/doc.go index 93693c42..e3a2e450 100644 --- a/proto/platform/oidc/v1/doc.go +++ b/proto/platform/oidc/v1/doc.go @@ -6,5 +6,5 @@ SPDX-License-Identifier: Apache-2.0 // Package v1 contains the v1 GRPC client and server definitions // for implementing OIDC interactions for the Platform. // -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. oidc.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. oidc.platform.proto package v1 diff --git a/proto/platform/oidc/v1/oidc.platform.pb.gw.go b/proto/platform/oidc/v1/oidc.platform.pb.gw.go index fc3d42cf..e3e6dd52 100644 --- a/proto/platform/oidc/v1/oidc.platform.pb.gw.go +++ b/proto/platform/oidc/v1/oidc.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: oidc.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/ping/v1/doc.go b/proto/platform/ping/v1/doc.go index 598bbb48..4e6c5d67 100644 --- a/proto/platform/ping/v1/doc.go +++ b/proto/platform/ping/v1/doc.go @@ -6,5 +6,5 @@ SPDX-License-Identifier: Apache-2.0 // Package v1 contains the v1 GRPC client and server definitions // for implementing ping interactions for the Platform. // -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. ping.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. ping.platform.proto package v1 diff --git a/proto/platform/ping/v1/ping.platform.pb.gw.go b/proto/platform/ping/v1/ping.platform.pb.gw.go index c934acab..d906d932 100644 --- a/proto/platform/ping/v1/ping.platform.pb.gw.go +++ b/proto/platform/ping/v1/ping.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: ping.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/registry/v1/doc.go b/proto/platform/registry/v1/doc.go index 006b05d9..d7b8247f 100644 --- a/proto/platform/registry/v1/doc.go +++ b/proto/platform/registry/v1/doc.go @@ -6,5 +6,5 @@ SPDX-License-Identifier: Apache-2.0 // Package v1 contains the v1 GRPC client and server definitions // for implementing Registry interactions. // -//go:generate protoc -I . -I ../.. -I ../../.. -I ../../tenant/v1 --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. registry.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. -I ../../tenant/v1 --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. registry.platform.proto package v1 diff --git a/proto/platform/registry/v1/registry.platform.pb.gw.go b/proto/platform/registry/v1/registry.platform.pb.gw.go index 4789185d..190731c4 100644 --- a/proto/platform/registry/v1/registry.platform.pb.gw.go +++ b/proto/platform/registry/v1/registry.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: registry.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/tenant/v1/attestation.platform.pb.gw.go b/proto/platform/tenant/v1/attestation.platform.pb.gw.go index 38db96d2..459d4b0b 100644 --- a/proto/platform/tenant/v1/attestation.platform.pb.gw.go +++ b/proto/platform/tenant/v1/attestation.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: attestation.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/tenant/v1/cluster.platform.pb.gw.go b/proto/platform/tenant/v1/cluster.platform.pb.gw.go index 4355e0ab..dc3d0b60 100644 --- a/proto/platform/tenant/v1/cluster.platform.pb.gw.go +++ b/proto/platform/tenant/v1/cluster.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: cluster.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/tenant/v1/doc.go b/proto/platform/tenant/v1/doc.go index 9441336f..146b7989 100644 --- a/proto/platform/tenant/v1/doc.go +++ b/proto/platform/tenant/v1/doc.go @@ -6,16 +6,16 @@ SPDX-License-Identifier: Apache-2.0 // Package v1 contains the v1 GRPC client and server definitions // for implementing Tenant interactions for the Console. // -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. cluster.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. cluster.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative context.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative node.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative namespace.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative policy_results.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative signature.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative workload.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. record.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. risk.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. sbom.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. vuln.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --openapiv2_out=. attestation.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. record.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. risk.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. sbom.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. vuln.platform.proto +//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. attestation.platform.proto package v1 diff --git a/proto/platform/tenant/v1/record.platform.pb.gw.go b/proto/platform/tenant/v1/record.platform.pb.gw.go index ee0f69c1..043b5665 100644 --- a/proto/platform/tenant/v1/record.platform.pb.gw.go +++ b/proto/platform/tenant/v1/record.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: record.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/tenant/v1/risk.platform.pb.gw.go b/proto/platform/tenant/v1/risk.platform.pb.gw.go index 26acbe14..209d9c3b 100644 --- a/proto/platform/tenant/v1/risk.platform.pb.gw.go +++ b/proto/platform/tenant/v1/risk.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: risk.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/tenant/v1/sbom.platform.pb.gw.go b/proto/platform/tenant/v1/sbom.platform.pb.gw.go index 9b2cab72..f807c51b 100644 --- a/proto/platform/tenant/v1/sbom.platform.pb.gw.go +++ b/proto/platform/tenant/v1/sbom.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: sbom.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( diff --git a/proto/platform/tenant/v1/vuln.platform.pb.gw.go b/proto/platform/tenant/v1/vuln.platform.pb.gw.go index 617e95a6..9f610158 100644 --- a/proto/platform/tenant/v1/vuln.platform.pb.gw.go +++ b/proto/platform/tenant/v1/vuln.platform.pb.gw.go @@ -1,11 +1,6 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. // source: vuln.platform.proto -/* -Package v1 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ package v1 import ( From f6af9b8e7175afadc1fcc3ac3ef79954d192faa7 Mon Sep 17 00:00:00 2001 From: Colin Douglas <16968564+cmdpdx@users.noreply.github.com> Date: Thu, 28 Mar 2024 09:38:02 -0700 Subject: [PATCH 18/41] Annotate connection failure errors from `NewClients` functions with client type to aid troubleshooting. Export: e58ba0132faa1618558d68f2a1b9db54747e1640 --- proto/platform/advisory/v1/clients.go | 2 +- proto/platform/clients.go | 4 ++-- proto/platform/iam/v1/clients.go | 2 +- proto/platform/oidc/v1/clients.go | 2 +- proto/platform/ping/v1/clients.go | 2 +- proto/platform/registry/v1/clients.go | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/proto/platform/advisory/v1/clients.go b/proto/platform/advisory/v1/clients.go index cdabef5b..124dd007 100644 --- a/proto/platform/advisory/v1/clients.go +++ b/proto/platform/advisory/v1/clients.go @@ -46,7 +46,7 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) } conn, err := grpc.DialContext(ctx, target, opts...) if err != nil { - return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + return nil, fmt.Errorf("advisory.NewClients: failed to connect to the iam server: %w", err) } return &clients{ diff --git a/proto/platform/clients.go b/proto/platform/clients.go index 8241bba2..ad4f0736 100644 --- a/proto/platform/clients.go +++ b/proto/platform/clients.go @@ -62,7 +62,7 @@ func NewPlatformClients(ctx context.Context, apiURL string, cred credentials.Per } conn, err := grpc.DialContext(ctx, target, opts...) if err != nil { - return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + return nil, fmt.Errorf("NewPlatformClients: failed to connect to the iam server: %w", err) } return &clients{ @@ -142,7 +142,7 @@ func NewOIDCClients(ctx context.Context, issuerURL string, cred credentials.PerR } conn, err := grpc.DialContext(ctx, target, opts...) if err != nil { - return nil, fmt.Errorf("failed to connect to the OIDC issuer: %w", err) + return nil, fmt.Errorf("NewOIDCClients: failed to connect to the OIDC issuer: %w", err) } return &oidcClients{ diff --git a/proto/platform/iam/v1/clients.go b/proto/platform/iam/v1/clients.go index 1e1986c7..d1df1337 100644 --- a/proto/platform/iam/v1/clients.go +++ b/proto/platform/iam/v1/clients.go @@ -62,7 +62,7 @@ func NewClients(ctx context.Context, iamURL string, token string) (Clients, erro } conn, err := grpc.DialContext(ctx, target, opts...) if err != nil { - return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + return nil, fmt.Errorf("iam.NewClients: failed to connect to the iam server: %w", err) } return &clients{ diff --git a/proto/platform/oidc/v1/clients.go b/proto/platform/oidc/v1/clients.go index 61058163..2e727281 100644 --- a/proto/platform/oidc/v1/clients.go +++ b/proto/platform/oidc/v1/clients.go @@ -66,7 +66,7 @@ func NewClients(ctx context.Context, addr string, token string, opts ...ClientOp } conn, err := grpc.DialContext(ctx, target, rpcOpts...) if err != nil { - return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + return nil, fmt.Errorf("oidc.NewClients: failed to connect to the iam server: %w", err) } return &clients{ diff --git a/proto/platform/ping/v1/clients.go b/proto/platform/ping/v1/clients.go index 2f775fcf..c686bbc7 100644 --- a/proto/platform/ping/v1/clients.go +++ b/proto/platform/ping/v1/clients.go @@ -46,7 +46,7 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) } conn, err := grpc.DialContext(ctx, target, opts...) if err != nil { - return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + return nil, fmt.Errorf("ping.NewClients: failed to connect to the iam server: %w", err) } return &clients{ diff --git a/proto/platform/registry/v1/clients.go b/proto/platform/registry/v1/clients.go index a52a2861..4b892a88 100644 --- a/proto/platform/registry/v1/clients.go +++ b/proto/platform/registry/v1/clients.go @@ -46,7 +46,7 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) } conn, err := grpc.DialContext(ctx, target, opts...) if err != nil { - return nil, fmt.Errorf("failed to connect to the iam server: %w", err) + return nil, fmt.Errorf("registry.NewClients: failed to connect to the iam server: %w", err) } return &clients{ From 7883747478841e275a6afb464a14a007327fe4a9 Mon Sep 17 00:00:00 2001 From: Jenny Shi Date: Fri, 29 Mar 2024 17:01:35 -0400 Subject: [PATCH 19/41] Export e2e1e9a3b1a5e062918f17752e85c3c41ee42766 Export: e2e1e9a3b1a5e062918f17752e85c3c41ee42766 --- .../iam/v1/group_invites.platform.pb.go | 164 ++++++++++-------- .../iam/v1/group_invites.platform.proto | 4 + 2 files changed, 97 insertions(+), 71 deletions(-) diff --git a/proto/platform/iam/v1/group_invites.platform.pb.go b/proto/platform/iam/v1/group_invites.platform.pb.go index 9993a303..342f4663 100644 --- a/proto/platform/iam/v1/group_invites.platform.pb.go +++ b/proto/platform/iam/v1/group_invites.platform.pb.go @@ -208,6 +208,8 @@ type StoredGroupInvite struct { Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` // created_at is the timestamp for when the invite was created. CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // single_use indicates whether or not the invite will be deleted after a user joins the group. + SingleUse bool `protobuf:"varint,7,opt,name=single_use,json=singleUse,proto3" json:"single_use,omitempty"` } func (x *StoredGroupInvite) Reset() { @@ -284,6 +286,13 @@ func (x *StoredGroupInvite) GetCreatedAt() *timestamppb.Timestamp { return nil } +func (x *StoredGroupInvite) GetSingleUse() bool { + if x != nil { + return x.SingleUse + } + return false +} + type GroupInviteList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -344,6 +353,8 @@ type GroupInviteRequest struct { Role string `protobuf:"bytes,3,opt,name=role,proto3" json:"role,omitempty"` // email is the exact email address that may accept this invite code, if specified. Email string `protobuf:"bytes,4,opt,name=email,proto3" json:"email,omitempty"` + // if single_use is set to true, then the invite will be deleted after a user joins the group. + SingleUse bool `protobuf:"varint,5,opt,name=single_use,json=singleUse,proto3" json:"single_use,omitempty"` } func (x *GroupInviteRequest) Reset() { @@ -406,6 +417,13 @@ func (x *GroupInviteRequest) GetEmail() string { return "" } +func (x *GroupInviteRequest) GetSingleUse() bool { + if x != nil { + return x.SingleUse + } + return false +} + type DeleteGroupInviteRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -673,7 +691,7 @@ var file_group_invites_platform_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xfa, 0x01, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x99, 0x02, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, @@ -689,80 +707,84 @@ var file_group_invites_platform_proto_rawDesc = []byte{ 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x53, 0x0a, 0x0f, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x0a, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, - 0x89, 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, - 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0x32, 0x0a, 0x18, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x50, 0x0a, 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, - 0x64, 0x32, 0xb2, 0x05, 0x0a, 0x0c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x22, 0x78, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, - 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, - 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, - 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x76, 0x0a, 0x0f, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x22, 0x10, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, - 0x10, 0x01, 0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x22, 0x53, 0x0a, 0x0f, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xa8, + 0x01, 0x0a, 0x12, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x74, 0x74, 0x6c, + 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x18, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x50, 0x0a, + 0x11, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x32, + 0xb2, 0x05, 0x0a, 0x0c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, + 0x12, 0xd5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, - 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x69, 0x61, 0x6d, 0x2f, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x78, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x01, 0x2a, 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcb, 0x01, 0x10, 0x01, 0x12, 0xc5, - 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, + 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x76, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x10, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x04, 0xc9, 0x01, 0x91, 0x03, 0x10, 0x01, + 0x12, 0x89, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x69, - 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, - 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, + 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcb, 0x01, 0x10, 0x01, 0x12, 0xc5, 0x01, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x2a, 0x1d, 0x2f, 0x69, 0x61, 0x6d, + 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, + 0x04, 0x0a, 0x02, 0xcc, 0x01, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, + 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/platform/iam/v1/group_invites.platform.proto b/proto/platform/iam/v1/group_invites.platform.proto index 14c162c1..c7f6ae8a 100644 --- a/proto/platform/iam/v1/group_invites.platform.proto +++ b/proto/platform/iam/v1/group_invites.platform.proto @@ -138,6 +138,8 @@ message StoredGroupInvite { string email = 5; // created_at is the timestamp for when the invite was created. google.protobuf.Timestamp created_at = 6; + // single_use indicates whether or not the invite will be deleted after a user joins the group. + bool single_use = 7; } message GroupInviteList { @@ -153,6 +155,8 @@ message GroupInviteRequest { string role = 3; // email is the exact email address that may accept this invite code, if specified. string email = 4; + // if single_use is set to true, then the invite will be deleted after a user joins the group. + bool single_use = 5; } message DeleteGroupInviteRequest { From 04e3c4052ae19d4807ab322b9f209cb50bbd2102 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Thu, 11 Apr 2024 09:42:36 -0700 Subject: [PATCH 20/41] Export b725cafefbc51003a6f05b812bf33922bba6dab9 Export: b725cafefbc51003a6f05b812bf33922bba6dab9 --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 3fc84f0c..dd377c12 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module chainguard.dev/sdk go 1.21.2 -toolchain go1.21.5 +toolchain go1.22.2 require ( chainguard.dev/go-grpc-kit v0.17.2 From bb00569ff3e66e0224cdc0411546d93c8eabb14e Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Thu, 11 Apr 2024 15:12:15 -0700 Subject: [PATCH 21/41] Export 5c7e6ebe6bd648c5c36608d22c6d3e1feaadae5d Export: 5c7e6ebe6bd648c5c36608d22c6d3e1feaadae5d --- auth/token/token_test.go | 2 +- go.mod | 137 +++++++++-------- go.sum | 310 ++++++++++++++++++--------------------- 3 files changed, 213 insertions(+), 236 deletions(-) diff --git a/auth/token/token_test.go b/auth/token/token_test.go index b414d239..6a078fea 100644 --- a/auth/token/token_test.go +++ b/auth/token/token_test.go @@ -14,8 +14,8 @@ import ( "testing" "time" + "github.com/go-jose/go-jose/v3/jwt" "github.com/google/go-cmp/cmp" - "gopkg.in/square/go-jose.v2/jwt" "chainguard.dev/go-oidctest/pkg/oidctest" ) diff --git a/go.mod b/go.mod index dd377c12..d4bf5dfa 100644 --- a/go.mod +++ b/go.mod @@ -1,31 +1,29 @@ module chainguard.dev/sdk -go 1.21.2 - -toolchain go1.22.2 +go 1.22.2 require ( chainguard.dev/go-grpc-kit v0.17.2 - chainguard.dev/go-oidctest v0.2.0 - github.com/aws/aws-sdk-go-v2 v1.24.1 + chainguard.dev/go-oidctest v0.3.1 + github.com/aws/aws-sdk-go-v2 v1.26.0 github.com/bits-and-blooms/bitset v1.13.0 github.com/chainguard-dev/clog v1.3.1 github.com/cloudevents/sdk-go/v2 v2.15.2 - github.com/coreos/go-oidc/v3 v3.9.0 + github.com/coreos/go-oidc/v3 v3.10.0 + github.com/go-jose/go-jose/v3 v3.0.3 github.com/google/go-cmp v0.6.0 github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 github.com/microcosm-cc/bluemonday v1.0.26 - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/russross/blackfriday/v2 v2.1.0 github.com/sigstore/policy-controller v0.8.4 - go.uber.org/zap v1.26.0 + go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 - golang.org/x/oauth2 v0.17.0 - google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe - google.golang.org/grpc v1.61.1 + golang.org/x/oauth2 v0.19.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 + google.golang.org/grpc v1.62.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 google.golang.org/protobuf v1.33.0 - gopkg.in/square/go-jose.v2 v2.6.0 k8s.io/api v0.29.1 k8s.io/apimachinery v0.29.1 knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845 @@ -33,30 +31,30 @@ require ( ) require ( - cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go/compute v1.25.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.5 // indirect - cloud.google.com/go/kms v1.15.5 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 // indirect + cloud.google.com/go/iam v1.1.6 // indirect + cloud.google.com/go/kms v1.15.8 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect + github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 // indirect - github.com/aws/aws-sdk-go v1.50.1 // indirect - github.com/aws/aws-sdk-go-v2/config v1.26.6 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.16.16 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 // indirect - github.com/aws/aws-sdk-go-v2/service/kms v1.27.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 // indirect - github.com/aws/smithy-go v1.19.0 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect + github.com/aws/aws-sdk-go v1.51.6 // indirect + github.com/aws/aws-sdk-go-v2/config v1.27.9 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.9 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.0 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.6 // indirect + github.com/aws/aws-sdk-go-v2/service/kms v1.30.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.20.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.3 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.28.5 // indirect + github.com/aws/smithy-go v1.20.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blendle/zapdriver v1.3.1 // indirect @@ -65,21 +63,22 @@ require ( github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/evanphx/json-patch/v5 v5.7.0 // indirect - github.com/fatih/color v1.13.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-jose/go-jose/v3 v3.0.3 // indirect - github.com/go-logr/logr v1.3.0 // indirect + github.com/go-jose/go-jose/v4 v4.0.1 // indirect + github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v5 v5.0.0 // indirect + github.com/golang-jwt/jwt/v5 v5.2.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/go-containerregistry v0.18.0 // indirect + github.com/google/go-containerregistry v0.19.1 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/s2a-go v0.1.7 // indirect - github.com/google/uuid v1.5.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.0 // indirect + github.com/googleapis/gax-go/v2 v2.12.3 // indirect github.com/gorilla/css v1.0.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 // indirect @@ -92,63 +91,61 @@ require ( github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect github.com/hashicorp/go-sockaddr v1.0.6 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hashicorp/vault/api v1.10.0 // indirect + github.com/hashicorp/vault/api v1.12.2 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jellydator/ttlcache/v3 v3.1.1 // indirect + github.com/jellydator/ttlcache/v3 v3.2.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 // indirect - github.com/mattn/go-colorable v0.1.9 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.17.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/client_golang v1.19.0 // indirect + github.com/prometheus/client_model v0.6.0 // indirect + github.com/prometheus/common v0.51.1 // indirect github.com/prometheus/procfs v0.12.0 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect - github.com/sigstore/sigstore v1.8.1 // indirect - github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.1 // indirect - github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.1 // indirect - github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.1 // indirect - github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.1 // indirect + github.com/sigstore/sigstore v1.8.3 // indirect + github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.3 // indirect + github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.3 // indirect + github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.3 // indirect + github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.3 // indirect github.com/spf13/cobra v1.8.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/testify v1.9.0 // indirect github.com/theupdateframework/go-tuf v0.7.0 // indirect github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect - go.opentelemetry.io/otel v1.21.0 // indirect - go.opentelemetry.io/otel/metric v1.21.0 // indirect - go.opentelemetry.io/otel/trace v1.21.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect + go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/otel/metric v1.24.0 // indirect + go.opentelemetry.io/otel/sdk v1.24.0 // indirect + go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.21.0 // indirect - golang.org/x/net v0.21.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/net v0.22.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/term v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.19.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/api v0.156.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect + google.golang.org/api v0.172.0 // indirect + google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/client-go v0.29.1 // indirect - k8s.io/klog/v2 v2.110.1 // indirect + k8s.io/klog/v2 v2.120.1 // indirect k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/release-utils v0.7.7 // indirect diff --git a/go.sum b/go.sum index 8dd78e3a..e5cfb940 100644 --- a/go.sum +++ b/go.sum @@ -1,61 +1,61 @@ chainguard.dev/go-grpc-kit v0.17.2 h1:WVYmCjDncj1MkEiU4qq7nIgzyqlCU+qyk0lJvTJ09bs= chainguard.dev/go-grpc-kit v0.17.2/go.mod h1:uZTFtFzAGyVFHhJexiHbna4N5rHQU7aUXPwytlGhqz4= -chainguard.dev/go-oidctest v0.2.0 h1:03EuCjzAjbCvIOpSA+135g51Wdefz3UgQ8OtfSFQKCI= -chainguard.dev/go-oidctest v0.2.0/go.mod h1:1qO3asevouDqgMw4sgaVSzXqgDZQN7B6PtxLoUTzndo= +chainguard.dev/go-oidctest v0.3.1 h1:Q1OvIVIcl+i0hqgmrXZLeDhSjtDjbnLEBASoTbhyuBY= +chainguard.dev/go-oidctest v0.3.1/go.mod h1:TDN6MPJ6BEzWtorS9/dHzzGiaBpPRnRONv2SE0mqitU= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.111.0 h1:YHLKNupSD1KqjDbQ3+LVdQ81h/UJbJyZG203cEfnQgM= -cloud.google.com/go v0.111.0/go.mod h1:0mibmpKP1TyOOFYQY5izo0LnT+ecvOQ0Sg3OdmMiNRU= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= +cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= +cloud.google.com/go/compute v1.25.0 h1:H1/4SqSUhjPFE7L5ddzHOfY2bCAvjwNRZPNl6Ni5oYU= +cloud.google.com/go/compute v1.25.0/go.mod h1:GR7F0ZPZH8EhChlMo9FkLd7eUTwEymjqQagxzilIxIE= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= -cloud.google.com/go/kms v1.15.5 h1:pj1sRfut2eRbD9pFRjNnPNg/CzJPuQAzUujMIM1vVeM= -cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 h1:MyVTgWR8qd/Jw1Le0NZebGBUCLbtak3bJ3z1OlqZBpw= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1/go.mod h1:GpPjLhVR9dnUoJMyHWSPy71xY9/lcmpzIPZXmF0FCVY= +cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/kms v1.15.8 h1:szIeDCowID8th2i8XE4uRev5PMxQFqW+JjwYxL9h6xs= +cloud.google.com/go/kms v1.15.8/go.mod h1:WoUHcDjD9pluCg7pNds131awnH429QGvRM3N/4MyoVs= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0 h1:DRiANoJTiW6obBQe3SqZizkuV1PEgfiiGivmVocDy64= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0/go.mod h1:qLIye2hwb/ZouqhpSD9Zn3SJipvpEnz1Ywl3VUk9Y0s= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 h1:D3occbWoio4EBLkbkevetNMAVX197GkzbUMtqjGWn80= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0/go.mod h1:bTSOgj05NGRuHHhQwAdPnYr9TOdNmKlZTgGLL6nyAdI= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 h1:hVeq+yCyUi+MsoO/CU95yqCIcdzra5ovzk8Q2BBpV2M= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= +github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aws/aws-sdk-go v1.50.1 h1:AwnLUM7TcH9vMZqA4TcDKmGfLmDW5VXwT5tPH6kXylo= -github.com/aws/aws-sdk-go v1.50.1/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= -github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU= -github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4= -github.com/aws/aws-sdk-go-v2/config v1.26.6 h1:Z/7w9bUqlRI0FFQpetVuFYEsjzE3h7fpU6HuGmfPL/o= -github.com/aws/aws-sdk-go-v2/config v1.26.6/go.mod h1:uKU6cnDmYCvJ+pxO9S4cWDb2yWWIH5hra+32hVh1MI4= -github.com/aws/aws-sdk-go-v2/credentials v1.16.16 h1:8q6Rliyv0aUFAVtzaldUEcS+T5gbadPbWdV1WcAddK8= -github.com/aws/aws-sdk-go-v2/credentials v1.16.16/go.mod h1:UHVZrdUsv63hPXFo1H7c5fEneoVo9UXiz36QG1GEPi0= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11 h1:c5I5iH+DZcH3xOIMlz3/tCKJDaHFwYEmxvlh2fAcFo8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.11/go.mod h1:cRrYDYAMUohBJUtUnOhydaMHtiK/1NZ0Otc9lIb6O0Y= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3 h1:n3GDfwqF2tzEkXlv5cuy4iy7LpKDtqDMcNLfZDu9rls= -github.com/aws/aws-sdk-go-v2/internal/ini v1.7.3/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4 h1:/b31bi3YVNlkzkBrm9LfpaKoaYZUxIAj4sHfOTmLfqw= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.4/go.mod h1:2aGXHFmbInwgP9ZfpmdIfOELL79zhdNYNmReK8qDfdQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10 h1:DBYTXwIGQSGs9w4jKm60F5dmCQ3EEruxdc0MFh+3EY4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.10/go.mod h1:wohMUQiFdzo0NtxbBg0mSRGZ4vL3n0dKjLTINdcIino= -github.com/aws/aws-sdk-go-v2/service/kms v1.27.9 h1:W9PbZAZAEcelhhjb7KuwUtf+Lbc+i7ByYJRuWLlnxyQ= -github.com/aws/aws-sdk-go-v2/service/kms v1.27.9/go.mod h1:2tFmR7fQnOdQlM2ZCEPpFnBIQD1U8wmXmduBgZbOag0= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.7 h1:eajuO3nykDPdYicLlP3AGgOyVN3MOlFmZv7WGTuJPow= -github.com/aws/aws-sdk-go-v2/service/sso v1.18.7/go.mod h1:+mJNDdF+qiUlNKNC3fxn74WWNN+sOiGOEImje+3ScPM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7 h1:QPMJf+Jw8E1l7zqhZmMlFw6w1NmfkfiSK8mS4zOx3BA= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.21.7/go.mod h1:ykf3COxYI0UJmxcfcxcVuz7b6uADi1FkiUz6Eb7AgM8= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.7 h1:NzO4Vrau795RkUdSHKEwiR01FaGzGOH1EETJ+5QHnm0= -github.com/aws/aws-sdk-go-v2/service/sts v1.26.7/go.mod h1:6h2YuIoxaMSCFf5fi1EgZAwdfkGMgDY+DVfa61uLe4U= -github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM= -github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE= +github.com/aws/aws-sdk-go v1.51.6 h1:Ld36dn9r7P9IjU8WZSaswQ8Y/XUCRpewim5980DwYiU= +github.com/aws/aws-sdk-go v1.51.6/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go-v2 v1.26.0 h1:/Ce4OCiM3EkpW7Y+xUnfAFpchU78K7/Ug01sZni9PgA= +github.com/aws/aws-sdk-go-v2 v1.26.0/go.mod h1:35hUlJVYd+M++iLI3ALmVwMOyRYMmRqUXpTtRGW+K9I= +github.com/aws/aws-sdk-go-v2/config v1.27.9 h1:gRx/NwpNEFSk+yQlgmk1bmxxvQ5TyJ76CWXs9XScTqg= +github.com/aws/aws-sdk-go-v2/config v1.27.9/go.mod h1:dK1FQfpwpql83kbD873E9vz4FyAxuJtR22wzoXn3qq0= +github.com/aws/aws-sdk-go-v2/credentials v1.17.9 h1:N8s0/7yW+h8qR8WaRlPQeJ6czVMNQVNtNdUqf6cItao= +github.com/aws/aws-sdk-go-v2/credentials v1.17.9/go.mod h1:446YhIdmSV0Jf/SLafGZalQo+xr2iw7/fzXGDPTU1yQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.0 h1:af5YzcLf80tv4Em4jWVD75lpnOHSBkPUZxZfGkrI3HI= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.0/go.mod h1:nQ3how7DMnFMWiU1SpECohgC82fpn4cKZ875NDMmwtA= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.4 h1:0ScVK/4qZ8CIW0k8jOeFVsyS/sAiXpYxRBLolMkuLQM= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.4/go.mod h1:84KyjNZdHC6QZW08nfHI6yZgPd+qRgaWcYsyLUo3QY8= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.4 h1:sHmMWWX5E7guWEFQ9SVo6A3S4xpPrWnd77a6y4WM6PU= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.4/go.mod h1:WjpDrhWisWOIoS9n3nk67A3Ll1vfULJ9Kq6h29HTD48= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1/go.mod h1:JKpmtYhhPs7D97NL/ltqz7yCkERFW5dOlHyVl66ZYF8= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.6 h1:b+E7zIUHMmcB4Dckjpkapoy47W6C9QBv/zoUP+Hn8Kc= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.6/go.mod h1:S2fNV0rxrP78NhPbCZeQgY8H9jdDMeGtwcfZIRxzBqU= +github.com/aws/aws-sdk-go-v2/service/kms v1.30.0 h1:yS0JkEdV6h9JOo8sy2JSpjX+i7vsKifU8SIeHrqiDhU= +github.com/aws/aws-sdk-go-v2/service/kms v1.30.0/go.mod h1:+I8VUUSVD4p5ISQtzpgSva4I8cJ4SQ4b1dcBcof7O+g= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.3 h1:mnbuWHOcM70/OFUlZZ5rcdfA8PflGXXiefU/O+1S3+8= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.3/go.mod h1:5HFu51Elk+4oRBZVxmHrSds5jFXmFj8C3w7DVF2gnrs= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.3 h1:uLq0BKatTmDzWa/Nu4WO0M1AaQDaPpwTKAeByEc6WFM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.3/go.mod h1:b+qdhjnxj8GSR6t5YfphOffeoQSQ1KmpoVVuBn+PWxs= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.5 h1:J/PpTf/hllOjx8Xu9DMflff3FajfLxqM5+tepvVXmxg= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.5/go.mod h1:0ih0Z83YDH/QeQ6Ori2yGE2XvWYv/Xm+cZc01LC6oK0= +github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= +github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -77,12 +77,10 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cloudevents/sdk-go/v2 v2.15.2 h1:54+I5xQEnI73RBhWHxbI1XJcqOFOVJN85vb41+8mHUc= github.com/cloudevents/sdk-go/v2 v2.15.2/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101 h1:7To3pQ+pZo0i3dsWEbinPNFs5gPSBOsJtx3wTT94VBY= -github.com/cncf/xds/go v0.0.0-20231109132714-523115ebc101/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be h1:J5BL2kskAlV9ckgEsNQXscjIaLiOYiZ75d4e94E6dcQ= github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be/go.mod h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w= -github.com/coreos/go-oidc/v3 v3.9.0 h1:0J/ogVOd4y8P0f0xUh8l9t07xRP/d8tccvjHl2dcsSo= -github.com/coreos/go-oidc/v3 v3.9.0/go.mod h1:rTKz2PYwftcrtoCzV5g5kvfJoWcm0Mk8AF8y1iAQro4= +github.com/coreos/go-oidc/v3 v3.10.0 h1:tDnXHnLyiTVyT/2zLDGj09pFPkhND8Gl8lnTRhoEaJU= +github.com/coreos/go-oidc/v3 v3.10.0/go.mod h1:5j11xcw0D3+SGxn6Z/WFADsgcWVMyNAlSQupk0KK3ac= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -96,38 +94,38 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= -github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= +github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U= +github.com/go-jose/go-jose/v4 v4.0.1/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= -github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= -github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= -github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= -github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= -github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -143,8 +141,6 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 h1:0VpGH+cDhbDtdcweoyCVsF3fhN8kejK6rFe/2FFX2nU= @@ -155,24 +151,23 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.18.0 h1:ShE7erKNPqRh5ue6Z9DUOlk04WsnFWPO6YGr3OxnfoQ= -github.com/google/go-containerregistry v0.18.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= +github.com/google/go-containerregistry v0.19.1 h1:yMQ62Al6/V0Z7CqIrrS1iYoA5/oQCm88DeNujc7C1KY= +github.com/google/go-containerregistry v0.19.1/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= -github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA= +github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= @@ -203,12 +198,12 @@ github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEy github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hashicorp/vault/api v1.10.0 h1:/US7sIjWN6Imp4o/Rj1Ce2Nr5bki/AXi9vAW3p2tOJQ= -github.com/hashicorp/vault/api v1.10.0/go.mod h1:jo5Y/ET+hNyz+JnKDt8XLAdKs+AM0G5W0Vp1IrFI8N8= +github.com/hashicorp/vault/api v1.12.2 h1:7YkCTE5Ni90TcmYHDBExdt4WGJxhpzaHqR6uGbQb/rE= +github.com/hashicorp/vault/api v1.12.2/go.mod h1:LSGf1NGT1BnvFFnKVtnvcaLBM2Lz+gJdpL6HUYed8KE= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jellydator/ttlcache/v3 v3.1.1 h1:RCgYJqo3jgvhl+fEWvjNW8thxGWsgxi+TPhRir1Y9y8= -github.com/jellydator/ttlcache/v3 v3.1.1/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4= +github.com/jellydator/ttlcache/v3 v3.2.0 h1:6lqVJ8X3ZaUwvzENqPAobDsXNExfUJd61u++uW8a3LE= +github.com/jellydator/ttlcache/v3 v3.2.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmhodges/clock v1.2.0 h1:eq4kys+NI0PLngzaHEe7AmPT90XMGIEySD1JfV1PDIs= @@ -235,15 +230,11 @@ github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 h1:WGrKdjHtWC6 github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491/go.mod h1:o158RFmdEbYyIZmXAbrvmJWesbyxlLKee6X64VPVuOc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58= github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -260,8 +251,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -269,21 +260,21 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= +github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/client_model v0.6.0 h1:k1v3CzpSRUTrKMppY35TLwPvxHqBu0bYgxZzqGIgaos= +github.com/prometheus/client_model v0.6.0/go.mod h1:NTQHnmxFpouOD0DpvP4XujX3CdOAGQPoaGhyTchlyt8= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/common v0.51.1 h1:eIjN50Bwglz6a/c3hAgSMcofL3nD+nFQkV6Dd4DsQCw= +github.com/prometheus/common v0.51.1/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= @@ -292,16 +283,16 @@ github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbm github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= github.com/sigstore/policy-controller v0.8.4 h1:1ieS2W4GfcWfxvdE7lbfZlgW2dSnUinae2OoUM5/7Vg= github.com/sigstore/policy-controller v0.8.4/go.mod h1:jQtLtLpcwzIuRrCtNjWLWfSQlI4ompYOU9CW5dPi6t8= -github.com/sigstore/sigstore v1.8.1 h1:mAVposMb14oplk2h/bayPmIVdzbq2IhCgy4g6R0ZSjo= -github.com/sigstore/sigstore v1.8.1/go.mod h1:02SL1158BSj15bZyOFz7m+/nJzLZfFd9A8ab3Kz7w/E= -github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.1 h1:rEDdUefulkIQaMJyzLwtgPDLNXBIltBABiFYfb0YmgQ= -github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.1/go.mod h1:RCdYCc1IxCYWzh2IdzdA6Yf7JIY0cMRqH08fpQYechw= -github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.1 h1:DvRWG99QGWZC5mp42SEde2Xke/Q384Idnj2da7yB+Mk= -github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.1/go.mod h1:s13mo3a0UCQS3+PAUUZfvKe48sMDMsHk2GE1b2YfPcU= -github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.1 h1:lwdRsJv1UbBemuk7w5YfXAQilQxMoFevrzamdPbG0wY= -github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.1/go.mod h1:2OaSQ80EcdyVRSQ3T4d1lsc6Scopblsiq8U2AEk5K1A= -github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.1 h1:9Ki0qudKpc1FQdef7xHO2bkLyTuw+qNUpWRzjBEmF4c= -github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.1/go.mod h1:nhIgyu4YwwNgalIwTGsoAzam16jjAn3ADRSWKbWPwGI= +github.com/sigstore/sigstore v1.8.3 h1:G7LVXqL+ekgYtYdksBks9B38dPoIsbscjQJX/MGWkA4= +github.com/sigstore/sigstore v1.8.3/go.mod h1:mqbTEariiGA94cn6G3xnDiV6BD8eSLdL/eA7bvJ0fVs= +github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.3 h1:LTfPadUAo+PDRUbbdqbeSl2OuoFQwUFTnJ4stu+nwWw= +github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.3/go.mod h1:QV/Lxlxm0POyhfyBtIbTWxNeF18clMlkkyL9mu45y18= +github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.3 h1:xgbPRCr2npmmsuVVteJqi/ERw9+I13Wou7kq0Yk4D8g= +github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.3/go.mod h1:G4+I83FILPX6MtnoaUdmv/bRGEVtR3JdLeJa/kXdk/0= +github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.3 h1:vDl2fqPT0h3D/k6NZPlqnKFd1tz3335wm39qjvpZNJc= +github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.3/go.mod h1:9uOJXbXEXj+M6QjMKH5PaL5WDMu43rHfbIMgXzA8eKI= +github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.3 h1:h9G8j+Ds21zqqulDbA/R/ft64oQQIyp8S7wJYABYSlg= +github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.3/go.mod h1:zgCeHOuqF6k7A7TTEvftcA9V3FRzB7mrPtHOhXAQBnc= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= @@ -331,38 +322,38 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= -go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= -go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= -go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= -go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= -go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= +go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= -go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 h1:mchzmB1XO2pMaKFRqk/+MV3mgGG96aqaPXaMifQU47w= golang.org/x/exp v0.0.0-20231108232855-2478ac86f678/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= @@ -374,8 +365,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= +golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -390,11 +381,11 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= -golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= +golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -402,39 +393,34 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= @@ -453,30 +439,28 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.156.0 h1:yloYcGbBtVYjLKQe4enCunxvwn3s2w/XPrrhVf6MsvQ= -google.golang.org/api v0.156.0/go.mod h1:bUSmn4KFO0Q+69zo9CNIDp4Psi6BqM0np0CbzKRSiSY= +google.golang.org/api v0.172.0 h1:/1OcMZGPmW1rX2LCu2CmGUD1KXK1+pfzxotxyRUCCdk= +google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac h1:ZL/Teoy/ZGnzyrqK/Optxxp2pmVh+fmJ97slxSRyzUg= -google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k= -google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe h1:0poefMBYvYbs7g5UkjS6HcxBPaTRAmznle9jnxYoAI8= -google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe h1:bQnxqljG/wqi4NTXu2+DJ3n7APcEA882QZ1JvhQAq9o= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= +google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 h1:ImUcDPHjTrAqNhlOkSocDLfG9rrNHH7w7uoKWPaWZ8s= +google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7/go.mod h1:/3XmxOjePkvmKrHuBy4zNFw7IzxJXtAgdpXi8Ll990U= +google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 h1:oqta3O3AnlWbmIE3bFnWbu4bRxZjfbWCp0cKSuZh01E= +google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= @@ -484,8 +468,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.61.1 h1:kLAiWrZs7YeDM6MumDe7m3y4aM6wacLzM1Y/wiLP9XY= -google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= +google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -497,8 +481,6 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -509,8 +491,6 @@ gopkg.in/go-jose/go-jose.v2 v2.6.3 h1:nt80fvSDlhKWQgSWyHyy5CfmlQr+asih51R8PTWNKK gopkg.in/go-jose/go-jose.v2 v2.6.3/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= -gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -528,8 +508,8 @@ k8s.io/apimachinery v0.29.1 h1:KY4/E6km/wLBguvCZv8cKTeOwwOBqFNjwJIdMkMbbRc= k8s.io/apimachinery v0.29.1/go.mod h1:6HVkd1FwxIagpYrHSwJlQqZI3G9LfYWRPAkUvLnXTKU= k8s.io/client-go v0.29.1 h1:19B/+2NGEwnFLzt0uB5kNJnfTsbV8w6TgQRz9l7ti7A= k8s.io/client-go v0.29.1/go.mod h1:TDG/psL9hdet0TI9mGyHJSgRkW3H9JZk2dNEUS7bRks= -k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= -k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= +k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= +k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= From 323c81f2cb45c36e53fa1a209d82ed6d6f7a82b6 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Tue, 16 Apr 2024 12:02:53 -0700 Subject: [PATCH 22/41] Export 058979cecfc5402d74a542fe70967806e7ee47ca Export: 058979cecfc5402d74a542fe70967806e7ee47ca --- proto/platform/iam/v1/clients.go | 13 +- proto/platform/iam/v1/doc.go | 1 - proto/platform/iam/v1/sigstore.platform.pb.go | 803 ------------------ .../iam/v1/sigstore.platform.pb.gw.go | 501 ----------- proto/platform/iam/v1/sigstore.platform.proto | 134 --- .../iam/v1/sigstore.platform_grpc.pb.go | 221 ----- proto/platform/iam/v1/test/mock_client.go | 5 - proto/platform/iam/v1/test/mock_sigstore.go | 85 -- 8 files changed, 1 insertion(+), 1762 deletions(-) delete mode 100644 proto/platform/iam/v1/sigstore.platform.pb.go delete mode 100644 proto/platform/iam/v1/sigstore.platform.pb.gw.go delete mode 100644 proto/platform/iam/v1/sigstore.platform.proto delete mode 100644 proto/platform/iam/v1/sigstore.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/test/mock_sigstore.go diff --git a/proto/platform/iam/v1/clients.go b/proto/platform/iam/v1/clients.go index d1df1337..f27fab3d 100644 --- a/proto/platform/iam/v1/clients.go +++ b/proto/platform/iam/v1/clients.go @@ -35,8 +35,6 @@ type Clients interface { Policies() PoliciesClient - Sigstore() SigstoreServiceClient - Close() error } @@ -80,8 +78,6 @@ func NewClients(ctx context.Context, iamURL string, token string) (Clients, erro policy: NewPoliciesClient(conn), - sigstore: NewSigstoreServiceClient(conn), - conn: conn, }, nil } @@ -100,8 +96,7 @@ func NewClientsFromConnection(conn *grpc.ClientConn) Clients { subscription: events.NewSubscriptionsClient(conn), - policy: NewPoliciesClient(conn), - sigstore: NewSigstoreServiceClient(conn), + policy: NewPoliciesClient(conn), // conn is not set, this client struct does not own closing it. } @@ -122,8 +117,6 @@ type clients struct { policy PoliciesClient - sigstore SigstoreServiceClient - conn *grpc.ClientConn } @@ -167,10 +160,6 @@ func (c *clients) Policies() PoliciesClient { return c.policy } -func (c *clients) Sigstore() SigstoreServiceClient { - return c.sigstore -} - func (c *clients) Close() error { if c.conn != nil { return c.conn.Close() diff --git a/proto/platform/iam/v1/doc.go b/proto/platform/iam/v1/doc.go index 2dbc0d23..c65b13e5 100644 --- a/proto/platform/iam/v1/doc.go +++ b/proto/platform/iam/v1/doc.go @@ -12,7 +12,6 @@ SPDX-License-Identifier: Apache-2.0 //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. account_associations.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. policies.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. identity_providers.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. sigstore.platform.proto // Package v1 contains the v1 GRPC client and server definitions // for implementing IAM interactions for the Console. diff --git a/proto/platform/iam/v1/sigstore.platform.pb.go b/proto/platform/iam/v1/sigstore.platform.pb.go deleted file mode 100644 index 29503223..00000000 --- a/proto/platform/iam/v1/sigstore.platform.pb.go +++ /dev/null @@ -1,803 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: sigstore.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type CreateSigstoreRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // parent_id, The Group UIDP path under which the new sigstore instance is associated. - ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - // Sigstore is the sigstore instance to create; - Sigstore *Sigstore `protobuf:"bytes,2,opt,name=sigstore,proto3" json:"sigstore,omitempty"` -} - -func (x *CreateSigstoreRequest) Reset() { - *x = CreateSigstoreRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_sigstore_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateSigstoreRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateSigstoreRequest) ProtoMessage() {} - -func (x *CreateSigstoreRequest) ProtoReflect() protoreflect.Message { - mi := &file_sigstore_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateSigstoreRequest.ProtoReflect.Descriptor instead. -func (*CreateSigstoreRequest) Descriptor() ([]byte, []int) { - return file_sigstore_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *CreateSigstoreRequest) GetParentId() string { - if x != nil { - return x.ParentId - } - return "" -} - -func (x *CreateSigstoreRequest) GetSigstore() *Sigstore { - if x != nil { - return x.Sigstore - } - return nil -} - -type Sigstore struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is identifier of this specific sigstore instance. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name, human-readable name of the sigstore instance. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // description, human-readable description of the sigstore instance. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // certificate authority for this instance of sigstore - CertificateAuthority *CertificateAuthority `protobuf:"bytes,4,opt,name=certificate_authority,json=certificateAuthority,proto3" json:"certificate_authority,omitempty"` - // unique hostname of this sigstore instance - Hostname string `protobuf:"bytes,5,opt,name=hostname,proto3" json:"hostname,omitempty"` -} - -func (x *Sigstore) Reset() { - *x = Sigstore{} - if protoimpl.UnsafeEnabled { - mi := &file_sigstore_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Sigstore) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Sigstore) ProtoMessage() {} - -func (x *Sigstore) ProtoReflect() protoreflect.Message { - mi := &file_sigstore_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Sigstore.ProtoReflect.Descriptor instead. -func (*Sigstore) Descriptor() ([]byte, []int) { - return file_sigstore_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *Sigstore) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Sigstore) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Sigstore) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Sigstore) GetCertificateAuthority() *CertificateAuthority { - if x != nil { - return x.CertificateAuthority - } - return nil -} - -func (x *Sigstore) GetHostname() string { - if x != nil { - return x.Hostname - } - return "" -} - -type SigstoreList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Sigstore `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *SigstoreList) Reset() { - *x = SigstoreList{} - if protoimpl.UnsafeEnabled { - mi := &file_sigstore_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SigstoreList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SigstoreList) ProtoMessage() {} - -func (x *SigstoreList) ProtoReflect() protoreflect.Message { - mi := &file_sigstore_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SigstoreList.ProtoReflect.Descriptor instead. -func (*SigstoreList) Descriptor() ([]byte, []int) { - return file_sigstore_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *SigstoreList) GetItems() []*Sigstore { - if x != nil { - return x.Items - } - return nil -} - -type SigstoreFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // uidp filers records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` - // name is the exact name of the record. - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *SigstoreFilter) Reset() { - *x = SigstoreFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_sigstore_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SigstoreFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SigstoreFilter) ProtoMessage() {} - -func (x *SigstoreFilter) ProtoReflect() protoreflect.Message { - mi := &file_sigstore_platform_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 SigstoreFilter.ProtoReflect.Descriptor instead. -func (*SigstoreFilter) Descriptor() ([]byte, []int) { - return file_sigstore_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *SigstoreFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *SigstoreFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *SigstoreFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type DeleteSigstoreRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteSigstoreRequest) Reset() { - *x = DeleteSigstoreRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_sigstore_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteSigstoreRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteSigstoreRequest) ProtoMessage() {} - -func (x *DeleteSigstoreRequest) ProtoReflect() protoreflect.Message { - mi := &file_sigstore_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteSigstoreRequest.ProtoReflect.Descriptor instead. -func (*DeleteSigstoreRequest) Descriptor() ([]byte, []int) { - return file_sigstore_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *DeleteSigstoreRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type CertificateAuthority struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Ca: - // - // *CertificateAuthority_KmsCa - // *CertificateAuthority_GoogleCa - Ca isCertificateAuthority_Ca `protobuf_oneof:"ca"` -} - -func (x *CertificateAuthority) Reset() { - *x = CertificateAuthority{} - if protoimpl.UnsafeEnabled { - mi := &file_sigstore_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateAuthority) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateAuthority) ProtoMessage() {} - -func (x *CertificateAuthority) ProtoReflect() protoreflect.Message { - mi := &file_sigstore_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateAuthority.ProtoReflect.Descriptor instead. -func (*CertificateAuthority) Descriptor() ([]byte, []int) { - return file_sigstore_platform_proto_rawDescGZIP(), []int{5} -} - -func (m *CertificateAuthority) GetCa() isCertificateAuthority_Ca { - if m != nil { - return m.Ca - } - return nil -} - -func (x *CertificateAuthority) GetKmsCa() *KMSCA { - if x, ok := x.GetCa().(*CertificateAuthority_KmsCa); ok { - return x.KmsCa - } - return nil -} - -func (x *CertificateAuthority) GetGoogleCa() *GoogleCA { - if x, ok := x.GetCa().(*CertificateAuthority_GoogleCa); ok { - return x.GoogleCa - } - return nil -} - -type isCertificateAuthority_Ca interface { - isCertificateAuthority_Ca() -} - -type CertificateAuthority_KmsCa struct { - // kmsca is a KMS-based CA that requires a root cert and KMS signing key - KmsCa *KMSCA `protobuf:"bytes,1,opt,name=kms_ca,json=kmsCa,proto3,oneof"` -} - -type CertificateAuthority_GoogleCa struct { - // google_ca is the Google Certificate Authority service - GoogleCa *GoogleCA `protobuf:"bytes,2,opt,name=google_ca,json=googleCa,proto3,oneof"` -} - -func (*CertificateAuthority_KmsCa) isCertificateAuthority_Ca() {} - -func (*CertificateAuthority_GoogleCa) isCertificateAuthority_Ca() {} - -type KMSCA struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // key_ref is a unique reference to the signing key used for this CA - // most likely a KMS key prefixed with gcpkms://, awskms://, azurekms:// etc - // and the relevant resource name - KeyRef string `protobuf:"bytes,1,opt,name=key_ref,json=keyRef,proto3" json:"key_ref,omitempty"` - // cert_chain is the root certificate and (optional) chain - // in PEM-encoded format - CertChain string `protobuf:"bytes,2,opt,name=cert_chain,json=certChain,proto3" json:"cert_chain,omitempty"` -} - -func (x *KMSCA) Reset() { - *x = KMSCA{} - if protoimpl.UnsafeEnabled { - mi := &file_sigstore_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *KMSCA) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*KMSCA) ProtoMessage() {} - -func (x *KMSCA) ProtoReflect() protoreflect.Message { - mi := &file_sigstore_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use KMSCA.ProtoReflect.Descriptor instead. -func (*KMSCA) Descriptor() ([]byte, []int) { - return file_sigstore_platform_proto_rawDescGZIP(), []int{6} -} - -func (x *KMSCA) GetKeyRef() string { - if x != nil { - return x.KeyRef - } - return "" -} - -func (x *KMSCA) GetCertChain() string { - if x != nil { - return x.CertChain - } - return "" -} - -type GoogleCA struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ref is a unique reference to the Google CA service in the format - // projects//locations// - Ref string `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"` -} - -func (x *GoogleCA) Reset() { - *x = GoogleCA{} - if protoimpl.UnsafeEnabled { - mi := &file_sigstore_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GoogleCA) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GoogleCA) ProtoMessage() {} - -func (x *GoogleCA) ProtoReflect() protoreflect.Message { - mi := &file_sigstore_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GoogleCA.ProtoReflect.Descriptor instead. -func (*GoogleCA) Descriptor() ([]byte, []int) { - return file_sigstore_platform_proto_rawDescGZIP(), []int{7} -} - -func (x *GoogleCA) GetRef() string { - if x != nil { - return x.Ref - } - return "" -} - -var File_sigstore_platform_proto protoreflect.FileDescriptor - -var file_sigstore_platform_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7b, 0x0a, - 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, - 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x08, 0x73, - 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x52, 0x08, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0xd8, 0x01, 0x0a, 0x08, 0x53, - 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x15, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x14, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, - 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x47, 0x0a, 0x0c, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, - 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x70, - 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x2f, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x97, 0x01, 0x0a, 0x14, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x37, 0x0a, 0x06, 0x6b, 0x6d, - 0x73, 0x5f, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x4b, 0x4d, 0x53, 0x43, 0x41, 0x48, 0x00, 0x52, 0x05, 0x6b, 0x6d, - 0x73, 0x43, 0x61, 0x12, 0x40, 0x0a, 0x09, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x63, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x41, 0x48, 0x00, 0x52, 0x08, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x43, 0x61, 0x42, 0x04, 0x0a, 0x02, 0x63, 0x61, 0x22, 0x3f, 0x0a, 0x05, 0x4b, - 0x4d, 0x53, 0x43, 0x41, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x52, 0x65, 0x66, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22, 0x1c, 0x0a, 0x08, - 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x43, 0x41, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x65, 0x66, 0x32, 0xaf, 0x04, 0x0a, 0x0f, 0x53, - 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9a, - 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x3d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x08, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x1f, - 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa5, 0x0d, 0x12, 0x7e, 0x0a, 0x04, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, - 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xa7, 0x0d, 0x10, 0x01, 0x12, 0x7e, 0x0a, 0x06, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x2c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x73, - 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa8, 0x0d, 0x12, 0x7f, 0x0a, 0x06, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x53, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x1a, 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, - 0x73, 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa6, 0x0d, 0x42, 0x6a, 0x0a, 0x22, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, - 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x76, 0x31, 0x42, 0x18, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x53, - 0x69, 0x67, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, - 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_sigstore_platform_proto_rawDescOnce sync.Once - file_sigstore_platform_proto_rawDescData = file_sigstore_platform_proto_rawDesc -) - -func file_sigstore_platform_proto_rawDescGZIP() []byte { - file_sigstore_platform_proto_rawDescOnce.Do(func() { - file_sigstore_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_sigstore_platform_proto_rawDescData) - }) - return file_sigstore_platform_proto_rawDescData -} - -var file_sigstore_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_sigstore_platform_proto_goTypes = []interface{}{ - (*CreateSigstoreRequest)(nil), // 0: chainguard.platform.iam.CreateSigstoreRequest - (*Sigstore)(nil), // 1: chainguard.platform.iam.Sigstore - (*SigstoreList)(nil), // 2: chainguard.platform.iam.SigstoreList - (*SigstoreFilter)(nil), // 3: chainguard.platform.iam.SigstoreFilter - (*DeleteSigstoreRequest)(nil), // 4: chainguard.platform.iam.DeleteSigstoreRequest - (*CertificateAuthority)(nil), // 5: chainguard.platform.iam.CertificateAuthority - (*KMSCA)(nil), // 6: chainguard.platform.iam.KMSCA - (*GoogleCA)(nil), // 7: chainguard.platform.iam.GoogleCA - (*v1.UIDPFilter)(nil), // 8: chainguard.platform.common.UIDPFilter - (*emptypb.Empty)(nil), // 9: google.protobuf.Empty -} -var file_sigstore_platform_proto_depIdxs = []int32{ - 1, // 0: chainguard.platform.iam.CreateSigstoreRequest.sigstore:type_name -> chainguard.platform.iam.Sigstore - 5, // 1: chainguard.platform.iam.Sigstore.certificate_authority:type_name -> chainguard.platform.iam.CertificateAuthority - 1, // 2: chainguard.platform.iam.SigstoreList.items:type_name -> chainguard.platform.iam.Sigstore - 8, // 3: chainguard.platform.iam.SigstoreFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 6, // 4: chainguard.platform.iam.CertificateAuthority.kms_ca:type_name -> chainguard.platform.iam.KMSCA - 7, // 5: chainguard.platform.iam.CertificateAuthority.google_ca:type_name -> chainguard.platform.iam.GoogleCA - 0, // 6: chainguard.platform.iam.SigstoreService.Create:input_type -> chainguard.platform.iam.CreateSigstoreRequest - 3, // 7: chainguard.platform.iam.SigstoreService.List:input_type -> chainguard.platform.iam.SigstoreFilter - 4, // 8: chainguard.platform.iam.SigstoreService.Delete:input_type -> chainguard.platform.iam.DeleteSigstoreRequest - 1, // 9: chainguard.platform.iam.SigstoreService.Update:input_type -> chainguard.platform.iam.Sigstore - 1, // 10: chainguard.platform.iam.SigstoreService.Create:output_type -> chainguard.platform.iam.Sigstore - 2, // 11: chainguard.platform.iam.SigstoreService.List:output_type -> chainguard.platform.iam.SigstoreList - 9, // 12: chainguard.platform.iam.SigstoreService.Delete:output_type -> google.protobuf.Empty - 1, // 13: chainguard.platform.iam.SigstoreService.Update:output_type -> chainguard.platform.iam.Sigstore - 10, // [10:14] is the sub-list for method output_type - 6, // [6:10] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name -} - -func init() { file_sigstore_platform_proto_init() } -func file_sigstore_platform_proto_init() { - if File_sigstore_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_sigstore_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateSigstoreRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sigstore_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Sigstore); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sigstore_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SigstoreList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sigstore_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SigstoreFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sigstore_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteSigstoreRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sigstore_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateAuthority); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sigstore_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KMSCA); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_sigstore_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GoogleCA); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_sigstore_platform_proto_msgTypes[5].OneofWrappers = []interface{}{ - (*CertificateAuthority_KmsCa)(nil), - (*CertificateAuthority_GoogleCa)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_sigstore_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 8, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_sigstore_platform_proto_goTypes, - DependencyIndexes: file_sigstore_platform_proto_depIdxs, - MessageInfos: file_sigstore_platform_proto_msgTypes, - }.Build() - File_sigstore_platform_proto = out.File - file_sigstore_platform_proto_rawDesc = nil - file_sigstore_platform_proto_goTypes = nil - file_sigstore_platform_proto_depIdxs = nil -} diff --git a/proto/platform/iam/v1/sigstore.platform.pb.gw.go b/proto/platform/iam/v1/sigstore.platform.pb.gw.go deleted file mode 100644 index db3145ae..00000000 --- a/proto/platform/iam/v1/sigstore.platform.pb.gw.go +++ /dev/null @@ -1,501 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: sigstore.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_SigstoreService_Create_0(ctx context.Context, marshaler runtime.Marshaler, client SigstoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateSigstoreRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Sigstore); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SigstoreService_Create_0(ctx context.Context, marshaler runtime.Marshaler, server SigstoreServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateSigstoreRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Sigstore); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_SigstoreService_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_SigstoreService_List_0(ctx context.Context, marshaler runtime.Marshaler, client SigstoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SigstoreFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SigstoreService_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SigstoreService_List_0(ctx context.Context, marshaler runtime.Marshaler, server SigstoreServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq SigstoreFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_SigstoreService_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_SigstoreService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client SigstoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteSigstoreRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SigstoreService_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server SigstoreServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteSigstoreRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -func request_SigstoreService_Update_0(ctx context.Context, marshaler runtime.Marshaler, client SigstoreServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Sigstore - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_SigstoreService_Update_0(ctx context.Context, marshaler runtime.Marshaler, server SigstoreServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Sigstore - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Update(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterSigstoreServiceHandlerServer registers the http handlers for service SigstoreService to "mux". -// UnaryRPC :call SigstoreServiceServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterSigstoreServiceHandlerFromEndpoint instead. -func RegisterSigstoreServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server SigstoreServiceServer) error { - - mux.Handle("POST", pattern_SigstoreService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Create", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SigstoreService_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SigstoreService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_SigstoreService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/List", runtime.WithHTTPPathPattern("/iam/v1/sigstore")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SigstoreService_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SigstoreService_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_SigstoreService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Delete", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SigstoreService_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SigstoreService_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_SigstoreService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Update", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_SigstoreService_Update_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SigstoreService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterSigstoreServiceHandlerFromEndpoint is same as RegisterSigstoreServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterSigstoreServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterSigstoreServiceHandler(ctx, mux, conn) -} - -// RegisterSigstoreServiceHandler registers the http handlers for service SigstoreService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterSigstoreServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterSigstoreServiceHandlerClient(ctx, mux, NewSigstoreServiceClient(conn)) -} - -// RegisterSigstoreServiceHandlerClient registers the http handlers for service SigstoreService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "SigstoreServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "SigstoreServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "SigstoreServiceClient" to call the correct interceptors. -func RegisterSigstoreServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client SigstoreServiceClient) error { - - mux.Handle("POST", pattern_SigstoreService_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Create", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SigstoreService_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SigstoreService_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_SigstoreService_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/List", runtime.WithHTTPPathPattern("/iam/v1/sigstore")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SigstoreService_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SigstoreService_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_SigstoreService_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Delete", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SigstoreService_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SigstoreService_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_SigstoreService_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.SigstoreService/Update", runtime.WithHTTPPathPattern("/iam/v1/sigstore/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_SigstoreService_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_SigstoreService_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_SigstoreService_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "sigstore", "parent_id"}, "")) - - pattern_SigstoreService_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "sigstore"}, "")) - - pattern_SigstoreService_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "sigstore", "id"}, "")) - - pattern_SigstoreService_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "sigstore", "id"}, "")) -) - -var ( - forward_SigstoreService_Create_0 = runtime.ForwardResponseMessage - - forward_SigstoreService_List_0 = runtime.ForwardResponseMessage - - forward_SigstoreService_Delete_0 = runtime.ForwardResponseMessage - - forward_SigstoreService_Update_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/iam/v1/sigstore.platform.proto b/proto/platform/iam/v1/sigstore.platform.proto deleted file mode 100644 index f1613ae5..00000000 --- a/proto/platform/iam/v1/sigstore.platform.proto +++ /dev/null @@ -1,134 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.iam.v1"; -option java_outer_classname = "PlatformIAMSigstoreProto"; - -package chainguard.platform.iam; - -import "google/protobuf/empty.proto"; -import "google/api/annotations.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service SigstoreService { - rpc Create(CreateSigstoreRequest) returns (Sigstore) { - option (google.api.http) = { - post: "/iam/v1/sigstore/{parent_id=**}" - body: "sigstore" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_SIGSTORE_CREATE] - } - }; - } - - rpc List(SigstoreFilter) returns (SigstoreList) { - option (google.api.http) = { - get: "/iam/v1/sigstore" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_SIGSTORE_LIST] - unscoped: true - } - }; - } - - rpc Delete(DeleteSigstoreRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/iam/v1/sigstore/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_SIGSTORE_DELETE] - } - }; - } - - rpc Update(Sigstore) returns (Sigstore) { - option (google.api.http) = { - put: "/iam/v1/sigstore/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_SIGSTORE_UPDATE] - } - }; - } -} - -message CreateSigstoreRequest { - // parent_id, The Group UIDP path under which the new sigstore instance is associated. - string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; - - // Sigstore is the sigstore instance to create; - Sigstore sigstore = 2; -} - -message Sigstore { - // id is identifier of this specific sigstore instance. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - - // name, human-readable name of the sigstore instance. - string name = 2; - - // description, human-readable description of the sigstore instance. - string description = 3; - - // certificate authority for this instance of sigstore - CertificateAuthority certificate_authority = 4; - - // unique hostname of this sigstore instance - string hostname = 5; -} - -message SigstoreList { - repeated Sigstore items = 1; -} - -message SigstoreFilter { - // id is the exact UIDP of the record. - string id = 1; - - // uidp filers records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 2; - - // name is the exact name of the record. - string name = 3; -} - -message DeleteSigstoreRequest { - // id is the exact UIDP of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message CertificateAuthority { - oneof ca { - // kmsca is a KMS-based CA that requires a root cert and KMS signing key - KMSCA kms_ca = 1; - - // google_ca is the Google Certificate Authority service - GoogleCA google_ca =2; - } -} - -message KMSCA { - // key_ref is a unique reference to the signing key used for this CA - // most likely a KMS key prefixed with gcpkms://, awskms://, azurekms:// etc - // and the relevant resource name - string key_ref = 1; - - // cert_chain is the root certificate and (optional) chain - // in PEM-encoded format - string cert_chain = 2; -} - -message GoogleCA { - // ref is a unique reference to the Google CA service in the format - // projects//locations// - string ref = 1; -} diff --git a/proto/platform/iam/v1/sigstore.platform_grpc.pb.go b/proto/platform/iam/v1/sigstore.platform_grpc.pb.go deleted file mode 100644 index 97750f65..00000000 --- a/proto/platform/iam/v1/sigstore.platform_grpc.pb.go +++ /dev/null @@ -1,221 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: sigstore.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - SigstoreService_Create_FullMethodName = "/chainguard.platform.iam.SigstoreService/Create" - SigstoreService_List_FullMethodName = "/chainguard.platform.iam.SigstoreService/List" - SigstoreService_Delete_FullMethodName = "/chainguard.platform.iam.SigstoreService/Delete" - SigstoreService_Update_FullMethodName = "/chainguard.platform.iam.SigstoreService/Update" -) - -// SigstoreServiceClient is the client API for SigstoreService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type SigstoreServiceClient interface { - Create(ctx context.Context, in *CreateSigstoreRequest, opts ...grpc.CallOption) (*Sigstore, error) - List(ctx context.Context, in *SigstoreFilter, opts ...grpc.CallOption) (*SigstoreList, error) - Delete(ctx context.Context, in *DeleteSigstoreRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - Update(ctx context.Context, in *Sigstore, opts ...grpc.CallOption) (*Sigstore, error) -} - -type sigstoreServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewSigstoreServiceClient(cc grpc.ClientConnInterface) SigstoreServiceClient { - return &sigstoreServiceClient{cc} -} - -func (c *sigstoreServiceClient) Create(ctx context.Context, in *CreateSigstoreRequest, opts ...grpc.CallOption) (*Sigstore, error) { - out := new(Sigstore) - err := c.cc.Invoke(ctx, SigstoreService_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *sigstoreServiceClient) List(ctx context.Context, in *SigstoreFilter, opts ...grpc.CallOption) (*SigstoreList, error) { - out := new(SigstoreList) - err := c.cc.Invoke(ctx, SigstoreService_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *sigstoreServiceClient) Delete(ctx context.Context, in *DeleteSigstoreRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, SigstoreService_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *sigstoreServiceClient) Update(ctx context.Context, in *Sigstore, opts ...grpc.CallOption) (*Sigstore, error) { - out := new(Sigstore) - err := c.cc.Invoke(ctx, SigstoreService_Update_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// SigstoreServiceServer is the server API for SigstoreService service. -// All implementations must embed UnimplementedSigstoreServiceServer -// for forward compatibility -type SigstoreServiceServer interface { - Create(context.Context, *CreateSigstoreRequest) (*Sigstore, error) - List(context.Context, *SigstoreFilter) (*SigstoreList, error) - Delete(context.Context, *DeleteSigstoreRequest) (*emptypb.Empty, error) - Update(context.Context, *Sigstore) (*Sigstore, error) - mustEmbedUnimplementedSigstoreServiceServer() -} - -// UnimplementedSigstoreServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSigstoreServiceServer struct { -} - -func (UnimplementedSigstoreServiceServer) Create(context.Context, *CreateSigstoreRequest) (*Sigstore, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedSigstoreServiceServer) List(context.Context, *SigstoreFilter) (*SigstoreList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedSigstoreServiceServer) Delete(context.Context, *DeleteSigstoreRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedSigstoreServiceServer) Update(context.Context, *Sigstore) (*Sigstore, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} -func (UnimplementedSigstoreServiceServer) mustEmbedUnimplementedSigstoreServiceServer() {} - -// UnsafeSigstoreServiceServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to SigstoreServiceServer will -// result in compilation errors. -type UnsafeSigstoreServiceServer interface { - mustEmbedUnimplementedSigstoreServiceServer() -} - -func RegisterSigstoreServiceServer(s grpc.ServiceRegistrar, srv SigstoreServiceServer) { - s.RegisterService(&SigstoreService_ServiceDesc, srv) -} - -func _SigstoreService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateSigstoreRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SigstoreServiceServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SigstoreService_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SigstoreServiceServer).Create(ctx, req.(*CreateSigstoreRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SigstoreService_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(SigstoreFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SigstoreServiceServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SigstoreService_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SigstoreServiceServer).List(ctx, req.(*SigstoreFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _SigstoreService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteSigstoreRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SigstoreServiceServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SigstoreService_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SigstoreServiceServer).Delete(ctx, req.(*DeleteSigstoreRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SigstoreService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Sigstore) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SigstoreServiceServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: SigstoreService_Update_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SigstoreServiceServer).Update(ctx, req.(*Sigstore)) - } - return interceptor(ctx, in, info, handler) -} - -// SigstoreService_ServiceDesc is the grpc.ServiceDesc for SigstoreService service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var SigstoreService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.iam.SigstoreService", - HandlerType: (*SigstoreServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _SigstoreService_Create_Handler, - }, - { - MethodName: "List", - Handler: _SigstoreService_List_Handler, - }, - { - MethodName: "Delete", - Handler: _SigstoreService_Delete_Handler, - }, - { - MethodName: "Update", - Handler: _SigstoreService_Update_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "sigstore.platform.proto", -} diff --git a/proto/platform/iam/v1/test/mock_client.go b/proto/platform/iam/v1/test/mock_client.go index f852d27a..90ccc1e6 100644 --- a/proto/platform/iam/v1/test/mock_client.go +++ b/proto/platform/iam/v1/test/mock_client.go @@ -23,7 +23,6 @@ type MockIAMClient struct { GroupAccountAssociationsClient MockGroupAccountAssociationsClient SubscriptionsClient MockSubscriptionsClient PoliciesClient MockPoliciesClient - SigstoreClient MockSigstoreClient } var _ iam.Clients = (*MockIAMClient)(nil) @@ -68,10 +67,6 @@ func (m MockIAMClient) Policies() iam.PoliciesClient { return &m.PoliciesClient } -func (m MockIAMClient) Sigstore() iam.SigstoreServiceClient { - return &m.SigstoreClient -} - func (m MockIAMClient) Close() error { return m.OnClose } diff --git a/proto/platform/iam/v1/test/mock_sigstore.go b/proto/platform/iam/v1/test/mock_sigstore.go deleted file mode 100644 index 7433bc6a..00000000 --- a/proto/platform/iam/v1/test/mock_sigstore.go +++ /dev/null @@ -1,85 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - iam "chainguard.dev/sdk/proto/platform/iam/v1" - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" -) - -var _ iam.SigstoreServiceClient = (*MockSigstoreClient)(nil) - -type MockSigstoreClient struct { - OnCreate []SigstoreOnCreate - OnUpdate []SigstoreOnUpdate - OnDelete []SigstoreOnDelete - OnList []SigstoreOnList -} - -type SigstoreOnCreate struct { - Given *iam.CreateSigstoreRequest - Created *iam.Sigstore - Error error -} - -type SigstoreOnUpdate struct { - Given *iam.Sigstore - Updated *iam.Sigstore - Error error -} - -type SigstoreOnDelete struct { - Given *iam.DeleteSigstoreRequest - Error error -} - -type SigstoreOnList struct { - Given *iam.SigstoreFilter - List *iam.SigstoreList - Error error -} - -func (m MockSigstoreClient) Create(_ context.Context, given *iam.CreateSigstoreRequest, _ ...grpc.CallOption) (*iam.Sigstore, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockSigstoreClient) Update(_ context.Context, given *iam.Sigstore, _ ...grpc.CallOption) (*iam.Sigstore, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockSigstoreClient) Delete(_ context.Context, given *iam.DeleteSigstoreRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockSigstoreClient) List(_ context.Context, given *iam.SigstoreFilter, _ ...grpc.CallOption) (*iam.SigstoreList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} From 738742d3dce5adc0df1ed4b6c3bc8265cc8319f1 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Thu, 18 Apr 2024 08:40:01 -0700 Subject: [PATCH 23/41] Export b7d0875ff1ea979b66c46cfca0459c9f5ba10868 Export: b7d0875ff1ea979b66c46cfca0459c9f5ba10868 --- proto/platform/tenant/v1/clients.go | 26 - proto/platform/tenant/v1/doc.go | 3 - .../tenant/v1/namespace.platform.pb.go | 395 -------------- .../tenant/v1/namespace.platform.proto | 61 --- .../tenant/v1/namespace.platform_grpc.pb.go | 109 ---- proto/platform/tenant/v1/node.platform.pb.go | 499 ------------------ proto/platform/tenant/v1/node.platform.proto | 78 --- .../tenant/v1/node.platform_grpc.pb.go | 109 ---- proto/platform/tenant/v1/test/mock_client.go | 15 - .../tenant/v1/test/mock_namespaces.go | 38 -- proto/platform/tenant/v1/test/mock_nodes.go | 38 -- .../platform/tenant/v1/test/mock_workloads.go | 38 -- .../tenant/v1/workload.platform.pb.go | 436 --------------- .../tenant/v1/workload.platform.proto | 71 --- .../tenant/v1/workload.platform_grpc.pb.go | 109 ---- 15 files changed, 2025 deletions(-) delete mode 100644 proto/platform/tenant/v1/namespace.platform.pb.go delete mode 100644 proto/platform/tenant/v1/namespace.platform.proto delete mode 100644 proto/platform/tenant/v1/namespace.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/node.platform.pb.go delete mode 100644 proto/platform/tenant/v1/node.platform.proto delete mode 100644 proto/platform/tenant/v1/node.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/test/mock_namespaces.go delete mode 100644 proto/platform/tenant/v1/test/mock_nodes.go delete mode 100644 proto/platform/tenant/v1/test/mock_workloads.go delete mode 100644 proto/platform/tenant/v1/workload.platform.pb.go delete mode 100644 proto/platform/tenant/v1/workload.platform.proto delete mode 100644 proto/platform/tenant/v1/workload.platform_grpc.pb.go diff --git a/proto/platform/tenant/v1/clients.go b/proto/platform/tenant/v1/clients.go index 3fc4389e..960cc14d 100644 --- a/proto/platform/tenant/v1/clients.go +++ b/proto/platform/tenant/v1/clients.go @@ -28,10 +28,6 @@ type Clients interface { PolicyResults() PolicyResultsClient VulnReports() VulnReportsClient - Nodes() NodesClient - Namespaces() NamespacesClient - Workloads() WorkloadsClient - Close() error } @@ -68,9 +64,6 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) vulnReports: NewVulnReportsClient(conn), risks: NewRisksClient(conn), signatures: NewSignaturesClient(conn), - nodes: NewNodesClient(conn), - namespaces: NewNamespacesClient(conn), - workloads: NewWorkloadsClient(conn), policyResults: NewPolicyResultsClient(conn), conn: conn, @@ -87,9 +80,6 @@ func NewClientsFromConnection(conn *grpc.ClientConn) Clients { risks: NewRisksClient(conn), signatures: NewSignaturesClient(conn), policyResults: NewPolicyResultsClient(conn), - nodes: NewNodesClient(conn), - namespaces: NewNamespacesClient(conn), - workloads: NewWorkloadsClient(conn), // conn is not set, this client struct does not own closing it. } } @@ -105,10 +95,6 @@ type clients struct { policyResults PolicyResultsClient vulnReports VulnReportsClient - nodes NodesClient - namespaces NamespacesClient - workloads WorkloadsClient - conn *grpc.ClientConn } @@ -140,18 +126,6 @@ func (c *clients) PolicyResults() PolicyResultsClient { return c.policyResults } -func (c *clients) Nodes() NodesClient { - return c.nodes -} - -func (c *clients) Namespaces() NamespacesClient { - return c.namespaces -} - -func (c *clients) Workloads() WorkloadsClient { - return c.workloads -} - func (c *clients) VulnReports() VulnReportsClient { return c.vulnReports } diff --git a/proto/platform/tenant/v1/doc.go b/proto/platform/tenant/v1/doc.go index 146b7989..b8468745 100644 --- a/proto/platform/tenant/v1/doc.go +++ b/proto/platform/tenant/v1/doc.go @@ -8,11 +8,8 @@ SPDX-License-Identifier: Apache-2.0 // //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. cluster.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative context.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative node.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative namespace.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative policy_results.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative signature.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative workload.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. record.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. risk.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. sbom.platform.proto diff --git a/proto/platform/tenant/v1/namespace.platform.pb.go b/proto/platform/tenant/v1/namespace.platform.pb.go deleted file mode 100644 index a68fcab2..00000000 --- a/proto/platform/tenant/v1/namespace.platform.pb.go +++ /dev/null @@ -1,395 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: namespace.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Namespace struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The Namespace UIDP at which this Namespace resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name of the Namespace. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // a short description of this Namespace. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // remote_id is the remote ID of this Namespace. - RemoteId string `protobuf:"bytes,4,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` - Labels string `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` - // last_seen tracks the timestamp at which this namespace was last seen. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` -} - -func (x *Namespace) Reset() { - *x = Namespace{} - if protoimpl.UnsafeEnabled { - mi := &file_namespace_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Namespace) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Namespace) ProtoMessage() {} - -func (x *Namespace) ProtoReflect() protoreflect.Message { - mi := &file_namespace_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Namespace.ProtoReflect.Descriptor instead. -func (*Namespace) Descriptor() ([]byte, []int) { - return file_namespace_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Namespace) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Namespace) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Namespace) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Namespace) GetRemoteId() string { - if x != nil { - return x.RemoteId - } - return "" -} - -func (x *Namespace) GetLabels() string { - if x != nil { - return x.Labels - } - return "" -} - -func (x *Namespace) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -type NamespaceList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Namespace `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *NamespaceList) Reset() { - *x = NamespaceList{} - if protoimpl.UnsafeEnabled { - mi := &file_namespace_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NamespaceList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NamespaceList) ProtoMessage() {} - -func (x *NamespaceList) ProtoReflect() protoreflect.Message { - mi := &file_namespace_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NamespaceList.ProtoReflect.Descriptor instead. -func (*NamespaceList) Descriptor() ([]byte, []int) { - return file_namespace_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *NamespaceList) GetItems() []*Namespace { - if x != nil { - return x.Items - } - return nil -} - -type NamespaceFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // remote_id is the remote ID of this Namespace. - RemoteId string `protobuf:"bytes,2,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` - // active_since is the timestamp after which returned namespaces - // should have been active (last seen). - ActiveSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` - // name filters on the resource name. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - Uidp *v1.UIDPFilter `protobuf:"bytes,100,opt,name=uidp,proto3" json:"uidp,omitempty"` -} - -func (x *NamespaceFilter) Reset() { - *x = NamespaceFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_namespace_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NamespaceFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NamespaceFilter) ProtoMessage() {} - -func (x *NamespaceFilter) ProtoReflect() protoreflect.Message { - mi := &file_namespace_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NamespaceFilter.ProtoReflect.Descriptor instead. -func (*NamespaceFilter) Descriptor() ([]byte, []int) { - return file_namespace_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *NamespaceFilter) GetRemoteId() string { - if x != nil { - return x.RemoteId - } - return "" -} - -func (x *NamespaceFilter) GetActiveSince() *timestamppb.Timestamp { - if x != nil { - return x.ActiveSince - } - return nil -} - -func (x *NamespaceFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *NamespaceFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -var File_namespace_platform_proto protoreflect.FileDescriptor - -var file_namespace_platform_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbf, 0x01, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x22, 0x4c, 0x0a, 0x0d, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xbd, 0x01, 0x0a, 0x0f, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x75, - 0x69, 0x64, 0x70, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x32, 0x7c, 0x0a, 0x0a, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x6e, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x29, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, - 0x02, 0xcf, 0x08, 0x10, 0x01, 0x42, 0x74, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1c, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, - 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_namespace_platform_proto_rawDescOnce sync.Once - file_namespace_platform_proto_rawDescData = file_namespace_platform_proto_rawDesc -) - -func file_namespace_platform_proto_rawDescGZIP() []byte { - file_namespace_platform_proto_rawDescOnce.Do(func() { - file_namespace_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_namespace_platform_proto_rawDescData) - }) - return file_namespace_platform_proto_rawDescData -} - -var file_namespace_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_namespace_platform_proto_goTypes = []interface{}{ - (*Namespace)(nil), // 0: chainguard.platform.tenant.Namespace - (*NamespaceList)(nil), // 1: chainguard.platform.tenant.NamespaceList - (*NamespaceFilter)(nil), // 2: chainguard.platform.tenant.NamespaceFilter - (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 4: chainguard.platform.common.UIDPFilter -} -var file_namespace_platform_proto_depIdxs = []int32{ - 3, // 0: chainguard.platform.tenant.Namespace.last_seen:type_name -> google.protobuf.Timestamp - 0, // 1: chainguard.platform.tenant.NamespaceList.items:type_name -> chainguard.platform.tenant.Namespace - 3, // 2: chainguard.platform.tenant.NamespaceFilter.active_since:type_name -> google.protobuf.Timestamp - 4, // 3: chainguard.platform.tenant.NamespaceFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 2, // 4: chainguard.platform.tenant.Namespaces.List:input_type -> chainguard.platform.tenant.NamespaceFilter - 1, // 5: chainguard.platform.tenant.Namespaces.List:output_type -> chainguard.platform.tenant.NamespaceList - 5, // [5:6] is the sub-list for method output_type - 4, // [4:5] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_namespace_platform_proto_init() } -func file_namespace_platform_proto_init() { - if File_namespace_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_namespace_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Namespace); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_namespace_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NamespaceList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_namespace_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NamespaceFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_namespace_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_namespace_platform_proto_goTypes, - DependencyIndexes: file_namespace_platform_proto_depIdxs, - MessageInfos: file_namespace_platform_proto_msgTypes, - }.Build() - File_namespace_platform_proto = out.File - file_namespace_platform_proto_rawDesc = nil - file_namespace_platform_proto_goTypes = nil - file_namespace_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/namespace.platform.proto b/proto/platform/tenant/v1/namespace.platform.proto deleted file mode 100644 index 0b86141a..00000000 --- a/proto/platform/tenant/v1/namespace.platform.proto +++ /dev/null @@ -1,61 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantNamespaceProto"; - -package chainguard.platform.tenant; - -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Namespaces { - rpc List(NamespaceFilter) returns (NamespaceList) { - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_NAMESPACES_LIST] - unscoped: true - } - }; - } -} - -message Namespace { - // id, The Namespace UIDP at which this Namespace resides. - string id = 1; - - // name of the Namespace. - string name = 2; - - // a short description of this Namespace. - string description = 3; - - // remote_id is the remote ID of this Namespace. - string remote_id = 4; - - string labels = 5; - - // last_seen tracks the timestamp at which this namespace was last seen. - google.protobuf.Timestamp last_seen = 6; -} - -message NamespaceList { - repeated Namespace items = 1; -} - -message NamespaceFilter { - // remote_id is the remote ID of this Namespace. - string remote_id = 2; - - // active_since is the timestamp after which returned namespaces - // should have been active (last seen). - google.protobuf.Timestamp active_since = 3; - - // name filters on the resource name. - string name = 4; - - - chainguard.platform.common.UIDPFilter uidp = 100; -} diff --git a/proto/platform/tenant/v1/namespace.platform_grpc.pb.go b/proto/platform/tenant/v1/namespace.platform_grpc.pb.go deleted file mode 100644 index 178382e7..00000000 --- a/proto/platform/tenant/v1/namespace.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: namespace.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Namespaces_List_FullMethodName = "/chainguard.platform.tenant.Namespaces/List" -) - -// NamespacesClient is the client API for Namespaces service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type NamespacesClient interface { - List(ctx context.Context, in *NamespaceFilter, opts ...grpc.CallOption) (*NamespaceList, error) -} - -type namespacesClient struct { - cc grpc.ClientConnInterface -} - -func NewNamespacesClient(cc grpc.ClientConnInterface) NamespacesClient { - return &namespacesClient{cc} -} - -func (c *namespacesClient) List(ctx context.Context, in *NamespaceFilter, opts ...grpc.CallOption) (*NamespaceList, error) { - out := new(NamespaceList) - err := c.cc.Invoke(ctx, Namespaces_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// NamespacesServer is the server API for Namespaces service. -// All implementations must embed UnimplementedNamespacesServer -// for forward compatibility -type NamespacesServer interface { - List(context.Context, *NamespaceFilter) (*NamespaceList, error) - mustEmbedUnimplementedNamespacesServer() -} - -// UnimplementedNamespacesServer must be embedded to have forward compatible implementations. -type UnimplementedNamespacesServer struct { -} - -func (UnimplementedNamespacesServer) List(context.Context, *NamespaceFilter) (*NamespaceList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedNamespacesServer) mustEmbedUnimplementedNamespacesServer() {} - -// UnsafeNamespacesServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to NamespacesServer will -// result in compilation errors. -type UnsafeNamespacesServer interface { - mustEmbedUnimplementedNamespacesServer() -} - -func RegisterNamespacesServer(s grpc.ServiceRegistrar, srv NamespacesServer) { - s.RegisterService(&Namespaces_ServiceDesc, srv) -} - -func _Namespaces_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NamespaceFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NamespacesServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Namespaces_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NamespacesServer).List(ctx, req.(*NamespaceFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// Namespaces_ServiceDesc is the grpc.ServiceDesc for Namespaces service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Namespaces_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.Namespaces", - HandlerType: (*NamespacesServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _Namespaces_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "namespace.platform.proto", -} diff --git a/proto/platform/tenant/v1/node.platform.pb.go b/proto/platform/tenant/v1/node.platform.pb.go deleted file mode 100644 index 629eedae..00000000 --- a/proto/platform/tenant/v1/node.platform.pb.go +++ /dev/null @@ -1,499 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: node.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Node struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The Node UIDP at which this Node resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name of the Node. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // a short description of this Node. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // remote_id is the remote ID of this Node. - RemoteId string `protobuf:"bytes,4,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` - Labels string `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` - // last_seen tracks the timestamp at which this node was last seen. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` - // Platform/Architecture-level information (10+) - OperatingSystem string `protobuf:"bytes,10,opt,name=operating_system,json=operatingSystem,proto3" json:"operating_system,omitempty"` - Architecture string `protobuf:"bytes,11,opt,name=architecture,proto3" json:"architecture,omitempty"` - // Assorted versions (20+) - KubeletVersion string `protobuf:"bytes,20,opt,name=kubelet_version,json=kubeletVersion,proto3" json:"kubelet_version,omitempty"` - ContainerRuntimeVersion string `protobuf:"bytes,21,opt,name=container_runtime_version,json=containerRuntimeVersion,proto3" json:"container_runtime_version,omitempty"` - KernelVersion string `protobuf:"bytes,22,opt,name=kernel_version,json=kernelVersion,proto3" json:"kernel_version,omitempty"` - // Node capacity information (30+) - CpuCapacity string `protobuf:"bytes,30,opt,name=cpu_capacity,json=cpuCapacity,proto3" json:"cpu_capacity,omitempty"` - MemoryCapacity string `protobuf:"bytes,31,opt,name=memory_capacity,json=memoryCapacity,proto3" json:"memory_capacity,omitempty"` - PodCapacity string `protobuf:"bytes,32,opt,name=pod_capacity,json=podCapacity,proto3" json:"pod_capacity,omitempty"` - // Location information (40+) - Zone string `protobuf:"bytes,40,opt,name=zone,proto3" json:"zone,omitempty"` - Region string `protobuf:"bytes,41,opt,name=region,proto3" json:"region,omitempty"` -} - -func (x *Node) Reset() { - *x = Node{} - if protoimpl.UnsafeEnabled { - mi := &file_node_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Node) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Node) ProtoMessage() {} - -func (x *Node) ProtoReflect() protoreflect.Message { - mi := &file_node_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Node.ProtoReflect.Descriptor instead. -func (*Node) Descriptor() ([]byte, []int) { - return file_node_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Node) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Node) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Node) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Node) GetRemoteId() string { - if x != nil { - return x.RemoteId - } - return "" -} - -func (x *Node) GetLabels() string { - if x != nil { - return x.Labels - } - return "" -} - -func (x *Node) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -func (x *Node) GetOperatingSystem() string { - if x != nil { - return x.OperatingSystem - } - return "" -} - -func (x *Node) GetArchitecture() string { - if x != nil { - return x.Architecture - } - return "" -} - -func (x *Node) GetKubeletVersion() string { - if x != nil { - return x.KubeletVersion - } - return "" -} - -func (x *Node) GetContainerRuntimeVersion() string { - if x != nil { - return x.ContainerRuntimeVersion - } - return "" -} - -func (x *Node) GetKernelVersion() string { - if x != nil { - return x.KernelVersion - } - return "" -} - -func (x *Node) GetCpuCapacity() string { - if x != nil { - return x.CpuCapacity - } - return "" -} - -func (x *Node) GetMemoryCapacity() string { - if x != nil { - return x.MemoryCapacity - } - return "" -} - -func (x *Node) GetPodCapacity() string { - if x != nil { - return x.PodCapacity - } - return "" -} - -func (x *Node) GetZone() string { - if x != nil { - return x.Zone - } - return "" -} - -func (x *Node) GetRegion() string { - if x != nil { - return x.Region - } - return "" -} - -type NodeList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Node `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *NodeList) Reset() { - *x = NodeList{} - if protoimpl.UnsafeEnabled { - mi := &file_node_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NodeList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NodeList) ProtoMessage() {} - -func (x *NodeList) ProtoReflect() protoreflect.Message { - mi := &file_node_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NodeList.ProtoReflect.Descriptor instead. -func (*NodeList) Descriptor() ([]byte, []int) { - return file_node_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *NodeList) GetItems() []*Node { - if x != nil { - return x.Items - } - return nil -} - -type NodeFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // remote_id is the remote ID of this Node. - RemoteId string `protobuf:"bytes,2,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` - // active_since is the timestamp after which returned nodes - // should have been active (last seen). - ActiveSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` - // name filters on the resource name. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - Uidp *v1.UIDPFilter `protobuf:"bytes,100,opt,name=uidp,proto3" json:"uidp,omitempty"` -} - -func (x *NodeFilter) Reset() { - *x = NodeFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_node_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NodeFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NodeFilter) ProtoMessage() {} - -func (x *NodeFilter) ProtoReflect() protoreflect.Message { - mi := &file_node_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NodeFilter.ProtoReflect.Descriptor instead. -func (*NodeFilter) Descriptor() ([]byte, []int) { - return file_node_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *NodeFilter) GetRemoteId() string { - if x != nil { - return x.RemoteId - } - return "" -} - -func (x *NodeFilter) GetActiveSince() *timestamppb.Timestamp { - if x != nil { - return x.ActiveSince - } - return nil -} - -func (x *NodeFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *NodeFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -var File_node_platform_proto protoreflect.FileDescriptor - -var file_node_platform_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, - 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xb0, 0x04, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, - 0x65, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, - 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x72, - 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x27, - 0x0a, 0x0f, 0x6b, 0x75, 0x62, 0x65, 0x6c, 0x65, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x75, 0x62, 0x65, 0x6c, 0x65, 0x74, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6b, 0x65, 0x72, - 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x70, - 0x75, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x63, 0x70, 0x75, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, - 0x0f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, - 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x43, 0x61, - 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6f, 0x64, 0x5f, 0x63, 0x61, - 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6f, - 0x64, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, - 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x22, 0x42, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x36, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x0a, 0x4e, 0x6f, - 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, - 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, - 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, - 0x75, 0x69, 0x64, 0x70, 0x32, 0x6d, 0x0a, 0x05, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x64, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x24, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xeb, - 0x07, 0x10, 0x01, 0x42, 0x6f, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4e, 0x6f, 0x64, 0x65, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_node_platform_proto_rawDescOnce sync.Once - file_node_platform_proto_rawDescData = file_node_platform_proto_rawDesc -) - -func file_node_platform_proto_rawDescGZIP() []byte { - file_node_platform_proto_rawDescOnce.Do(func() { - file_node_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_node_platform_proto_rawDescData) - }) - return file_node_platform_proto_rawDescData -} - -var file_node_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_node_platform_proto_goTypes = []interface{}{ - (*Node)(nil), // 0: chainguard.platform.tenant.Node - (*NodeList)(nil), // 1: chainguard.platform.tenant.NodeList - (*NodeFilter)(nil), // 2: chainguard.platform.tenant.NodeFilter - (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 4: chainguard.platform.common.UIDPFilter -} -var file_node_platform_proto_depIdxs = []int32{ - 3, // 0: chainguard.platform.tenant.Node.last_seen:type_name -> google.protobuf.Timestamp - 0, // 1: chainguard.platform.tenant.NodeList.items:type_name -> chainguard.platform.tenant.Node - 3, // 2: chainguard.platform.tenant.NodeFilter.active_since:type_name -> google.protobuf.Timestamp - 4, // 3: chainguard.platform.tenant.NodeFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 2, // 4: chainguard.platform.tenant.Nodes.List:input_type -> chainguard.platform.tenant.NodeFilter - 1, // 5: chainguard.platform.tenant.Nodes.List:output_type -> chainguard.platform.tenant.NodeList - 5, // [5:6] is the sub-list for method output_type - 4, // [4:5] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_node_platform_proto_init() } -func file_node_platform_proto_init() { - if File_node_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_node_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Node); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_node_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NodeFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_node_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_node_platform_proto_goTypes, - DependencyIndexes: file_node_platform_proto_depIdxs, - MessageInfos: file_node_platform_proto_msgTypes, - }.Build() - File_node_platform_proto = out.File - file_node_platform_proto_rawDesc = nil - file_node_platform_proto_goTypes = nil - file_node_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/node.platform.proto b/proto/platform/tenant/v1/node.platform.proto deleted file mode 100644 index 5d50f5e0..00000000 --- a/proto/platform/tenant/v1/node.platform.proto +++ /dev/null @@ -1,78 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantNodeProto"; - -package chainguard.platform.tenant; - -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Nodes { - rpc List(NodeFilter) returns (NodeList) { - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_NODES_LIST] - unscoped: true - } - }; - } -} - -message Node { - // id, The Node UIDP at which this Node resides. - string id = 1; - - // name of the Node. - string name = 2; - - // a short description of this Node. - string description = 3; - - // remote_id is the remote ID of this Node. - string remote_id = 4; - - string labels = 5; - - // last_seen tracks the timestamp at which this node was last seen. - google.protobuf.Timestamp last_seen = 6; - - // Platform/Architecture-level information (10+) - string operating_system = 10; - string architecture = 11; - - // Assorted versions (20+) - string kubelet_version = 20; - string container_runtime_version = 21; - string kernel_version = 22; - - // Node capacity information (30+) - string cpu_capacity = 30; - string memory_capacity = 31; - string pod_capacity = 32; - - // Location information (40+) - string zone = 40; - string region = 41; -} - -message NodeList { - repeated Node items = 1; -} - -message NodeFilter { - // remote_id is the remote ID of this Node. - string remote_id = 2; - - // active_since is the timestamp after which returned nodes - // should have been active (last seen). - google.protobuf.Timestamp active_since = 3; - - // name filters on the resource name. - string name = 4; - - chainguard.platform.common.UIDPFilter uidp = 100; -} diff --git a/proto/platform/tenant/v1/node.platform_grpc.pb.go b/proto/platform/tenant/v1/node.platform_grpc.pb.go deleted file mode 100644 index 96f45690..00000000 --- a/proto/platform/tenant/v1/node.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: node.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Nodes_List_FullMethodName = "/chainguard.platform.tenant.Nodes/List" -) - -// NodesClient is the client API for Nodes service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type NodesClient interface { - List(ctx context.Context, in *NodeFilter, opts ...grpc.CallOption) (*NodeList, error) -} - -type nodesClient struct { - cc grpc.ClientConnInterface -} - -func NewNodesClient(cc grpc.ClientConnInterface) NodesClient { - return &nodesClient{cc} -} - -func (c *nodesClient) List(ctx context.Context, in *NodeFilter, opts ...grpc.CallOption) (*NodeList, error) { - out := new(NodeList) - err := c.cc.Invoke(ctx, Nodes_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// NodesServer is the server API for Nodes service. -// All implementations must embed UnimplementedNodesServer -// for forward compatibility -type NodesServer interface { - List(context.Context, *NodeFilter) (*NodeList, error) - mustEmbedUnimplementedNodesServer() -} - -// UnimplementedNodesServer must be embedded to have forward compatible implementations. -type UnimplementedNodesServer struct { -} - -func (UnimplementedNodesServer) List(context.Context, *NodeFilter) (*NodeList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedNodesServer) mustEmbedUnimplementedNodesServer() {} - -// UnsafeNodesServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to NodesServer will -// result in compilation errors. -type UnsafeNodesServer interface { - mustEmbedUnimplementedNodesServer() -} - -func RegisterNodesServer(s grpc.ServiceRegistrar, srv NodesServer) { - s.RegisterService(&Nodes_ServiceDesc, srv) -} - -func _Nodes_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NodeFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodesServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Nodes_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodesServer).List(ctx, req.(*NodeFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// Nodes_ServiceDesc is the grpc.ServiceDesc for Nodes service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Nodes_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.Nodes", - HandlerType: (*NodesServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _Nodes_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "node.platform.proto", -} diff --git a/proto/platform/tenant/v1/test/mock_client.go b/proto/platform/tenant/v1/test/mock_client.go index 72625469..4161f4c0 100644 --- a/proto/platform/tenant/v1/test/mock_client.go +++ b/proto/platform/tenant/v1/test/mock_client.go @@ -18,10 +18,7 @@ type MockTenantClient struct { SbomsClient MockSbomsClient SignaturesClient MockSignaturesClient PolicyResultsClient MockPolicyResultsClient - NodesClient MockNodesClient - NamespacesClient MockNamespacesClient RisksClient MockRisksClient - WorkloadsClient MockWorkloadsClient VulnReportsClient MockVulnReportsClient AttestationClient MockAttestationsClientt } @@ -56,18 +53,6 @@ func (m MockTenantClient) PolicyResults() tenant.PolicyResultsClient { return &m.PolicyResultsClient } -func (m MockTenantClient) Nodes() tenant.NodesClient { - return &m.NodesClient -} - -func (m MockTenantClient) Namespaces() tenant.NamespacesClient { - return &m.NamespacesClient -} - -func (m MockTenantClient) Workloads() tenant.WorkloadsClient { - return &m.WorkloadsClient -} - func (m MockTenantClient) VulnReports() tenant.VulnReportsClient { return &m.VulnReportsClient } diff --git a/proto/platform/tenant/v1/test/mock_namespaces.go b/proto/platform/tenant/v1/test/mock_namespaces.go deleted file mode 100644 index 5d8a0129..00000000 --- a/proto/platform/tenant/v1/test/mock_namespaces.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.NamespacesClient = (*MockNamespacesClient)(nil) - -type MockNamespacesClient struct { - OnList []NamespacesOnList -} - -type NamespacesOnList struct { - Given *tenant.NamespaceFilter - List *tenant.NamespaceList - Error error -} - -func (m MockNamespacesClient) List(_ context.Context, given *tenant.NamespaceFilter, _ ...grpc.CallOption) (*tenant.NamespaceList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/test/mock_nodes.go b/proto/platform/tenant/v1/test/mock_nodes.go deleted file mode 100644 index 4bbcb6f9..00000000 --- a/proto/platform/tenant/v1/test/mock_nodes.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.NodesClient = (*MockNodesClient)(nil) - -type MockNodesClient struct { - OnList []NodesOnList -} - -type NodesOnList struct { - Given *tenant.NodeFilter - List *tenant.NodeList - Error error -} - -func (m MockNodesClient) List(_ context.Context, given *tenant.NodeFilter, _ ...grpc.CallOption) (*tenant.NodeList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/test/mock_workloads.go b/proto/platform/tenant/v1/test/mock_workloads.go deleted file mode 100644 index caad4974..00000000 --- a/proto/platform/tenant/v1/test/mock_workloads.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.WorkloadsClient = (*MockWorkloadsClient)(nil) - -type MockWorkloadsClient struct { - OnList []WorkloadsOnList -} - -type WorkloadsOnList struct { - Given *tenant.WorkloadFilter - List *tenant.WorkloadList - Error error -} - -func (m MockWorkloadsClient) List(_ context.Context, given *tenant.WorkloadFilter, _ ...grpc.CallOption) (*tenant.WorkloadList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/workload.platform.pb.go b/proto/platform/tenant/v1/workload.platform.pb.go deleted file mode 100644 index d1e9eb86..00000000 --- a/proto/platform/tenant/v1/workload.platform.pb.go +++ /dev/null @@ -1,436 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: workload.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Workload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The Workload UIDP at which this Workload resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name of the Workload. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // a short description of this Workload. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // remote_id is the remote ID of this Workload. - RemoteId string `protobuf:"bytes,4,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` - Labels string `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"` - ApiVersion string `protobuf:"bytes,6,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` - Kind string `protobuf:"bytes,7,opt,name=kind,proto3" json:"kind,omitempty"` - // last_seen tracks the timestamp at which this workload was last seen. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` - // owner_id is the remote_id of the Workload that is referenced via a - // "controller" owner reference by this workload. - OwnerId string `protobuf:"bytes,9,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` -} - -func (x *Workload) Reset() { - *x = Workload{} - if protoimpl.UnsafeEnabled { - mi := &file_workload_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Workload) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Workload) ProtoMessage() {} - -func (x *Workload) ProtoReflect() protoreflect.Message { - mi := &file_workload_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Workload.ProtoReflect.Descriptor instead. -func (*Workload) Descriptor() ([]byte, []int) { - return file_workload_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Workload) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Workload) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Workload) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Workload) GetRemoteId() string { - if x != nil { - return x.RemoteId - } - return "" -} - -func (x *Workload) GetLabels() string { - if x != nil { - return x.Labels - } - return "" -} - -func (x *Workload) GetApiVersion() string { - if x != nil { - return x.ApiVersion - } - return "" -} - -func (x *Workload) GetKind() string { - if x != nil { - return x.Kind - } - return "" -} - -func (x *Workload) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -func (x *Workload) GetOwnerId() string { - if x != nil { - return x.OwnerId - } - return "" -} - -type WorkloadList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Workload `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *WorkloadList) Reset() { - *x = WorkloadList{} - if protoimpl.UnsafeEnabled { - mi := &file_workload_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WorkloadList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WorkloadList) ProtoMessage() {} - -func (x *WorkloadList) ProtoReflect() protoreflect.Message { - mi := &file_workload_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WorkloadList.ProtoReflect.Descriptor instead. -func (*WorkloadList) Descriptor() ([]byte, []int) { - return file_workload_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *WorkloadList) GetItems() []*Workload { - if x != nil { - return x.Items - } - return nil -} - -type WorkloadFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // remote_id is the remote ID of this Workload. - RemoteId string `protobuf:"bytes,2,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` - // active_since is the timestamp after which returned workloads - // should have been active (last seen). - ActiveSince *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` - // name filters on the resource name. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // Return only the workloads owned by a particular remote_id. - OwnerId string `protobuf:"bytes,5,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` - Uidp *v1.UIDPFilter `protobuf:"bytes,100,opt,name=uidp,proto3" json:"uidp,omitempty"` -} - -func (x *WorkloadFilter) Reset() { - *x = WorkloadFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_workload_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WorkloadFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WorkloadFilter) ProtoMessage() {} - -func (x *WorkloadFilter) ProtoReflect() protoreflect.Message { - mi := &file_workload_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WorkloadFilter.ProtoReflect.Descriptor instead. -func (*WorkloadFilter) Descriptor() ([]byte, []int) { - return file_workload_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *WorkloadFilter) GetRemoteId() string { - if x != nil { - return x.RemoteId - } - return "" -} - -func (x *WorkloadFilter) GetActiveSince() *timestamppb.Timestamp { - if x != nil { - return x.ActiveSince - } - return nil -} - -func (x *WorkloadFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *WorkloadFilter) GetOwnerId() string { - if x != nil { - return x.OwnerId - } - return "" -} - -func (x *WorkloadFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -var File_workload_platform_proto protoreflect.FileDescriptor - -var file_workload_platform_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, - 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8e, 0x02, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, - 0x69, 0x6e, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x4a, 0x0a, 0x0c, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, - 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, - 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, - 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x32, 0x79, 0x0a, - 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x12, 0x6c, 0x0a, 0x04, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, - 0x12, 0x06, 0x0a, 0x02, 0xb3, 0x09, 0x10, 0x01, 0x42, 0x73, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, - 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_workload_platform_proto_rawDescOnce sync.Once - file_workload_platform_proto_rawDescData = file_workload_platform_proto_rawDesc -) - -func file_workload_platform_proto_rawDescGZIP() []byte { - file_workload_platform_proto_rawDescOnce.Do(func() { - file_workload_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_workload_platform_proto_rawDescData) - }) - return file_workload_platform_proto_rawDescData -} - -var file_workload_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_workload_platform_proto_goTypes = []interface{}{ - (*Workload)(nil), // 0: chainguard.platform.tenant.Workload - (*WorkloadList)(nil), // 1: chainguard.platform.tenant.WorkloadList - (*WorkloadFilter)(nil), // 2: chainguard.platform.tenant.WorkloadFilter - (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 4: chainguard.platform.common.UIDPFilter -} -var file_workload_platform_proto_depIdxs = []int32{ - 3, // 0: chainguard.platform.tenant.Workload.last_seen:type_name -> google.protobuf.Timestamp - 0, // 1: chainguard.platform.tenant.WorkloadList.items:type_name -> chainguard.platform.tenant.Workload - 3, // 2: chainguard.platform.tenant.WorkloadFilter.active_since:type_name -> google.protobuf.Timestamp - 4, // 3: chainguard.platform.tenant.WorkloadFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 2, // 4: chainguard.platform.tenant.Workloads.List:input_type -> chainguard.platform.tenant.WorkloadFilter - 1, // 5: chainguard.platform.tenant.Workloads.List:output_type -> chainguard.platform.tenant.WorkloadList - 5, // [5:6] is the sub-list for method output_type - 4, // [4:5] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_workload_platform_proto_init() } -func file_workload_platform_proto_init() { - if File_workload_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_workload_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Workload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_workload_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_workload_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_workload_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_workload_platform_proto_goTypes, - DependencyIndexes: file_workload_platform_proto_depIdxs, - MessageInfos: file_workload_platform_proto_msgTypes, - }.Build() - File_workload_platform_proto = out.File - file_workload_platform_proto_rawDesc = nil - file_workload_platform_proto_goTypes = nil - file_workload_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/workload.platform.proto b/proto/platform/tenant/v1/workload.platform.proto deleted file mode 100644 index cd8fbe36..00000000 --- a/proto/platform/tenant/v1/workload.platform.proto +++ /dev/null @@ -1,71 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantWorkloadProto"; - -package chainguard.platform.tenant; - -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Workloads { - rpc List(WorkloadFilter) returns (WorkloadList) { - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_WORKLOADS_LIST] - unscoped: true - } - }; - } -} - -message Workload { - // id, The Workload UIDP at which this Workload resides. - string id = 1; - - // name of the Workload. - string name = 2; - - // a short description of this Workload. - string description = 3; - - // remote_id is the remote ID of this Workload. - string remote_id = 4; - - string labels = 5; - - string api_version = 6; - string kind = 7; - - // last_seen tracks the timestamp at which this workload was last seen. - google.protobuf.Timestamp last_seen = 8; - - // owner_id is the remote_id of the Workload that is referenced via a - // "controller" owner reference by this workload. - string owner_id = 9; -} - -message WorkloadList { - repeated Workload items = 1; -} - -message WorkloadFilter { - // remote_id is the remote ID of this Workload. - string remote_id = 2; - - // active_since is the timestamp after which returned workloads - // should have been active (last seen). - google.protobuf.Timestamp active_since = 3; - - // name filters on the resource name. - string name = 4; - - // Return only the workloads owned by a particular remote_id. - string owner_id = 5; - - - chainguard.platform.common.UIDPFilter uidp = 100; -} diff --git a/proto/platform/tenant/v1/workload.platform_grpc.pb.go b/proto/platform/tenant/v1/workload.platform_grpc.pb.go deleted file mode 100644 index 99be2bb1..00000000 --- a/proto/platform/tenant/v1/workload.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: workload.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Workloads_List_FullMethodName = "/chainguard.platform.tenant.Workloads/List" -) - -// WorkloadsClient is the client API for Workloads service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type WorkloadsClient interface { - List(ctx context.Context, in *WorkloadFilter, opts ...grpc.CallOption) (*WorkloadList, error) -} - -type workloadsClient struct { - cc grpc.ClientConnInterface -} - -func NewWorkloadsClient(cc grpc.ClientConnInterface) WorkloadsClient { - return &workloadsClient{cc} -} - -func (c *workloadsClient) List(ctx context.Context, in *WorkloadFilter, opts ...grpc.CallOption) (*WorkloadList, error) { - out := new(WorkloadList) - err := c.cc.Invoke(ctx, Workloads_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// WorkloadsServer is the server API for Workloads service. -// All implementations must embed UnimplementedWorkloadsServer -// for forward compatibility -type WorkloadsServer interface { - List(context.Context, *WorkloadFilter) (*WorkloadList, error) - mustEmbedUnimplementedWorkloadsServer() -} - -// UnimplementedWorkloadsServer must be embedded to have forward compatible implementations. -type UnimplementedWorkloadsServer struct { -} - -func (UnimplementedWorkloadsServer) List(context.Context, *WorkloadFilter) (*WorkloadList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedWorkloadsServer) mustEmbedUnimplementedWorkloadsServer() {} - -// UnsafeWorkloadsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to WorkloadsServer will -// result in compilation errors. -type UnsafeWorkloadsServer interface { - mustEmbedUnimplementedWorkloadsServer() -} - -func RegisterWorkloadsServer(s grpc.ServiceRegistrar, srv WorkloadsServer) { - s.RegisterService(&Workloads_ServiceDesc, srv) -} - -func _Workloads_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(WorkloadFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(WorkloadsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Workloads_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WorkloadsServer).List(ctx, req.(*WorkloadFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// Workloads_ServiceDesc is the grpc.ServiceDesc for Workloads service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Workloads_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.Workloads", - HandlerType: (*WorkloadsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _Workloads_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "workload.platform.proto", -} From fd94bfaef10f031269deff44470373b86c9b66c9 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Thu, 18 Apr 2024 08:57:53 -0700 Subject: [PATCH 24/41] Export b1147ffebcb02da165016a7c8540a138f19dd4a9 Export: b1147ffebcb02da165016a7c8540a138f19dd4a9 --- go.mod | 81 +- go.sum | 218 ---- policy/parse.go | 144 --- policy/parse_test.go | 181 --- policy/validate.go | 103 -- policy/validate_test.go | 194 ---- proto/platform/iam/v1/clients.go | 12 - proto/platform/iam/v1/doc.go | 1 - .../iam/v1/policies.platform.event.go | 45 - proto/platform/iam/v1/policies.platform.pb.go | 1027 ----------------- .../iam/v1/policies.platform.pb.gw.go | 703 ----------- proto/platform/iam/v1/policies.platform.proto | 208 ---- .../iam/v1/policies.platform_grpc.pb.go | 295 ----- proto/platform/iam/v1/test/mock_client.go | 5 - proto/platform/iam/v1/test/mock_policies.go | 118 -- 15 files changed, 3 insertions(+), 3332 deletions(-) delete mode 100644 policy/parse.go delete mode 100644 policy/parse_test.go delete mode 100644 policy/validate.go delete mode 100644 policy/validate_test.go delete mode 100644 proto/platform/iam/v1/policies.platform.event.go delete mode 100644 proto/platform/iam/v1/policies.platform.pb.go delete mode 100644 proto/platform/iam/v1/policies.platform.pb.gw.go delete mode 100644 proto/platform/iam/v1/policies.platform.proto delete mode 100644 proto/platform/iam/v1/policies.platform_grpc.pb.go delete mode 100644 proto/platform/iam/v1/test/mock_policies.go diff --git a/go.mod b/go.mod index d4bf5dfa..6266f39e 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,6 @@ require ( github.com/microcosm-cc/bluemonday v1.0.26 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/russross/blackfriday/v2 v2.1.0 - github.com/sigstore/policy-controller v0.8.4 go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 golang.org/x/oauth2 v0.19.0 @@ -26,128 +25,54 @@ require ( google.golang.org/protobuf v1.33.0 k8s.io/api v0.29.1 k8s.io/apimachinery v0.29.1 - knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845 - sigs.k8s.io/yaml v1.4.0 ) require ( - cloud.google.com/go/compute v1.25.0 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.6 // indirect - cloud.google.com/go/kms v1.15.8 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect - github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect - github.com/aws/aws-sdk-go v1.51.6 // indirect - github.com/aws/aws-sdk-go-v2/config v1.27.9 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.9 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.0 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.4 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.4 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.6 // indirect - github.com/aws/aws-sdk-go-v2/service/kms v1.30.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.20.3 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.3 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.28.5 // indirect github.com/aws/smithy-go v1.20.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blendle/zapdriver v1.3.1 // indirect - github.com/cenkalti/backoff/v3 v3.2.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/evanphx/json-patch/v5 v5.7.0 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-jose/go-jose/v4 v4.0.1 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-openapi/jsonreference v0.21.0 // indirect - github.com/go-openapi/swag v0.23.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v5 v5.2.1 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/go-containerregistry v0.19.1 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.3 // indirect github.com/gorilla/css v1.0.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-retryablehttp v0.7.5 // indirect - github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 // indirect - github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect - github.com/hashicorp/go-sockaddr v1.0.6 // indirect - github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hashicorp/vault/api v1.12.2 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jellydator/ttlcache/v3 v3.2.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect - github.com/kylelemons/godebug v1.1.0 // indirect - github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.19.0 // indirect github.com/prometheus/client_model v0.6.0 // indirect github.com/prometheus/common v0.51.1 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/ryanuber/go-glob v1.0.0 // indirect - github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect - github.com/sigstore/sigstore v1.8.3 // indirect - github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.3 // indirect - github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.3 // indirect - github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.3 // indirect - github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.3 // indirect - github.com/spf13/cobra v1.8.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/theupdateframework/go-tuf v0.7.0 // indirect - github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect - go.opencensus.io v0.24.0 // indirect + github.com/stretchr/testify v1.9.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect go.opentelemetry.io/otel v1.24.0 // indirect go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/sdk v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.22.0 // indirect golang.org/x/net v0.22.0 // indirect - golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.19.0 // indirect - golang.org/x/term v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.19.0 // indirect - gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/api v0.172.0 // indirect - google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect - gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/client-go v0.29.1 // indirect k8s.io/klog/v2 v2.120.1 // indirect k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/release-utils v0.7.7 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) diff --git a/go.sum b/go.sum index e5cfb940..6559474e 100644 --- a/go.sum +++ b/go.sum @@ -3,57 +3,9 @@ chainguard.dev/go-grpc-kit v0.17.2/go.mod h1:uZTFtFzAGyVFHhJexiHbna4N5rHQU7aUXPw chainguard.dev/go-oidctest v0.3.1 h1:Q1OvIVIcl+i0hqgmrXZLeDhSjtDjbnLEBASoTbhyuBY= chainguard.dev/go-oidctest v0.3.1/go.mod h1:TDN6MPJ6BEzWtorS9/dHzzGiaBpPRnRONv2SE0mqitU= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM= -cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4= -cloud.google.com/go/compute v1.25.0 h1:H1/4SqSUhjPFE7L5ddzHOfY2bCAvjwNRZPNl6Ni5oYU= -cloud.google.com/go/compute v1.25.0/go.mod h1:GR7F0ZPZH8EhChlMo9FkLd7eUTwEymjqQagxzilIxIE= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= -cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= -cloud.google.com/go/kms v1.15.8 h1:szIeDCowID8th2i8XE4uRev5PMxQFqW+JjwYxL9h6xs= -cloud.google.com/go/kms v1.15.8/go.mod h1:WoUHcDjD9pluCg7pNds131awnH429QGvRM3N/4MyoVs= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0 h1:DRiANoJTiW6obBQe3SqZizkuV1PEgfiiGivmVocDy64= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.1.0/go.mod h1:qLIye2hwb/ZouqhpSD9Zn3SJipvpEnz1Ywl3VUk9Y0s= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 h1:D3occbWoio4EBLkbkevetNMAVX197GkzbUMtqjGWn80= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0/go.mod h1:bTSOgj05NGRuHHhQwAdPnYr9TOdNmKlZTgGLL6nyAdI= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= -github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aws/aws-sdk-go v1.51.6 h1:Ld36dn9r7P9IjU8WZSaswQ8Y/XUCRpewim5980DwYiU= -github.com/aws/aws-sdk-go v1.51.6/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/aws/aws-sdk-go-v2 v1.26.0 h1:/Ce4OCiM3EkpW7Y+xUnfAFpchU78K7/Ug01sZni9PgA= github.com/aws/aws-sdk-go-v2 v1.26.0/go.mod h1:35hUlJVYd+M++iLI3ALmVwMOyRYMmRqUXpTtRGW+K9I= -github.com/aws/aws-sdk-go-v2/config v1.27.9 h1:gRx/NwpNEFSk+yQlgmk1bmxxvQ5TyJ76CWXs9XScTqg= -github.com/aws/aws-sdk-go-v2/config v1.27.9/go.mod h1:dK1FQfpwpql83kbD873E9vz4FyAxuJtR22wzoXn3qq0= -github.com/aws/aws-sdk-go-v2/credentials v1.17.9 h1:N8s0/7yW+h8qR8WaRlPQeJ6czVMNQVNtNdUqf6cItao= -github.com/aws/aws-sdk-go-v2/credentials v1.17.9/go.mod h1:446YhIdmSV0Jf/SLafGZalQo+xr2iw7/fzXGDPTU1yQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.0 h1:af5YzcLf80tv4Em4jWVD75lpnOHSBkPUZxZfGkrI3HI= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.0/go.mod h1:nQ3how7DMnFMWiU1SpECohgC82fpn4cKZ875NDMmwtA= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.4 h1:0ScVK/4qZ8CIW0k8jOeFVsyS/sAiXpYxRBLolMkuLQM= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.4/go.mod h1:84KyjNZdHC6QZW08nfHI6yZgPd+qRgaWcYsyLUo3QY8= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.4 h1:sHmMWWX5E7guWEFQ9SVo6A3S4xpPrWnd77a6y4WM6PU= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.4/go.mod h1:WjpDrhWisWOIoS9n3nk67A3Ll1vfULJ9Kq6h29HTD48= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1/go.mod h1:JKpmtYhhPs7D97NL/ltqz7yCkERFW5dOlHyVl66ZYF8= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.6 h1:b+E7zIUHMmcB4Dckjpkapoy47W6C9QBv/zoUP+Hn8Kc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.6/go.mod h1:S2fNV0rxrP78NhPbCZeQgY8H9jdDMeGtwcfZIRxzBqU= -github.com/aws/aws-sdk-go-v2/service/kms v1.30.0 h1:yS0JkEdV6h9JOo8sy2JSpjX+i7vsKifU8SIeHrqiDhU= -github.com/aws/aws-sdk-go-v2/service/kms v1.30.0/go.mod h1:+I8VUUSVD4p5ISQtzpgSva4I8cJ4SQ4b1dcBcof7O+g= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.3 h1:mnbuWHOcM70/OFUlZZ5rcdfA8PflGXXiefU/O+1S3+8= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.3/go.mod h1:5HFu51Elk+4oRBZVxmHrSds5jFXmFj8C3w7DVF2gnrs= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.3 h1:uLq0BKatTmDzWa/Nu4WO0M1AaQDaPpwTKAeByEc6WFM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.3/go.mod h1:b+qdhjnxj8GSR6t5YfphOffeoQSQ1KmpoVVuBn+PWxs= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.5 h1:J/PpTf/hllOjx8Xu9DMflff3FajfLxqM5+tepvVXmxg= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.5/go.mod h1:0ih0Z83YDH/QeQ6Ori2yGE2XvWYv/Xm+cZc01LC6oK0= github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw= github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= @@ -66,8 +18,6 @@ github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJR github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= -github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= -github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -77,31 +27,16 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cloudevents/sdk-go/v2 v2.15.2 h1:54+I5xQEnI73RBhWHxbI1XJcqOFOVJN85vb41+8mHUc= github.com/cloudevents/sdk-go/v2 v2.15.2/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be h1:J5BL2kskAlV9ckgEsNQXscjIaLiOYiZ75d4e94E6dcQ= -github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be/go.mod h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w= github.com/coreos/go-oidc/v3 v3.10.0 h1:tDnXHnLyiTVyT/2zLDGj09pFPkhND8Gl8lnTRhoEaJU= github.com/coreos/go-oidc/v3 v3.10.0/go.mod h1:5j11xcw0D3+SGxn6Z/WFADsgcWVMyNAlSQupk0KK3ac= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= -github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= -github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= -github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= -github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= -github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U= @@ -113,61 +48,25 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= -github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= -github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= -github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= -github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= -github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= -github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= -github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49 h1:0VpGH+cDhbDtdcweoyCVsF3fhN8kejK6rFe/2FFX2nU= -github.com/google/gnostic-models v0.6.9-0.20230804172637-c7be7c783f49/go.mod h1:BkkQ4L1KS1xMt2aWSPStnn55ChGC0DPOn2FQYj+f25M= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.19.1 h1:yMQ62Al6/V0Z7CqIrrS1iYoA5/oQCm88DeNujc7C1KY= -github.com/google/go-containerregistry v0.19.1/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA= -github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= @@ -176,40 +75,6 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c9 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20210315223345-82c243799c99/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.16.2 h1:K4ev2ib4LdQETX5cSZBG0DVLk1jwGqSPXBjdah3veNs= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= -github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= -github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8 h1:iBt4Ew4XEGLfh6/bPk4rSYmuZJGizr6/x/AEizP0CQc= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.8/go.mod h1:aiJI+PIApBRQG7FZTEBx5GiiX+HbOHilUdNxUZi4eV0= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= -github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEyqO4u9I= -github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI= -github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= -github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= -github.com/hashicorp/vault/api v1.12.2 h1:7YkCTE5Ni90TcmYHDBExdt4WGJxhpzaHqR6uGbQb/rE= -github.com/hashicorp/vault/api v1.12.2/go.mod h1:LSGf1NGT1BnvFFnKVtnvcaLBM2Lz+gJdpL6HUYed8KE= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jellydator/ttlcache/v3 v3.2.0 h1:6lqVJ8X3ZaUwvzENqPAobDsXNExfUJd61u++uW8a3LE= -github.com/jellydator/ttlcache/v3 v3.2.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmhodges/clock v1.2.0 h1:eq4kys+NI0PLngzaHEe7AmPT90XMGIEySD1JfV1PDIs= -github.com/jmhodges/clock v1.2.0/go.mod h1:qKjhA7x7u/lQpPB1XAqX1b1lCI/w3/fNuYpI/ZjLynI= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= @@ -224,38 +89,18 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491 h1:WGrKdjHtWC67RX96eTkYD2f53NDHhrq/7robWTAfk4s= -github.com/letsencrypt/boulder v0.0.0-20231026200631-000cd05d5491/go.mod h1:o158RFmdEbYyIZmXAbrvmJWesbyxlLKee6X64VPVuOc= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58= github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -277,61 +122,28 @@ github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= -github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/sigstore/policy-controller v0.8.4 h1:1ieS2W4GfcWfxvdE7lbfZlgW2dSnUinae2OoUM5/7Vg= -github.com/sigstore/policy-controller v0.8.4/go.mod h1:jQtLtLpcwzIuRrCtNjWLWfSQlI4ompYOU9CW5dPi6t8= -github.com/sigstore/sigstore v1.8.3 h1:G7LVXqL+ekgYtYdksBks9B38dPoIsbscjQJX/MGWkA4= -github.com/sigstore/sigstore v1.8.3/go.mod h1:mqbTEariiGA94cn6G3xnDiV6BD8eSLdL/eA7bvJ0fVs= -github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.3 h1:LTfPadUAo+PDRUbbdqbeSl2OuoFQwUFTnJ4stu+nwWw= -github.com/sigstore/sigstore/pkg/signature/kms/aws v1.8.3/go.mod h1:QV/Lxlxm0POyhfyBtIbTWxNeF18clMlkkyL9mu45y18= -github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.3 h1:xgbPRCr2npmmsuVVteJqi/ERw9+I13Wou7kq0Yk4D8g= -github.com/sigstore/sigstore/pkg/signature/kms/azure v1.8.3/go.mod h1:G4+I83FILPX6MtnoaUdmv/bRGEVtR3JdLeJa/kXdk/0= -github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.3 h1:vDl2fqPT0h3D/k6NZPlqnKFd1tz3335wm39qjvpZNJc= -github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.8.3/go.mod h1:9uOJXbXEXj+M6QjMKH5PaL5WDMu43rHfbIMgXzA8eKI= -github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.3 h1:h9G8j+Ds21zqqulDbA/R/ft64oQQIyp8S7wJYABYSlg= -github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.8.3/go.mod h1:zgCeHOuqF6k7A7TTEvftcA9V3FRzB7mrPtHOhXAQBnc= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/theupdateframework/go-tuf v0.7.0 h1:CqbQFrWo1ae3/I0UCblSbczevCCbS31Qvs5LdxRWqRI= -github.com/theupdateframework/go-tuf v0.7.0/go.mod h1:uEB7WSY+7ZIugK6R1hiBMBjQftaFzn7ZCDJcp1tCUug= -github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= -github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= -go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -376,7 +188,6 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -393,8 +204,6 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -416,8 +225,6 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= -golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -445,18 +252,11 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= -gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.172.0 h1:/1OcMZGPmW1rX2LCu2CmGUD1KXK1+pfzxotxyRUCCdk= -google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 h1:ImUcDPHjTrAqNhlOkSocDLfG9rrNHH7w7uoKWPaWZ8s= -google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7/go.mod h1:/3XmxOjePkvmKrHuBy4zNFw7IzxJXtAgdpXi8Ll990U= google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 h1:oqta3O3AnlWbmIE3bFnWbu4bRxZjfbWCp0cKSuZh01E= google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s= google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= @@ -467,28 +267,16 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/go-jose/go-jose.v2 v2.6.3 h1:nt80fvSDlhKWQgSWyHyy5CfmlQr+asih51R8PTWNKKs= -gopkg.in/go-jose/go-jose.v2 v2.6.3/go.mod h1:zzZDPkNNw/c9IE7Z9jr11mBZQhKQTMzoEEIoEdZlFBI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -506,20 +294,14 @@ k8s.io/api v0.29.1 h1:DAjwWX/9YT7NQD4INu49ROJuZAAAP/Ijki48GUPzxqw= k8s.io/api v0.29.1/go.mod h1:7Kl10vBRUXhnQQI8YR/R327zXC8eJ7887/+Ybta+RoQ= k8s.io/apimachinery v0.29.1 h1:KY4/E6km/wLBguvCZv8cKTeOwwOBqFNjwJIdMkMbbRc= k8s.io/apimachinery v0.29.1/go.mod h1:6HVkd1FwxIagpYrHSwJlQqZI3G9LfYWRPAkUvLnXTKU= -k8s.io/client-go v0.29.1 h1:19B/+2NGEwnFLzt0uB5kNJnfTsbV8w6TgQRz9l7ti7A= -k8s.io/client-go v0.29.1/go.mod h1:TDG/psL9hdet0TI9mGyHJSgRkW3H9JZk2dNEUS7bRks= k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= -k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845 h1:NJm46LR4AeO03E0H7B+TYTkelTSnsswktpIAaK1pkTg= knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845/go.mod h1:9UXGl+Sue7Am1/mbvLimpPZwQlOkbjAMMIenH60pVJ4= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/release-utils v0.7.7 h1:JKDOvhCk6zW8ipEOkpTGDH/mW3TI+XqtPp16aaQ79FU= -sigs.k8s.io/release-utils v0.7.7/go.mod h1:iU7DGVNi3umZJ8q6aHyUFzsDUIaYwNnNKGHo3YE5E3s= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= diff --git a/policy/parse.go b/policy/parse.go deleted file mode 100644 index 206c1a68..00000000 --- a/policy/parse.go +++ /dev/null @@ -1,144 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package policy - -import ( - "context" - "encoding/json" - "fmt" - "strings" - - "github.com/sigstore/policy-controller/pkg/apis/glob" - "github.com/sigstore/policy-controller/pkg/apis/policy/v1alpha1" - "github.com/sigstore/policy-controller/pkg/apis/policy/v1beta1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "knative.dev/pkg/apis" - "sigs.k8s.io/yaml" -) - -// Parse decodes a provided YAML document containing zero or more objects into -// a collection of unstructured.Unstructured objects. -func Parse(_ context.Context, document string) ([]*unstructured.Unstructured, error) { - docs := strings.Split(document, "\n---\n") - - objs := make([]*unstructured.Unstructured, 0, len(docs)) - for i, doc := range docs { - doc = strings.TrimSpace(doc) - if doc == "" { - continue - } - var obj unstructured.Unstructured - if err := yaml.Unmarshal([]byte(doc), &obj); err != nil { - return nil, fmt.Errorf("decoding object[%d]: %w", i, err) - } - if obj.GetAPIVersion() == "" { - return nil, apis.ErrMissingField("apiVersion").ViaIndex(i) - } - if obj.GetName() == "" { - return nil, apis.ErrMissingField("metadata.name").ViaIndex(i) - } - objs = append(objs, &obj) - } - return objs, nil -} - -// ParseClusterImagePolicies returns ClusterImagePolicy objects found in the -// policy document. -func ParseClusterImagePolicies(ctx context.Context, document string) (cips []*v1beta1.ClusterImagePolicy, warns error, err error) { - if warns, err = Validate(ctx, document); err != nil { - return nil, warns, err - } - - cips, err = parseClusterImagePolicies(ctx, document) - if err != nil { - return nil, warns, err - } - - return cips, warns, nil -} - -// UnsafeParseClusterImagePolicies returns ClusterImagePolicy objects found in the -// policy document, without validating if the policy is valid. -func UnsafeParseClusterImagePolicies(ctx context.Context, document string) (cips []*v1beta1.ClusterImagePolicy, err error) { - return parseClusterImagePolicies(ctx, document) -} - -// CoversImage parses the given policy document, and checks if the target image -// matches any of the image globs included in the policy. -func CoversImage(ctx context.Context, document, target string) (bool, error) { - cips, _, err := ParseClusterImagePolicies(ctx, document) - if err != nil { - return false, err - } - if len(cips) != 1 { - return false, fmt.Errorf("document must contain exactly one ClusterImagePolicy (%d found)", len(cips)) - } - - for _, image := range cips[0].Spec.Images { - ok, err := glob.Match(image.Glob, target) - if err != nil { - return false, err - } - if ok { - return true, nil - } - } - return false, nil -} - -func parseClusterImagePolicies(ctx context.Context, document string) (cips []*v1beta1.ClusterImagePolicy, err error) { - ol, err := Parse(ctx, document) - if err != nil { - return nil, err - } - - cips = make([]*v1beta1.ClusterImagePolicy, 0) - for _, obj := range ol { - gv, err := schema.ParseGroupVersion(obj.GetAPIVersion()) - if err != nil { - // Practically unstructured.Unstructured won't let this happen. - return nil, fmt.Errorf("error parsing apiVersion of: %w", err) - } - - cip := &v1beta1.ClusterImagePolicy{} - - switch gv.WithKind(obj.GetKind()) { - case v1alpha1.SchemeGroupVersion.WithKind("ClusterImagePolicy"): - v1a1 := &v1alpha1.ClusterImagePolicy{} - if err := convert(obj, v1a1); err != nil { - return nil, err - } - if err := v1a1.ConvertTo(ctx, cip); err != nil { - return nil, err - } - - case v1beta1.SchemeGroupVersion.WithKind("ClusterImagePolicy"): - // This is allowed, but we should convert things. - if err := convert(obj, cip); err != nil { - return nil, err - } - - default: - continue - } - - cips = append(cips, cip) - } - return cips, nil -} - -func convert(from interface{}, to runtime.Object) error { - bs, err := json.Marshal(from) - if err != nil { - return fmt.Errorf("Marshal() = %w", err) - } - if err := json.Unmarshal(bs, to); err != nil { - return fmt.Errorf("Unmarshal() = %w", err) - } - return nil -} diff --git a/policy/parse_test.go b/policy/parse_test.go deleted file mode 100644 index e6345ea3..00000000 --- a/policy/parse_test.go +++ /dev/null @@ -1,181 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package policy - -import ( - "context" - "errors" - "testing" - - "github.com/google/go-cmp/cmp" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "knative.dev/pkg/apis" -) - -func TestParse(t *testing.T) { - tests := []struct { - name string - doc string - want []*unstructured.Unstructured - wantErr error - }{{ - name: "good single object", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: {} -`, - want: []*unstructured.Unstructured{{ - Object: map[string]interface{}{ - "apiVersion": "policy.sigstore.dev/v1beta1", - "kind": "ClusterImagePolicy", - "metadata": map[string]interface{}{ - "name": "blah", - }, - "spec": map[string]interface{}{}, - }, - }}, - }, { - name: "good multi-object", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: {} ---- ---- -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: foo -spec: {} ---- - ---- -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: bar -spec: {} -`, - want: []*unstructured.Unstructured{{ - Object: map[string]interface{}{ - "apiVersion": "policy.sigstore.dev/v1beta1", - "kind": "ClusterImagePolicy", - "metadata": map[string]interface{}{ - "name": "blah", - }, - "spec": map[string]interface{}{}, - }, - }, { - Object: map[string]interface{}{ - "apiVersion": "policy.sigstore.dev/v1beta1", - "kind": "ClusterImagePolicy", - "metadata": map[string]interface{}{ - "name": "foo", - }, - "spec": map[string]interface{}{}, - }, - }, { - Object: map[string]interface{}{ - "apiVersion": "policy.sigstore.dev/v1beta1", - "kind": "ClusterImagePolicy", - "metadata": map[string]interface{}{ - "name": "bar", - }, - "spec": map[string]interface{}{}, - }, - }}, - }, { - name: "bad missing apiVersion", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: {} ---- -# Missing: apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: foo -spec: {} ---- -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: bar -spec: {} -`, - wantErr: apis.ErrMissingField("[1].apiVersion"), - }, { - name: "bad missing kind", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: {} ---- -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: foo -spec: {} ---- -apiVersion: policy.sigstore.dev/v1beta1 -# Missing: kind: ClusterImagePolicy -metadata: - name: bar -spec: {} -`, - wantErr: errors.New(`decoding object[2]: error unmarshaling JSON: while decoding JSON: Object 'Kind' is missing in '{"apiVersion":"policy.sigstore.dev/v1beta1","metadata":{"name":"bar"},"spec":{}}'`), - }, { - name: "bad missing apiVersion", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - # Missing: name: blah -sp dec: {} ---- -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: foo -spec: {} ---- -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: bar -spec: {} -`, - wantErr: apis.ErrMissingField("[0].metadata.name"), - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - got, gotErr := Parse(context.Background(), test.doc) - - switch { - case (gotErr != nil) != (test.wantErr != nil): - t.Fatalf("Parse() = %v, wanted %v", gotErr, test.wantErr) - case gotErr != nil && gotErr.Error() != test.wantErr.Error(): - t.Fatalf("Parse() = %v, wanted %v", gotErr, test.wantErr) - case gotErr != nil: - return // This was an error test. - } - - if diff := cmp.Diff(got, test.want); diff != "" { - t.Errorf("Parse (-got, +want) = %s", diff) - } - }) - } -} diff --git a/policy/validate.go b/policy/validate.go deleted file mode 100644 index a785fe5b..00000000 --- a/policy/validate.go +++ /dev/null @@ -1,103 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package policy - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - - "github.com/sigstore/policy-controller/pkg/apis/policy/v1alpha1" - "github.com/sigstore/policy-controller/pkg/apis/policy/v1beta1" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "knative.dev/pkg/apis" -) - -var ( - // ErrEmptyDocument is the error returned when no document body is - // specified. - ErrEmptyDocument = errors.New("document is required to create policy") - - // ErrUnknownType is the error returned when a type contained in the policy - // is unrecognized. - ErrUnknownType = errors.New("unknown type") -) - -// Validate decodes a provided YAML document containing zero or more objects -// and performs limited validation on them. -func Validate(ctx context.Context, document string) (warns error, err error) { - if len(document) == 0 { - return nil, ErrEmptyDocument - } - - uol, err := Parse(ctx, document) - if err != nil { - return nil, err - } - - for i, uo := range uol { - switch uo.GroupVersionKind() { - case v1beta1.SchemeGroupVersion.WithKind("ClusterImagePolicy"): - if warns, err = validate(ctx, uo, &v1beta1.ClusterImagePolicy{}); err != nil { - return - } - - case v1alpha1.SchemeGroupVersion.WithKind("ClusterImagePolicy"): - if warns, err = validate(ctx, uo, &v1alpha1.ClusterImagePolicy{}); err != nil { - return - } - - case corev1.SchemeGroupVersion.WithKind("Secret"): - if uo.GetNamespace() != "cosign-system" { - return warns, apis.ErrInvalidValue(uo.GetNamespace(), "metadata.namespace").ViaIndex(i) - } - // Any additional validation worth performing? Should we check the - // schema of the secret matches the expectations of cosigned? - - default: - return warns, fmt.Errorf("%w: %v", ErrUnknownType, uo.GroupVersionKind()) - } - } - return warns, nil -} - -type crd interface { - apis.Validatable - apis.Defaultable -} - -func validate(ctx context.Context, uo *unstructured.Unstructured, v crd) (warns error, err error) { - b, err := json.Marshal(uo) - if err != nil { - return nil, fmt.Errorf("unable to marshal: %w", err) - } - - dec := json.NewDecoder(bytes.NewBuffer(b)) - dec.DisallowUnknownFields() - if err := dec.Decode(v); err != nil { - return nil, fmt.Errorf("unable to unmarshal: %w", err) - } - - // Apply defaulting to simulate the defaulting webhook that runs prior - // to validation. - v.SetDefaults(ctx) - - // We can't just return v.Validate(ctx) because of Go's typed nils. - // nolint:revive - if ve := v.Validate(ctx); ve != nil { - // Separate validation warnings from errors so the caller can discern between them. - if warnFE := ve.Filter(apis.WarningLevel); warnFE != nil { - warns = warnFE - } - if errorFE := ve.Filter(apis.ErrorLevel); errorFE != nil { - err = errorFE - } - } - return -} diff --git a/policy/validate_test.go b/policy/validate_test.go deleted file mode 100644 index 15df0a31..00000000 --- a/policy/validate_test.go +++ /dev/null @@ -1,194 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package policy - -import ( - "context" - "errors" - "testing" - - policycontrollerconfig "github.com/sigstore/policy-controller/pkg/config" - "knative.dev/pkg/apis" -) - -func TestValidate(t *testing.T) { - tests := []struct { - name string - doc string - wantWarns error - wantErr error - allowEmptyAuthorities bool - }{{ - name: "good single object", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: - images: - - glob: '*' - authorities: - - keyless: - identities: - - issuer: https://issuer.example.com - subject: foo@example.com - url: https://fulcio.sigstore.dev -`, - wantErr: nil, - }, { - name: "good CIP and Secret", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: - images: - - glob: '*' - authorities: - - keyless: - identities: - - issuer: https://issuer.example.com - subject: foo@example.com - url: https://fulcio.sigstore.dev ---- -apiVersion: v1 -kind: Secret -metadata: - name: foo - namespace: cosign-system -stringData: - foo: bar -`, - wantErr: nil, - }, { - name: "bad secret namespace", - doc: ` -apiVersion: v1 -kind: Secret -metadata: - name: foo - namespace: something-system -stringData: - foo: bar -`, - wantErr: errors.New(`invalid value: something-system: [0].metadata.namespace`), - }, { - name: "bad image policy", - doc: ` -apiVersion: policy.sigstore.dev/v1alpha1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: - images: - - glob: '*' - authorities: - - key: {} -`, - wantErr: apis.ErrMissingOneOf("data", "kms", "secretref").ViaField("key").ViaFieldIndex("authorities", 0).ViaField("spec"), - }, { - name: "empty document", - doc: ``, - wantErr: ErrEmptyDocument, - }, { - name: "object missing kind", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -# Missing: kind: ClusterImagePolicy -metadata: - name: blah -spec: {} -`, - wantErr: errors.New(`decoding object[0]: error unmarshaling JSON: while decoding JSON: Object 'Kind' is missing in '{"apiVersion":"policy.sigstore.dev/v1beta1","metadata":{"name":"blah"},"spec":{}}'`), - }, { - name: "unknown field", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: - asdf: dfsadf -`, - wantErr: errors.New(`unable to unmarshal: json: unknown field "asdf"`), - }, { - name: "unknown type", - doc: ` -apiVersion: unknown.dev/v1 -kind: OtherPolicy -metadata: - name: blah -spec: {} -`, - wantErr: errors.New(`unknown type: unknown.dev/v1, Kind=OtherPolicy`), - }, { - name: "error - missing field", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: - images: - - glob: '*' - authorities: - - keyless: - url: https://fulcio.sigstore.dev -`, - wantWarns: nil, - wantErr: errors.New("missing field(s): spec.authorities[0].keyless.identities"), - }, - { - name: "admit - missing authorities", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: - images: - - glob: '*' -`, - wantErr: nil, - allowEmptyAuthorities: true, - }, { - name: "deny - missing authorities", - doc: ` -apiVersion: policy.sigstore.dev/v1beta1 -kind: ClusterImagePolicy -metadata: - name: blah -spec: - images: - - glob: '*' -`, - wantErr: errors.New("missing field(s): spec.authorities"), - }} - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - testContext := context.Background() - if test.allowEmptyAuthorities { - testContext = policycontrollerconfig.ToContext(testContext, &policycontrollerconfig.PolicyControllerConfig{FailOnEmptyAuthorities: false}) - } - gotWarns, gotErr := Validate(testContext, test.doc) - if (gotErr != nil) != (test.wantErr != nil) { - t.Fatalf("Parse() = %v, wanted %v", gotErr, test.wantErr) - } - if (gotWarns != nil) != (test.wantWarns != nil) { - t.Fatalf("Parse() = %v, wanted %v", gotWarns, test.wantWarns) - } - if gotErr != nil && gotErr.Error() != test.wantErr.Error() { - t.Fatalf("Parse() = %v, wanted %v", gotErr, test.wantErr) - } - if gotWarns != nil && gotWarns.Error() != test.wantWarns.Error() { - t.Fatalf("Parse() = %v, wanted %v", gotWarns, test.wantWarns) - } - }) - } -} diff --git a/proto/platform/iam/v1/clients.go b/proto/platform/iam/v1/clients.go index f27fab3d..89e0fbd2 100644 --- a/proto/platform/iam/v1/clients.go +++ b/proto/platform/iam/v1/clients.go @@ -33,8 +33,6 @@ type Clients interface { Subscriptions() events.SubscriptionsClient - Policies() PoliciesClient - Close() error } @@ -76,8 +74,6 @@ func NewClients(ctx context.Context, iamURL string, token string) (Clients, erro subscription: events.NewSubscriptionsClient(conn), - policy: NewPoliciesClient(conn), - conn: conn, }, nil } @@ -96,8 +92,6 @@ func NewClientsFromConnection(conn *grpc.ClientConn) Clients { subscription: events.NewSubscriptionsClient(conn), - policy: NewPoliciesClient(conn), - // conn is not set, this client struct does not own closing it. } } @@ -115,8 +109,6 @@ type clients struct { subscription events.SubscriptionsClient - policy PoliciesClient - conn *grpc.ClientConn } @@ -156,10 +148,6 @@ func (c *clients) Subscriptions() events.SubscriptionsClient { return c.subscription } -func (c *clients) Policies() PoliciesClient { - return c.policy -} - func (c *clients) Close() error { if c.conn != nil { return c.conn.Close() diff --git a/proto/platform/iam/v1/doc.go b/proto/platform/iam/v1/doc.go index c65b13e5..8fccce6d 100644 --- a/proto/platform/iam/v1/doc.go +++ b/proto/platform/iam/v1/doc.go @@ -10,7 +10,6 @@ SPDX-License-Identifier: Apache-2.0 //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. role_binding.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. identity.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. account_associations.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. policies.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. identity_providers.platform.proto // Package v1 contains the v1 GRPC client and server definitions diff --git a/proto/platform/iam/v1/policies.platform.event.go b/proto/platform/iam/v1/policies.platform.event.go deleted file mode 100644 index b34d781a..00000000 --- a/proto/platform/iam/v1/policies.platform.event.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "chainguard.dev/sdk/uidp" -) - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *Policy) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *Policy) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *DeletePolicyRequest) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *DeletePolicyRequest) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.Redact. -func (x *DeletePolicyRequest) CloudEventsRedact() interface{} { - return nil -} diff --git a/proto/platform/iam/v1/policies.platform.pb.go b/proto/platform/iam/v1/policies.platform.pb.go deleted file mode 100644 index 60a2ca7c..00000000 --- a/proto/platform/iam/v1/policies.platform.pb.go +++ /dev/null @@ -1,1027 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: policies.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type CreatePolicyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // parent_id, The Group UIDP path under which the new policy is associated. - ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - // Policy is the policy to create; - Policy *Policy `protobuf:"bytes,2,opt,name=policy,proto3" json:"policy,omitempty"` -} - -func (x *CreatePolicyRequest) Reset() { - *x = CreatePolicyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreatePolicyRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreatePolicyRequest) ProtoMessage() {} - -func (x *CreatePolicyRequest) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreatePolicyRequest.ProtoReflect.Descriptor instead. -func (*CreatePolicyRequest) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *CreatePolicyRequest) GetParentId() string { - if x != nil { - return x.ParentId - } - return "" -} - -func (x *CreatePolicyRequest) GetPolicy() *Policy { - if x != nil { - return x.Policy - } - return nil -} - -type Policy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is identifier of this specific policy. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name, human readable name of policy. - // This field is populated from the document and any existing value will be ignored for Create/Update. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // description, human readable description of policy. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // document, YAML encoded policy document. - Document string `protobuf:"bytes,4,opt,name=document,proto3" json:"document,omitempty"` - // created_at is the timestamp for when the policy was created. - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - // updated_at is the timestamp when the current version of the policy was last updated. - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` - // enforced_version contains information about the enforced version of this policy. - // When used as a return value, Policy.name, Policy.description, and Policy.document are all copies of - // the respective fields in enforced_version for backwards compatibility. enforced_version may be empty for - // legacy policies without versions. - // When used for Create or Update, set enforced_version.label to set an optional version label. - EnforcedVersion *PolicyVersion `protobuf:"bytes,7,opt,name=enforced_version,json=enforcedVersion,proto3" json:"enforced_version,omitempty"` -} - -func (x *Policy) Reset() { - *x = Policy{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Policy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Policy) ProtoMessage() {} - -func (x *Policy) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Policy.ProtoReflect.Descriptor instead. -func (*Policy) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *Policy) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Policy) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Policy) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Policy) GetDocument() string { - if x != nil { - return x.Document - } - return "" -} - -func (x *Policy) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -func (x *Policy) GetUpdatedAt() *timestamppb.Timestamp { - if x != nil { - return x.UpdatedAt - } - return nil -} - -func (x *Policy) GetEnforcedVersion() *PolicyVersion { - if x != nil { - return x.EnforcedVersion - } - return nil -} - -type PolicyAuthor struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the UID of the author identity. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // email is the email address of the author, if known. - Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` -} - -func (x *PolicyAuthor) Reset() { - *x = PolicyAuthor{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyAuthor) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyAuthor) ProtoMessage() {} - -func (x *PolicyAuthor) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PolicyAuthor.ProtoReflect.Descriptor instead. -func (*PolicyAuthor) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *PolicyAuthor) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PolicyAuthor) GetEmail() string { - if x != nil { - return x.Email - } - return "" -} - -type PolicyList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Policy `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *PolicyList) Reset() { - *x = PolicyList{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyList) ProtoMessage() {} - -func (x *PolicyList) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_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 PolicyList.ProtoReflect.Descriptor instead. -func (*PolicyList) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *PolicyList) GetItems() []*Policy { - if x != nil { - return x.Items - } - return nil -} - -type PolicyFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // uidp filers records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` - // name is the exact name of the record. - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *PolicyFilter) Reset() { - *x = PolicyFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyFilter) ProtoMessage() {} - -func (x *PolicyFilter) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PolicyFilter.ProtoReflect.Descriptor instead. -func (*PolicyFilter) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *PolicyFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PolicyFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *PolicyFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type DeletePolicyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeletePolicyRequest) Reset() { - *x = DeletePolicyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeletePolicyRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeletePolicyRequest) ProtoMessage() {} - -func (x *DeletePolicyRequest) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeletePolicyRequest.ProtoReflect.Descriptor instead. -func (*DeletePolicyRequest) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *DeletePolicyRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type PolicyVersion struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the identifier of this specific policy version. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name, human-readable name of policy. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // description, human-readable description of policy. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // document, YAML encoded policy document. - Document string `protobuf:"bytes,4,opt,name=document,proto3" json:"document,omitempty"` - // author is information about the identity that created/updated this version of the policy, if known. - Author *PolicyAuthor `protobuf:"bytes,5,opt,name=author,proto3" json:"author,omitempty"` - // created_at is the timestamp from when this version was created. - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` - // label is a human-readable identifier for this version of the policy. - Label string `protobuf:"bytes,7,opt,name=label,proto3" json:"label,omitempty"` -} - -func (x *PolicyVersion) Reset() { - *x = PolicyVersion{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyVersion) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyVersion) ProtoMessage() {} - -func (x *PolicyVersion) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PolicyVersion.ProtoReflect.Descriptor instead. -func (*PolicyVersion) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{6} -} - -func (x *PolicyVersion) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PolicyVersion) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PolicyVersion) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PolicyVersion) GetDocument() string { - if x != nil { - return x.Document - } - return "" -} - -func (x *PolicyVersion) GetAuthor() *PolicyAuthor { - if x != nil { - return x.Author - } - return nil -} - -func (x *PolicyVersion) GetCreatedAt() *timestamppb.Timestamp { - if x != nil { - return x.CreatedAt - } - return nil -} - -func (x *PolicyVersion) GetLabel() string { - if x != nil { - return x.Label - } - return "" -} - -type ActivateVersionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // version_id is the identifier of the policy version to enforce. - VersionId string `protobuf:"bytes,1,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` -} - -func (x *ActivateVersionRequest) Reset() { - *x = ActivateVersionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ActivateVersionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ActivateVersionRequest) ProtoMessage() {} - -func (x *ActivateVersionRequest) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ActivateVersionRequest.ProtoReflect.Descriptor instead. -func (*ActivateVersionRequest) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{7} -} - -func (x *ActivateVersionRequest) GetVersionId() string { - if x != nil { - return x.VersionId - } - return "" -} - -type ListVersionsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // policy_id is the identifier of the policy to list versions of. - PolicyId string `protobuf:"bytes,1,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` -} - -func (x *ListVersionsRequest) Reset() { - *x = ListVersionsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListVersionsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListVersionsRequest) ProtoMessage() {} - -func (x *ListVersionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListVersionsRequest.ProtoReflect.Descriptor instead. -func (*ListVersionsRequest) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{8} -} - -func (x *ListVersionsRequest) GetPolicyId() string { - if x != nil { - return x.PolicyId - } - return "" -} - -type PolicyVersionList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*PolicyVersion `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *PolicyVersionList) Reset() { - *x = PolicyVersionList{} - if protoimpl.UnsafeEnabled { - mi := &file_policies_platform_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyVersionList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyVersionList) ProtoMessage() {} - -func (x *PolicyVersionList) ProtoReflect() protoreflect.Message { - mi := &file_policies_platform_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PolicyVersionList.ProtoReflect.Descriptor instead. -func (*PolicyVersionList) Descriptor() ([]byte, []int) { - return file_policies_platform_proto_rawDescGZIP(), []int{9} -} - -func (x *PolicyVersionList) GetItems() []*PolicyVersion { - if x != nil { - return x.Items - } - return nil -} - -var File_policies_platform_proto protoreflect.FileDescriptor - -var file_policies_platform_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x73, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0xbb, 0x02, - 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x65, 0x6e, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x65, 0x6e, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x34, 0x0a, 0x0c, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x22, 0x43, 0x0a, 0x0a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x35, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6e, 0x0a, 0x0c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, - 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2d, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, - 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x81, 0x02, 0x0a, 0x0d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, - 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x52, 0x06, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x3f, 0x0a, 0x16, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, - 0x09, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x3a, 0x0a, 0x13, 0x4c, 0x69, - 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x22, 0x51, 0x0a, 0x11, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x32, 0xd0, 0x08, 0x0a, 0x08, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0xcd, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x12, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x22, 0x1f, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, - 0x65, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, - 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa1, 0x06, 0xc2, 0xf0, 0x8e, - 0xfc, 0x0b, 0x33, 0x0a, 0x28, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x7a, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x12, 0x12, 0x10, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x69, 0x65, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xa3, 0x06, - 0x10, 0x01, 0x12, 0xb5, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2c, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa4, - 0x06, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x33, 0x0a, 0x28, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, - 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xb4, 0x01, 0x0a, 0x06, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x1f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, - 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x68, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, - 0x01, 0x2a, 0x1a, 0x18, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa2, 0x06, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x33, 0x0a, 0x28, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, - 0x01, 0x12, 0xa3, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x39, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa3, 0x06, 0x12, 0xe2, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x7d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x28, 0x22, 0x26, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xa2, 0x06, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3d, 0x0a, - 0x32, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6a, 0x0a, 0x22, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, - 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, - 0x76, 0x31, 0x42, 0x18, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, - 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_policies_platform_proto_rawDescOnce sync.Once - file_policies_platform_proto_rawDescData = file_policies_platform_proto_rawDesc -) - -func file_policies_platform_proto_rawDescGZIP() []byte { - file_policies_platform_proto_rawDescOnce.Do(func() { - file_policies_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_policies_platform_proto_rawDescData) - }) - return file_policies_platform_proto_rawDescData -} - -var file_policies_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_policies_platform_proto_goTypes = []interface{}{ - (*CreatePolicyRequest)(nil), // 0: chainguard.platform.iam.CreatePolicyRequest - (*Policy)(nil), // 1: chainguard.platform.iam.Policy - (*PolicyAuthor)(nil), // 2: chainguard.platform.iam.PolicyAuthor - (*PolicyList)(nil), // 3: chainguard.platform.iam.PolicyList - (*PolicyFilter)(nil), // 4: chainguard.platform.iam.PolicyFilter - (*DeletePolicyRequest)(nil), // 5: chainguard.platform.iam.DeletePolicyRequest - (*PolicyVersion)(nil), // 6: chainguard.platform.iam.PolicyVersion - (*ActivateVersionRequest)(nil), // 7: chainguard.platform.iam.ActivateVersionRequest - (*ListVersionsRequest)(nil), // 8: chainguard.platform.iam.ListVersionsRequest - (*PolicyVersionList)(nil), // 9: chainguard.platform.iam.PolicyVersionList - (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 11: chainguard.platform.common.UIDPFilter - (*emptypb.Empty)(nil), // 12: google.protobuf.Empty -} -var file_policies_platform_proto_depIdxs = []int32{ - 1, // 0: chainguard.platform.iam.CreatePolicyRequest.policy:type_name -> chainguard.platform.iam.Policy - 10, // 1: chainguard.platform.iam.Policy.created_at:type_name -> google.protobuf.Timestamp - 10, // 2: chainguard.platform.iam.Policy.updated_at:type_name -> google.protobuf.Timestamp - 6, // 3: chainguard.platform.iam.Policy.enforced_version:type_name -> chainguard.platform.iam.PolicyVersion - 1, // 4: chainguard.platform.iam.PolicyList.items:type_name -> chainguard.platform.iam.Policy - 11, // 5: chainguard.platform.iam.PolicyFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 2, // 6: chainguard.platform.iam.PolicyVersion.author:type_name -> chainguard.platform.iam.PolicyAuthor - 10, // 7: chainguard.platform.iam.PolicyVersion.created_at:type_name -> google.protobuf.Timestamp - 6, // 8: chainguard.platform.iam.PolicyVersionList.items:type_name -> chainguard.platform.iam.PolicyVersion - 0, // 9: chainguard.platform.iam.Policies.Create:input_type -> chainguard.platform.iam.CreatePolicyRequest - 4, // 10: chainguard.platform.iam.Policies.List:input_type -> chainguard.platform.iam.PolicyFilter - 5, // 11: chainguard.platform.iam.Policies.Delete:input_type -> chainguard.platform.iam.DeletePolicyRequest - 1, // 12: chainguard.platform.iam.Policies.Update:input_type -> chainguard.platform.iam.Policy - 8, // 13: chainguard.platform.iam.Policies.ListVersions:input_type -> chainguard.platform.iam.ListVersionsRequest - 7, // 14: chainguard.platform.iam.Policies.ActivateVersion:input_type -> chainguard.platform.iam.ActivateVersionRequest - 1, // 15: chainguard.platform.iam.Policies.Create:output_type -> chainguard.platform.iam.Policy - 3, // 16: chainguard.platform.iam.Policies.List:output_type -> chainguard.platform.iam.PolicyList - 12, // 17: chainguard.platform.iam.Policies.Delete:output_type -> google.protobuf.Empty - 1, // 18: chainguard.platform.iam.Policies.Update:output_type -> chainguard.platform.iam.Policy - 9, // 19: chainguard.platform.iam.Policies.ListVersions:output_type -> chainguard.platform.iam.PolicyVersionList - 1, // 20: chainguard.platform.iam.Policies.ActivateVersion:output_type -> chainguard.platform.iam.Policy - 15, // [15:21] is the sub-list for method output_type - 9, // [9:15] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name -} - -func init() { file_policies_platform_proto_init() } -func file_policies_platform_proto_init() { - if File_policies_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_policies_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreatePolicyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policies_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Policy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policies_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyAuthor); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policies_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policies_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policies_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeletePolicyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policies_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyVersion); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policies_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActivateVersionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policies_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListVersionsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policies_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyVersionList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_policies_platform_proto_rawDesc, - NumEnums: 0, - NumMessages: 10, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_policies_platform_proto_goTypes, - DependencyIndexes: file_policies_platform_proto_depIdxs, - MessageInfos: file_policies_platform_proto_msgTypes, - }.Build() - File_policies_platform_proto = out.File - file_policies_platform_proto_rawDesc = nil - file_policies_platform_proto_goTypes = nil - file_policies_platform_proto_depIdxs = nil -} diff --git a/proto/platform/iam/v1/policies.platform.pb.gw.go b/proto/platform/iam/v1/policies.platform.pb.gw.go deleted file mode 100644 index f741781f..00000000 --- a/proto/platform/iam/v1/policies.platform.pb.gw.go +++ /dev/null @@ -1,703 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: policies.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Policies_Create_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreatePolicyRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Policy); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Policies_Create_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreatePolicyRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Policy); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Policies_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Policies_List_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PolicyFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Policies_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Policies_List_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PolicyFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Policies_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Policies_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeletePolicyRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Policies_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeletePolicyRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Policies_Update_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Policy - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Policies_Update_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Policy - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Update(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Policies_ListVersions_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListVersionsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["policy_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "policy_id") - } - - protoReq.PolicyId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "policy_id", err) - } - - msg, err := client.ListVersions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Policies_ListVersions_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListVersionsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["policy_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "policy_id") - } - - protoReq.PolicyId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "policy_id", err) - } - - msg, err := server.ListVersions(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Policies_ActivateVersion_0(ctx context.Context, marshaler runtime.Marshaler, client PoliciesClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ActivateVersionRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["version_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "version_id") - } - - protoReq.VersionId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "version_id", err) - } - - msg, err := client.ActivateVersion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Policies_ActivateVersion_0(ctx context.Context, marshaler runtime.Marshaler, server PoliciesServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ActivateVersionRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["version_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "version_id") - } - - protoReq.VersionId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "version_id", err) - } - - msg, err := server.ActivateVersion(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterPoliciesHandlerServer registers the http handlers for service Policies to "mux". -// UnaryRPC :call PoliciesServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPoliciesHandlerFromEndpoint instead. -func RegisterPoliciesHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PoliciesServer) error { - - mux.Handle("POST", pattern_Policies_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Create", runtime.WithHTTPPathPattern("/iam/v1/policies/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Policies_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Policies_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/List", runtime.WithHTTPPathPattern("/iam/v1/policies")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Policies_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Policies_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Delete", runtime.WithHTTPPathPattern("/iam/v1/policies/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Policies_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Policies_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Update", runtime.WithHTTPPathPattern("/iam/v1/policies/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Policies_Update_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Policies_ListVersions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/ListVersions", runtime.WithHTTPPathPattern("/iam/v1/policyVersions/{policy_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Policies_ListVersions_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_ListVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Policies_ActivateVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.iam.Policies/ActivateVersion", runtime.WithHTTPPathPattern("/iam/v1/policyVersions/{version_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Policies_ActivateVersion_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_ActivateVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterPoliciesHandlerFromEndpoint is same as RegisterPoliciesHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterPoliciesHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterPoliciesHandler(ctx, mux, conn) -} - -// RegisterPoliciesHandler registers the http handlers for service Policies to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterPoliciesHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterPoliciesHandlerClient(ctx, mux, NewPoliciesClient(conn)) -} - -// RegisterPoliciesHandlerClient registers the http handlers for service Policies -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PoliciesClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PoliciesClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "PoliciesClient" to call the correct interceptors. -func RegisterPoliciesHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PoliciesClient) error { - - mux.Handle("POST", pattern_Policies_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Create", runtime.WithHTTPPathPattern("/iam/v1/policies/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Policies_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Policies_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/List", runtime.WithHTTPPathPattern("/iam/v1/policies")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Policies_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Policies_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Delete", runtime.WithHTTPPathPattern("/iam/v1/policies/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Policies_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Policies_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/Update", runtime.WithHTTPPathPattern("/iam/v1/policies/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Policies_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Policies_ListVersions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/ListVersions", runtime.WithHTTPPathPattern("/iam/v1/policyVersions/{policy_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Policies_ListVersions_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_ListVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Policies_ActivateVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.iam.Policies/ActivateVersion", runtime.WithHTTPPathPattern("/iam/v1/policyVersions/{version_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Policies_ActivateVersion_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Policies_ActivateVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Policies_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policies", "parent_id"}, "")) - - pattern_Policies_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"iam", "v1", "policies"}, "")) - - pattern_Policies_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policies", "id"}, "")) - - pattern_Policies_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policies", "id"}, "")) - - pattern_Policies_ListVersions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policyVersions", "policy_id"}, "")) - - pattern_Policies_ActivateVersion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"iam", "v1", "policyVersions", "version_id"}, "")) -) - -var ( - forward_Policies_Create_0 = runtime.ForwardResponseMessage - - forward_Policies_List_0 = runtime.ForwardResponseMessage - - forward_Policies_Delete_0 = runtime.ForwardResponseMessage - - forward_Policies_Update_0 = runtime.ForwardResponseMessage - - forward_Policies_ListVersions_0 = runtime.ForwardResponseMessage - - forward_Policies_ActivateVersion_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/iam/v1/policies.platform.proto b/proto/platform/iam/v1/policies.platform.proto deleted file mode 100644 index e7f42222..00000000 --- a/proto/platform/iam/v1/policies.platform.proto +++ /dev/null @@ -1,208 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/iam/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.iam.v1"; -option java_outer_classname = "PlatformIAMPoliciesProto"; - -package chainguard.platform.iam; - -import "google/protobuf/empty.proto"; -import "google/protobuf/timestamp.proto"; -import "google/api/annotations.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Policies { - rpc Create(CreatePolicyRequest) returns (Policy) { - option (google.api.http) = { - post: "/iam/v1/policies/{parent_id=**}" - body: "policy" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_POLICY_CREATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.policy.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc List(PolicyFilter) returns (PolicyList) { - option (google.api.http) = { - get: "/iam/v1/policies" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_POLICY_LIST] - unscoped: true - } - }; - } - - rpc Delete(DeletePolicyRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/iam/v1/policies/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_POLICY_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.policy.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Update(Policy) returns (Policy) { - option (google.api.http) = { - put: "/iam/v1/policies/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_POLICY_UPDATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.policy.updated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc ListVersions(ListVersionsRequest) returns (PolicyVersionList) { - option (google.api.http) = { - get: "/iam/v1/policyVersions/{policy_id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_POLICY_LIST] - } - }; - } - - rpc ActivateVersion(ActivateVersionRequest) returns (Policy) { - option (google.api.http) = { - post: "/iam/v1/policyVersions/{version_id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_IAM_POLICY_UPDATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.iam.policy.version.activated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } -} - -message CreatePolicyRequest { - // parent_id, The Group UIDP path under which the new policy is associated. - string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; - - // Policy is the policy to create; - Policy policy = 2; -} - -message Policy { - // id is identifier of this specific policy. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - - // name, human readable name of policy. - // This field is populated from the document and any existing value will be ignored for Create/Update. - string name = 2; - - // description, human readable description of policy. - string description = 3; - - // document, YAML encoded policy document. - string document = 4; - - // created_at is the timestamp for when the policy was created. - google.protobuf.Timestamp created_at = 5; - - // updated_at is the timestamp when the current version of the policy was last updated. - google.protobuf.Timestamp updated_at = 6; - - // enforced_version contains information about the enforced version of this policy. - // When used as a return value, Policy.name, Policy.description, and Policy.document are all copies of - // the respective fields in enforced_version for backwards compatibility. enforced_version may be empty for - // legacy policies without versions. - // When used for Create or Update, set enforced_version.label to set an optional version label. - PolicyVersion enforced_version = 7; -} - -message PolicyAuthor { - // id is the UID of the author identity. - string id = 1; - - // email is the email address of the author, if known. - string email = 2; -} - -message PolicyList { - repeated Policy items = 1; -} - -message PolicyFilter { - // id is the exact UIDP of the record. - string id = 1; - - // uidp filers records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 2; - - // name is the exact name of the record. - string name = 3; -} - -message DeletePolicyRequest { - // id is the exact UIDP of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message PolicyVersion { - // id is the identifier of this specific policy version. - string id = 1; - - // name, human-readable name of policy. - string name = 2; - - // description, human-readable description of policy. - string description = 3; - - // document, YAML encoded policy document. - string document = 4; - - // author is information about the identity that created/updated this version of the policy, if known. - PolicyAuthor author = 5; - - // created_at is the timestamp from when this version was created. - google.protobuf.Timestamp created_at = 6; - - // label is a human-readable identifier for this version of the policy. - string label = 7; -} - -message ActivateVersionRequest { - // version_id is the identifier of the policy version to enforce. - string version_id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message ListVersionsRequest { - // policy_id is the identifier of the policy to list versions of. - string policy_id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message PolicyVersionList { - repeated PolicyVersion items = 1; -} - diff --git a/proto/platform/iam/v1/policies.platform_grpc.pb.go b/proto/platform/iam/v1/policies.platform_grpc.pb.go deleted file mode 100644 index 94a15fb1..00000000 --- a/proto/platform/iam/v1/policies.platform_grpc.pb.go +++ /dev/null @@ -1,295 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: policies.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Policies_Create_FullMethodName = "/chainguard.platform.iam.Policies/Create" - Policies_List_FullMethodName = "/chainguard.platform.iam.Policies/List" - Policies_Delete_FullMethodName = "/chainguard.platform.iam.Policies/Delete" - Policies_Update_FullMethodName = "/chainguard.platform.iam.Policies/Update" - Policies_ListVersions_FullMethodName = "/chainguard.platform.iam.Policies/ListVersions" - Policies_ActivateVersion_FullMethodName = "/chainguard.platform.iam.Policies/ActivateVersion" -) - -// PoliciesClient is the client API for Policies service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type PoliciesClient interface { - Create(ctx context.Context, in *CreatePolicyRequest, opts ...grpc.CallOption) (*Policy, error) - List(ctx context.Context, in *PolicyFilter, opts ...grpc.CallOption) (*PolicyList, error) - Delete(ctx context.Context, in *DeletePolicyRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - Update(ctx context.Context, in *Policy, opts ...grpc.CallOption) (*Policy, error) - ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*PolicyVersionList, error) - ActivateVersion(ctx context.Context, in *ActivateVersionRequest, opts ...grpc.CallOption) (*Policy, error) -} - -type policiesClient struct { - cc grpc.ClientConnInterface -} - -func NewPoliciesClient(cc grpc.ClientConnInterface) PoliciesClient { - return &policiesClient{cc} -} - -func (c *policiesClient) Create(ctx context.Context, in *CreatePolicyRequest, opts ...grpc.CallOption) (*Policy, error) { - out := new(Policy) - err := c.cc.Invoke(ctx, Policies_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *policiesClient) List(ctx context.Context, in *PolicyFilter, opts ...grpc.CallOption) (*PolicyList, error) { - out := new(PolicyList) - err := c.cc.Invoke(ctx, Policies_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *policiesClient) Delete(ctx context.Context, in *DeletePolicyRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, Policies_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *policiesClient) Update(ctx context.Context, in *Policy, opts ...grpc.CallOption) (*Policy, error) { - out := new(Policy) - err := c.cc.Invoke(ctx, Policies_Update_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *policiesClient) ListVersions(ctx context.Context, in *ListVersionsRequest, opts ...grpc.CallOption) (*PolicyVersionList, error) { - out := new(PolicyVersionList) - err := c.cc.Invoke(ctx, Policies_ListVersions_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *policiesClient) ActivateVersion(ctx context.Context, in *ActivateVersionRequest, opts ...grpc.CallOption) (*Policy, error) { - out := new(Policy) - err := c.cc.Invoke(ctx, Policies_ActivateVersion_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// PoliciesServer is the server API for Policies service. -// All implementations must embed UnimplementedPoliciesServer -// for forward compatibility -type PoliciesServer interface { - Create(context.Context, *CreatePolicyRequest) (*Policy, error) - List(context.Context, *PolicyFilter) (*PolicyList, error) - Delete(context.Context, *DeletePolicyRequest) (*emptypb.Empty, error) - Update(context.Context, *Policy) (*Policy, error) - ListVersions(context.Context, *ListVersionsRequest) (*PolicyVersionList, error) - ActivateVersion(context.Context, *ActivateVersionRequest) (*Policy, error) - mustEmbedUnimplementedPoliciesServer() -} - -// UnimplementedPoliciesServer must be embedded to have forward compatible implementations. -type UnimplementedPoliciesServer struct { -} - -func (UnimplementedPoliciesServer) Create(context.Context, *CreatePolicyRequest) (*Policy, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedPoliciesServer) List(context.Context, *PolicyFilter) (*PolicyList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedPoliciesServer) Delete(context.Context, *DeletePolicyRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedPoliciesServer) Update(context.Context, *Policy) (*Policy, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} -func (UnimplementedPoliciesServer) ListVersions(context.Context, *ListVersionsRequest) (*PolicyVersionList, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListVersions not implemented") -} -func (UnimplementedPoliciesServer) ActivateVersion(context.Context, *ActivateVersionRequest) (*Policy, error) { - return nil, status.Errorf(codes.Unimplemented, "method ActivateVersion not implemented") -} -func (UnimplementedPoliciesServer) mustEmbedUnimplementedPoliciesServer() {} - -// UnsafePoliciesServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to PoliciesServer will -// result in compilation errors. -type UnsafePoliciesServer interface { - mustEmbedUnimplementedPoliciesServer() -} - -func RegisterPoliciesServer(s grpc.ServiceRegistrar, srv PoliciesServer) { - s.RegisterService(&Policies_ServiceDesc, srv) -} - -func _Policies_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreatePolicyRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PoliciesServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Policies_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PoliciesServer).Create(ctx, req.(*CreatePolicyRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Policies_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PolicyFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PoliciesServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Policies_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PoliciesServer).List(ctx, req.(*PolicyFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _Policies_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeletePolicyRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PoliciesServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Policies_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PoliciesServer).Delete(ctx, req.(*DeletePolicyRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Policies_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Policy) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PoliciesServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Policies_Update_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PoliciesServer).Update(ctx, req.(*Policy)) - } - return interceptor(ctx, in, info, handler) -} - -func _Policies_ListVersions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListVersionsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PoliciesServer).ListVersions(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Policies_ListVersions_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PoliciesServer).ListVersions(ctx, req.(*ListVersionsRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Policies_ActivateVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ActivateVersionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PoliciesServer).ActivateVersion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Policies_ActivateVersion_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PoliciesServer).ActivateVersion(ctx, req.(*ActivateVersionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// Policies_ServiceDesc is the grpc.ServiceDesc for Policies service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Policies_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.iam.Policies", - HandlerType: (*PoliciesServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _Policies_Create_Handler, - }, - { - MethodName: "List", - Handler: _Policies_List_Handler, - }, - { - MethodName: "Delete", - Handler: _Policies_Delete_Handler, - }, - { - MethodName: "Update", - Handler: _Policies_Update_Handler, - }, - { - MethodName: "ListVersions", - Handler: _Policies_ListVersions_Handler, - }, - { - MethodName: "ActivateVersion", - Handler: _Policies_ActivateVersion_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "policies.platform.proto", -} diff --git a/proto/platform/iam/v1/test/mock_client.go b/proto/platform/iam/v1/test/mock_client.go index 90ccc1e6..08444e61 100644 --- a/proto/platform/iam/v1/test/mock_client.go +++ b/proto/platform/iam/v1/test/mock_client.go @@ -22,7 +22,6 @@ type MockIAMClient struct { IdentityProvidersClient MockIdentityProvidersClient GroupAccountAssociationsClient MockGroupAccountAssociationsClient SubscriptionsClient MockSubscriptionsClient - PoliciesClient MockPoliciesClient } var _ iam.Clients = (*MockIAMClient)(nil) @@ -63,10 +62,6 @@ func (m MockIAMClient) Subscriptions() events.SubscriptionsClient { return &m.SubscriptionsClient } -func (m MockIAMClient) Policies() iam.PoliciesClient { - return &m.PoliciesClient -} - func (m MockIAMClient) Close() error { return m.OnClose } diff --git a/proto/platform/iam/v1/test/mock_policies.go b/proto/platform/iam/v1/test/mock_policies.go deleted file mode 100644 index f9ac1179..00000000 --- a/proto/platform/iam/v1/test/mock_policies.go +++ /dev/null @@ -1,118 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - iam "chainguard.dev/sdk/proto/platform/iam/v1" -) - -var _ iam.PoliciesClient = (*MockPoliciesClient)(nil) - -type MockPoliciesClient struct { - OnCreate []PoliciesOnCreate - OnUpdate []PoliciesOnUpdate - OnDelete []PoliciesOnDelete - OnList []PoliciesOnList - OnListVersions []PoliciesOnListVersions - OnActiveVersion []PoliciesOnActivateVersion -} - -type PoliciesOnCreate struct { - Given *iam.CreatePolicyRequest - Created *iam.Policy - Error error -} - -type PoliciesOnUpdate struct { - Given *iam.Policy - Updated *iam.Policy - Error error -} - -type PoliciesOnDelete struct { - Given *iam.DeletePolicyRequest - Error error -} - -type PoliciesOnList struct { - Given *iam.PolicyFilter - List *iam.PolicyList - Error error -} - -type PoliciesOnListVersions struct { - Given *iam.ListVersionsRequest - List *iam.PolicyVersionList - Error error -} - -type PoliciesOnActivateVersion struct { - Given *iam.ActivateVersionRequest - Active *iam.Policy - Error error -} - -func (m MockPoliciesClient) Create(_ context.Context, given *iam.CreatePolicyRequest, _ ...grpc.CallOption) (*iam.Policy, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockPoliciesClient) Update(_ context.Context, given *iam.Policy, _ ...grpc.CallOption) (*iam.Policy, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockPoliciesClient) Delete(_ context.Context, given *iam.DeletePolicyRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockPoliciesClient) List(_ context.Context, given *iam.PolicyFilter, _ ...grpc.CallOption) (*iam.PolicyList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockPoliciesClient) ListVersions(_ context.Context, given *iam.ListVersionsRequest, _ ...grpc.CallOption) (*iam.PolicyVersionList, error) { - for _, o := range m.OnListVersions { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockPoliciesClient) ActivateVersion(_ context.Context, given *iam.ActivateVersionRequest, _ ...grpc.CallOption) (*iam.Policy, error) { - for _, o := range m.OnActiveVersion { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Active, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} From e86d29b0382fe3c1d775a554b6a5b77c93935d6e Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Thu, 18 Apr 2024 09:38:06 -0700 Subject: [PATCH 25/41] Export e1c5562ccd5408b262bd25c8f0737548d2ac68aa Export: e1c5562ccd5408b262bd25c8f0737548d2ac68aa --- proto/platform/auth/v1/auth.platform.pb.go | 237 +- proto/platform/auth/v1/auth.platform.proto | 21 +- proto/platform/tenant/v1/clients.go | 18 +- .../tenant/v1/cluster.platform.event.go | 45 - .../platform/tenant/v1/cluster.platform.pb.go | 2934 ----------------- .../tenant/v1/cluster.platform.pb.gw.go | 833 ----- .../platform/tenant/v1/cluster.platform.proto | 479 --- .../tenant/v1/cluster.platform_grpc.pb.go | 369 --- proto/platform/tenant/v1/doc.go | 2 - proto/platform/tenant/v1/risk.platform.pb.go | 947 ------ .../platform/tenant/v1/risk.platform.pb.gw.go | 166 - proto/platform/tenant/v1/risk.platform.proto | 116 - .../tenant/v1/risk.platform_grpc.pb.go | 109 - proto/platform/tenant/v1/test/mock_client.go | 10 - proto/platform/tenant/v1/test/mock_cluster.go | 150 - proto/platform/tenant/v1/test/mock_risks.go | 38 - validation/enforcer_options.go | 27 - 17 files changed, 103 insertions(+), 6398 deletions(-) delete mode 100644 proto/platform/tenant/v1/cluster.platform.event.go delete mode 100644 proto/platform/tenant/v1/cluster.platform.pb.go delete mode 100644 proto/platform/tenant/v1/cluster.platform.pb.gw.go delete mode 100644 proto/platform/tenant/v1/cluster.platform.proto delete mode 100644 proto/platform/tenant/v1/cluster.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/risk.platform.pb.go delete mode 100644 proto/platform/tenant/v1/risk.platform.pb.gw.go delete mode 100644 proto/platform/tenant/v1/risk.platform.proto delete mode 100644 proto/platform/tenant/v1/risk.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/test/mock_cluster.go delete mode 100644 proto/platform/tenant/v1/test/mock_risks.go delete mode 100644 validation/enforcer_options.go diff --git a/proto/platform/auth/v1/auth.platform.pb.go b/proto/platform/auth/v1/auth.platform.pb.go index a049a7d1..05fbafbf 100644 --- a/proto/platform/auth/v1/auth.platform.pb.go +++ b/proto/platform/auth/v1/auth.platform.pb.go @@ -8,8 +8,7 @@ package v1 import ( _ "chainguard.dev/sdk/proto/annotations" - v11 "chainguard.dev/sdk/proto/platform/iam/v1" - v1 "chainguard.dev/sdk/proto/platform/tenant/v1" + v1 "chainguard.dev/sdk/proto/platform/iam/v1" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -36,22 +35,10 @@ type RegistrationRequest struct { // role. // +optional Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` - // cluster_id is an optional cluster id, which simultaneously registers - // a Cluster with the Identity. This path must specify an invite code, so - // we know where in the IAM hierarchy to link the cluster. - ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // identity_id is an optional identity id. If the user already exists, this // by-passes identity registration and continues on to cluster registration // (if applicable) IdentityId string `protobuf:"bytes,3,opt,name=identity_id,json=identityId,proto3" json:"identity_id,omitempty"` - // cluster_name is an optional name to give the cluster when one is - // registered as part of the registration flow. - ClusterName string `protobuf:"bytes,4,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` - // cluster_description is an optional description to give the cluster - // when one is registered as part of the registration flow. - ClusterDescription string `protobuf:"bytes,5,opt,name=cluster_description,json=clusterDescription,proto3" json:"cluster_description,omitempty"` - // enforcer_options defines the enforcer options. - EnforcerOptions *v1.Cluster_EnforcerOptions `protobuf:"bytes,6,opt,name=enforcer_options,json=enforcerOptions,proto3" json:"enforcer_options,omitempty"` } func (x *RegistrationRequest) Reset() { @@ -93,13 +80,6 @@ func (x *RegistrationRequest) GetCode() string { return "" } -func (x *RegistrationRequest) GetClusterId() string { - if x != nil { - return x.ClusterId - } - return "" -} - func (x *RegistrationRequest) GetIdentityId() string { if x != nil { return x.IdentityId @@ -107,27 +87,6 @@ func (x *RegistrationRequest) GetIdentityId() string { return "" } -func (x *RegistrationRequest) GetClusterName() string { - if x != nil { - return x.ClusterName - } - return "" -} - -func (x *RegistrationRequest) GetClusterDescription() string { - if x != nil { - return x.ClusterDescription - } - return "" -} - -func (x *RegistrationRequest) GetEnforcerOptions() *v1.Cluster_EnforcerOptions { - if x != nil { - return x.EnforcerOptions - } - return nil -} - type Session struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -295,9 +254,9 @@ type WhoAmI_Capability struct { unknownFields protoimpl.UnknownFields // group of the bound role. - Group *v11.Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + Group *v1.Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` // role of the bound identity. - Role *v11.Role `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` + Role *v1.Role `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` } func (x *WhoAmI_Capability) Reset() { @@ -332,14 +291,14 @@ func (*WhoAmI_Capability) Descriptor() ([]byte, []int) { return file_auth_platform_proto_rawDescGZIP(), []int{2, 0} } -func (x *WhoAmI_Capability) GetGroup() *v11.Group { +func (x *WhoAmI_Capability) GetGroup() *v1.Group { if x != nil { return x.Group } return nil } -func (x *WhoAmI_Capability) GetRole() *v11.Role { +func (x *WhoAmI_Capability) GetRole() *v1.Role { if x != nil { return x.Role } @@ -363,85 +322,71 @@ var file_auth_platform_proto_rawDesc = []byte{ 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x9d, 0x02, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, - 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x10, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x5f, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x2e, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x0f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x3b, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, - 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x22, 0xa1, 0x03, 0x0a, 0x06, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x12, 0x16, 0x0a, 0x06, 0x69, - 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x65, 0x78, 0x70, - 0x69, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x62, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x49, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, + 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x3b, 0x0a, 0x07, + 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xa1, 0x03, 0x0a, 0x06, 0x57, 0x68, + 0x6f, 0x41, 0x6d, 0x49, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, + 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, + 0x5f, 0x61, 0x74, 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, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x37, 0x0a, - 0x09, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x69, 0x73, - 0x73, 0x75, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4f, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x65, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x2e, 0x43, - 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x18, 0x66, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x1a, 0x75, 0x0a, - 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x4f, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x65, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x66, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x1a, 0x75, 0x0a, 0x0a, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, + 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x32, 0xa4, 0x02, + 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x61, 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x31, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x32, 0xa4, 0x02, 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x61, 0x0a, - 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x20, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x57, 0x68, 0x6f, - 0x41, 0x6d, 0x49, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x61, 0x75, - 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x6b, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x12, 0x00, - 0x12, 0xb8, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2d, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x02, 0x0a, 0x00, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x30, 0x0a, 0x25, 0x64, 0x65, 0x76, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x65, 0x0a, 0x23, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, - 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, - 0x76, 0x31, 0x42, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x41, 0x75, 0x74, 0x68, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x29, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, - 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x22, 0x1b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x6f, + 0x6b, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x12, 0x00, 0x12, 0xb8, 0x01, 0x0a, 0x08, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, + 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x0a, 0x00, 0xc2, 0xf0, + 0x8e, 0xfc, 0x0b, 0x30, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x42, 0x65, 0x0a, 0x23, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x29, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, + 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -458,32 +403,30 @@ func file_auth_platform_proto_rawDescGZIP() []byte { var file_auth_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_auth_platform_proto_goTypes = []interface{}{ - (*RegistrationRequest)(nil), // 0: chainguard.platform.auth.RegistrationRequest - (*Session)(nil), // 1: chainguard.platform.auth.Session - (*WhoAmI)(nil), // 2: chainguard.platform.auth.WhoAmI - (*WhoAmI_Capability)(nil), // 3: chainguard.platform.auth.WhoAmI.Capability - (*v1.Cluster_EnforcerOptions)(nil), // 4: chainguard.platform.tenant.Cluster.EnforcerOptions - (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp - (*v11.Group)(nil), // 6: chainguard.platform.iam.Group - (*v11.Role)(nil), // 7: chainguard.platform.iam.Role - (*emptypb.Empty)(nil), // 8: google.protobuf.Empty + (*RegistrationRequest)(nil), // 0: chainguard.platform.auth.RegistrationRequest + (*Session)(nil), // 1: chainguard.platform.auth.Session + (*WhoAmI)(nil), // 2: chainguard.platform.auth.WhoAmI + (*WhoAmI_Capability)(nil), // 3: chainguard.platform.auth.WhoAmI.Capability + (*timestamppb.Timestamp)(nil), // 4: google.protobuf.Timestamp + (*v1.Group)(nil), // 5: chainguard.platform.iam.Group + (*v1.Role)(nil), // 6: chainguard.platform.iam.Role + (*emptypb.Empty)(nil), // 7: google.protobuf.Empty } var file_auth_platform_proto_depIdxs = []int32{ - 4, // 0: chainguard.platform.auth.RegistrationRequest.enforcer_options:type_name -> chainguard.platform.tenant.Cluster.EnforcerOptions - 5, // 1: chainguard.platform.auth.WhoAmI.expiry:type_name -> google.protobuf.Timestamp - 5, // 2: chainguard.platform.auth.WhoAmI.issued_at:type_name -> google.protobuf.Timestamp - 3, // 3: chainguard.platform.auth.WhoAmI.capabilities:type_name -> chainguard.platform.auth.WhoAmI.Capability - 6, // 4: chainguard.platform.auth.WhoAmI.Capability.group:type_name -> chainguard.platform.iam.Group - 7, // 5: chainguard.platform.auth.WhoAmI.Capability.role:type_name -> chainguard.platform.iam.Role - 8, // 6: chainguard.platform.auth.Auth.Validate:input_type -> google.protobuf.Empty - 0, // 7: chainguard.platform.auth.Auth.Register:input_type -> chainguard.platform.auth.RegistrationRequest - 2, // 8: chainguard.platform.auth.Auth.Validate:output_type -> chainguard.platform.auth.WhoAmI - 1, // 9: chainguard.platform.auth.Auth.Register:output_type -> chainguard.platform.auth.Session - 8, // [8:10] is the sub-list for method output_type - 6, // [6:8] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 4, // 0: chainguard.platform.auth.WhoAmI.expiry:type_name -> google.protobuf.Timestamp + 4, // 1: chainguard.platform.auth.WhoAmI.issued_at:type_name -> google.protobuf.Timestamp + 3, // 2: chainguard.platform.auth.WhoAmI.capabilities:type_name -> chainguard.platform.auth.WhoAmI.Capability + 5, // 3: chainguard.platform.auth.WhoAmI.Capability.group:type_name -> chainguard.platform.iam.Group + 6, // 4: chainguard.platform.auth.WhoAmI.Capability.role:type_name -> chainguard.platform.iam.Role + 7, // 5: chainguard.platform.auth.Auth.Validate:input_type -> google.protobuf.Empty + 0, // 6: chainguard.platform.auth.Auth.Register:input_type -> chainguard.platform.auth.RegistrationRequest + 2, // 7: chainguard.platform.auth.Auth.Validate:output_type -> chainguard.platform.auth.WhoAmI + 1, // 8: chainguard.platform.auth.Auth.Register:output_type -> chainguard.platform.auth.Session + 7, // [7:9] is the sub-list for method output_type + 5, // [5:7] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_auth_platform_proto_init() } diff --git a/proto/platform/auth/v1/auth.platform.proto b/proto/platform/auth/v1/auth.platform.proto index 40b20e45..f656e83a 100644 --- a/proto/platform/auth/v1/auth.platform.proto +++ b/proto/platform/auth/v1/auth.platform.proto @@ -13,7 +13,6 @@ import "annotations/auth.proto"; import "annotations/events.proto"; import "platform/iam/v1/group.platform.proto"; import "platform/iam/v1/role.platform.proto"; -import "platform/tenant/v1/cluster.platform.proto"; import "google/protobuf/timestamp.proto"; service Auth { @@ -55,26 +54,30 @@ message RegistrationRequest { // +optional string code = 1; - // cluster_id is an optional cluster id, which simultaneously registers + // DEPRECATED: cluster_id is an optional cluster id, which simultaneously registers // a Cluster with the Identity. This path must specify an invite code, so // we know where in the IAM hierarchy to link the cluster. - string cluster_id = 2; + // string cluster_id = 2; + reserved 2; // identity_id is an optional identity id. If the user already exists, this // by-passes identity registration and continues on to cluster registration // (if applicable) string identity_id = 3; - // cluster_name is an optional name to give the cluster when one is + // DEPRECATED: cluster_name is an optional name to give the cluster when one is // registered as part of the registration flow. - string cluster_name = 4; + // string cluster_name = 4; + reserved 4; - // cluster_description is an optional description to give the cluster + // DEPRECATED: cluster_description is an optional description to give the cluster // when one is registered as part of the registration flow. - string cluster_description = 5; + // string cluster_description = 5; + reserved 5; - // enforcer_options defines the enforcer options. - chainguard.platform.tenant.Cluster.EnforcerOptions enforcer_options = 6; + // DEPRECATED: enforcer_options defines the enforcer options. + // chainguard.platform.tenant.Cluster.EnforcerOptions enforcer_options = 6; + reserved 6; } message Session { diff --git a/proto/platform/tenant/v1/clients.go b/proto/platform/tenant/v1/clients.go index 960cc14d..83d2e3be 100644 --- a/proto/platform/tenant/v1/clients.go +++ b/proto/platform/tenant/v1/clients.go @@ -19,11 +19,9 @@ import ( ) type Clients interface { - Clusters() ClustersClient Records() RecordsClient RecordContexts() RecordContextsClient Sboms() SbomsClient - Risks() RisksClient Signatures() SignaturesClient PolicyResults() PolicyResultsClient VulnReports() VulnReportsClient @@ -57,12 +55,10 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) } return &clients{ - clusters: NewClustersClient(conn), records: NewRecordsClient(conn), recordContexts: NewRecordContextsClient(conn), sboms: NewSbomsClient(conn), vulnReports: NewVulnReportsClient(conn), - risks: NewRisksClient(conn), signatures: NewSignaturesClient(conn), policyResults: NewPolicyResultsClient(conn), @@ -72,12 +68,10 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) func NewClientsFromConnection(conn *grpc.ClientConn) Clients { return &clients{ - clusters: NewClustersClient(conn), records: NewRecordsClient(conn), recordContexts: NewRecordContextsClient(conn), sboms: NewSbomsClient(conn), vulnReports: NewVulnReportsClient(conn), - risks: NewRisksClient(conn), signatures: NewSignaturesClient(conn), policyResults: NewPolicyResultsClient(conn), // conn is not set, this client struct does not own closing it. @@ -85,12 +79,10 @@ func NewClientsFromConnection(conn *grpc.ClientConn) Clients { } type clients struct { - clusters ClustersClient - records RecordsClient + records RecordsClient recordContexts RecordContextsClient sboms SbomsClient - risks RisksClient signatures SignaturesClient policyResults PolicyResultsClient vulnReports VulnReportsClient @@ -98,10 +90,6 @@ type clients struct { conn *grpc.ClientConn } -func (c *clients) Clusters() ClustersClient { - return c.clusters -} - func (c *clients) Records() RecordsClient { return c.records } @@ -114,10 +102,6 @@ func (c *clients) Sboms() SbomsClient { return c.sboms } -func (c *clients) Risks() RisksClient { - return c.risks -} - func (c *clients) Signatures() SignaturesClient { return c.signatures } diff --git a/proto/platform/tenant/v1/cluster.platform.event.go b/proto/platform/tenant/v1/cluster.platform.event.go deleted file mode 100644 index aeb567ed..00000000 --- a/proto/platform/tenant/v1/cluster.platform.event.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package v1 - -import ( - "chainguard.dev/sdk/uidp" -) - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *Cluster) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *Cluster) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension -func (x *DeleteClusterRequest) CloudEventsExtension(key string) (string, bool) { - switch key { - case "group": - return uidp.Parent(x.GetId()), true - default: - return "", false - } -} - -// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. -func (x *DeleteClusterRequest) CloudEventsSubject() string { - return x.GetId() -} - -// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.Redact. -func (x *DeleteClusterRequest) CloudEventsRedact() interface{} { - return nil -} diff --git a/proto/platform/tenant/v1/cluster.platform.pb.go b/proto/platform/tenant/v1/cluster.platform.pb.go deleted file mode 100644 index f5807936..00000000 --- a/proto/platform/tenant/v1/cluster.platform.pb.go +++ /dev/null @@ -1,2934 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: cluster.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v11 "chainguard.dev/sdk/proto/platform/common/v1" - v1 "chainguard.dev/sdk/proto/platform/iam/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ClusterDiscoveryRequest_State int32 - -const ( - ClusterDiscoveryRequest_UNKNOWN ClusterDiscoveryRequest_State = 0 - ClusterDiscoveryRequest_UNSUPPORTED ClusterDiscoveryRequest_State = 1 - ClusterDiscoveryRequest_NEEDS_WORK ClusterDiscoveryRequest_State = 2 - ClusterDiscoveryRequest_ELIGIBLE ClusterDiscoveryRequest_State = 3 - ClusterDiscoveryRequest_ENROLLED ClusterDiscoveryRequest_State = 4 -) - -// Enum value maps for ClusterDiscoveryRequest_State. -var ( - ClusterDiscoveryRequest_State_name = map[int32]string{ - 0: "UNKNOWN", - 1: "UNSUPPORTED", - 2: "NEEDS_WORK", - 3: "ELIGIBLE", - 4: "ENROLLED", - } - ClusterDiscoveryRequest_State_value = map[string]int32{ - "UNKNOWN": 0, - "UNSUPPORTED": 1, - "NEEDS_WORK": 2, - "ELIGIBLE": 3, - "ENROLLED": 4, - } -) - -func (x ClusterDiscoveryRequest_State) Enum() *ClusterDiscoveryRequest_State { - p := new(ClusterDiscoveryRequest_State) - *p = x - return p -} - -func (x ClusterDiscoveryRequest_State) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ClusterDiscoveryRequest_State) Descriptor() protoreflect.EnumDescriptor { - return file_cluster_platform_proto_enumTypes[0].Descriptor() -} - -func (ClusterDiscoveryRequest_State) Type() protoreflect.EnumType { - return &file_cluster_platform_proto_enumTypes[0] -} - -func (x ClusterDiscoveryRequest_State) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ClusterDiscoveryRequest_State.Descriptor instead. -func (ClusterDiscoveryRequest_State) EnumDescriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{2, 0} -} - -type Cluster_NamespaceEnforcementMode int32 - -const ( - Cluster_OptOut Cluster_NamespaceEnforcementMode = 0 - Cluster_OptIn Cluster_NamespaceEnforcementMode = 1 -) - -// Enum value maps for Cluster_NamespaceEnforcementMode. -var ( - Cluster_NamespaceEnforcementMode_name = map[int32]string{ - 0: "OptOut", - 1: "OptIn", - } - Cluster_NamespaceEnforcementMode_value = map[string]int32{ - "OptOut": 0, - "OptIn": 1, - } -) - -func (x Cluster_NamespaceEnforcementMode) Enum() *Cluster_NamespaceEnforcementMode { - p := new(Cluster_NamespaceEnforcementMode) - *p = x - return p -} - -func (x Cluster_NamespaceEnforcementMode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Cluster_NamespaceEnforcementMode) Descriptor() protoreflect.EnumDescriptor { - return file_cluster_platform_proto_enumTypes[1].Descriptor() -} - -func (Cluster_NamespaceEnforcementMode) Type() protoreflect.EnumType { - return &file_cluster_platform_proto_enumTypes[1] -} - -func (x Cluster_NamespaceEnforcementMode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Cluster_NamespaceEnforcementMode.Descriptor instead. -func (Cluster_NamespaceEnforcementMode) EnumDescriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{4, 0} -} - -type Cluster_Provider int32 - -const ( - Cluster_UNKNOWN Cluster_Provider = 0 - Cluster_GKE Cluster_Provider = 1 - Cluster_EKS Cluster_Provider = 2 - // GCP Services (10+) - Cluster_CLOUD_RUN Cluster_Provider = 10 - // AWS Services (20+) - Cluster_ECS Cluster_Provider = 20 - Cluster_APP_RUNNER Cluster_Provider = 21 - // For testing. - Cluster_KIND Cluster_Provider = 100 -) - -// Enum value maps for Cluster_Provider. -var ( - Cluster_Provider_name = map[int32]string{ - 0: "UNKNOWN", - 1: "GKE", - 2: "EKS", - 10: "CLOUD_RUN", - 20: "ECS", - 21: "APP_RUNNER", - 100: "KIND", - } - Cluster_Provider_value = map[string]int32{ - "UNKNOWN": 0, - "GKE": 1, - "EKS": 2, - "CLOUD_RUN": 10, - "ECS": 20, - "APP_RUNNER": 21, - "KIND": 100, - } -) - -func (x Cluster_Provider) Enum() *Cluster_Provider { - p := new(Cluster_Provider) - *p = x - return p -} - -func (x Cluster_Provider) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Cluster_Provider) Descriptor() protoreflect.EnumDescriptor { - return file_cluster_platform_proto_enumTypes[2].Descriptor() -} - -func (Cluster_Provider) Type() protoreflect.EnumType { - return &file_cluster_platform_proto_enumTypes[2] -} - -func (x Cluster_Provider) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Cluster_Provider.Descriptor instead. -func (Cluster_Provider) EnumDescriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{4, 1} -} - -type Cluster_Location int32 - -const ( - Cluster_AUTO Cluster_Location = 0 - // Use 1xx for US - Cluster_US_EAST Cluster_Location = 101 - Cluster_US_CENTRAL Cluster_Location = 102 - Cluster_US_WEST Cluster_Location = 103 -) - -// Enum value maps for Cluster_Location. -var ( - Cluster_Location_name = map[int32]string{ - 0: "AUTO", - 101: "US_EAST", - 102: "US_CENTRAL", - 103: "US_WEST", - } - Cluster_Location_value = map[string]int32{ - "AUTO": 0, - "US_EAST": 101, - "US_CENTRAL": 102, - "US_WEST": 103, - } -) - -func (x Cluster_Location) Enum() *Cluster_Location { - p := new(Cluster_Location) - *p = x - return p -} - -func (x Cluster_Location) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Cluster_Location) Descriptor() protoreflect.EnumDescriptor { - return file_cluster_platform_proto_enumTypes[3].Descriptor() -} - -func (Cluster_Location) Type() protoreflect.EnumType { - return &file_cluster_platform_proto_enumTypes[3] -} - -func (x Cluster_Location) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Cluster_Location.Descriptor instead. -func (Cluster_Location) EnumDescriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{4, 2} -} - -type Cluster_Status_State int32 - -const ( - Cluster_Status_UNKNOWN Cluster_Status_State = 0 - Cluster_Status_Ready Cluster_Status_State = 1 - Cluster_Status_NotReady Cluster_Status_State = 2 -) - -// Enum value maps for Cluster_Status_State. -var ( - Cluster_Status_State_name = map[int32]string{ - 0: "UNKNOWN", - 1: "Ready", - 2: "NotReady", - } - Cluster_Status_State_value = map[string]int32{ - "UNKNOWN": 0, - "Ready": 1, - "NotReady": 2, - } -) - -func (x Cluster_Status_State) Enum() *Cluster_Status_State { - p := new(Cluster_Status_State) - *p = x - return p -} - -func (x Cluster_Status_State) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Cluster_Status_State) Descriptor() protoreflect.EnumDescriptor { - return file_cluster_platform_proto_enumTypes[4].Descriptor() -} - -func (Cluster_Status_State) Type() protoreflect.EnumType { - return &file_cluster_platform_proto_enumTypes[4] -} - -func (x Cluster_Status_State) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Cluster_Status_State.Descriptor instead. -func (Cluster_Status_State) EnumDescriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{4, 4, 0} -} - -type ClusterConfigRequest_NamespaceEnforcementMode int32 - -const ( - ClusterConfigRequest_OptOut ClusterConfigRequest_NamespaceEnforcementMode = 0 - ClusterConfigRequest_OptIn ClusterConfigRequest_NamespaceEnforcementMode = 1 -) - -// Enum value maps for ClusterConfigRequest_NamespaceEnforcementMode. -var ( - ClusterConfigRequest_NamespaceEnforcementMode_name = map[int32]string{ - 0: "OptOut", - 1: "OptIn", - } - ClusterConfigRequest_NamespaceEnforcementMode_value = map[string]int32{ - "OptOut": 0, - "OptIn": 1, - } -) - -func (x ClusterConfigRequest_NamespaceEnforcementMode) Enum() *ClusterConfigRequest_NamespaceEnforcementMode { - p := new(ClusterConfigRequest_NamespaceEnforcementMode) - *p = x - return p -} - -func (x ClusterConfigRequest_NamespaceEnforcementMode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ClusterConfigRequest_NamespaceEnforcementMode) Descriptor() protoreflect.EnumDescriptor { - return file_cluster_platform_proto_enumTypes[5].Descriptor() -} - -func (ClusterConfigRequest_NamespaceEnforcementMode) Type() protoreflect.EnumType { - return &file_cluster_platform_proto_enumTypes[5] -} - -func (x ClusterConfigRequest_NamespaceEnforcementMode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ClusterConfigRequest_NamespaceEnforcementMode.Descriptor instead. -func (ClusterConfigRequest_NamespaceEnforcementMode) EnumDescriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{10, 0} -} - -type CreateClusterRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // parent_id, The Group under which this Cluster resides. - ParentId string `protobuf:"bytes,1,opt,name=parent_id,json=parentId,proto3" json:"parent_id,omitempty"` - // Cluster is the definition of the managed cluster to create. - Cluster *Cluster `protobuf:"bytes,2,opt,name=cluster,proto3" json:"cluster,omitempty"` -} - -func (x *CreateClusterRequest) Reset() { - *x = CreateClusterRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateClusterRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateClusterRequest) ProtoMessage() {} - -func (x *CreateClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateClusterRequest.ProtoReflect.Descriptor instead. -func (*CreateClusterRequest) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *CreateClusterRequest) GetParentId() string { - if x != nil { - return x.ParentId - } - return "" -} - -func (x *CreateClusterRequest) GetCluster() *Cluster { - if x != nil { - return x.Cluster - } - return nil -} - -type DeleteClusterRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *DeleteClusterRequest) Reset() { - *x = DeleteClusterRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteClusterRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteClusterRequest) ProtoMessage() {} - -func (x *DeleteClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteClusterRequest.ProtoReflect.Descriptor instead. -func (*DeleteClusterRequest) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *DeleteClusterRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -type ClusterDiscoveryRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UIDP of the group to impersonate to search for clusters. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // providers is the list of providers to perform discovery on. - Providers []Cluster_Provider `protobuf:"varint,2,rep,packed,name=providers,proto3,enum=chainguard.platform.tenant.Cluster_Provider" json:"providers,omitempty"` - // profiles includes the set of profiles to perform discovery for, - // which may impact eligibility (some profiles may not be supported - // on some providers). - Profiles []string `protobuf:"bytes,3,rep,name=profiles,proto3" json:"profiles,omitempty"` - // states is a collection of the states to return, or all if - // none are specified. - States []ClusterDiscoveryRequest_State `protobuf:"varint,4,rep,packed,name=states,proto3,enum=chainguard.platform.tenant.ClusterDiscoveryRequest_State" json:"states,omitempty"` -} - -func (x *ClusterDiscoveryRequest) Reset() { - *x = ClusterDiscoveryRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterDiscoveryRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterDiscoveryRequest) ProtoMessage() {} - -func (x *ClusterDiscoveryRequest) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterDiscoveryRequest.ProtoReflect.Descriptor instead. -func (*ClusterDiscoveryRequest) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *ClusterDiscoveryRequest) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ClusterDiscoveryRequest) GetProviders() []Cluster_Provider { - if x != nil { - return x.Providers - } - return nil -} - -func (x *ClusterDiscoveryRequest) GetProfiles() []string { - if x != nil { - return x.Profiles - } - return nil -} - -func (x *ClusterDiscoveryRequest) GetStates() []ClusterDiscoveryRequest_State { - if x != nil { - return x.States - } - return nil -} - -type ClusterDiscoveryResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Results []*ClusterDiscoveryResponse_Result `protobuf:"bytes,1,rep,name=results,proto3" json:"results,omitempty"` -} - -func (x *ClusterDiscoveryResponse) Reset() { - *x = ClusterDiscoveryResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterDiscoveryResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterDiscoveryResponse) ProtoMessage() {} - -func (x *ClusterDiscoveryResponse) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_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 ClusterDiscoveryResponse.ProtoReflect.Descriptor instead. -func (*ClusterDiscoveryResponse) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *ClusterDiscoveryResponse) GetResults() []*ClusterDiscoveryResponse_Result { - if x != nil { - return x.Results - } - return nil -} - -type Cluster struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The Cluster UIDP under which this Cluster resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // remote_id is the remote ID of this cluster. - RemoteId string `protobuf:"bytes,2,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` - // issuer is the identity issuer tied to this cluster. - Issuer string `protobuf:"bytes,3,opt,name=issuer,proto3" json:"issuer,omitempty"` - // registered tracks the timestamp at which this cluster was registered. - Registered *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=registered,proto3" json:"registered,omitempty"` - // last_seen tracks the timestamp at which this cluster was last seen. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` - // version holds the Kubernetes version last reported by the cluster. - Version string `protobuf:"bytes,6,opt,name=version,proto3" json:"version,omitempty"` - // agent_version holds the version of the Chainguard agent last reported by the cluster. - AgentVersion string `protobuf:"bytes,7,opt,name=agent_version,json=agentVersion,proto3" json:"agent_version,omitempty"` - // activity is a mapping from "Source" URLs to an activity record summarizing - // recent activity from this source. - Activity map[string]*ClusterActivity `protobuf:"bytes,8,rep,name=activity,proto3" json:"activity,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // name of the cluster. - Name string `protobuf:"bytes,9,opt,name=name,proto3" json:"name,omitempty"` - // a short description of this cluster. - Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"` - // group the cluster resides in - Group *v1.Group `protobuf:"bytes,99,opt,name=group,proto3" json:"group,omitempty"` - // managed_name is the unique name we have given to this cluster's managed agent. - // This field is output-only, and is populated only when this cluster is "managed". - ManagedName string `protobuf:"bytes,100,opt,name=managed_name,json=managedName,proto3" json:"managed_name,omitempty"` - // provider holds the flavor of cluster provider, which is used to determine how we - // authenticate with the cluster. - Provider Cluster_Provider `protobuf:"varint,101,opt,name=provider,proto3,enum=chainguard.platform.tenant.Cluster_Provider" json:"provider,omitempty"` - // affinity specifies a scheduling preference for where to run the managed agent. - // Other factors, such as the provider may be taken into account when choosing a - // host cluster. - Affinity Cluster_Location `protobuf:"varint,105,opt,name=affinity,proto3,enum=chainguard.platform.tenant.Cluster_Location" json:"affinity,omitempty"` - // info contains the cluster information from the kubeconfig context. - Info *Cluster_Info `protobuf:"bytes,102,opt,name=info,proto3" json:"info,omitempty"` - // auth_info holds authentication details for connecting to KinD in test scenarios. - AuthInfo *Cluster_AuthInfo `protobuf:"bytes,104,opt,name=auth_info,json=authInfo,proto3" json:"auth_info,omitempty"` - // status contains the managed cluster's status. - Status *Cluster_Status `protobuf:"bytes,103,opt,name=status,proto3" json:"status,omitempty"` - // host_cluster surfaces the opaque identifier for the Chainguard cluster hosting - // this agent. - HostCluster string `protobuf:"bytes,106,opt,name=host_cluster,json=hostCluster,proto3" json:"host_cluster,omitempty"` - // profiles specifies the root set of tenant configurations that we want to run - // on this cluster. - Profiles []string `protobuf:"bytes,107,rep,name=profiles,proto3" json:"profiles,omitempty"` - // EnforcerOptions contains additional Enforcer configuration settings. - // +optional - EnforcerOptions *Cluster_EnforcerOptions `protobuf:"bytes,108,opt,name=enforcer_options,json=enforcerOptions,proto3,oneof" json:"enforcer_options,omitempty"` -} - -func (x *Cluster) Reset() { - *x = Cluster{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster) ProtoMessage() {} - -func (x *Cluster) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cluster.ProtoReflect.Descriptor instead. -func (*Cluster) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *Cluster) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Cluster) GetRemoteId() string { - if x != nil { - return x.RemoteId - } - return "" -} - -func (x *Cluster) GetIssuer() string { - if x != nil { - return x.Issuer - } - return "" -} - -func (x *Cluster) GetRegistered() *timestamppb.Timestamp { - if x != nil { - return x.Registered - } - return nil -} - -func (x *Cluster) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -func (x *Cluster) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *Cluster) GetAgentVersion() string { - if x != nil { - return x.AgentVersion - } - return "" -} - -func (x *Cluster) GetActivity() map[string]*ClusterActivity { - if x != nil { - return x.Activity - } - return nil -} - -func (x *Cluster) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Cluster) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Cluster) GetGroup() *v1.Group { - if x != nil { - return x.Group - } - return nil -} - -func (x *Cluster) GetManagedName() string { - if x != nil { - return x.ManagedName - } - return "" -} - -func (x *Cluster) GetProvider() Cluster_Provider { - if x != nil { - return x.Provider - } - return Cluster_UNKNOWN -} - -func (x *Cluster) GetAffinity() Cluster_Location { - if x != nil { - return x.Affinity - } - return Cluster_AUTO -} - -func (x *Cluster) GetInfo() *Cluster_Info { - if x != nil { - return x.Info - } - return nil -} - -func (x *Cluster) GetAuthInfo() *Cluster_AuthInfo { - if x != nil { - return x.AuthInfo - } - return nil -} - -func (x *Cluster) GetStatus() *Cluster_Status { - if x != nil { - return x.Status - } - return nil -} - -func (x *Cluster) GetHostCluster() string { - if x != nil { - return x.HostCluster - } - return "" -} - -func (x *Cluster) GetProfiles() []string { - if x != nil { - return x.Profiles - } - return nil -} - -func (x *Cluster) GetEnforcerOptions() *Cluster_EnforcerOptions { - if x != nil { - return x.EnforcerOptions - } - return nil -} - -type ClusterActivity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // profile is the Chainguard profile to which the source of this activity belongs. - Profile string `protobuf:"bytes,6,opt,name=profile,proto3" json:"profile,omitempty"` - // namespace is the namespace in which the source of this cluster activity lives. - Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` - // controller_name is the name of the Controller CRD which was the source of this - // activity on the tenant cluster. - ControllerName string `protobuf:"bytes,2,opt,name=controller_name,json=controllerName,proto3" json:"controller_name,omitempty"` - // webhook_name is the name of the Webhook CRD which was the source of this - // activity on the tenant cluster. - WebhookName string `protobuf:"bytes,3,opt,name=webhook_name,json=webhookName,proto3" json:"webhook_name,omitempty"` - // spec_hash is the hash of the Controller or Webhook CRD's spec, which forms a - // loose form of versioning. - SpecHash string `protobuf:"bytes,4,opt,name=spec_hash,json=specHash,proto3" json:"spec_hash,omitempty"` - // last_seen tracks the timestamp at which this source was last active. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` -} - -func (x *ClusterActivity) Reset() { - *x = ClusterActivity{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterActivity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterActivity) ProtoMessage() {} - -func (x *ClusterActivity) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterActivity.ProtoReflect.Descriptor instead. -func (*ClusterActivity) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *ClusterActivity) GetProfile() string { - if x != nil { - return x.Profile - } - return "" -} - -func (x *ClusterActivity) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -func (x *ClusterActivity) GetControllerName() string { - if x != nil { - return x.ControllerName - } - return "" -} - -func (x *ClusterActivity) GetWebhookName() string { - if x != nil { - return x.WebhookName - } - return "" -} - -func (x *ClusterActivity) GetSpecHash() string { - if x != nil { - return x.SpecHash - } - return "" -} - -func (x *ClusterActivity) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -type ClusterList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Cluster `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *ClusterList) Reset() { - *x = ClusterList{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterList) ProtoMessage() {} - -func (x *ClusterList) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterList.ProtoReflect.Descriptor instead. -func (*ClusterList) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{6} -} - -func (x *ClusterList) GetItems() []*Cluster { - if x != nil { - return x.Items - } - return nil -} - -type ClusterFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // active_since is the timestamp after which returned clusters should have been active. - // This applies to both cluster registration and when it was "last seen". - ActiveSince *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` - // uidp filers records based on their position in the group hierarchy. - Uidp *v11.UIDPFilter `protobuf:"bytes,3,opt,name=uidp,proto3" json:"uidp,omitempty"` - // remote_id is the remote ID of this cluster. - RemoteId string `protobuf:"bytes,4,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` - // name is the exact name of the cluster. - Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *ClusterFilter) Reset() { - *x = ClusterFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterFilter) ProtoMessage() {} - -func (x *ClusterFilter) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterFilter.ProtoReflect.Descriptor instead. -func (*ClusterFilter) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{7} -} - -func (x *ClusterFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ClusterFilter) GetActiveSince() *timestamppb.Timestamp { - if x != nil { - return x.ActiveSince - } - return nil -} - -func (x *ClusterFilter) GetUidp() *v11.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *ClusterFilter) GetRemoteId() string { - if x != nil { - return x.RemoteId - } - return "" -} - -func (x *ClusterFilter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type ClusterProfilesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ClusterProfilesRequest) Reset() { - *x = ClusterProfilesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterProfilesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterProfilesRequest) ProtoMessage() {} - -func (x *ClusterProfilesRequest) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterProfilesRequest.ProtoReflect.Descriptor instead. -func (*ClusterProfilesRequest) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{8} -} - -type ClusterProfilesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Profile []*ClusterProfilesResponse_Profile `protobuf:"bytes,1,rep,name=profile,proto3" json:"profile,omitempty"` -} - -func (x *ClusterProfilesResponse) Reset() { - *x = ClusterProfilesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterProfilesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterProfilesResponse) ProtoMessage() {} - -func (x *ClusterProfilesResponse) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterProfilesResponse.ProtoReflect.Descriptor instead. -func (*ClusterProfilesResponse) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{9} -} - -func (x *ClusterProfilesResponse) GetProfile() []*ClusterProfilesResponse_Profile { - if x != nil { - return x.Profile - } - return nil -} - -type ClusterConfigRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // profiles specifies the root profiles we want as part of this configuration. - Profiles []string `protobuf:"bytes,1,rep,name=profiles,proto3" json:"profiles,omitempty"` - // EnforcerOptions contains additional Enforcer configuration settings. - EnforcerOptions *ClusterConfigRequest_EnforcerOptions `protobuf:"bytes,2,opt,name=enforcer_options,json=enforcerOptions,proto3,oneof" json:"enforcer_options,omitempty"` -} - -func (x *ClusterConfigRequest) Reset() { - *x = ClusterConfigRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterConfigRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterConfigRequest) ProtoMessage() {} - -func (x *ClusterConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterConfigRequest.ProtoReflect.Descriptor instead. -func (*ClusterConfigRequest) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{10} -} - -func (x *ClusterConfigRequest) GetProfiles() []string { - if x != nil { - return x.Profiles - } - return nil -} - -func (x *ClusterConfigRequest) GetEnforcerOptions() *ClusterConfigRequest_EnforcerOptions { - if x != nil { - return x.EnforcerOptions - } - return nil -} - -type ClusterConfigResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - McpConfig []byte `protobuf:"bytes,1,opt,name=mcp_config,json=mcpConfig,proto3" json:"mcp_config,omitempty"` - TenantConfig []byte `protobuf:"bytes,2,opt,name=tenant_config,json=tenantConfig,proto3" json:"tenant_config,omitempty"` - // profiles includes the full set of profiles returned (including transitive - // dependencies of the input profiles) - Profiles []string `protobuf:"bytes,3,rep,name=profiles,proto3" json:"profiles,omitempty"` -} - -func (x *ClusterConfigResponse) Reset() { - *x = ClusterConfigResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterConfigResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterConfigResponse) ProtoMessage() {} - -func (x *ClusterConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterConfigResponse.ProtoReflect.Descriptor instead. -func (*ClusterConfigResponse) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{11} -} - -func (x *ClusterConfigResponse) GetMcpConfig() []byte { - if x != nil { - return x.McpConfig - } - return nil -} - -func (x *ClusterConfigResponse) GetTenantConfig() []byte { - if x != nil { - return x.TenantConfig - } - return nil -} - -func (x *ClusterConfigResponse) GetProfiles() []string { - if x != nil { - return x.Profiles - } - return nil -} - -type ClusterCIDRRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ClusterCIDRRequest) Reset() { - *x = ClusterCIDRRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterCIDRRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterCIDRRequest) ProtoMessage() {} - -func (x *ClusterCIDRRequest) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterCIDRRequest.ProtoReflect.Descriptor instead. -func (*ClusterCIDRRequest) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{12} -} - -type ClusterCIDRResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // cidr_blocks specifies the cidr blocks enforce uses to communicate with clusters. - CidrBlocks []string `protobuf:"bytes,1,rep,name=cidr_blocks,json=cidrBlocks,proto3" json:"cidr_blocks,omitempty"` -} - -func (x *ClusterCIDRResponse) Reset() { - *x = ClusterCIDRResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterCIDRResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterCIDRResponse) ProtoMessage() {} - -func (x *ClusterCIDRResponse) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterCIDRResponse.ProtoReflect.Descriptor instead. -func (*ClusterCIDRResponse) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{13} -} - -func (x *ClusterCIDRResponse) GetCidrBlocks() []string { - if x != nil { - return x.CidrBlocks - } - return nil -} - -type ClusterDiscoveryResponse_Result struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Provider Cluster_Provider `protobuf:"varint,1,opt,name=provider,proto3,enum=chainguard.platform.tenant.Cluster_Provider" json:"provider,omitempty"` - Account string `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"` - Location Cluster_Location `protobuf:"varint,3,opt,name=location,proto3,enum=chainguard.platform.tenant.Cluster_Location" json:"location,omitempty"` - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // Types that are assignable to State: - // - // *ClusterDiscoveryResponse_Result_Unsupported_ - // *ClusterDiscoveryResponse_Result_NeedsWork_ - // *ClusterDiscoveryResponse_Result_Eligible_ - // *ClusterDiscoveryResponse_Result_Enrolled_ - State isClusterDiscoveryResponse_Result_State `protobuf_oneof:"state"` -} - -func (x *ClusterDiscoveryResponse_Result) Reset() { - *x = ClusterDiscoveryResponse_Result{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterDiscoveryResponse_Result) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterDiscoveryResponse_Result) ProtoMessage() {} - -func (x *ClusterDiscoveryResponse_Result) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterDiscoveryResponse_Result.ProtoReflect.Descriptor instead. -func (*ClusterDiscoveryResponse_Result) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0} -} - -func (x *ClusterDiscoveryResponse_Result) GetProvider() Cluster_Provider { - if x != nil { - return x.Provider - } - return Cluster_UNKNOWN -} - -func (x *ClusterDiscoveryResponse_Result) GetAccount() string { - if x != nil { - return x.Account - } - return "" -} - -func (x *ClusterDiscoveryResponse_Result) GetLocation() Cluster_Location { - if x != nil { - return x.Location - } - return Cluster_AUTO -} - -func (x *ClusterDiscoveryResponse_Result) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (m *ClusterDiscoveryResponse_Result) GetState() isClusterDiscoveryResponse_Result_State { - if m != nil { - return m.State - } - return nil -} - -func (x *ClusterDiscoveryResponse_Result) GetUnsupported() *ClusterDiscoveryResponse_Result_Unsupported { - if x, ok := x.GetState().(*ClusterDiscoveryResponse_Result_Unsupported_); ok { - return x.Unsupported - } - return nil -} - -func (x *ClusterDiscoveryResponse_Result) GetNeedsWork() *ClusterDiscoveryResponse_Result_NeedsWork { - if x, ok := x.GetState().(*ClusterDiscoveryResponse_Result_NeedsWork_); ok { - return x.NeedsWork - } - return nil -} - -func (x *ClusterDiscoveryResponse_Result) GetEligible() *ClusterDiscoveryResponse_Result_Eligible { - if x, ok := x.GetState().(*ClusterDiscoveryResponse_Result_Eligible_); ok { - return x.Eligible - } - return nil -} - -func (x *ClusterDiscoveryResponse_Result) GetEnrolled() *ClusterDiscoveryResponse_Result_Enrolled { - if x, ok := x.GetState().(*ClusterDiscoveryResponse_Result_Enrolled_); ok { - return x.Enrolled - } - return nil -} - -type isClusterDiscoveryResponse_Result_State interface { - isClusterDiscoveryResponse_Result_State() -} - -type ClusterDiscoveryResponse_Result_Unsupported_ struct { - // unsupported clusters cannot be enrolled with our - // Agentless cluster support. - Unsupported *ClusterDiscoveryResponse_Result_Unsupported `protobuf:"bytes,10,opt,name=unsupported,proto3,oneof"` -} - -type ClusterDiscoveryResponse_Result_NeedsWork_ struct { - // needs_work clusters can be modified in some way so - // that they are supported by our Agentless infrastructure. - NeedsWork *ClusterDiscoveryResponse_Result_NeedsWork `protobuf:"bytes,11,opt,name=needs_work,json=needsWork,proto3,oneof"` -} - -type ClusterDiscoveryResponse_Result_Eligible_ struct { - // eligible clusters are able to be directly enrolled as - // agentless tenants immediately. This message contains - // all of the information needed to enroll this cluster. - Eligible *ClusterDiscoveryResponse_Result_Eligible `protobuf:"bytes,12,opt,name=eligible,proto3,oneof"` -} - -type ClusterDiscoveryResponse_Result_Enrolled_ struct { - // enrolled clusters are clusters that have already been - // enrolled as agentless tenants. - Enrolled *ClusterDiscoveryResponse_Result_Enrolled `protobuf:"bytes,13,opt,name=enrolled,proto3,oneof"` -} - -func (*ClusterDiscoveryResponse_Result_Unsupported_) isClusterDiscoveryResponse_Result_State() {} - -func (*ClusterDiscoveryResponse_Result_NeedsWork_) isClusterDiscoveryResponse_Result_State() {} - -func (*ClusterDiscoveryResponse_Result_Eligible_) isClusterDiscoveryResponse_Result_State() {} - -func (*ClusterDiscoveryResponse_Result_Enrolled_) isClusterDiscoveryResponse_Result_State() {} - -type ClusterDiscoveryResponse_Result_Unsupported struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // reason holds the reason the cluster is not currently supported. - Reason string `protobuf:"bytes,1,opt,name=reason,proto3" json:"reason,omitempty"` -} - -func (x *ClusterDiscoveryResponse_Result_Unsupported) Reset() { - *x = ClusterDiscoveryResponse_Result_Unsupported{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterDiscoveryResponse_Result_Unsupported) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterDiscoveryResponse_Result_Unsupported) ProtoMessage() {} - -func (x *ClusterDiscoveryResponse_Result_Unsupported) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterDiscoveryResponse_Result_Unsupported.ProtoReflect.Descriptor instead. -func (*ClusterDiscoveryResponse_Result_Unsupported) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0, 0} -} - -func (x *ClusterDiscoveryResponse_Result_Unsupported) GetReason() string { - if x != nil { - return x.Reason - } - return "" -} - -type ClusterDiscoveryResponse_Result_NeedsWork struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // steps holds the set of changes the user needs to make in order - // for the cluster to become eligible. - Steps []string `protobuf:"bytes,1,rep,name=steps,proto3" json:"steps,omitempty"` -} - -func (x *ClusterDiscoveryResponse_Result_NeedsWork) Reset() { - *x = ClusterDiscoveryResponse_Result_NeedsWork{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterDiscoveryResponse_Result_NeedsWork) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterDiscoveryResponse_Result_NeedsWork) ProtoMessage() {} - -func (x *ClusterDiscoveryResponse_Result_NeedsWork) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterDiscoveryResponse_Result_NeedsWork.ProtoReflect.Descriptor instead. -func (*ClusterDiscoveryResponse_Result_NeedsWork) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0, 1} -} - -func (x *ClusterDiscoveryResponse_Result_NeedsWork) GetSteps() []string { - if x != nil { - return x.Steps - } - return nil -} - -type ClusterDiscoveryResponse_Result_Eligible struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Info *Cluster_Info `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` -} - -func (x *ClusterDiscoveryResponse_Result_Eligible) Reset() { - *x = ClusterDiscoveryResponse_Result_Eligible{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterDiscoveryResponse_Result_Eligible) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterDiscoveryResponse_Result_Eligible) ProtoMessage() {} - -func (x *ClusterDiscoveryResponse_Result_Eligible) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterDiscoveryResponse_Result_Eligible.ProtoReflect.Descriptor instead. -func (*ClusterDiscoveryResponse_Result_Eligible) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0, 2} -} - -func (x *ClusterDiscoveryResponse_Result_Eligible) GetInfo() *Cluster_Info { - if x != nil { - return x.Info - } - return nil -} - -type ClusterDiscoveryResponse_Result_Enrolled struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the UIDP of the tenant Cluster. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // profiles contains the set of profiles that this - // cluster was enrolled with. - Profiles []string `protobuf:"bytes,2,rep,name=profiles,proto3" json:"profiles,omitempty"` - Info *Cluster_Info `protobuf:"bytes,3,opt,name=info,proto3" json:"info,omitempty"` -} - -func (x *ClusterDiscoveryResponse_Result_Enrolled) Reset() { - *x = ClusterDiscoveryResponse_Result_Enrolled{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterDiscoveryResponse_Result_Enrolled) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterDiscoveryResponse_Result_Enrolled) ProtoMessage() {} - -func (x *ClusterDiscoveryResponse_Result_Enrolled) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterDiscoveryResponse_Result_Enrolled.ProtoReflect.Descriptor instead. -func (*ClusterDiscoveryResponse_Result_Enrolled) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{3, 0, 3} -} - -func (x *ClusterDiscoveryResponse_Result_Enrolled) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *ClusterDiscoveryResponse_Result_Enrolled) GetProfiles() []string { - if x != nil { - return x.Profiles - } - return nil -} - -func (x *ClusterDiscoveryResponse_Result_Enrolled) GetInfo() *Cluster_Info { - if x != nil { - return x.Info - } - return nil -} - -type Cluster_EnforcerOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // +optional - WebhookFailOpen *bool `protobuf:"varint,1,opt,name=webhook_fail_open,json=webhookFailOpen,proto3,oneof" json:"webhook_fail_open,omitempty"` - // +optional - EnableCipCache *bool `protobuf:"varint,2,opt,name=enable_cip_cache,json=enableCipCache,proto3,oneof" json:"enable_cip_cache,omitempty"` - // +optional - NamespaceEnforcementMode *Cluster_NamespaceEnforcementMode `protobuf:"varint,3,opt,name=namespace_enforcement_mode,json=namespaceEnforcementMode,proto3,enum=chainguard.platform.tenant.Cluster_NamespaceEnforcementMode,oneof" json:"namespace_enforcement_mode,omitempty"` -} - -func (x *Cluster_EnforcerOptions) Reset() { - *x = Cluster_EnforcerOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_EnforcerOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_EnforcerOptions) ProtoMessage() {} - -func (x *Cluster_EnforcerOptions) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[20] - 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 Cluster_EnforcerOptions.ProtoReflect.Descriptor instead. -func (*Cluster_EnforcerOptions) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{4, 1} -} - -func (x *Cluster_EnforcerOptions) GetWebhookFailOpen() bool { - if x != nil && x.WebhookFailOpen != nil { - return *x.WebhookFailOpen - } - return false -} - -func (x *Cluster_EnforcerOptions) GetEnableCipCache() bool { - if x != nil && x.EnableCipCache != nil { - return *x.EnableCipCache - } - return false -} - -func (x *Cluster_EnforcerOptions) GetNamespaceEnforcementMode() Cluster_NamespaceEnforcementMode { - if x != nil && x.NamespaceEnforcementMode != nil { - return *x.NamespaceEnforcementMode - } - return Cluster_OptOut -} - -// This is based off of k8s.io/client-go/tools/clientcmd/api/v1.Cluster -// This can be extracted from kubectl for a named cluster (replace CLUSTER_NAME) with: -// -// kubectl config view \ -// --flatten -o jsonpath='{.clusters[?(@.name == "CLUSTER_NAME")].cluster}' -type Cluster_Info struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Server is the address of the kubernetes cluster (https://hostname:port). - Server string `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"` - // CertificateAuthorityData contains PEM-encoded certificate authority certificates. - // Overrides CertificateAuthority - CertificateAuthorityData []byte `protobuf:"bytes,5,opt,name=CertificateAuthorityData,proto3" json:"CertificateAuthorityData,omitempty"` -} - -func (x *Cluster_Info) Reset() { - *x = Cluster_Info{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_Info) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_Info) ProtoMessage() {} - -func (x *Cluster_Info) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cluster_Info.ProtoReflect.Descriptor instead. -func (*Cluster_Info) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{4, 2} -} - -func (x *Cluster_Info) GetServer() string { - if x != nil { - return x.Server - } - return "" -} - -func (x *Cluster_Info) GetCertificateAuthorityData() []byte { - if x != nil { - return x.CertificateAuthorityData - } - return nil -} - -// This is based off of k8s.io/client-go/tools/clientcmd/api/v1.AuthInfo -// This should only ever be used with KinD clusters during testing, it WILL -// NOT be stored securely. -type Cluster_AuthInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // client_certificate_data contains PEM-encoded data from a client cert file for TLS. - ClientCertificateData []byte `protobuf:"bytes,2,opt,name=client_certificate_data,json=clientCertificateData,proto3" json:"client_certificate_data,omitempty"` - // client_key_data contains PEM-encoded data from a client key file for TLS. - ClientKeyData []byte `protobuf:"bytes,4,opt,name=client_key_data,json=clientKeyData,proto3" json:"client_key_data,omitempty"` -} - -func (x *Cluster_AuthInfo) Reset() { - *x = Cluster_AuthInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_AuthInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_AuthInfo) ProtoMessage() {} - -func (x *Cluster_AuthInfo) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[22] - 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 Cluster_AuthInfo.ProtoReflect.Descriptor instead. -func (*Cluster_AuthInfo) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{4, 3} -} - -func (x *Cluster_AuthInfo) GetClientCertificateData() []byte { - if x != nil { - return x.ClientCertificateData - } - return nil -} - -func (x *Cluster_AuthInfo) GetClientKeyData() []byte { - if x != nil { - return x.ClientKeyData - } - return nil -} - -type Cluster_Status struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Ready Cluster_Status_State `protobuf:"varint,1,opt,name=ready,proto3,enum=chainguard.platform.tenant.Cluster_Status_State" json:"ready,omitempty"` - Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` - Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *Cluster_Status) Reset() { - *x = Cluster_Status{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_Status) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_Status) ProtoMessage() {} - -func (x *Cluster_Status) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[23] - 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 Cluster_Status.ProtoReflect.Descriptor instead. -func (*Cluster_Status) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{4, 4} -} - -func (x *Cluster_Status) GetReady() Cluster_Status_State { - if x != nil { - return x.Ready - } - return Cluster_Status_UNKNOWN -} - -func (x *Cluster_Status) GetReason() string { - if x != nil { - return x.Reason - } - return "" -} - -func (x *Cluster_Status) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type ClusterProfilesResponse_Profile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Dependencies []string `protobuf:"bytes,3,rep,name=dependencies,proto3" json:"dependencies,omitempty"` -} - -func (x *ClusterProfilesResponse_Profile) Reset() { - *x = ClusterProfilesResponse_Profile{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterProfilesResponse_Profile) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterProfilesResponse_Profile) ProtoMessage() {} - -func (x *ClusterProfilesResponse_Profile) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[24] - 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 ClusterProfilesResponse_Profile.ProtoReflect.Descriptor instead. -func (*ClusterProfilesResponse_Profile) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{9, 0} -} - -func (x *ClusterProfilesResponse_Profile) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ClusterProfilesResponse_Profile) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *ClusterProfilesResponse_Profile) GetDependencies() []string { - if x != nil { - return x.Dependencies - } - return nil -} - -type ClusterConfigRequest_EnforcerOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // +optional - WebhookFailOpen *bool `protobuf:"varint,1,opt,name=webhook_fail_open,json=webhookFailOpen,proto3,oneof" json:"webhook_fail_open,omitempty"` - // +optional - EnableCipCache *bool `protobuf:"varint,2,opt,name=enable_cip_cache,json=enableCipCache,proto3,oneof" json:"enable_cip_cache,omitempty"` - // +optional - NamespaceEnforcementMode *ClusterConfigRequest_NamespaceEnforcementMode `protobuf:"varint,3,opt,name=namespace_enforcement_mode,json=namespaceEnforcementMode,proto3,enum=chainguard.platform.tenant.ClusterConfigRequest_NamespaceEnforcementMode,oneof" json:"namespace_enforcement_mode,omitempty"` -} - -func (x *ClusterConfigRequest_EnforcerOptions) Reset() { - *x = ClusterConfigRequest_EnforcerOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_cluster_platform_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterConfigRequest_EnforcerOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterConfigRequest_EnforcerOptions) ProtoMessage() {} - -func (x *ClusterConfigRequest_EnforcerOptions) ProtoReflect() protoreflect.Message { - mi := &file_cluster_platform_proto_msgTypes[25] - 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 ClusterConfigRequest_EnforcerOptions.ProtoReflect.Descriptor instead. -func (*ClusterConfigRequest_EnforcerOptions) Descriptor() ([]byte, []int) { - return file_cluster_platform_proto_rawDescGZIP(), []int{10, 0} -} - -func (x *ClusterConfigRequest_EnforcerOptions) GetWebhookFailOpen() bool { - if x != nil && x.WebhookFailOpen != nil { - return *x.WebhookFailOpen - } - return false -} - -func (x *ClusterConfigRequest_EnforcerOptions) GetEnableCipCache() bool { - if x != nil && x.EnableCipCache != nil { - return *x.EnableCipCache - } - return false -} - -func (x *ClusterConfigRequest_EnforcerOptions) GetNamespaceEnforcementMode() ClusterConfigRequest_NamespaceEnforcementMode { - if x != nil && x.NamespaceEnforcementMode != nil { - return *x.NamespaceEnforcementMode - } - return ClusterConfigRequest_OptOut -} - -var File_cluster_platform_proto protoreflect.FileDescriptor - -var file_cluster_platform_proto_rawDesc = []byte{ - 0x0a, 0x16, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, - 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x7a, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x2e, 0x0a, 0x14, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbf, 0x02, 0x0a, - 0x17, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x4a, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x51, 0x0a, 0x05, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x45, 0x45, 0x44, 0x53, 0x5f, 0x57, 0x4f, 0x52, 0x4b, - 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x03, - 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x22, 0xee, - 0x07, 0x0a, 0x18, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x07, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x73, 0x1a, 0xfa, 0x06, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x48, 0x0a, - 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x12, 0x48, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x6b, 0x0a, 0x0b, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, - 0x0b, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x66, 0x0a, 0x0a, - 0x6e, 0x65, 0x65, 0x64, 0x73, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x45, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x4e, 0x65, - 0x65, 0x64, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x65, 0x65, 0x64, 0x73, - 0x57, 0x6f, 0x72, 0x6b, 0x12, 0x62, 0x0a, 0x08, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, - 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x2e, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x08, - 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x62, 0x0a, 0x08, 0x65, 0x6e, 0x72, 0x6f, - 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, - 0x48, 0x00, 0x52, 0x08, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x1a, 0x25, 0x0a, 0x0b, - 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x1a, 0x21, 0x0a, 0x09, 0x4e, 0x65, 0x65, 0x64, 0x73, 0x57, 0x6f, 0x72, 0x6b, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x1a, 0x48, 0x0a, 0x08, 0x45, 0x6c, 0x69, 0x67, 0x69, 0x62, - 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, - 0x1a, 0x74, 0x0a, 0x08, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x07, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, - 0xf7, 0x0f, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x0a, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, - 0x6e, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x08, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x63, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x64, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x08, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, - 0x18, 0x69, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x3c, - 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x49, 0x0a, 0x09, - 0x61, 0x75, 0x74, 0x68, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x68, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x61, - 0x75, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x42, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x67, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x68, - 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x6a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x6b, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x63, 0x0a, 0x10, 0x65, 0x6e, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x6c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x65, 0x6e, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x1a, - 0x68, 0x0a, 0x0d, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xbc, 0x02, 0x0a, 0x0f, 0x45, 0x6e, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, - 0x11, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x70, - 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0f, 0x77, 0x65, 0x62, 0x68, - 0x6f, 0x6f, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x4f, 0x70, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2d, - 0x0a, 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x43, 0x69, 0x70, 0x43, 0x61, 0x63, 0x68, 0x65, 0x88, 0x01, 0x01, 0x12, 0x7f, 0x0a, - 0x1a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x48, - 0x02, 0x52, 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x42, 0x14, - 0x0a, 0x12, 0x5f, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, - 0x6f, 0x70, 0x65, 0x6e, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x63, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x1a, 0x5a, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x18, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x18, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x44, 0x61, 0x74, 0x61, 0x1a, 0x6a, 0x0a, 0x08, 0x41, 0x75, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, - 0x1a, 0xb1, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x46, 0x0a, 0x05, 0x72, - 0x65, 0x61, 0x64, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x72, 0x65, - 0x61, 0x64, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x2d, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x52, - 0x65, 0x61, 0x64, 0x79, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x52, 0x65, 0x61, - 0x64, 0x79, 0x10, 0x02, 0x22, 0x31, 0x0a, 0x18, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x4f, 0x75, 0x74, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, - 0x4f, 0x70, 0x74, 0x49, 0x6e, 0x10, 0x01, 0x22, 0x5b, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x07, 0x0a, 0x03, 0x47, 0x4b, 0x45, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4b, 0x53, - 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x52, 0x55, 0x4e, 0x10, - 0x0a, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x43, 0x53, 0x10, 0x14, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x50, - 0x50, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x10, 0x15, 0x12, 0x08, 0x0a, 0x04, 0x4b, 0x49, - 0x4e, 0x44, 0x10, 0x64, 0x22, 0x3e, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x53, - 0x5f, 0x45, 0x41, 0x53, 0x54, 0x10, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x5f, 0x43, 0x45, - 0x4e, 0x54, 0x52, 0x41, 0x4c, 0x10, 0x66, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x53, 0x5f, 0x57, 0x45, - 0x53, 0x54, 0x10, 0x67, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, - 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xeb, 0x01, 0x0a, 0x0f, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, - 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x6c, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x70, 0x65, 0x63, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x65, 0x63, 0x48, 0x61, 0x73, 0x68, 0x12, 0x37, - 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 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, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, - 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x22, 0x48, 0x0a, 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x22, 0xcb, 0x01, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, - 0x63, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, - 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x1b, - 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x18, 0x0a, 0x16, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xd5, 0x01, 0x0a, 0x17, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x63, 0x0a, 0x07, - 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, - 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x22, 0xb9, 0x04, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x70, 0x0a, 0x10, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x40, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x1a, 0xca, 0x02, 0x0a, 0x0f, 0x45, 0x6e, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x11, - 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0f, 0x77, 0x65, 0x62, 0x68, 0x6f, - 0x6f, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x4f, 0x70, 0x65, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, - 0x10, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x69, 0x70, 0x5f, 0x63, 0x61, 0x63, 0x68, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x43, 0x69, 0x70, 0x43, 0x61, 0x63, 0x68, 0x65, 0x88, 0x01, 0x01, 0x12, 0x8c, 0x01, 0x0a, - 0x1a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x49, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x02, 0x52, 0x18, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, - 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x6f, 0x70, 0x65, - 0x6e, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x69, 0x70, - 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x42, 0x1d, 0x0a, 0x1b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0x31, 0x0a, 0x18, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x45, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x70, 0x74, 0x4f, 0x75, 0x74, 0x10, 0x00, 0x12, 0x09, 0x0a, - 0x05, 0x4f, 0x70, 0x74, 0x49, 0x6e, 0x10, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x65, 0x6e, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x77, 0x0a, - 0x15, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x63, 0x70, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6d, 0x63, 0x70, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x43, 0x49, 0x44, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x36, 0x0a, 0x13, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x49, 0x44, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x69, 0x64, 0x72, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x69, 0x64, 0x72, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x73, 0x32, 0x8e, 0x0a, 0x0a, 0x08, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x12, 0xdf, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x30, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x22, 0x7e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x3a, 0x07, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x22, 0x22, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, - 0x0a, 0x04, 0xf5, 0x03, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x37, 0x0a, 0x2c, 0x64, 0x65, - 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0xc0, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x30, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, - 0x2a, 0x1b, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xf8, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x37, 0x0a, - 0x2c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xa3, 0x01, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xf9, 0x03, 0xf7, 0x03, 0x12, 0x85, 0x01, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x1a, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x15, 0x12, 0x13, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, - 0xf7, 0x03, 0x10, 0x01, 0x12, 0xc3, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, - 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x1a, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x20, 0x3a, 0x01, 0x2a, 0x1a, 0x1b, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, - 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xf6, 0x03, 0xc2, 0xf0, 0x8e, - 0xfc, 0x0b, 0x37, 0x0a, 0x2c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, - 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x7d, 0x0a, 0x08, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x08, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, 0x12, 0x00, 0x12, 0x77, 0x0a, 0x06, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x02, - 0x12, 0x00, 0x12, 0x71, 0x0a, 0x04, 0x43, 0x49, 0x44, 0x52, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, - 0x49, 0x44, 0x52, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, - 0x49, 0x44, 0x52, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x08, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x02, 0x12, 0x00, 0x42, 0x72, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1a, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_cluster_platform_proto_rawDescOnce sync.Once - file_cluster_platform_proto_rawDescData = file_cluster_platform_proto_rawDesc -) - -func file_cluster_platform_proto_rawDescGZIP() []byte { - file_cluster_platform_proto_rawDescOnce.Do(func() { - file_cluster_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_cluster_platform_proto_rawDescData) - }) - return file_cluster_platform_proto_rawDescData -} - -var file_cluster_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_cluster_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 26) -var file_cluster_platform_proto_goTypes = []interface{}{ - (ClusterDiscoveryRequest_State)(0), // 0: chainguard.platform.tenant.ClusterDiscoveryRequest.State - (Cluster_NamespaceEnforcementMode)(0), // 1: chainguard.platform.tenant.Cluster.NamespaceEnforcementMode - (Cluster_Provider)(0), // 2: chainguard.platform.tenant.Cluster.Provider - (Cluster_Location)(0), // 3: chainguard.platform.tenant.Cluster.Location - (Cluster_Status_State)(0), // 4: chainguard.platform.tenant.Cluster.Status.State - (ClusterConfigRequest_NamespaceEnforcementMode)(0), // 5: chainguard.platform.tenant.ClusterConfigRequest.NamespaceEnforcementMode - (*CreateClusterRequest)(nil), // 6: chainguard.platform.tenant.CreateClusterRequest - (*DeleteClusterRequest)(nil), // 7: chainguard.platform.tenant.DeleteClusterRequest - (*ClusterDiscoveryRequest)(nil), // 8: chainguard.platform.tenant.ClusterDiscoveryRequest - (*ClusterDiscoveryResponse)(nil), // 9: chainguard.platform.tenant.ClusterDiscoveryResponse - (*Cluster)(nil), // 10: chainguard.platform.tenant.Cluster - (*ClusterActivity)(nil), // 11: chainguard.platform.tenant.ClusterActivity - (*ClusterList)(nil), // 12: chainguard.platform.tenant.ClusterList - (*ClusterFilter)(nil), // 13: chainguard.platform.tenant.ClusterFilter - (*ClusterProfilesRequest)(nil), // 14: chainguard.platform.tenant.ClusterProfilesRequest - (*ClusterProfilesResponse)(nil), // 15: chainguard.platform.tenant.ClusterProfilesResponse - (*ClusterConfigRequest)(nil), // 16: chainguard.platform.tenant.ClusterConfigRequest - (*ClusterConfigResponse)(nil), // 17: chainguard.platform.tenant.ClusterConfigResponse - (*ClusterCIDRRequest)(nil), // 18: chainguard.platform.tenant.ClusterCIDRRequest - (*ClusterCIDRResponse)(nil), // 19: chainguard.platform.tenant.ClusterCIDRResponse - (*ClusterDiscoveryResponse_Result)(nil), // 20: chainguard.platform.tenant.ClusterDiscoveryResponse.Result - (*ClusterDiscoveryResponse_Result_Unsupported)(nil), // 21: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Unsupported - (*ClusterDiscoveryResponse_Result_NeedsWork)(nil), // 22: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.NeedsWork - (*ClusterDiscoveryResponse_Result_Eligible)(nil), // 23: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Eligible - (*ClusterDiscoveryResponse_Result_Enrolled)(nil), // 24: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Enrolled - nil, // 25: chainguard.platform.tenant.Cluster.ActivityEntry - (*Cluster_EnforcerOptions)(nil), // 26: chainguard.platform.tenant.Cluster.EnforcerOptions - (*Cluster_Info)(nil), // 27: chainguard.platform.tenant.Cluster.Info - (*Cluster_AuthInfo)(nil), // 28: chainguard.platform.tenant.Cluster.AuthInfo - (*Cluster_Status)(nil), // 29: chainguard.platform.tenant.Cluster.Status - (*ClusterProfilesResponse_Profile)(nil), // 30: chainguard.platform.tenant.ClusterProfilesResponse.Profile - (*ClusterConfigRequest_EnforcerOptions)(nil), // 31: chainguard.platform.tenant.ClusterConfigRequest.EnforcerOptions - (*timestamppb.Timestamp)(nil), // 32: google.protobuf.Timestamp - (*v1.Group)(nil), // 33: chainguard.platform.iam.Group - (*v11.UIDPFilter)(nil), // 34: chainguard.platform.common.UIDPFilter - (*emptypb.Empty)(nil), // 35: google.protobuf.Empty -} -var file_cluster_platform_proto_depIdxs = []int32{ - 10, // 0: chainguard.platform.tenant.CreateClusterRequest.cluster:type_name -> chainguard.platform.tenant.Cluster - 2, // 1: chainguard.platform.tenant.ClusterDiscoveryRequest.providers:type_name -> chainguard.platform.tenant.Cluster.Provider - 0, // 2: chainguard.platform.tenant.ClusterDiscoveryRequest.states:type_name -> chainguard.platform.tenant.ClusterDiscoveryRequest.State - 20, // 3: chainguard.platform.tenant.ClusterDiscoveryResponse.results:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result - 32, // 4: chainguard.platform.tenant.Cluster.registered:type_name -> google.protobuf.Timestamp - 32, // 5: chainguard.platform.tenant.Cluster.last_seen:type_name -> google.protobuf.Timestamp - 25, // 6: chainguard.platform.tenant.Cluster.activity:type_name -> chainguard.platform.tenant.Cluster.ActivityEntry - 33, // 7: chainguard.platform.tenant.Cluster.group:type_name -> chainguard.platform.iam.Group - 2, // 8: chainguard.platform.tenant.Cluster.provider:type_name -> chainguard.platform.tenant.Cluster.Provider - 3, // 9: chainguard.platform.tenant.Cluster.affinity:type_name -> chainguard.platform.tenant.Cluster.Location - 27, // 10: chainguard.platform.tenant.Cluster.info:type_name -> chainguard.platform.tenant.Cluster.Info - 28, // 11: chainguard.platform.tenant.Cluster.auth_info:type_name -> chainguard.platform.tenant.Cluster.AuthInfo - 29, // 12: chainguard.platform.tenant.Cluster.status:type_name -> chainguard.platform.tenant.Cluster.Status - 26, // 13: chainguard.platform.tenant.Cluster.enforcer_options:type_name -> chainguard.platform.tenant.Cluster.EnforcerOptions - 32, // 14: chainguard.platform.tenant.ClusterActivity.last_seen:type_name -> google.protobuf.Timestamp - 10, // 15: chainguard.platform.tenant.ClusterList.items:type_name -> chainguard.platform.tenant.Cluster - 32, // 16: chainguard.platform.tenant.ClusterFilter.active_since:type_name -> google.protobuf.Timestamp - 34, // 17: chainguard.platform.tenant.ClusterFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 30, // 18: chainguard.platform.tenant.ClusterProfilesResponse.profile:type_name -> chainguard.platform.tenant.ClusterProfilesResponse.Profile - 31, // 19: chainguard.platform.tenant.ClusterConfigRequest.enforcer_options:type_name -> chainguard.platform.tenant.ClusterConfigRequest.EnforcerOptions - 2, // 20: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.provider:type_name -> chainguard.platform.tenant.Cluster.Provider - 3, // 21: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.location:type_name -> chainguard.platform.tenant.Cluster.Location - 21, // 22: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.unsupported:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Unsupported - 22, // 23: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.needs_work:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result.NeedsWork - 23, // 24: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.eligible:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Eligible - 24, // 25: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.enrolled:type_name -> chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Enrolled - 27, // 26: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Eligible.info:type_name -> chainguard.platform.tenant.Cluster.Info - 27, // 27: chainguard.platform.tenant.ClusterDiscoveryResponse.Result.Enrolled.info:type_name -> chainguard.platform.tenant.Cluster.Info - 11, // 28: chainguard.platform.tenant.Cluster.ActivityEntry.value:type_name -> chainguard.platform.tenant.ClusterActivity - 1, // 29: chainguard.platform.tenant.Cluster.EnforcerOptions.namespace_enforcement_mode:type_name -> chainguard.platform.tenant.Cluster.NamespaceEnforcementMode - 4, // 30: chainguard.platform.tenant.Cluster.Status.ready:type_name -> chainguard.platform.tenant.Cluster.Status.State - 5, // 31: chainguard.platform.tenant.ClusterConfigRequest.EnforcerOptions.namespace_enforcement_mode:type_name -> chainguard.platform.tenant.ClusterConfigRequest.NamespaceEnforcementMode - 6, // 32: chainguard.platform.tenant.Clusters.Create:input_type -> chainguard.platform.tenant.CreateClusterRequest - 7, // 33: chainguard.platform.tenant.Clusters.Delete:input_type -> chainguard.platform.tenant.DeleteClusterRequest - 8, // 34: chainguard.platform.tenant.Clusters.Discover:input_type -> chainguard.platform.tenant.ClusterDiscoveryRequest - 13, // 35: chainguard.platform.tenant.Clusters.List:input_type -> chainguard.platform.tenant.ClusterFilter - 10, // 36: chainguard.platform.tenant.Clusters.Update:input_type -> chainguard.platform.tenant.Cluster - 14, // 37: chainguard.platform.tenant.Clusters.Profiles:input_type -> chainguard.platform.tenant.ClusterProfilesRequest - 16, // 38: chainguard.platform.tenant.Clusters.Config:input_type -> chainguard.platform.tenant.ClusterConfigRequest - 18, // 39: chainguard.platform.tenant.Clusters.CIDR:input_type -> chainguard.platform.tenant.ClusterCIDRRequest - 10, // 40: chainguard.platform.tenant.Clusters.Create:output_type -> chainguard.platform.tenant.Cluster - 35, // 41: chainguard.platform.tenant.Clusters.Delete:output_type -> google.protobuf.Empty - 9, // 42: chainguard.platform.tenant.Clusters.Discover:output_type -> chainguard.platform.tenant.ClusterDiscoveryResponse - 12, // 43: chainguard.platform.tenant.Clusters.List:output_type -> chainguard.platform.tenant.ClusterList - 10, // 44: chainguard.platform.tenant.Clusters.Update:output_type -> chainguard.platform.tenant.Cluster - 15, // 45: chainguard.platform.tenant.Clusters.Profiles:output_type -> chainguard.platform.tenant.ClusterProfilesResponse - 17, // 46: chainguard.platform.tenant.Clusters.Config:output_type -> chainguard.platform.tenant.ClusterConfigResponse - 19, // 47: chainguard.platform.tenant.Clusters.CIDR:output_type -> chainguard.platform.tenant.ClusterCIDRResponse - 40, // [40:48] is the sub-list for method output_type - 32, // [32:40] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name -} - -func init() { file_cluster_platform_proto_init() } -func file_cluster_platform_proto_init() { - if File_cluster_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_cluster_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateClusterRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteClusterRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterDiscoveryRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterDiscoveryResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterActivity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterProfilesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterProfilesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterConfigRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterConfigResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterCIDRRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterCIDRResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterDiscoveryResponse_Result); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterDiscoveryResponse_Result_Unsupported); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterDiscoveryResponse_Result_NeedsWork); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterDiscoveryResponse_Result_Eligible); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterDiscoveryResponse_Result_Enrolled); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_EnforcerOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_Info); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_AuthInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_Status); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterProfilesResponse_Profile); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_cluster_platform_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterConfigRequest_EnforcerOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_cluster_platform_proto_msgTypes[4].OneofWrappers = []interface{}{} - file_cluster_platform_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_cluster_platform_proto_msgTypes[14].OneofWrappers = []interface{}{ - (*ClusterDiscoveryResponse_Result_Unsupported_)(nil), - (*ClusterDiscoveryResponse_Result_NeedsWork_)(nil), - (*ClusterDiscoveryResponse_Result_Eligible_)(nil), - (*ClusterDiscoveryResponse_Result_Enrolled_)(nil), - } - file_cluster_platform_proto_msgTypes[20].OneofWrappers = []interface{}{} - file_cluster_platform_proto_msgTypes[25].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_cluster_platform_proto_rawDesc, - NumEnums: 6, - NumMessages: 26, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_cluster_platform_proto_goTypes, - DependencyIndexes: file_cluster_platform_proto_depIdxs, - EnumInfos: file_cluster_platform_proto_enumTypes, - MessageInfos: file_cluster_platform_proto_msgTypes, - }.Build() - File_cluster_platform_proto = out.File - file_cluster_platform_proto_rawDesc = nil - file_cluster_platform_proto_goTypes = nil - file_cluster_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/cluster.platform.pb.gw.go b/proto/platform/tenant/v1/cluster.platform.pb.gw.go deleted file mode 100644 index dc3d0b60..00000000 --- a/proto/platform/tenant/v1/cluster.platform.pb.gw.go +++ /dev/null @@ -1,833 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: cluster.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_Clusters_Create_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateClusterRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Cluster); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := client.Create(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Clusters_Create_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq CreateClusterRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Cluster); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["parent_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "parent_id") - } - - protoReq.ParentId, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "parent_id", err) - } - - msg, err := server.Create(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Clusters_Delete_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteClusterRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Delete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Clusters_Delete_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq DeleteClusterRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Delete(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Clusters_Discover_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterDiscoveryRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.Discover(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Clusters_Discover_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterDiscoveryRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.Discover(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_Clusters_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Clusters_List_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Clusters_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Clusters_List_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Clusters_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Clusters_Update_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Cluster - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := client.Update(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Clusters_Update_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq Cluster - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") - } - - protoReq.Id, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) - } - - msg, err := server.Update(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Clusters_Profiles_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterProfilesRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.Profiles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Clusters_Profiles_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterProfilesRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.Profiles(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Clusters_Config_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterConfigRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.Config(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Clusters_Config_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterConfigRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.Config(ctx, &protoReq) - return msg, metadata, err - -} - -func request_Clusters_CIDR_0(ctx context.Context, marshaler runtime.Marshaler, client ClustersClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterCIDRRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.CIDR(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Clusters_CIDR_0(ctx context.Context, marshaler runtime.Marshaler, server ClustersServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ClusterCIDRRequest - var metadata runtime.ServerMetadata - - newReader, berr := utilities.IOReaderFactory(req.Body) - if berr != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) - } - if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.CIDR(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterClustersHandlerServer registers the http handlers for service Clusters to "mux". -// UnaryRPC :call ClustersServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterClustersHandlerFromEndpoint instead. -func RegisterClustersHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ClustersServer) error { - - mux.Handle("POST", pattern_Clusters_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Create", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Clusters_Create_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Clusters_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Delete", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Clusters_Delete_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Clusters_Discover_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Discover", runtime.WithHTTPPathPattern("/tenant/v1/clusters")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Clusters_Discover_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Discover_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Clusters_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/List", runtime.WithHTTPPathPattern("/tenant/v1/clusters")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Clusters_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Clusters_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Update", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Clusters_Update_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Clusters_Profiles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Profiles", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/Profiles")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Clusters_Profiles_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Profiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Clusters_Config_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Config", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/Config")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Clusters_Config_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Config_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Clusters_CIDR_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/CIDR", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/CIDR")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Clusters_CIDR_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_CIDR_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterClustersHandlerFromEndpoint is same as RegisterClustersHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterClustersHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterClustersHandler(ctx, mux, conn) -} - -// RegisterClustersHandler registers the http handlers for service Clusters to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterClustersHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterClustersHandlerClient(ctx, mux, NewClustersClient(conn)) -} - -// RegisterClustersHandlerClient registers the http handlers for service Clusters -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ClustersClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ClustersClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "ClustersClient" to call the correct interceptors. -func RegisterClustersHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ClustersClient) error { - - mux.Handle("POST", pattern_Clusters_Create_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Create", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{parent_id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Clusters_Create_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Create_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("DELETE", pattern_Clusters_Delete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Delete", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Clusters_Delete_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Delete_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Clusters_Discover_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Discover", runtime.WithHTTPPathPattern("/tenant/v1/clusters")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Clusters_Discover_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Discover_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("GET", pattern_Clusters_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/List", runtime.WithHTTPPathPattern("/tenant/v1/clusters")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Clusters_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("PUT", pattern_Clusters_Update_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Update", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{id=**}")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Clusters_Update_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Update_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Clusters_Profiles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Profiles", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/Profiles")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Clusters_Profiles_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Profiles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Clusters_Config_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/Config", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/Config")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Clusters_Config_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_Config_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_Clusters_CIDR_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Clusters/CIDR", runtime.WithHTTPPathPattern("/chainguard.platform.tenant.Clusters/CIDR")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Clusters_CIDR_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Clusters_CIDR_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Clusters_Create_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"tenant", "v1", "clusters", "parent_id"}, "")) - - pattern_Clusters_Delete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"tenant", "v1", "clusters", "id"}, "")) - - pattern_Clusters_Discover_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "clusters"}, "")) - - pattern_Clusters_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "clusters"}, "")) - - pattern_Clusters_Update_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3}, []string{"tenant", "v1", "clusters", "id"}, "")) - - pattern_Clusters_Profiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Clusters", "Profiles"}, "")) - - pattern_Clusters_Config_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Clusters", "Config"}, "")) - - pattern_Clusters_CIDR_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"chainguard.platform.tenant.Clusters", "CIDR"}, "")) -) - -var ( - forward_Clusters_Create_0 = runtime.ForwardResponseMessage - - forward_Clusters_Delete_0 = runtime.ForwardResponseMessage - - forward_Clusters_Discover_0 = runtime.ForwardResponseMessage - - forward_Clusters_List_0 = runtime.ForwardResponseMessage - - forward_Clusters_Update_0 = runtime.ForwardResponseMessage - - forward_Clusters_Profiles_0 = runtime.ForwardResponseMessage - - forward_Clusters_Config_0 = runtime.ForwardResponseMessage - - forward_Clusters_CIDR_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/tenant/v1/cluster.platform.proto b/proto/platform/tenant/v1/cluster.platform.proto deleted file mode 100644 index de125115..00000000 --- a/proto/platform/tenant/v1/cluster.platform.proto +++ /dev/null @@ -1,479 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantClusterProto"; - -package chainguard.platform.tenant; - -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "annotations/events.proto"; -import "platform/common/v1/uidp.platform.proto"; -import "platform/iam/v1/group.platform.proto"; - -service Clusters { - rpc Create(CreateClusterRequest) returns (Cluster) { - option (google.api.http) = { - post: "/tenant/v1/clusters/{parent_id=**}" - body: "cluster" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [ - CAP_TENANT_CLUSTERS_CREATE, - // Creating a managed Cluster entails creating a RoleBinding - // for the cluster's identity, so check that the caller has - // permission to create RoleBindings as well. - CAP_IAM_ROLE_BINDINGS_CREATE - ] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.tenant.cluster.created.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Delete(DeleteClusterRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/tenant/v1/clusters/{id=**}" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_CLUSTERS_DELETE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.tenant.cluster.deleted.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Discover(ClusterDiscoveryRequest) returns (ClusterDiscoveryResponse) { - option (google.api.http) = { - post: "/tenant/v1/clusters" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [ - // This API is used to discover all of the clusters accessible - // to the IAM roles associated with the group specified in the - // request, use this special capability to cover this permission. - CAP_TENANT_CLUSTERS_DISCOVER, - // As part of the discovery response we return "enrolled" - // clusters, so check the List capability. - CAP_TENANT_CLUSTERS_LIST - ] - } - }; - } - - rpc List(ClusterFilter) returns (ClusterList) { - option (google.api.http) = { - get: "/tenant/v1/clusters" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_CLUSTERS_LIST] - unscoped: true - } - }; - } - - rpc Update(Cluster) returns (Cluster) { - option (google.api.http) = { - put: "/tenant/v1/clusters/{id=**}" - body: "*" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_CLUSTERS_UPDATE] - } - }; - option (chainguard.annotations.events) = { - type: "dev.chainguard.api.tenant.cluster.updated.v1" - extensions: ["group"] - audience: CUSTOMER - }; - } - - rpc Profiles(ClusterProfilesRequest) returns (ClusterProfilesResponse) { - option (chainguard.annotations.iam) = { - // Just check that the caller is registered. - enabled: {} - }; - } - - rpc Config(ClusterConfigRequest) returns (ClusterConfigResponse) { - option (chainguard.annotations.iam) = { - // Just check that the caller is registered. - enabled: {} - }; - } - - rpc CIDR(ClusterCIDRRequest) returns (ClusterCIDRResponse) { - option (chainguard.annotations.iam) = { - // Just check that the caller is registered. - enabled: {} - }; - } -} - -message CreateClusterRequest { - // parent_id, The Group under which this Cluster resides. - string parent_id = 1 [(chainguard.annotations.iam_scope) = true]; - - // Cluster is the definition of the managed cluster to create. - Cluster cluster = 2; -} - -message DeleteClusterRequest { - // id is the exact UIDP of the record. - string id = 1 [(chainguard.annotations.iam_scope) = true]; -} - -message ClusterDiscoveryRequest { - // id is the exact UIDP of the group to impersonate to search for clusters. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - - // providers is the list of providers to perform discovery on. - repeated Cluster.Provider providers = 2; - - // profiles includes the set of profiles to perform discovery for, - // which may impact eligibility (some profiles may not be supported - // on some providers). - repeated string profiles = 3; - - // states is a collection of the states to return, or all if - // none are specified. - repeated State states = 4; - - enum State { - UNKNOWN = 0; - UNSUPPORTED = 1; - NEEDS_WORK = 2; - ELIGIBLE = 3; - ENROLLED = 4; - } -} - -message ClusterDiscoveryResponse { - repeated Result results = 1; - - message Result { - Cluster.Provider provider = 1; - string account = 2; - Cluster.Location location = 3; - string name = 4; - - oneof state { - // unsupported clusters cannot be enrolled with our - // Agentless cluster support. - Unsupported unsupported = 10; - - // needs_work clusters can be modified in some way so - // that they are supported by our Agentless infrastructure. - NeedsWork needs_work = 11; - - // eligible clusters are able to be directly enrolled as - // agentless tenants immediately. This message contains - // all of the information needed to enroll this cluster. - Eligible eligible = 12; - - // enrolled clusters are clusters that have already been - // enrolled as agentless tenants. - Enrolled enrolled = 13; - } - - message Unsupported { - // reason holds the reason the cluster is not currently supported. - string reason = 1; - } - - message NeedsWork { - // steps holds the set of changes the user needs to make in order - // for the cluster to become eligible. - repeated string steps = 1; - } - - message Eligible { - chainguard.platform.tenant.Cluster.Info info = 1; - } - - message Enrolled { - // id is the UIDP of the tenant Cluster. - string id = 1; - - // profiles contains the set of profiles that this - // cluster was enrolled with. - repeated string profiles = 2; - - chainguard.platform.tenant.Cluster.Info info = 3; - } - } -} - -message Cluster { - // id, The Cluster UIDP under which this Cluster resides. - string id = 1 [(chainguard.annotations.iam_scope) = true]; - - // remote_id is the remote ID of this cluster. - string remote_id = 2; - - // issuer is the identity issuer tied to this cluster. - string issuer = 3; - - // registered tracks the timestamp at which this cluster was registered. - google.protobuf.Timestamp registered = 4; - - // last_seen tracks the timestamp at which this cluster was last seen. - google.protobuf.Timestamp last_seen = 5; - - // version holds the Kubernetes version last reported by the cluster. - string version = 6; - - // agent_version holds the version of the Chainguard agent last reported by the cluster. - string agent_version = 7; - - // activity is a mapping from "Source" URLs to an activity record summarizing - // recent activity from this source. - map activity = 8; - - // name of the cluster. - string name = 9; - - // a short description of this cluster. - string description = 10; - - // group the cluster resides in - chainguard.platform.iam.Group group = 99; - - ///////////////////////////////////////////// - // Group "managed" options starting at 100 // - ///////////////////////////////////////////// - - // managed_name is the unique name we have given to this cluster's managed agent. - // This field is output-only, and is populated only when this cluster is "managed". - string managed_name = 100; - - // provider holds the flavor of cluster provider, which is used to determine how we - // authenticate with the cluster. - Provider provider = 101; - - // affinity specifies a scheduling preference for where to run the managed agent. - // Other factors, such as the provider may be taken into account when choosing a - // host cluster. - Location affinity = 105; - - // info contains the cluster information from the kubeconfig context. - Info info = 102; - - // auth_info holds authentication details for connecting to KinD in test scenarios. - AuthInfo auth_info = 104; - - // status contains the managed cluster's status. - Status status = 103; - - // host_cluster surfaces the opaque identifier for the Chainguard cluster hosting - // this agent. - string host_cluster = 106; - - // profiles specifies the root set of tenant configurations that we want to run - // on this cluster. - repeated string profiles = 107; - - // EnforcerOptions contains additional Enforcer configuration settings. - // +optional - optional EnforcerOptions enforcer_options = 108; - - message EnforcerOptions { - // +optional - optional bool webhook_fail_open = 1; - // +optional - optional bool enable_cip_cache = 2; - // +optional - optional NamespaceEnforcementMode namespace_enforcement_mode = 3; - } - - enum NamespaceEnforcementMode { - OptOut = 0; - OptIn = 1; - } - - enum Provider { - UNKNOWN = 0; - GKE = 1; - EKS = 2; - - // GCP Services (10+) - CLOUD_RUN = 10; - - // AWS Services (20+) - ECS = 20; - APP_RUNNER = 21; - - // For testing. - KIND = 100; - } - - enum Location { - AUTO = 0; - - // Use 1xx for US - US_EAST = 101; - US_CENTRAL = 102; - US_WEST = 103; - - // TODO: Segment up other areas - } - - // This is based off of k8s.io/client-go/tools/clientcmd/api/v1.Cluster - // This can be extracted from kubectl for a named cluster (replace CLUSTER_NAME) with: - // kubectl config view \ - // --flatten -o jsonpath='{.clusters[?(@.name == "CLUSTER_NAME")].cluster}' - message Info { - // Server is the address of the kubernetes cluster (https://hostname:port). - string server = 1; - - // TODO: TLSServerName = 2; - - // TODO: InsecureSkipTLSVerify = 3; - - // TODO: CertificateAuthority = 4; - - // CertificateAuthorityData contains PEM-encoded certificate authority certificates. - // Overrides CertificateAuthority - bytes CertificateAuthorityData = 5; - - // TODO: ProxyURL = 6; - - // TODO: Extensions = 7; - } - - // This is based off of k8s.io/client-go/tools/clientcmd/api/v1.AuthInfo - // This should only ever be used with KinD clusters during testing, it WILL - // NOT be stored securely. - message AuthInfo { - // client_certificate_data contains PEM-encoded data from a client cert file for TLS. - bytes client_certificate_data = 2; - - // client_key_data contains PEM-encoded data from a client key file for TLS. - bytes client_key_data = 4; - } - - message Status { - enum State { - UNKNOWN = 0; - Ready = 1; - NotReady = 2; - } - - State ready = 1; - string reason = 2; - string message = 3; - } -} - -message ClusterActivity { - // profile is the Chainguard profile to which the source of this activity belongs. - string profile = 6; - - // namespace is the namespace in which the source of this cluster activity lives. - string namespace = 1; - - // controller_name is the name of the Controller CRD which was the source of this - // activity on the tenant cluster. - string controller_name = 2; - - // webhook_name is the name of the Webhook CRD which was the source of this - // activity on the tenant cluster. - string webhook_name = 3; - - // spec_hash is the hash of the Controller or Webhook CRD's spec, which forms a - // loose form of versioning. - string spec_hash = 4; - - // last_seen tracks the timestamp at which this source was last active. - google.protobuf.Timestamp last_seen = 5; -} - -message ClusterList { - repeated Cluster items = 1; -} - -message ClusterFilter { - // id is the exact UID of the record. - string id = 1; - - // active_since is the timestamp after which returned clusters should have been active. - // This applies to both cluster registration and when it was "last seen". - google.protobuf.Timestamp active_since = 2; - - // uidp filers records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 3; - - // remote_id is the remote ID of this cluster. - string remote_id = 4; - - // name is the exact name of the cluster. - string name = 5; -} - -message ClusterProfilesRequest {} - -message ClusterProfilesResponse { - repeated Profile profile = 1; - - message Profile { - string name = 1; - string description = 2; - - repeated string dependencies = 3; - } -} - -message ClusterConfigRequest { - // profiles specifies the root profiles we want as part of this configuration. - repeated string profiles = 1; - - // EnforcerOptions contains additional Enforcer configuration settings. - optional EnforcerOptions enforcer_options = 2; - - message EnforcerOptions { - // +optional - optional bool webhook_fail_open = 1; - // +optional - optional bool enable_cip_cache = 2; - // +optional - optional NamespaceEnforcementMode namespace_enforcement_mode = 3; - } - - enum NamespaceEnforcementMode { - OptOut = 0; - OptIn = 1; - } -} - -message ClusterConfigResponse { - bytes mcp_config = 1; - bytes tenant_config = 2; - - // profiles includes the full set of profiles returned (including transitive - // dependencies of the input profiles) - repeated string profiles = 3; -} - -message ClusterCIDRRequest { -} - -message ClusterCIDRResponse { - // cidr_blocks specifies the cidr blocks enforce uses to communicate with clusters. - repeated string cidr_blocks = 1; -} diff --git a/proto/platform/tenant/v1/cluster.platform_grpc.pb.go b/proto/platform/tenant/v1/cluster.platform_grpc.pb.go deleted file mode 100644 index 75c55127..00000000 --- a/proto/platform/tenant/v1/cluster.platform_grpc.pb.go +++ /dev/null @@ -1,369 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: cluster.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - emptypb "google.golang.org/protobuf/types/known/emptypb" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Clusters_Create_FullMethodName = "/chainguard.platform.tenant.Clusters/Create" - Clusters_Delete_FullMethodName = "/chainguard.platform.tenant.Clusters/Delete" - Clusters_Discover_FullMethodName = "/chainguard.platform.tenant.Clusters/Discover" - Clusters_List_FullMethodName = "/chainguard.platform.tenant.Clusters/List" - Clusters_Update_FullMethodName = "/chainguard.platform.tenant.Clusters/Update" - Clusters_Profiles_FullMethodName = "/chainguard.platform.tenant.Clusters/Profiles" - Clusters_Config_FullMethodName = "/chainguard.platform.tenant.Clusters/Config" - Clusters_CIDR_FullMethodName = "/chainguard.platform.tenant.Clusters/CIDR" -) - -// ClustersClient is the client API for Clusters service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type ClustersClient interface { - Create(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Cluster, error) - Delete(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - Discover(ctx context.Context, in *ClusterDiscoveryRequest, opts ...grpc.CallOption) (*ClusterDiscoveryResponse, error) - List(ctx context.Context, in *ClusterFilter, opts ...grpc.CallOption) (*ClusterList, error) - Update(ctx context.Context, in *Cluster, opts ...grpc.CallOption) (*Cluster, error) - Profiles(ctx context.Context, in *ClusterProfilesRequest, opts ...grpc.CallOption) (*ClusterProfilesResponse, error) - Config(ctx context.Context, in *ClusterConfigRequest, opts ...grpc.CallOption) (*ClusterConfigResponse, error) - CIDR(ctx context.Context, in *ClusterCIDRRequest, opts ...grpc.CallOption) (*ClusterCIDRResponse, error) -} - -type clustersClient struct { - cc grpc.ClientConnInterface -} - -func NewClustersClient(cc grpc.ClientConnInterface) ClustersClient { - return &clustersClient{cc} -} - -func (c *clustersClient) Create(ctx context.Context, in *CreateClusterRequest, opts ...grpc.CallOption) (*Cluster, error) { - out := new(Cluster) - err := c.cc.Invoke(ctx, Clusters_Create_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clustersClient) Delete(ctx context.Context, in *DeleteClusterRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, Clusters_Delete_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clustersClient) Discover(ctx context.Context, in *ClusterDiscoveryRequest, opts ...grpc.CallOption) (*ClusterDiscoveryResponse, error) { - out := new(ClusterDiscoveryResponse) - err := c.cc.Invoke(ctx, Clusters_Discover_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clustersClient) List(ctx context.Context, in *ClusterFilter, opts ...grpc.CallOption) (*ClusterList, error) { - out := new(ClusterList) - err := c.cc.Invoke(ctx, Clusters_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clustersClient) Update(ctx context.Context, in *Cluster, opts ...grpc.CallOption) (*Cluster, error) { - out := new(Cluster) - err := c.cc.Invoke(ctx, Clusters_Update_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clustersClient) Profiles(ctx context.Context, in *ClusterProfilesRequest, opts ...grpc.CallOption) (*ClusterProfilesResponse, error) { - out := new(ClusterProfilesResponse) - err := c.cc.Invoke(ctx, Clusters_Profiles_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clustersClient) Config(ctx context.Context, in *ClusterConfigRequest, opts ...grpc.CallOption) (*ClusterConfigResponse, error) { - out := new(ClusterConfigResponse) - err := c.cc.Invoke(ctx, Clusters_Config_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *clustersClient) CIDR(ctx context.Context, in *ClusterCIDRRequest, opts ...grpc.CallOption) (*ClusterCIDRResponse, error) { - out := new(ClusterCIDRResponse) - err := c.cc.Invoke(ctx, Clusters_CIDR_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// ClustersServer is the server API for Clusters service. -// All implementations must embed UnimplementedClustersServer -// for forward compatibility -type ClustersServer interface { - Create(context.Context, *CreateClusterRequest) (*Cluster, error) - Delete(context.Context, *DeleteClusterRequest) (*emptypb.Empty, error) - Discover(context.Context, *ClusterDiscoveryRequest) (*ClusterDiscoveryResponse, error) - List(context.Context, *ClusterFilter) (*ClusterList, error) - Update(context.Context, *Cluster) (*Cluster, error) - Profiles(context.Context, *ClusterProfilesRequest) (*ClusterProfilesResponse, error) - Config(context.Context, *ClusterConfigRequest) (*ClusterConfigResponse, error) - CIDR(context.Context, *ClusterCIDRRequest) (*ClusterCIDRResponse, error) - mustEmbedUnimplementedClustersServer() -} - -// UnimplementedClustersServer must be embedded to have forward compatible implementations. -type UnimplementedClustersServer struct { -} - -func (UnimplementedClustersServer) Create(context.Context, *CreateClusterRequest) (*Cluster, error) { - return nil, status.Errorf(codes.Unimplemented, "method Create not implemented") -} -func (UnimplementedClustersServer) Delete(context.Context, *DeleteClusterRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented") -} -func (UnimplementedClustersServer) Discover(context.Context, *ClusterDiscoveryRequest) (*ClusterDiscoveryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Discover not implemented") -} -func (UnimplementedClustersServer) List(context.Context, *ClusterFilter) (*ClusterList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedClustersServer) Update(context.Context, *Cluster) (*Cluster, error) { - return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") -} -func (UnimplementedClustersServer) Profiles(context.Context, *ClusterProfilesRequest) (*ClusterProfilesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Profiles not implemented") -} -func (UnimplementedClustersServer) Config(context.Context, *ClusterConfigRequest) (*ClusterConfigResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Config not implemented") -} -func (UnimplementedClustersServer) CIDR(context.Context, *ClusterCIDRRequest) (*ClusterCIDRResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CIDR not implemented") -} -func (UnimplementedClustersServer) mustEmbedUnimplementedClustersServer() {} - -// UnsafeClustersServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to ClustersServer will -// result in compilation errors. -type UnsafeClustersServer interface { - mustEmbedUnimplementedClustersServer() -} - -func RegisterClustersServer(s grpc.ServiceRegistrar, srv ClustersServer) { - s.RegisterService(&Clusters_ServiceDesc, srv) -} - -func _Clusters_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateClusterRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClustersServer).Create(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Clusters_Create_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClustersServer).Create(ctx, req.(*CreateClusterRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Clusters_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(DeleteClusterRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClustersServer).Delete(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Clusters_Delete_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClustersServer).Delete(ctx, req.(*DeleteClusterRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Clusters_Discover_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ClusterDiscoveryRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClustersServer).Discover(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Clusters_Discover_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClustersServer).Discover(ctx, req.(*ClusterDiscoveryRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Clusters_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ClusterFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClustersServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Clusters_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClustersServer).List(ctx, req.(*ClusterFilter)) - } - return interceptor(ctx, in, info, handler) -} - -func _Clusters_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(Cluster) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClustersServer).Update(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Clusters_Update_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClustersServer).Update(ctx, req.(*Cluster)) - } - return interceptor(ctx, in, info, handler) -} - -func _Clusters_Profiles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ClusterProfilesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClustersServer).Profiles(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Clusters_Profiles_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClustersServer).Profiles(ctx, req.(*ClusterProfilesRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Clusters_Config_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ClusterConfigRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClustersServer).Config(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Clusters_Config_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClustersServer).Config(ctx, req.(*ClusterConfigRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Clusters_CIDR_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ClusterCIDRRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ClustersServer).CIDR(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Clusters_CIDR_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ClustersServer).CIDR(ctx, req.(*ClusterCIDRRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// Clusters_ServiceDesc is the grpc.ServiceDesc for Clusters service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Clusters_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.Clusters", - HandlerType: (*ClustersServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Create", - Handler: _Clusters_Create_Handler, - }, - { - MethodName: "Delete", - Handler: _Clusters_Delete_Handler, - }, - { - MethodName: "Discover", - Handler: _Clusters_Discover_Handler, - }, - { - MethodName: "List", - Handler: _Clusters_List_Handler, - }, - { - MethodName: "Update", - Handler: _Clusters_Update_Handler, - }, - { - MethodName: "Profiles", - Handler: _Clusters_Profiles_Handler, - }, - { - MethodName: "Config", - Handler: _Clusters_Config_Handler, - }, - { - MethodName: "CIDR", - Handler: _Clusters_CIDR_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "cluster.platform.proto", -} diff --git a/proto/platform/tenant/v1/doc.go b/proto/platform/tenant/v1/doc.go index b8468745..4189082a 100644 --- a/proto/platform/tenant/v1/doc.go +++ b/proto/platform/tenant/v1/doc.go @@ -6,12 +6,10 @@ SPDX-License-Identifier: Apache-2.0 // Package v1 contains the v1 GRPC client and server definitions // for implementing Tenant interactions for the Console. // -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. cluster.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative context.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative policy_results.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative signature.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. record.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. risk.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. sbom.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. vuln.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. attestation.platform.proto diff --git a/proto/platform/tenant/v1/risk.platform.pb.go b/proto/platform/tenant/v1/risk.platform.pb.go deleted file mode 100644 index 36988adb..00000000 --- a/proto/platform/tenant/v1/risk.platform.pb.go +++ /dev/null @@ -1,947 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: risk.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Risk_MissingData_Type int32 - -const ( - Risk_MissingData_UNKNOWN Risk_MissingData_Type = 0 - Risk_MissingData_SIGNATURE Risk_MissingData_Type = 1 - Risk_MissingData_SBOM Risk_MissingData_Type = 2 - Risk_MissingData_POLICY Risk_MissingData_Type = 3 -) - -// Enum value maps for Risk_MissingData_Type. -var ( - Risk_MissingData_Type_name = map[int32]string{ - 0: "UNKNOWN", - 1: "SIGNATURE", - 2: "SBOM", - 3: "POLICY", - } - Risk_MissingData_Type_value = map[string]int32{ - "UNKNOWN": 0, - "SIGNATURE": 1, - "SBOM": 2, - "POLICY": 3, - } -) - -func (x Risk_MissingData_Type) Enum() *Risk_MissingData_Type { - p := new(Risk_MissingData_Type) - *p = x - return p -} - -func (x Risk_MissingData_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Risk_MissingData_Type) Descriptor() protoreflect.EnumDescriptor { - return file_risk_platform_proto_enumTypes[0].Descriptor() -} - -func (Risk_MissingData_Type) Type() protoreflect.EnumType { - return &file_risk_platform_proto_enumTypes[0] -} - -func (x Risk_MissingData_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Risk_MissingData_Type.Descriptor instead. -func (Risk_MissingData_Type) EnumDescriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{2, 1, 0} -} - -type Risk_Vulnerability_Severity int32 - -const ( - Risk_Vulnerability_UNKNOWN Risk_Vulnerability_Severity = 0 - Risk_Vulnerability_LOW Risk_Vulnerability_Severity = 1 - Risk_Vulnerability_MEDIUM Risk_Vulnerability_Severity = 2 - Risk_Vulnerability_HIGH Risk_Vulnerability_Severity = 3 - Risk_Vulnerability_CRITICAL Risk_Vulnerability_Severity = 4 -) - -// Enum value maps for Risk_Vulnerability_Severity. -var ( - Risk_Vulnerability_Severity_name = map[int32]string{ - 0: "UNKNOWN", - 1: "LOW", - 2: "MEDIUM", - 3: "HIGH", - 4: "CRITICAL", - } - Risk_Vulnerability_Severity_value = map[string]int32{ - "UNKNOWN": 0, - "LOW": 1, - "MEDIUM": 2, - "HIGH": 3, - "CRITICAL": 4, - } -) - -func (x Risk_Vulnerability_Severity) Enum() *Risk_Vulnerability_Severity { - p := new(Risk_Vulnerability_Severity) - *p = x - return p -} - -func (x Risk_Vulnerability_Severity) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Risk_Vulnerability_Severity) Descriptor() protoreflect.EnumDescriptor { - return file_risk_platform_proto_enumTypes[1].Descriptor() -} - -func (Risk_Vulnerability_Severity) Type() protoreflect.EnumType { - return &file_risk_platform_proto_enumTypes[1] -} - -func (x Risk_Vulnerability_Severity) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Risk_Vulnerability_Severity.Descriptor instead. -func (Risk_Vulnerability_Severity) EnumDescriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{2, 2, 0} -} - -type RiskFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UID of the record. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Uidp *v1.UIDPFilter `protobuf:"bytes,2,opt,name=uidp,proto3" json:"uidp,omitempty"` -} - -func (x *RiskFilter) Reset() { - *x = RiskFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_risk_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RiskFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RiskFilter) ProtoMessage() {} - -func (x *RiskFilter) ProtoReflect() protoreflect.Message { - mi := &file_risk_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RiskFilter.ProtoReflect.Descriptor instead. -func (*RiskFilter) Descriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *RiskFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RiskFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -type RiskList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Risk `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *RiskList) Reset() { - *x = RiskList{} - if protoimpl.UnsafeEnabled { - mi := &file_risk_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RiskList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RiskList) ProtoMessage() {} - -func (x *RiskList) ProtoReflect() protoreflect.Message { - mi := &file_risk_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RiskList.ProtoReflect.Descriptor instead. -func (*RiskList) Descriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *RiskList) GetItems() []*Risk { - if x != nil { - return x.Items - } - return nil -} - -type Risk struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Risk ID (UIDP resource + unique ID) - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Grouping identifier to associate Risks in the same UIDP - // to each other. - GroupId string `protobuf:"bytes,2,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - // List of UIDPs that were used to determine this Risk. - Inputs []string `protobuf:"bytes,3,rep,name=inputs,proto3" json:"inputs,omitempty"` - // What kind of risk is this? Lack of signatures, vulnerability, SBOM quality, etc. - Details *Risk_Details `protobuf:"bytes,4,opt,name=details,proto3" json:"details,omitempty"` - // Output only. Free form text describing this Risk. - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - // Output only. Chainguard EDU link for more details on this Risk. - DocumentationUrl string `protobuf:"bytes,6,opt,name=documentation_url,json=documentationUrl,proto3" json:"documentation_url,omitempty"` - // Optional. Chainguard's recommendation(s) for how to resolve this Risk. - Recommendations []*Recommendation `protobuf:"bytes,7,rep,name=recommendations,proto3" json:"recommendations,omitempty"` - // Output only. When Enforce last saw this Risk. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` -} - -func (x *Risk) Reset() { - *x = Risk{} - if protoimpl.UnsafeEnabled { - mi := &file_risk_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Risk) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Risk) ProtoMessage() {} - -func (x *Risk) ProtoReflect() protoreflect.Message { - mi := &file_risk_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Risk.ProtoReflect.Descriptor instead. -func (*Risk) Descriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *Risk) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Risk) GetGroupId() string { - if x != nil { - return x.GroupId - } - return "" -} - -func (x *Risk) GetInputs() []string { - if x != nil { - return x.Inputs - } - return nil -} - -func (x *Risk) GetDetails() *Risk_Details { - if x != nil { - return x.Details - } - return nil -} - -func (x *Risk) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Risk) GetDocumentationUrl() string { - if x != nil { - return x.DocumentationUrl - } - return "" -} - -func (x *Risk) GetRecommendations() []*Recommendation { - if x != nil { - return x.Recommendations - } - return nil -} - -func (x *Risk) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -type Recommendation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Classification of what kind of remediation this is, e.g.: - // upgrade, replace, etc. - // - // Types that are assignable to Action: - // - // *Recommendation_Replace - Action isRecommendation_Action `protobuf_oneof:"action"` - // Output only. Free form text describing how this can be resolved. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // Output only. Chainguard EDU link for more details on this Recommendation. - DocumentationUrl string `protobuf:"bytes,4,opt,name=documentation_url,json=documentationUrl,proto3" json:"documentation_url,omitempty"` -} - -func (x *Recommendation) Reset() { - *x = Recommendation{} - if protoimpl.UnsafeEnabled { - mi := &file_risk_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Recommendation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Recommendation) ProtoMessage() {} - -func (x *Recommendation) ProtoReflect() protoreflect.Message { - mi := &file_risk_platform_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 Recommendation.ProtoReflect.Descriptor instead. -func (*Recommendation) Descriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{3} -} - -func (m *Recommendation) GetAction() isRecommendation_Action { - if m != nil { - return m.Action - } - return nil -} - -func (x *Recommendation) GetReplace() *Recommendation_ReplaceArtifact { - if x, ok := x.GetAction().(*Recommendation_Replace); ok { - return x.Replace - } - return nil -} - -func (x *Recommendation) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Recommendation) GetDocumentationUrl() string { - if x != nil { - return x.DocumentationUrl - } - return "" -} - -type isRecommendation_Action interface { - isRecommendation_Action() -} - -type Recommendation_Replace struct { - Replace *Recommendation_ReplaceArtifact `protobuf:"bytes,1,opt,name=replace,proto3,oneof"` -} - -func (*Recommendation_Replace) isRecommendation_Action() {} - -type Risk_Details struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Data: - // - // *Risk_Details_MissingData - Data isRisk_Details_Data `protobuf_oneof:"data"` -} - -func (x *Risk_Details) Reset() { - *x = Risk_Details{} - if protoimpl.UnsafeEnabled { - mi := &file_risk_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Risk_Details) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Risk_Details) ProtoMessage() {} - -func (x *Risk_Details) ProtoReflect() protoreflect.Message { - mi := &file_risk_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Risk_Details.ProtoReflect.Descriptor instead. -func (*Risk_Details) Descriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{2, 0} -} - -func (m *Risk_Details) GetData() isRisk_Details_Data { - if m != nil { - return m.Data - } - return nil -} - -func (x *Risk_Details) GetMissingData() *Risk_MissingData { - if x, ok := x.GetData().(*Risk_Details_MissingData); ok { - return x.MissingData - } - return nil -} - -type isRisk_Details_Data interface { - isRisk_Details_Data() -} - -type Risk_Details_MissingData struct { - MissingData *Risk_MissingData `protobuf:"bytes,1,opt,name=missing_data,json=missingData,proto3,oneof"` -} - -func (*Risk_Details_MissingData) isRisk_Details_Data() {} - -type Risk_MissingData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // What kind of data is missing (e.g. signature, sbom, policy, etc.) - Type Risk_MissingData_Type `protobuf:"varint,1,opt,name=type,proto3,enum=chainguard.platform.tenant.Risk_MissingData_Type" json:"type,omitempty"` -} - -func (x *Risk_MissingData) Reset() { - *x = Risk_MissingData{} - if protoimpl.UnsafeEnabled { - mi := &file_risk_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Risk_MissingData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Risk_MissingData) ProtoMessage() {} - -func (x *Risk_MissingData) ProtoReflect() protoreflect.Message { - mi := &file_risk_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Risk_MissingData.ProtoReflect.Descriptor instead. -func (*Risk_MissingData) Descriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{2, 1} -} - -func (x *Risk_MissingData) GetType() Risk_MissingData_Type { - if x != nil { - return x.Type - } - return Risk_MissingData_UNKNOWN -} - -type Risk_Vulnerability struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Severity Risk_Vulnerability_Severity `protobuf:"varint,5,opt,name=severity,proto3,enum=chainguard.platform.tenant.Risk_Vulnerability_Severity" json:"severity,omitempty"` - // External identifier of the source of the vuln - e.g. CVE ID. - Source string `protobuf:"bytes,7,opt,name=source,proto3" json:"source,omitempty"` -} - -func (x *Risk_Vulnerability) Reset() { - *x = Risk_Vulnerability{} - if protoimpl.UnsafeEnabled { - mi := &file_risk_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Risk_Vulnerability) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Risk_Vulnerability) ProtoMessage() {} - -func (x *Risk_Vulnerability) ProtoReflect() protoreflect.Message { - mi := &file_risk_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Risk_Vulnerability.ProtoReflect.Descriptor instead. -func (*Risk_Vulnerability) Descriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{2, 2} -} - -func (x *Risk_Vulnerability) GetSeverity() Risk_Vulnerability_Severity { - if x != nil { - return x.Severity - } - return Risk_Vulnerability_UNKNOWN -} - -func (x *Risk_Vulnerability) GetSource() string { - if x != nil { - return x.Source - } - return "" -} - -type Recommendation_ReplaceArtifact struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` - // Target artifact that may be able to resolve this Risk. - To string `protobuf:"bytes,2,opt,name=to,proto3" json:"to,omitempty"` -} - -func (x *Recommendation_ReplaceArtifact) Reset() { - *x = Recommendation_ReplaceArtifact{} - if protoimpl.UnsafeEnabled { - mi := &file_risk_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Recommendation_ReplaceArtifact) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Recommendation_ReplaceArtifact) ProtoMessage() {} - -func (x *Recommendation_ReplaceArtifact) ProtoReflect() protoreflect.Message { - mi := &file_risk_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Recommendation_ReplaceArtifact.ProtoReflect.Descriptor instead. -func (*Recommendation_ReplaceArtifact) Descriptor() ([]byte, []int) { - return file_risk_platform_proto_rawDescGZIP(), []int{3, 0} -} - -func (x *Recommendation_ReplaceArtifact) GetFrom() string { - if x != nil { - return x.From - } - return "" -} - -func (x *Recommendation_ReplaceArtifact) GetTo() string { - if x != nil { - return x.To - } - return "" -} - -var File_risk_platform_proto protoreflect.FileDescriptor - -var file_risk_platform_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x72, 0x69, 0x73, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, - 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, - 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x58, 0x0a, 0x0a, 0x52, 0x69, 0x73, 0x6b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, - 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x22, 0x42, 0x0a, 0x08, 0x52, 0x69, - 0x73, 0x6b, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xa7, - 0x06, 0x0a, 0x04, 0x52, 0x69, 0x73, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x06, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x2e, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x6f, 0x63, - 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x54, 0x0a, - 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x1a, 0x64, 0x0a, 0x07, - 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x51, 0x0a, 0x0c, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x2e, - 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x0b, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x1a, 0x8e, 0x01, 0x0a, 0x0b, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x45, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, - 0x73, 0x6b, 0x2e, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x38, 0x0a, 0x04, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, - 0x0a, 0x09, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, 0x55, 0x52, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, - 0x04, 0x53, 0x42, 0x4f, 0x4d, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x4f, 0x4c, 0x49, 0x43, - 0x59, 0x10, 0x03, 0x1a, 0xc2, 0x01, 0x0a, 0x0d, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x53, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, - 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, - 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x22, 0x44, 0x0a, 0x08, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x4c, - 0x4f, 0x57, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x02, - 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, 0x47, 0x48, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, - 0x49, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x04, 0x22, 0xf8, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x63, - 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x56, 0x0a, 0x07, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x10, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, - 0x72, 0x6c, 0x1a, 0x35, 0x0a, 0x0f, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x08, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x32, 0x85, 0x01, 0x0a, 0x05, 0x52, 0x69, 0x73, 0x6b, 0x73, 0x12, 0x7c, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x24, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x69, 0x73, 0x6b, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x69, 0x73, 0x6b, 0x73, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x80, 0x05, 0x10, 0x01, 0x42, 0x69, 0x0a, 0x25, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, - 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x69, - 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_risk_platform_proto_rawDescOnce sync.Once - file_risk_platform_proto_rawDescData = file_risk_platform_proto_rawDesc -) - -func file_risk_platform_proto_rawDescGZIP() []byte { - file_risk_platform_proto_rawDescOnce.Do(func() { - file_risk_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_risk_platform_proto_rawDescData) - }) - return file_risk_platform_proto_rawDescData -} - -var file_risk_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_risk_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_risk_platform_proto_goTypes = []interface{}{ - (Risk_MissingData_Type)(0), // 0: chainguard.platform.tenant.Risk.MissingData.Type - (Risk_Vulnerability_Severity)(0), // 1: chainguard.platform.tenant.Risk.Vulnerability.Severity - (*RiskFilter)(nil), // 2: chainguard.platform.tenant.RiskFilter - (*RiskList)(nil), // 3: chainguard.platform.tenant.RiskList - (*Risk)(nil), // 4: chainguard.platform.tenant.Risk - (*Recommendation)(nil), // 5: chainguard.platform.tenant.Recommendation - (*Risk_Details)(nil), // 6: chainguard.platform.tenant.Risk.Details - (*Risk_MissingData)(nil), // 7: chainguard.platform.tenant.Risk.MissingData - (*Risk_Vulnerability)(nil), // 8: chainguard.platform.tenant.Risk.Vulnerability - (*Recommendation_ReplaceArtifact)(nil), // 9: chainguard.platform.tenant.Recommendation.ReplaceArtifact - (*v1.UIDPFilter)(nil), // 10: chainguard.platform.common.UIDPFilter - (*timestamppb.Timestamp)(nil), // 11: google.protobuf.Timestamp -} -var file_risk_platform_proto_depIdxs = []int32{ - 10, // 0: chainguard.platform.tenant.RiskFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 4, // 1: chainguard.platform.tenant.RiskList.items:type_name -> chainguard.platform.tenant.Risk - 6, // 2: chainguard.platform.tenant.Risk.details:type_name -> chainguard.platform.tenant.Risk.Details - 5, // 3: chainguard.platform.tenant.Risk.recommendations:type_name -> chainguard.platform.tenant.Recommendation - 11, // 4: chainguard.platform.tenant.Risk.last_seen:type_name -> google.protobuf.Timestamp - 9, // 5: chainguard.platform.tenant.Recommendation.replace:type_name -> chainguard.platform.tenant.Recommendation.ReplaceArtifact - 7, // 6: chainguard.platform.tenant.Risk.Details.missing_data:type_name -> chainguard.platform.tenant.Risk.MissingData - 0, // 7: chainguard.platform.tenant.Risk.MissingData.type:type_name -> chainguard.platform.tenant.Risk.MissingData.Type - 1, // 8: chainguard.platform.tenant.Risk.Vulnerability.severity:type_name -> chainguard.platform.tenant.Risk.Vulnerability.Severity - 2, // 9: chainguard.platform.tenant.Risks.List:input_type -> chainguard.platform.tenant.RiskFilter - 3, // 10: chainguard.platform.tenant.Risks.List:output_type -> chainguard.platform.tenant.RiskList - 10, // [10:11] is the sub-list for method output_type - 9, // [9:10] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name -} - -func init() { file_risk_platform_proto_init() } -func file_risk_platform_proto_init() { - if File_risk_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_risk_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RiskFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_risk_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RiskList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_risk_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Risk); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_risk_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Recommendation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_risk_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Risk_Details); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_risk_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Risk_MissingData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_risk_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Risk_Vulnerability); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_risk_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Recommendation_ReplaceArtifact); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_risk_platform_proto_msgTypes[3].OneofWrappers = []interface{}{ - (*Recommendation_Replace)(nil), - } - file_risk_platform_proto_msgTypes[4].OneofWrappers = []interface{}{ - (*Risk_Details_MissingData)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_risk_platform_proto_rawDesc, - NumEnums: 2, - NumMessages: 8, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_risk_platform_proto_goTypes, - DependencyIndexes: file_risk_platform_proto_depIdxs, - EnumInfos: file_risk_platform_proto_enumTypes, - MessageInfos: file_risk_platform_proto_msgTypes, - }.Build() - File_risk_platform_proto = out.File - file_risk_platform_proto_rawDesc = nil - file_risk_platform_proto_goTypes = nil - file_risk_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/risk.platform.pb.gw.go b/proto/platform/tenant/v1/risk.platform.pb.gw.go deleted file mode 100644 index 209d9c3b..00000000 --- a/proto/platform/tenant/v1/risk.platform.pb.gw.go +++ /dev/null @@ -1,166 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: risk.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -var ( - filter_Risks_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_Risks_List_0(ctx context.Context, marshaler runtime.Marshaler, client RisksClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RiskFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Risks_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Risks_List_0(ctx context.Context, marshaler runtime.Marshaler, server RisksServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RiskFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Risks_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterRisksHandlerServer registers the http handlers for service Risks to "mux". -// UnaryRPC :call RisksServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRisksHandlerFromEndpoint instead. -func RegisterRisksHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RisksServer) error { - - mux.Handle("GET", pattern_Risks_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Risks/List", runtime.WithHTTPPathPattern("/tenant/v1/risks")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Risks_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Risks_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterRisksHandlerFromEndpoint is same as RegisterRisksHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterRisksHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterRisksHandler(ctx, mux, conn) -} - -// RegisterRisksHandler registers the http handlers for service Risks to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterRisksHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterRisksHandlerClient(ctx, mux, NewRisksClient(conn)) -} - -// RegisterRisksHandlerClient registers the http handlers for service Risks -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RisksClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RisksClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "RisksClient" to call the correct interceptors. -func RegisterRisksHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RisksClient) error { - - mux.Handle("GET", pattern_Risks_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Risks/List", runtime.WithHTTPPathPattern("/tenant/v1/risks")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Risks_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Risks_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Risks_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "risks"}, "")) -) - -var ( - forward_Risks_List_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/tenant/v1/risk.platform.proto b/proto/platform/tenant/v1/risk.platform.proto deleted file mode 100644 index 73bf6c94..00000000 --- a/proto/platform/tenant/v1/risk.platform.proto +++ /dev/null @@ -1,116 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformRiskProto"; - -package chainguard.platform.tenant; - -import "google/api/annotations.proto"; -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Risks { - rpc List(RiskFilter) returns (RiskList) { - option (google.api.http) = { - get: "/tenant/v1/risks" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_RISKS_LIST] - unscoped: true - } - }; - } -} - -message RiskFilter{ - // id is the exact UID of the record. - string id = 1; - - chainguard.platform.common.UIDPFilter uidp = 2; -} - -message RiskList{ - repeated Risk items = 1; -} - -message Risk { - // Risk ID (UIDP resource + unique ID) - string id = 1; - - // Grouping identifier to associate Risks in the same UIDP - // to each other. - string group_id = 2; - - // List of UIDPs that were used to determine this Risk. - repeated string inputs = 3; - - // What kind of risk is this? Lack of signatures, vulnerability, SBOM quality, etc. - Details details = 4; - - message Details { - oneof data { - MissingData missing_data = 1; - } - } - - message MissingData { - // What kind of data is missing (e.g. signature, sbom, policy, etc.) - Type type = 1; - - enum Type { - UNKNOWN = 0; - SIGNATURE = 1; - SBOM = 2; - POLICY = 3; - } - } - - message Vulnerability { - Severity severity = 5; - - enum Severity { - UNKNOWN = 0; - LOW = 1; - MEDIUM = 2; - HIGH = 3; - CRITICAL = 4; - } - - // External identifier of the source of the vuln - e.g. CVE ID. - string source = 7; - } - - // Output only. Free form text describing this Risk. - string description = 5; - // Output only. Chainguard EDU link for more details on this Risk. - string documentation_url = 6; - - // Optional. Chainguard's recommendation(s) for how to resolve this Risk. - repeated Recommendation recommendations = 7; - - // Output only. When Enforce last saw this Risk. - google.protobuf.Timestamp last_seen = 8; -} - -message Recommendation { - // Classification of what kind of remediation this is, e.g.: - // upgrade, replace, etc. - oneof action { - ReplaceArtifact replace = 1; - } - - message ReplaceArtifact { - string from = 1; - // Target artifact that may be able to resolve this Risk. - string to = 2; - } - - // Output only. Free form text describing how this can be resolved. - string description = 3; - // Output only. Chainguard EDU link for more details on this Recommendation. - string documentation_url = 4; -} diff --git a/proto/platform/tenant/v1/risk.platform_grpc.pb.go b/proto/platform/tenant/v1/risk.platform_grpc.pb.go deleted file mode 100644 index 91a9739e..00000000 --- a/proto/platform/tenant/v1/risk.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: risk.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Risks_List_FullMethodName = "/chainguard.platform.tenant.Risks/List" -) - -// RisksClient is the client API for Risks service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type RisksClient interface { - List(ctx context.Context, in *RiskFilter, opts ...grpc.CallOption) (*RiskList, error) -} - -type risksClient struct { - cc grpc.ClientConnInterface -} - -func NewRisksClient(cc grpc.ClientConnInterface) RisksClient { - return &risksClient{cc} -} - -func (c *risksClient) List(ctx context.Context, in *RiskFilter, opts ...grpc.CallOption) (*RiskList, error) { - out := new(RiskList) - err := c.cc.Invoke(ctx, Risks_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RisksServer is the server API for Risks service. -// All implementations must embed UnimplementedRisksServer -// for forward compatibility -type RisksServer interface { - List(context.Context, *RiskFilter) (*RiskList, error) - mustEmbedUnimplementedRisksServer() -} - -// UnimplementedRisksServer must be embedded to have forward compatible implementations. -type UnimplementedRisksServer struct { -} - -func (UnimplementedRisksServer) List(context.Context, *RiskFilter) (*RiskList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedRisksServer) mustEmbedUnimplementedRisksServer() {} - -// UnsafeRisksServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to RisksServer will -// result in compilation errors. -type UnsafeRisksServer interface { - mustEmbedUnimplementedRisksServer() -} - -func RegisterRisksServer(s grpc.ServiceRegistrar, srv RisksServer) { - s.RegisterService(&Risks_ServiceDesc, srv) -} - -func _Risks_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RiskFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RisksServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Risks_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RisksServer).List(ctx, req.(*RiskFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// Risks_ServiceDesc is the grpc.ServiceDesc for Risks service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Risks_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.Risks", - HandlerType: (*RisksServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _Risks_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "risk.platform.proto", -} diff --git a/proto/platform/tenant/v1/test/mock_client.go b/proto/platform/tenant/v1/test/mock_client.go index 4161f4c0..5d4fdc68 100644 --- a/proto/platform/tenant/v1/test/mock_client.go +++ b/proto/platform/tenant/v1/test/mock_client.go @@ -12,23 +12,17 @@ import ( type MockTenantClient struct { OnClose error - ClustersClient MockClustersClient RecordsClient MockRecordsClient RecordContextsClient MockRecordContextsClient SbomsClient MockSbomsClient SignaturesClient MockSignaturesClient PolicyResultsClient MockPolicyResultsClient - RisksClient MockRisksClient VulnReportsClient MockVulnReportsClient AttestationClient MockAttestationsClientt } var _ tenant.Clients = (*MockTenantClient)(nil) -func (m MockTenantClient) Clusters() tenant.ClustersClient { - return &m.ClustersClient -} - func (m MockTenantClient) Records() tenant.RecordsClient { return &m.RecordsClient } @@ -41,10 +35,6 @@ func (m MockTenantClient) Sboms() tenant.SbomsClient { return &m.SbomsClient } -func (m MockTenantClient) Risks() tenant.RisksClient { - return &m.RisksClient -} - func (m MockTenantClient) Signatures() tenant.SignaturesClient { return &m.SignaturesClient } diff --git a/proto/platform/tenant/v1/test/mock_cluster.go b/proto/platform/tenant/v1/test/mock_cluster.go deleted file mode 100644 index d23a82cd..00000000 --- a/proto/platform/tenant/v1/test/mock_cluster.go +++ /dev/null @@ -1,150 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - "google.golang.org/protobuf/types/known/emptypb" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.ClustersClient = (*MockClustersClient)(nil) - -type MockClustersClient struct { - OnCreate []ClustersOnCreate - OnDelete []ClustersOnDelete - OnList []ClustersOnList - OnUpdate []ClustersOnUpdate - OnConfig []ClustersOnConfig - OnProfiles []ClustersOnProfiles - OnDiscover []ClustersOnDiscover - OnCIDR []ClustersOnCIDR -} - -type ClustersOnCreate struct { - Given *tenant.CreateClusterRequest - Created *tenant.Cluster - Error error -} - -type ClustersOnDelete struct { - Given *tenant.CreateClusterRequest - Error error -} - -type ClustersOnList struct { - Given *tenant.ClusterFilter - List *tenant.ClusterList - Error error -} - -type ClustersOnUpdate struct { - Given *tenant.Cluster - Updated *tenant.Cluster - Error error -} - -type ClustersOnConfig struct { - Given *tenant.ClusterConfigRequest - Config *tenant.ClusterConfigResponse - Error error -} - -type ClustersOnProfiles struct { - Given *tenant.ClusterProfilesRequest - Config *tenant.ClusterProfilesResponse - Error error -} - -type ClustersOnDiscover struct { - Given *tenant.ClusterDiscoveryRequest - Config *tenant.ClusterDiscoveryResponse - Error error -} - -type ClustersOnCIDR struct { - Given *tenant.ClusterCIDRRequest - Config *tenant.ClusterCIDRResponse - Error error -} - -func (m MockClustersClient) Create(_ context.Context, given *tenant.CreateClusterRequest, _ ...grpc.CallOption) (*tenant.Cluster, error) { - for _, o := range m.OnCreate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Created, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockClustersClient) Delete(_ context.Context, given *tenant.DeleteClusterRequest, _ ...grpc.CallOption) (*emptypb.Empty, error) { - for _, o := range m.OnDelete { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return &emptypb.Empty{}, o.Error - } - } - return &emptypb.Empty{}, fmt.Errorf("mock not found for %v", given) -} - -func (m MockClustersClient) List(_ context.Context, given *tenant.ClusterFilter, _ ...grpc.CallOption) (*tenant.ClusterList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockClustersClient) Update(_ context.Context, given *tenant.Cluster, _ ...grpc.CallOption) (*tenant.Cluster, error) { - for _, o := range m.OnUpdate { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Updated, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockClustersClient) Config(_ context.Context, given *tenant.ClusterConfigRequest, _ ...grpc.CallOption) (*tenant.ClusterConfigResponse, error) { - for _, o := range m.OnConfig { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Config, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockClustersClient) Profiles(_ context.Context, given *tenant.ClusterProfilesRequest, _ ...grpc.CallOption) (*tenant.ClusterProfilesResponse, error) { - for _, o := range m.OnProfiles { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Config, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockClustersClient) Discover(_ context.Context, given *tenant.ClusterDiscoveryRequest, _ ...grpc.CallOption) (*tenant.ClusterDiscoveryResponse, error) { - for _, o := range m.OnDiscover { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Config, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} - -func (m MockClustersClient) CIDR(_ context.Context, given *tenant.ClusterCIDRRequest, _ ...grpc.CallOption) (*tenant.ClusterCIDRResponse, error) { - for _, o := range m.OnCIDR { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.Config, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/test/mock_risks.go b/proto/platform/tenant/v1/test/mock_risks.go deleted file mode 100644 index 2cbb4a93..00000000 --- a/proto/platform/tenant/v1/test/mock_risks.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.RisksClient = (*MockRisksClient)(nil) - -type MockRisksClient struct { - OnList []RisksOnList -} - -type RisksOnList struct { - Given *tenant.RiskFilter - List *tenant.RiskList - Error error -} - -func (m MockRisksClient) List(_ context.Context, given *tenant.RiskFilter, _ ...grpc.CallOption) (*tenant.RiskList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/validation/enforcer_options.go b/validation/enforcer_options.go deleted file mode 100644 index 2b56bb9c..00000000 --- a/validation/enforcer_options.go +++ /dev/null @@ -1,27 +0,0 @@ -/* -Copyright 2023 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package validation - -import ( - "k8s.io/apimachinery/pkg/util/sets" -) - -const ( - EnforcerOptionWebhookFailOpen = "webhook_fail_open" - EnforcerOptionEnableCIPCache = "enable_cip_cache" - EnforcerOptionNamespaceEnforcementMode = "namespace_enforcement_mode" - - NamespaceEnforcementModeOptOut = "opt-out" - NamespaceEnforcementModeOptIn = "opt-in" -) - -var ( - // ValidNamespaceEnforcementModeOpts are valid webhook label selection options for a managed cluster - ValidNamespaceEnforcementModeOpts = sets.NewString(NamespaceEnforcementModeOptIn, NamespaceEnforcementModeOptOut) - - // ValidEnforcerOptions are valid field names of enforcer options available - ValidEnforcerOptions = sets.NewString(EnforcerOptionWebhookFailOpen, EnforcerOptionEnableCIPCache, EnforcerOptionNamespaceEnforcementMode) -) From 5d20b35df77934f590c81fda3cd41fc4dd2392f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Apr 2024 11:44:35 -0700 Subject: [PATCH 26/41] Export b0ca3e18963dcf694d0ca85c60b659ec39ba406a Export: b0ca3e18963dcf694d0ca85c60b659ec39ba406a --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 6266f39e..f7736189 100644 --- a/go.mod +++ b/go.mod @@ -61,7 +61,7 @@ require ( go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.22.0 // indirect - golang.org/x/net v0.22.0 // indirect + golang.org/x/net v0.23.0 // indirect golang.org/x/sys v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect diff --git a/go.sum b/go.sum index 6559474e..e0169a6c 100644 --- a/go.sum +++ b/go.sum @@ -192,8 +192,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= From 3716fa00efffbb9c178a45a2f463461d13045b92 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Mon, 22 Apr 2024 09:04:24 -0700 Subject: [PATCH 27/41] Export 895b47ffde6cecc39109e90b249308aa07a70e9a Export: 895b47ffde6cecc39109e90b249308aa07a70e9a --- proto/platform/tenant/v1/clients.go | 38 +- .../platform/tenant/v1/context.platform.pb.go | 876 ------------------ .../platform/tenant/v1/context.platform.proto | 119 --- .../tenant/v1/context.platform_grpc.pb.go | 109 --- proto/platform/tenant/v1/doc.go | 2 - .../tenant/v1/policy_results.platform.pb.go | 770 --------------- .../v1/policy_results.platform.pb.gw.go | 171 ---- .../tenant/v1/policy_results.platform.proto | 113 --- .../v1/policy_results.platform_grpc.pb.go | 109 --- proto/platform/tenant/v1/test/mock_client.go | 20 +- .../platform/tenant/v1/test/mock_contexts.go | 38 - .../tenant/v1/test/mock_policy_results.go | 38 - 12 files changed, 16 insertions(+), 2387 deletions(-) delete mode 100644 proto/platform/tenant/v1/context.platform.pb.go delete mode 100644 proto/platform/tenant/v1/context.platform.proto delete mode 100644 proto/platform/tenant/v1/context.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/policy_results.platform.pb.go delete mode 100644 proto/platform/tenant/v1/policy_results.platform.pb.gw.go delete mode 100644 proto/platform/tenant/v1/policy_results.platform.proto delete mode 100644 proto/platform/tenant/v1/policy_results.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/test/mock_contexts.go delete mode 100644 proto/platform/tenant/v1/test/mock_policy_results.go diff --git a/proto/platform/tenant/v1/clients.go b/proto/platform/tenant/v1/clients.go index 83d2e3be..fbf13ea7 100644 --- a/proto/platform/tenant/v1/clients.go +++ b/proto/platform/tenant/v1/clients.go @@ -20,10 +20,8 @@ import ( type Clients interface { Records() RecordsClient - RecordContexts() RecordContextsClient Sboms() SbomsClient Signatures() SignaturesClient - PolicyResults() PolicyResultsClient VulnReports() VulnReportsClient Close() error @@ -55,12 +53,10 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) } return &clients{ - records: NewRecordsClient(conn), - recordContexts: NewRecordContextsClient(conn), - sboms: NewSbomsClient(conn), - vulnReports: NewVulnReportsClient(conn), - signatures: NewSignaturesClient(conn), - policyResults: NewPolicyResultsClient(conn), + records: NewRecordsClient(conn), + sboms: NewSbomsClient(conn), + vulnReports: NewVulnReportsClient(conn), + signatures: NewSignaturesClient(conn), conn: conn, }, nil @@ -68,12 +64,10 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) func NewClientsFromConnection(conn *grpc.ClientConn) Clients { return &clients{ - records: NewRecordsClient(conn), - recordContexts: NewRecordContextsClient(conn), - sboms: NewSbomsClient(conn), - vulnReports: NewVulnReportsClient(conn), - signatures: NewSignaturesClient(conn), - policyResults: NewPolicyResultsClient(conn), + records: NewRecordsClient(conn), + sboms: NewSbomsClient(conn), + vulnReports: NewVulnReportsClient(conn), + signatures: NewSignaturesClient(conn), // conn is not set, this client struct does not own closing it. } } @@ -81,11 +75,9 @@ func NewClientsFromConnection(conn *grpc.ClientConn) Clients { type clients struct { records RecordsClient - recordContexts RecordContextsClient - sboms SbomsClient - signatures SignaturesClient - policyResults PolicyResultsClient - vulnReports VulnReportsClient + sboms SbomsClient + signatures SignaturesClient + vulnReports VulnReportsClient conn *grpc.ClientConn } @@ -94,10 +86,6 @@ func (c *clients) Records() RecordsClient { return c.records } -func (c *clients) RecordContexts() RecordContextsClient { - return c.recordContexts -} - func (c *clients) Sboms() SbomsClient { return c.sboms } @@ -106,10 +94,6 @@ func (c *clients) Signatures() SignaturesClient { return c.signatures } -func (c *clients) PolicyResults() PolicyResultsClient { - return c.policyResults -} - func (c *clients) VulnReports() VulnReportsClient { return c.vulnReports } diff --git a/proto/platform/tenant/v1/context.platform.pb.go b/proto/platform/tenant/v1/context.platform.pb.go deleted file mode 100644 index 1c67141d..00000000 --- a/proto/platform/tenant/v1/context.platform.pb.go +++ /dev/null @@ -1,876 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: context.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type RecordContext_Ancestry_Role int32 - -const ( - RecordContext_Ancestry_UNKNOWN RecordContext_Ancestry_Role = 0 - RecordContext_Ancestry_BASE RecordContext_Ancestry_Role = 1 - RecordContext_Ancestry_DERIVED RecordContext_Ancestry_Role = 2 -) - -// Enum value maps for RecordContext_Ancestry_Role. -var ( - RecordContext_Ancestry_Role_name = map[int32]string{ - 0: "UNKNOWN", - 1: "BASE", - 2: "DERIVED", - } - RecordContext_Ancestry_Role_value = map[string]int32{ - "UNKNOWN": 0, - "BASE": 1, - "DERIVED": 2, - } -) - -func (x RecordContext_Ancestry_Role) Enum() *RecordContext_Ancestry_Role { - p := new(RecordContext_Ancestry_Role) - *p = x - return p -} - -func (x RecordContext_Ancestry_Role) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (RecordContext_Ancestry_Role) Descriptor() protoreflect.EnumDescriptor { - return file_context_platform_proto_enumTypes[0].Descriptor() -} - -func (RecordContext_Ancestry_Role) Type() protoreflect.EnumType { - return &file_context_platform_proto_enumTypes[0] -} - -func (x RecordContext_Ancestry_Role) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use RecordContext_Ancestry_Role.Descriptor instead. -func (RecordContext_Ancestry_Role) EnumDescriptor() ([]byte, []int) { - return file_context_platform_proto_rawDescGZIP(), []int{0, 1, 0} -} - -type RecordContext_Variant_Role int32 - -const ( - RecordContext_Variant_UNKNOWN RecordContext_Variant_Role = 0 - RecordContext_Variant_INDEX RecordContext_Variant_Role = 1 - RecordContext_Variant_VARIANT RecordContext_Variant_Role = 2 -) - -// Enum value maps for RecordContext_Variant_Role. -var ( - RecordContext_Variant_Role_name = map[int32]string{ - 0: "UNKNOWN", - 1: "INDEX", - 2: "VARIANT", - } - RecordContext_Variant_Role_value = map[string]int32{ - "UNKNOWN": 0, - "INDEX": 1, - "VARIANT": 2, - } -) - -func (x RecordContext_Variant_Role) Enum() *RecordContext_Variant_Role { - p := new(RecordContext_Variant_Role) - *p = x - return p -} - -func (x RecordContext_Variant_Role) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (RecordContext_Variant_Role) Descriptor() protoreflect.EnumDescriptor { - return file_context_platform_proto_enumTypes[1].Descriptor() -} - -func (RecordContext_Variant_Role) Type() protoreflect.EnumType { - return &file_context_platform_proto_enumTypes[1] -} - -func (x RecordContext_Variant_Role) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use RecordContext_Variant_Role.Descriptor instead. -func (RecordContext_Variant_Role) EnumDescriptor() ([]byte, []int) { - return file_context_platform_proto_rawDescGZIP(), []int{0, 2, 0} -} - -type RecordContext struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The RecordContext UIDP at which this RecordContext resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name of the RecordContext. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // a short description of this RecordContext. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // last_seen tracks the timestamp at which this RecordContext was last seen. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` - // Types that are assignable to Kind: - // - // *RecordContext_Workload_ - // *RecordContext_Ancestry_ - // *RecordContext_Variant_ - Kind isRecordContext_Kind `protobuf_oneof:"kind"` -} - -func (x *RecordContext) Reset() { - *x = RecordContext{} - if protoimpl.UnsafeEnabled { - mi := &file_context_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordContext) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordContext) ProtoMessage() {} - -func (x *RecordContext) ProtoReflect() protoreflect.Message { - mi := &file_context_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecordContext.ProtoReflect.Descriptor instead. -func (*RecordContext) Descriptor() ([]byte, []int) { - return file_context_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *RecordContext) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RecordContext) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *RecordContext) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *RecordContext) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -func (m *RecordContext) GetKind() isRecordContext_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *RecordContext) GetWorkload() *RecordContext_Workload { - if x, ok := x.GetKind().(*RecordContext_Workload_); ok { - return x.Workload - } - return nil -} - -func (x *RecordContext) GetAncestry() *RecordContext_Ancestry { - if x, ok := x.GetKind().(*RecordContext_Ancestry_); ok { - return x.Ancestry - } - return nil -} - -func (x *RecordContext) GetVariant() *RecordContext_Variant { - if x, ok := x.GetKind().(*RecordContext_Variant_); ok { - return x.Variant - } - return nil -} - -type isRecordContext_Kind interface { - isRecordContext_Kind() -} - -type RecordContext_Workload_ struct { - Workload *RecordContext_Workload `protobuf:"bytes,100,opt,name=workload,proto3,oneof"` -} - -type RecordContext_Ancestry_ struct { - Ancestry *RecordContext_Ancestry `protobuf:"bytes,101,opt,name=ancestry,proto3,oneof"` -} - -type RecordContext_Variant_ struct { - Variant *RecordContext_Variant `protobuf:"bytes,102,opt,name=variant,proto3,oneof"` -} - -func (*RecordContext_Workload_) isRecordContext_Kind() {} - -func (*RecordContext_Ancestry_) isRecordContext_Kind() {} - -func (*RecordContext_Variant_) isRecordContext_Kind() {} - -type RecordContextList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*RecordContext `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *RecordContextList) Reset() { - *x = RecordContextList{} - if protoimpl.UnsafeEnabled { - mi := &file_context_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordContextList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordContextList) ProtoMessage() {} - -func (x *RecordContextList) ProtoReflect() protoreflect.Message { - mi := &file_context_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecordContextList.ProtoReflect.Descriptor instead. -func (*RecordContextList) Descriptor() ([]byte, []int) { - return file_context_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *RecordContextList) GetItems() []*RecordContext { - if x != nil { - return x.Items - } - return nil -} - -type RecordContextFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` - // active_since is the timestamp after which the records should - // have last been observed in the returned context. - ActiveSince *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` - // Allow filtering results based on matching fields in the context - // ranging from just a particular "kind" to the exact workload shape. - // Only specified fields will be used as part of the match. - // - // Types that are assignable to Kind: - // - // *RecordContextFilter_Workload - // *RecordContextFilter_Ancestry - // *RecordContextFilter_Variant - Kind isRecordContextFilter_Kind `protobuf_oneof:"kind"` -} - -func (x *RecordContextFilter) Reset() { - *x = RecordContextFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_context_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordContextFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordContextFilter) ProtoMessage() {} - -func (x *RecordContextFilter) ProtoReflect() protoreflect.Message { - mi := &file_context_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecordContextFilter.ProtoReflect.Descriptor instead. -func (*RecordContextFilter) Descriptor() ([]byte, []int) { - return file_context_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *RecordContextFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *RecordContextFilter) GetActiveSince() *timestamppb.Timestamp { - if x != nil { - return x.ActiveSince - } - return nil -} - -func (m *RecordContextFilter) GetKind() isRecordContextFilter_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *RecordContextFilter) GetWorkload() *RecordContext_Workload { - if x, ok := x.GetKind().(*RecordContextFilter_Workload); ok { - return x.Workload - } - return nil -} - -func (x *RecordContextFilter) GetAncestry() *RecordContext_Ancestry { - if x, ok := x.GetKind().(*RecordContextFilter_Ancestry); ok { - return x.Ancestry - } - return nil -} - -func (x *RecordContextFilter) GetVariant() *RecordContext_Variant { - if x, ok := x.GetKind().(*RecordContextFilter_Variant); ok { - return x.Variant - } - return nil -} - -type isRecordContextFilter_Kind interface { - isRecordContextFilter_Kind() -} - -type RecordContextFilter_Workload struct { - Workload *RecordContext_Workload `protobuf:"bytes,100,opt,name=workload,proto3,oneof"` -} - -type RecordContextFilter_Ancestry struct { - Ancestry *RecordContext_Ancestry `protobuf:"bytes,101,opt,name=ancestry,proto3,oneof"` -} - -type RecordContextFilter_Variant struct { - Variant *RecordContext_Variant `protobuf:"bytes,102,opt,name=variant,proto3,oneof"` -} - -func (*RecordContextFilter_Workload) isRecordContextFilter_Kind() {} - -func (*RecordContextFilter_Ancestry) isRecordContextFilter_Kind() {} - -func (*RecordContextFilter_Variant) isRecordContextFilter_Kind() {} - -// Workload contexts are added to existence records that have been -// observed running on a cluster. -type RecordContext_Workload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // remote_id is the metadata.uid of the workload in which this - // container was observed. - RemoteId string `protobuf:"bytes,1,opt,name=remote_id,json=remoteId,proto3" json:"remote_id,omitempty"` -} - -func (x *RecordContext_Workload) Reset() { - *x = RecordContext_Workload{} - if protoimpl.UnsafeEnabled { - mi := &file_context_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordContext_Workload) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordContext_Workload) ProtoMessage() {} - -func (x *RecordContext_Workload) ProtoReflect() protoreflect.Message { - mi := &file_context_platform_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 RecordContext_Workload.ProtoReflect.Descriptor instead. -func (*RecordContext_Workload) Descriptor() ([]byte, []int) { - return file_context_platform_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *RecordContext_Workload) GetRemoteId() string { - if x != nil { - return x.RemoteId - } - return "" -} - -// Ancestry relationships are added to records when a "base image" -// relationship has been uncovered. This context is added to BOTH -// records with their respective roles. The base image will get -// the Role BASE, and the derivative image will get the Role DERIVED. -type RecordContext_Ancestry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Role RecordContext_Ancestry_Role `protobuf:"varint,1,opt,name=role,proto3,enum=chainguard.platform.tenant.RecordContext_Ancestry_Role" json:"role,omitempty"` - // image_id holds the digest of the related image, which can be used - // to efficiently retrieve it's record. - ImageId string `protobuf:"bytes,2,opt,name=image_id,json=imageId,proto3" json:"image_id,omitempty"` -} - -func (x *RecordContext_Ancestry) Reset() { - *x = RecordContext_Ancestry{} - if protoimpl.UnsafeEnabled { - mi := &file_context_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordContext_Ancestry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordContext_Ancestry) ProtoMessage() {} - -func (x *RecordContext_Ancestry) ProtoReflect() protoreflect.Message { - mi := &file_context_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecordContext_Ancestry.ProtoReflect.Descriptor instead. -func (*RecordContext_Ancestry) Descriptor() ([]byte, []int) { - return file_context_platform_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *RecordContext_Ancestry) GetRole() RecordContext_Ancestry_Role { - if x != nil { - return x.Role - } - return RecordContext_Ancestry_UNKNOWN -} - -func (x *RecordContext_Ancestry) GetImageId() string { - if x != nil { - return x.ImageId - } - return "" -} - -// Variant relationships are added to records when we find an "index" -// containing multiple different variations (typically os/arch) of the -// same logical image. These are referred to as "OCI Image Index", -// "Docker Manifest List", and occasionally "fat images". This context -// is added to ALL records including the INDEX and all VARIANTs of that -// index. The INDEX will typically contain N contexts carrying the Role -// INDEX, the id of the VARIANT's record, and the version information -// that discriminates that VARIANT from other VARIANTs. The VARIANT -// will typically (but not always!) contain 1 context carrying the Role -// VARIANT, the id of the INDEX's record, and the version information -// that discriminates it among the other VARIANTs in the INDEX. -type RecordContext_Variant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Role RecordContext_Variant_Role `protobuf:"varint,1,opt,name=role,proto3,enum=chainguard.platform.tenant.RecordContext_Variant_Role" json:"role,omitempty"` - // image_id holds the digest of the related image, which can be used - // to efficiently retrieve it's record. - ImageId string `protobuf:"bytes,2,opt,name=image_id,json=imageId,proto3" json:"image_id,omitempty"` - // The version information distinguishing this variant - // from other possible variants of the index. - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` -} - -func (x *RecordContext_Variant) Reset() { - *x = RecordContext_Variant{} - if protoimpl.UnsafeEnabled { - mi := &file_context_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordContext_Variant) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordContext_Variant) ProtoMessage() {} - -func (x *RecordContext_Variant) ProtoReflect() protoreflect.Message { - mi := &file_context_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecordContext_Variant.ProtoReflect.Descriptor instead. -func (*RecordContext_Variant) Descriptor() ([]byte, []int) { - return file_context_platform_proto_rawDescGZIP(), []int{0, 2} -} - -func (x *RecordContext_Variant) GetRole() RecordContext_Variant_Role { - if x != nil { - return x.Role - } - return RecordContext_Variant_UNKNOWN -} - -func (x *RecordContext_Variant) GetImageId() string { - if x != nil { - return x.ImageId - } - return "" -} - -func (x *RecordContext_Variant) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -var File_context_platform_proto protoreflect.FileDescriptor - -var file_context_platform_proto_rawDesc = []byte{ - 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, - 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8d, 0x06, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, - 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, - 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x50, 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x08, - 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x50, 0x0a, 0x08, 0x61, 0x6e, 0x63, 0x65, - 0x73, 0x74, 0x72, 0x79, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x48, 0x00, - 0x52, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x12, 0x4d, 0x0a, 0x07, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x1a, 0x27, 0x0a, 0x08, 0x57, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x49, 0x64, 0x1a, 0x9e, 0x01, 0x0a, 0x08, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x12, - 0x4b, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x2a, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x42, 0x41, 0x53, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x52, 0x49, 0x56, 0x45, - 0x44, 0x10, 0x02, 0x1a, 0xb7, 0x01, 0x0a, 0x07, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, - 0x4a, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, - 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x2b, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x41, 0x52, 0x49, 0x41, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x06, 0x0a, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x54, 0x0a, 0x11, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x8b, 0x03, 0x0a, 0x13, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, - 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, - 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x50, - 0x0a, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x50, 0x0a, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x18, 0x65, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, 0x6e, - 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, - 0x72, 0x79, 0x12, 0x4d, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x66, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, - 0x74, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x32, 0x88, 0x01, 0x0a, 0x0e, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x73, 0x12, 0x76, 0x0a, 0x04, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, - 0xe5, 0x04, 0x10, 0x01, 0x42, 0x78, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x20, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, - 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_context_platform_proto_rawDescOnce sync.Once - file_context_platform_proto_rawDescData = file_context_platform_proto_rawDesc -) - -func file_context_platform_proto_rawDescGZIP() []byte { - file_context_platform_proto_rawDescOnce.Do(func() { - file_context_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_context_platform_proto_rawDescData) - }) - return file_context_platform_proto_rawDescData -} - -var file_context_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_context_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_context_platform_proto_goTypes = []interface{}{ - (RecordContext_Ancestry_Role)(0), // 0: chainguard.platform.tenant.RecordContext.Ancestry.Role - (RecordContext_Variant_Role)(0), // 1: chainguard.platform.tenant.RecordContext.Variant.Role - (*RecordContext)(nil), // 2: chainguard.platform.tenant.RecordContext - (*RecordContextList)(nil), // 3: chainguard.platform.tenant.RecordContextList - (*RecordContextFilter)(nil), // 4: chainguard.platform.tenant.RecordContextFilter - (*RecordContext_Workload)(nil), // 5: chainguard.platform.tenant.RecordContext.Workload - (*RecordContext_Ancestry)(nil), // 6: chainguard.platform.tenant.RecordContext.Ancestry - (*RecordContext_Variant)(nil), // 7: chainguard.platform.tenant.RecordContext.Variant - (*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 9: chainguard.platform.common.UIDPFilter -} -var file_context_platform_proto_depIdxs = []int32{ - 8, // 0: chainguard.platform.tenant.RecordContext.last_seen:type_name -> google.protobuf.Timestamp - 5, // 1: chainguard.platform.tenant.RecordContext.workload:type_name -> chainguard.platform.tenant.RecordContext.Workload - 6, // 2: chainguard.platform.tenant.RecordContext.ancestry:type_name -> chainguard.platform.tenant.RecordContext.Ancestry - 7, // 3: chainguard.platform.tenant.RecordContext.variant:type_name -> chainguard.platform.tenant.RecordContext.Variant - 2, // 4: chainguard.platform.tenant.RecordContextList.items:type_name -> chainguard.platform.tenant.RecordContext - 9, // 5: chainguard.platform.tenant.RecordContextFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 8, // 6: chainguard.platform.tenant.RecordContextFilter.active_since:type_name -> google.protobuf.Timestamp - 5, // 7: chainguard.platform.tenant.RecordContextFilter.workload:type_name -> chainguard.platform.tenant.RecordContext.Workload - 6, // 8: chainguard.platform.tenant.RecordContextFilter.ancestry:type_name -> chainguard.platform.tenant.RecordContext.Ancestry - 7, // 9: chainguard.platform.tenant.RecordContextFilter.variant:type_name -> chainguard.platform.tenant.RecordContext.Variant - 0, // 10: chainguard.platform.tenant.RecordContext.Ancestry.role:type_name -> chainguard.platform.tenant.RecordContext.Ancestry.Role - 1, // 11: chainguard.platform.tenant.RecordContext.Variant.role:type_name -> chainguard.platform.tenant.RecordContext.Variant.Role - 4, // 12: chainguard.platform.tenant.RecordContexts.List:input_type -> chainguard.platform.tenant.RecordContextFilter - 3, // 13: chainguard.platform.tenant.RecordContexts.List:output_type -> chainguard.platform.tenant.RecordContextList - 13, // [13:14] is the sub-list for method output_type - 12, // [12:13] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name -} - -func init() { file_context_platform_proto_init() } -func file_context_platform_proto_init() { - if File_context_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_context_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordContext); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_context_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordContextList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_context_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordContextFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_context_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordContext_Workload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_context_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordContext_Ancestry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_context_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordContext_Variant); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_context_platform_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*RecordContext_Workload_)(nil), - (*RecordContext_Ancestry_)(nil), - (*RecordContext_Variant_)(nil), - } - file_context_platform_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*RecordContextFilter_Workload)(nil), - (*RecordContextFilter_Ancestry)(nil), - (*RecordContextFilter_Variant)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_context_platform_proto_rawDesc, - NumEnums: 2, - NumMessages: 6, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_context_platform_proto_goTypes, - DependencyIndexes: file_context_platform_proto_depIdxs, - EnumInfos: file_context_platform_proto_enumTypes, - MessageInfos: file_context_platform_proto_msgTypes, - }.Build() - File_context_platform_proto = out.File - file_context_platform_proto_rawDesc = nil - file_context_platform_proto_goTypes = nil - file_context_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/context.platform.proto b/proto/platform/tenant/v1/context.platform.proto deleted file mode 100644 index b16427b9..00000000 --- a/proto/platform/tenant/v1/context.platform.proto +++ /dev/null @@ -1,119 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantRecordContextProto"; - -package chainguard.platform.tenant; - -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service RecordContexts { - rpc List(RecordContextFilter) returns (RecordContextList) { - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_RECORD_CONTEXTS_LIST] - unscoped: true - } - }; - } -} - -message RecordContext { - // id, The RecordContext UIDP at which this RecordContext resides. - string id = 1; - - // name of the RecordContext. - string name = 2; - - // a short description of this RecordContext. - string description = 3; - - // last_seen tracks the timestamp at which this RecordContext was last seen. - google.protobuf.Timestamp last_seen = 4; - - oneof kind { - Workload workload = 100; - Ancestry ancestry = 101; - Variant variant = 102; - } - - // Workload contexts are added to existence records that have been - // observed running on a cluster. - message Workload { - // remote_id is the metadata.uid of the workload in which this - // container was observed. - string remote_id = 1; - } - - // Ancestry relationships are added to records when a "base image" - // relationship has been uncovered. This context is added to BOTH - // records with their respective roles. The base image will get - // the Role BASE, and the derivative image will get the Role DERIVED. - message Ancestry { - Role role = 1; - - // image_id holds the digest of the related image, which can be used - // to efficiently retrieve it's record. - string image_id = 2; - - enum Role { - UNKNOWN = 0; - BASE = 1; - DERIVED = 2; - } - } - - // Variant relationships are added to records when we find an "index" - // containing multiple different variations (typically os/arch) of the - // same logical image. These are referred to as "OCI Image Index", - // "Docker Manifest List", and occasionally "fat images". This context - // is added to ALL records including the INDEX and all VARIANTs of that - // index. The INDEX will typically contain N contexts carrying the Role - // INDEX, the id of the VARIANT's record, and the version information - // that discriminates that VARIANT from other VARIANTs. The VARIANT - // will typically (but not always!) contain 1 context carrying the Role - // VARIANT, the id of the INDEX's record, and the version information - // that discriminates it among the other VARIANTs in the INDEX. - message Variant { - Role role = 1; - - // image_id holds the digest of the related image, which can be used - // to efficiently retrieve it's record. - string image_id = 2; - - // The version information distinguishing this variant - // from other possible variants of the index. - string version = 3; - - enum Role { - UNKNOWN = 0; - INDEX = 1; - VARIANT = 2; - } - } -} - -message RecordContextList { - repeated RecordContext items = 1; -} - -message RecordContextFilter { - chainguard.platform.common.UIDPFilter uidp = 1; - - // active_since is the timestamp after which the records should - // have last been observed in the returned context. - google.protobuf.Timestamp active_since = 2; - - // Allow filtering results based on matching fields in the context - // ranging from just a particular "kind" to the exact workload shape. - // Only specified fields will be used as part of the match. - oneof kind { - RecordContext.Workload workload = 100; - RecordContext.Ancestry ancestry = 101; - RecordContext.Variant variant = 102; - } -} diff --git a/proto/platform/tenant/v1/context.platform_grpc.pb.go b/proto/platform/tenant/v1/context.platform_grpc.pb.go deleted file mode 100644 index 41ca8f95..00000000 --- a/proto/platform/tenant/v1/context.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: context.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - RecordContexts_List_FullMethodName = "/chainguard.platform.tenant.RecordContexts/List" -) - -// RecordContextsClient is the client API for RecordContexts service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type RecordContextsClient interface { - List(ctx context.Context, in *RecordContextFilter, opts ...grpc.CallOption) (*RecordContextList, error) -} - -type recordContextsClient struct { - cc grpc.ClientConnInterface -} - -func NewRecordContextsClient(cc grpc.ClientConnInterface) RecordContextsClient { - return &recordContextsClient{cc} -} - -func (c *recordContextsClient) List(ctx context.Context, in *RecordContextFilter, opts ...grpc.CallOption) (*RecordContextList, error) { - out := new(RecordContextList) - err := c.cc.Invoke(ctx, RecordContexts_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RecordContextsServer is the server API for RecordContexts service. -// All implementations must embed UnimplementedRecordContextsServer -// for forward compatibility -type RecordContextsServer interface { - List(context.Context, *RecordContextFilter) (*RecordContextList, error) - mustEmbedUnimplementedRecordContextsServer() -} - -// UnimplementedRecordContextsServer must be embedded to have forward compatible implementations. -type UnimplementedRecordContextsServer struct { -} - -func (UnimplementedRecordContextsServer) List(context.Context, *RecordContextFilter) (*RecordContextList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedRecordContextsServer) mustEmbedUnimplementedRecordContextsServer() {} - -// UnsafeRecordContextsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to RecordContextsServer will -// result in compilation errors. -type UnsafeRecordContextsServer interface { - mustEmbedUnimplementedRecordContextsServer() -} - -func RegisterRecordContextsServer(s grpc.ServiceRegistrar, srv RecordContextsServer) { - s.RegisterService(&RecordContexts_ServiceDesc, srv) -} - -func _RecordContexts_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RecordContextFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RecordContextsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: RecordContexts_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RecordContextsServer).List(ctx, req.(*RecordContextFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// RecordContexts_ServiceDesc is the grpc.ServiceDesc for RecordContexts service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var RecordContexts_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.RecordContexts", - HandlerType: (*RecordContextsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _RecordContexts_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "context.platform.proto", -} diff --git a/proto/platform/tenant/v1/doc.go b/proto/platform/tenant/v1/doc.go index 4189082a..fefa86c9 100644 --- a/proto/platform/tenant/v1/doc.go +++ b/proto/platform/tenant/v1/doc.go @@ -6,8 +6,6 @@ SPDX-License-Identifier: Apache-2.0 // Package v1 contains the v1 GRPC client and server definitions // for implementing Tenant interactions for the Console. // -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative context.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative policy_results.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative signature.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. record.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. sbom.platform.proto diff --git a/proto/platform/tenant/v1/policy_results.platform.pb.go b/proto/platform/tenant/v1/policy_results.platform.pb.go deleted file mode 100644 index 29473a76..00000000 --- a/proto/platform/tenant/v1/policy_results.platform.pb.go +++ /dev/null @@ -1,770 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: policy_results.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type PolicyResult_Result int32 - -const ( - PolicyResult_UNKNOWN PolicyResult_Result = 0 - // PASS represents when a policy evaluation completed without any - // diagnostics returned. - PolicyResult_PASS PolicyResult_Result = 1 - // WARN represents when a policy evaluation completed with warnings - // (e.g. the policy used mode: warn). - PolicyResult_WARN PolicyResult_Result = 2 - // FAIL represents when a policy evaluation completed with errors - // (e.g. the policy used mode: enforce). - PolicyResult_FAIL PolicyResult_Result = 3 -) - -// Enum value maps for PolicyResult_Result. -var ( - PolicyResult_Result_name = map[int32]string{ - 0: "UNKNOWN", - 1: "PASS", - 2: "WARN", - 3: "FAIL", - } - PolicyResult_Result_value = map[string]int32{ - "UNKNOWN": 0, - "PASS": 1, - "WARN": 2, - "FAIL": 3, - } -) - -func (x PolicyResult_Result) Enum() *PolicyResult_Result { - p := new(PolicyResult_Result) - *p = x - return p -} - -func (x PolicyResult_Result) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PolicyResult_Result) Descriptor() protoreflect.EnumDescriptor { - return file_policy_results_platform_proto_enumTypes[0].Descriptor() -} - -func (PolicyResult_Result) Type() protoreflect.EnumType { - return &file_policy_results_platform_proto_enumTypes[0] -} - -func (x PolicyResult_Result) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use PolicyResult_Result.Descriptor instead. -func (PolicyResult_Result) EnumDescriptor() ([]byte, []int) { - return file_policy_results_platform_proto_rawDescGZIP(), []int{0, 0} -} - -type PolicyResult_ParentType int32 - -const ( - PolicyResult_PARENT_TYPE_UNKNOWN PolicyResult_ParentType = 0 - PolicyResult_RECORD PolicyResult_ParentType = 1 - PolicyResult_RECORD_CONTEXT PolicyResult_ParentType = 2 - PolicyResult_WORKLOAD PolicyResult_ParentType = 3 -) - -// Enum value maps for PolicyResult_ParentType. -var ( - PolicyResult_ParentType_name = map[int32]string{ - 0: "PARENT_TYPE_UNKNOWN", - 1: "RECORD", - 2: "RECORD_CONTEXT", - 3: "WORKLOAD", - } - PolicyResult_ParentType_value = map[string]int32{ - "PARENT_TYPE_UNKNOWN": 0, - "RECORD": 1, - "RECORD_CONTEXT": 2, - "WORKLOAD": 3, - } -) - -func (x PolicyResult_ParentType) Enum() *PolicyResult_ParentType { - p := new(PolicyResult_ParentType) - *p = x - return p -} - -func (x PolicyResult_ParentType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PolicyResult_ParentType) Descriptor() protoreflect.EnumDescriptor { - return file_policy_results_platform_proto_enumTypes[1].Descriptor() -} - -func (PolicyResult_ParentType) Type() protoreflect.EnumType { - return &file_policy_results_platform_proto_enumTypes[1] -} - -func (x PolicyResult_ParentType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use PolicyResult_ParentType.Descriptor instead. -func (PolicyResult_ParentType) EnumDescriptor() ([]byte, []int) { - return file_policy_results_platform_proto_rawDescGZIP(), []int{0, 1} -} - -type PolicyResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id, The PolicyResult UIDP at which this PolicyResult resides. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // name of the PolicyResult. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // a short description of this PolicyResult. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // policy_id is the metadata.uid of the Policy this result captures an evaluation of. - PolicyId string `protobuf:"bytes,4,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` - // version is the metadata.resourceVersion of the Policy this result captures an evaluation of. - Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` - // last_checked tracks the timestamp at which this policy result was last checked. - LastChecked *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=last_checked,json=lastChecked,proto3" json:"last_checked,omitempty"` - // result holds the result of this policy evaluation. - Result PolicyResult_Result `protobuf:"varint,7,opt,name=result,proto3,enum=chainguard.platform.tenant.PolicyResult_Result" json:"result,omitempty"` - // diagnostic holds the diagnostic message associated with the result of this policy evaluation. - Diagnostic string `protobuf:"bytes,8,opt,name=diagnostic,proto3" json:"diagnostic,omitempty"` - // This loosely tracks the policy-controller's PolicyResult type found here: - // https://github.com/sigstore/policy-controller/blob/f777dcc2e/pkg/webhook/validator_result.go - AuthorityMatches map[string]*PolicyResult_AuthorityMatch `protobuf:"bytes,9,rep,name=authority_matches,json=authorityMatches,proto3" json:"authority_matches,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // parent_type, It is the parent type associated with the PolicyResult, can be Record, RecordContext or Workload. - ParentType PolicyResult_ParentType `protobuf:"varint,10,opt,name=parent_type,json=parentType,proto3,enum=chainguard.platform.tenant.PolicyResult_ParentType" json:"parent_type,omitempty"` -} - -func (x *PolicyResult) Reset() { - *x = PolicyResult{} - if protoimpl.UnsafeEnabled { - mi := &file_policy_results_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyResult) ProtoMessage() {} - -func (x *PolicyResult) ProtoReflect() protoreflect.Message { - mi := &file_policy_results_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PolicyResult.ProtoReflect.Descriptor instead. -func (*PolicyResult) Descriptor() ([]byte, []int) { - return file_policy_results_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *PolicyResult) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *PolicyResult) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *PolicyResult) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *PolicyResult) GetPolicyId() string { - if x != nil { - return x.PolicyId - } - return "" -} - -func (x *PolicyResult) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *PolicyResult) GetLastChecked() *timestamppb.Timestamp { - if x != nil { - return x.LastChecked - } - return nil -} - -func (x *PolicyResult) GetResult() PolicyResult_Result { - if x != nil { - return x.Result - } - return PolicyResult_UNKNOWN -} - -func (x *PolicyResult) GetDiagnostic() string { - if x != nil { - return x.Diagnostic - } - return "" -} - -func (x *PolicyResult) GetAuthorityMatches() map[string]*PolicyResult_AuthorityMatch { - if x != nil { - return x.AuthorityMatches - } - return nil -} - -func (x *PolicyResult) GetParentType() PolicyResult_ParentType { - if x != nil { - return x.ParentType - } - return PolicyResult_PARENT_TYPE_UNKNOWN -} - -type PolicyResultList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*PolicyResult `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *PolicyResultList) Reset() { - *x = PolicyResultList{} - if protoimpl.UnsafeEnabled { - mi := &file_policy_results_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyResultList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyResultList) ProtoMessage() {} - -func (x *PolicyResultList) ProtoReflect() protoreflect.Message { - mi := &file_policy_results_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PolicyResultList.ProtoReflect.Descriptor instead. -func (*PolicyResultList) Descriptor() ([]byte, []int) { - return file_policy_results_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *PolicyResultList) GetItems() []*PolicyResult { - if x != nil { - return x.Items - } - return nil -} - -type PolicyResultFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Uidp *v1.UIDPFilter `protobuf:"bytes,1,opt,name=uidp,proto3" json:"uidp,omitempty"` - // checked_since is the timestamp after which the policy should - // have last been checked. - CheckedSince *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=checked_since,json=checkedSince,proto3" json:"checked_since,omitempty"` - // policy_id looks up evaluations of the policy identified by this metadata.uid - PolicyId string `protobuf:"bytes,3,opt,name=policy_id,json=policyId,proto3" json:"policy_id,omitempty"` - // results filters policy results with one of the provided result. - Results []PolicyResult_Result `protobuf:"varint,4,rep,packed,name=results,proto3,enum=chainguard.platform.tenant.PolicyResult_Result" json:"results,omitempty"` - // parent_type filters policy results with the provided parent_type. - ParentType PolicyResult_ParentType `protobuf:"varint,5,opt,name=parent_type,json=parentType,proto3,enum=chainguard.platform.tenant.PolicyResult_ParentType" json:"parent_type,omitempty"` -} - -func (x *PolicyResultFilter) Reset() { - *x = PolicyResultFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_policy_results_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyResultFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyResultFilter) ProtoMessage() {} - -func (x *PolicyResultFilter) ProtoReflect() protoreflect.Message { - mi := &file_policy_results_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PolicyResultFilter.ProtoReflect.Descriptor instead. -func (*PolicyResultFilter) Descriptor() ([]byte, []int) { - return file_policy_results_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *PolicyResultFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *PolicyResultFilter) GetCheckedSince() *timestamppb.Timestamp { - if x != nil { - return x.CheckedSince - } - return nil -} - -func (x *PolicyResultFilter) GetPolicyId() string { - if x != nil { - return x.PolicyId - } - return "" -} - -func (x *PolicyResultFilter) GetResults() []PolicyResult_Result { - if x != nil { - return x.Results - } - return nil -} - -func (x *PolicyResultFilter) GetParentType() PolicyResult_ParentType { - if x != nil { - return x.ParentType - } - return PolicyResult_PARENT_TYPE_UNKNOWN -} - -type PolicyResult_AuthorityMatch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The matched signatures. - Signatures *PolicyResult_AuthorityMatch_SignatureMatches `protobuf:"bytes,1,opt,name=signatures,proto3" json:"signatures,omitempty"` - // A map from attestation name to matched attestations. - Attestations map[string]*PolicyResult_AuthorityMatch_SignatureMatches `protobuf:"bytes,2,rep,name=attestations,proto3" json:"attestations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *PolicyResult_AuthorityMatch) Reset() { - *x = PolicyResult_AuthorityMatch{} - if protoimpl.UnsafeEnabled { - mi := &file_policy_results_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyResult_AuthorityMatch) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyResult_AuthorityMatch) ProtoMessage() {} - -func (x *PolicyResult_AuthorityMatch) ProtoReflect() protoreflect.Message { - mi := &file_policy_results_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PolicyResult_AuthorityMatch.ProtoReflect.Descriptor instead. -func (*PolicyResult_AuthorityMatch) Descriptor() ([]byte, []int) { - return file_policy_results_platform_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *PolicyResult_AuthorityMatch) GetSignatures() *PolicyResult_AuthorityMatch_SignatureMatches { - if x != nil { - return x.Signatures - } - return nil -} - -func (x *PolicyResult_AuthorityMatch) GetAttestations() map[string]*PolicyResult_AuthorityMatch_SignatureMatches { - if x != nil { - return x.Attestations - } - return nil -} - -type PolicyResult_AuthorityMatch_SignatureMatches struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The list of signature record UIDPs - Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` -} - -func (x *PolicyResult_AuthorityMatch_SignatureMatches) Reset() { - *x = PolicyResult_AuthorityMatch_SignatureMatches{} - if protoimpl.UnsafeEnabled { - mi := &file_policy_results_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PolicyResult_AuthorityMatch_SignatureMatches) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PolicyResult_AuthorityMatch_SignatureMatches) ProtoMessage() {} - -func (x *PolicyResult_AuthorityMatch_SignatureMatches) ProtoReflect() protoreflect.Message { - mi := &file_policy_results_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PolicyResult_AuthorityMatch_SignatureMatches.ProtoReflect.Descriptor instead. -func (*PolicyResult_AuthorityMatch_SignatureMatches) Descriptor() ([]byte, []int) { - return file_policy_results_platform_proto_rawDescGZIP(), []int{0, 1, 1} -} - -func (x *PolicyResult_AuthorityMatch_SignatureMatches) GetIds() []string { - if x != nil { - return x.Ids - } - return nil -} - -var File_policy_results_platform_proto protoreflect.FileDescriptor - -var file_policy_results_platform_proto_rawDesc = []byte{ - 0x0a, 0x1d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9c, 0x09, 0x0a, - 0x0c, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, - 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, - 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, - 0x69, 0x63, 0x12, 0x6b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x54, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x50, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x7c, 0x0a, 0x15, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 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, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x9b, 0x03, 0x0a, 0x0e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x68, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x65, 0x73, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x12, 0x6d, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x89, 0x01, 0x0a, 0x11, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x5e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x2e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x24, 0x0a, 0x10, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, - 0x73, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x53, 0x53, - 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, - 0x46, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x22, 0x53, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x43, - 0x4f, 0x52, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, - 0x08, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x03, 0x22, 0x52, 0x0a, 0x10, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, - 0xcf, 0x02, 0x0a, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, - 0x64, 0x70, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x73, 0x69, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x53, 0x69, - 0x6e, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, - 0x12, 0x49, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x0b, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x33, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x32, 0x85, 0x01, 0x0a, 0x0d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x12, 0x74, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x0e, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x08, 0x12, 0x06, 0x0a, 0x02, 0xf9, 0x04, 0x10, 0x01, 0x42, 0x77, 0x0a, 0x25, 0x64, 0x65, 0x76, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x76, 0x31, 0x42, 0x1f, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, - 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_policy_results_platform_proto_rawDescOnce sync.Once - file_policy_results_platform_proto_rawDescData = file_policy_results_platform_proto_rawDesc -) - -func file_policy_results_platform_proto_rawDescGZIP() []byte { - file_policy_results_platform_proto_rawDescOnce.Do(func() { - file_policy_results_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_policy_results_platform_proto_rawDescData) - }) - return file_policy_results_platform_proto_rawDescData -} - -var file_policy_results_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_policy_results_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_policy_results_platform_proto_goTypes = []interface{}{ - (PolicyResult_Result)(0), // 0: chainguard.platform.tenant.PolicyResult.Result - (PolicyResult_ParentType)(0), // 1: chainguard.platform.tenant.PolicyResult.ParentType - (*PolicyResult)(nil), // 2: chainguard.platform.tenant.PolicyResult - (*PolicyResultList)(nil), // 3: chainguard.platform.tenant.PolicyResultList - (*PolicyResultFilter)(nil), // 4: chainguard.platform.tenant.PolicyResultFilter - nil, // 5: chainguard.platform.tenant.PolicyResult.AuthorityMatchesEntry - (*PolicyResult_AuthorityMatch)(nil), // 6: chainguard.platform.tenant.PolicyResult.AuthorityMatch - nil, // 7: chainguard.platform.tenant.PolicyResult.AuthorityMatch.AttestationsEntry - (*PolicyResult_AuthorityMatch_SignatureMatches)(nil), // 8: chainguard.platform.tenant.PolicyResult.AuthorityMatch.SignatureMatches - (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 10: chainguard.platform.common.UIDPFilter -} -var file_policy_results_platform_proto_depIdxs = []int32{ - 9, // 0: chainguard.platform.tenant.PolicyResult.last_checked:type_name -> google.protobuf.Timestamp - 0, // 1: chainguard.platform.tenant.PolicyResult.result:type_name -> chainguard.platform.tenant.PolicyResult.Result - 5, // 2: chainguard.platform.tenant.PolicyResult.authority_matches:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatchesEntry - 1, // 3: chainguard.platform.tenant.PolicyResult.parent_type:type_name -> chainguard.platform.tenant.PolicyResult.ParentType - 2, // 4: chainguard.platform.tenant.PolicyResultList.items:type_name -> chainguard.platform.tenant.PolicyResult - 10, // 5: chainguard.platform.tenant.PolicyResultFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 9, // 6: chainguard.platform.tenant.PolicyResultFilter.checked_since:type_name -> google.protobuf.Timestamp - 0, // 7: chainguard.platform.tenant.PolicyResultFilter.results:type_name -> chainguard.platform.tenant.PolicyResult.Result - 1, // 8: chainguard.platform.tenant.PolicyResultFilter.parent_type:type_name -> chainguard.platform.tenant.PolicyResult.ParentType - 6, // 9: chainguard.platform.tenant.PolicyResult.AuthorityMatchesEntry.value:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatch - 8, // 10: chainguard.platform.tenant.PolicyResult.AuthorityMatch.signatures:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatch.SignatureMatches - 7, // 11: chainguard.platform.tenant.PolicyResult.AuthorityMatch.attestations:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatch.AttestationsEntry - 8, // 12: chainguard.platform.tenant.PolicyResult.AuthorityMatch.AttestationsEntry.value:type_name -> chainguard.platform.tenant.PolicyResult.AuthorityMatch.SignatureMatches - 4, // 13: chainguard.platform.tenant.PolicyResults.List:input_type -> chainguard.platform.tenant.PolicyResultFilter - 3, // 14: chainguard.platform.tenant.PolicyResults.List:output_type -> chainguard.platform.tenant.PolicyResultList - 14, // [14:15] is the sub-list for method output_type - 13, // [13:14] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name -} - -func init() { file_policy_results_platform_proto_init() } -func file_policy_results_platform_proto_init() { - if File_policy_results_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_policy_results_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policy_results_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyResultList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policy_results_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyResultFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policy_results_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyResult_AuthorityMatch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_policy_results_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PolicyResult_AuthorityMatch_SignatureMatches); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_policy_results_platform_proto_rawDesc, - NumEnums: 2, - NumMessages: 7, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_policy_results_platform_proto_goTypes, - DependencyIndexes: file_policy_results_platform_proto_depIdxs, - EnumInfos: file_policy_results_platform_proto_enumTypes, - MessageInfos: file_policy_results_platform_proto_msgTypes, - }.Build() - File_policy_results_platform_proto = out.File - file_policy_results_platform_proto_rawDesc = nil - file_policy_results_platform_proto_goTypes = nil - file_policy_results_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/policy_results.platform.pb.gw.go b/proto/platform/tenant/v1/policy_results.platform.pb.gw.go deleted file mode 100644 index a1b084bb..00000000 --- a/proto/platform/tenant/v1/policy_results.platform.pb.gw.go +++ /dev/null @@ -1,171 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: policy_results.platform.proto - -/* -Package tenant is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -var ( - filter_PolicyResults_List_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_PolicyResults_List_0(ctx context.Context, marshaler runtime.Marshaler, client PolicyResultsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PolicyResultFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PolicyResults_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_PolicyResults_List_0(ctx context.Context, marshaler runtime.Marshaler, server PolicyResultsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq PolicyResultFilter - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PolicyResults_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterPolicyResultsHandlerServer registers the http handlers for service PolicyResults to "mux". -// UnaryRPC :call PolicyResultsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPolicyResultsHandlerFromEndpoint instead. -func RegisterPolicyResultsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PolicyResultsServer) error { - - mux.Handle("GET", pattern_PolicyResults_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.PolicyResults/List", runtime.WithHTTPPathPattern("/tenant/v1/policyResults")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_PolicyResults_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PolicyResults_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterPolicyResultsHandlerFromEndpoint is same as RegisterPolicyResultsHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterPolicyResultsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterPolicyResultsHandler(ctx, mux, conn) -} - -// RegisterPolicyResultsHandler registers the http handlers for service PolicyResults to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterPolicyResultsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterPolicyResultsHandlerClient(ctx, mux, NewPolicyResultsClient(conn)) -} - -// RegisterPolicyResultsHandlerClient registers the http handlers for service PolicyResults -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PolicyResultsClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PolicyResultsClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "PolicyResultsClient" to call the correct interceptors. -func RegisterPolicyResultsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PolicyResultsClient) error { - - mux.Handle("GET", pattern_PolicyResults_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.PolicyResults/List", runtime.WithHTTPPathPattern("/tenant/v1/policyResults")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_PolicyResults_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_PolicyResults_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_PolicyResults_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"tenant", "v1", "policyResults"}, "")) -) - -var ( - forward_PolicyResults_List_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/tenant/v1/policy_results.platform.proto b/proto/platform/tenant/v1/policy_results.platform.proto deleted file mode 100644 index d0680fea..00000000 --- a/proto/platform/tenant/v1/policy_results.platform.proto +++ /dev/null @@ -1,113 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantPolicyResultProto"; - -package chainguard.platform.tenant; - -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service PolicyResults { - rpc List(PolicyResultFilter) returns (PolicyResultList) { - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_RECORD_POLICY_RESULTS_LIST] - unscoped: true - } - }; - } -} - -message PolicyResult { - // id, The PolicyResult UIDP at which this PolicyResult resides. - string id = 1; - - // name of the PolicyResult. - string name = 2; - - // a short description of this PolicyResult. - string description = 3; - - // policy_id is the metadata.uid of the Policy this result captures an evaluation of. - string policy_id = 4; - - // version is the metadata.resourceVersion of the Policy this result captures an evaluation of. - string version = 5; - - // last_checked tracks the timestamp at which this policy result was last checked. - google.protobuf.Timestamp last_checked = 6; - - // result holds the result of this policy evaluation. - Result result = 7; - - // diagnostic holds the diagnostic message associated with the result of this policy evaluation. - string diagnostic = 8; - - enum Result { - UNKNOWN = 0; - - // PASS represents when a policy evaluation completed without any - // diagnostics returned. - PASS = 1; - - // WARN represents when a policy evaluation completed with warnings - // (e.g. the policy used mode: warn). - WARN = 2; - - // FAIL represents when a policy evaluation completed with errors - // (e.g. the policy used mode: enforce). - FAIL = 3; - } - - // This loosely tracks the policy-controller's PolicyResult type found here: - // https://github.com/sigstore/policy-controller/blob/f777dcc2e/pkg/webhook/validator_result.go - map authority_matches = 9; - - message AuthorityMatch { - // The matched signatures. - SignatureMatches signatures = 1; - - // A map from attestation name to matched attestations. - map attestations = 2; - - message SignatureMatches { - // The list of signature record UIDPs - repeated string ids = 1; - } - } - - // parent_type, It is the parent type associated with the PolicyResult, can be Record, RecordContext or Workload. - ParentType parent_type = 10; - - enum ParentType { - PARENT_TYPE_UNKNOWN = 0; - RECORD = 1; - RECORD_CONTEXT = 2; - WORKLOAD = 3; - } -} - -message PolicyResultList { - repeated PolicyResult items = 1; -} - -message PolicyResultFilter { - chainguard.platform.common.UIDPFilter uidp = 1; - - // checked_since is the timestamp after which the policy should - // have last been checked. - google.protobuf.Timestamp checked_since = 2; - - // policy_id looks up evaluations of the policy identified by this metadata.uid - string policy_id = 3; - - // results filters policy results with one of the provided result. - repeated PolicyResult.Result results = 4; - - // parent_type filters policy results with the provided parent_type. - PolicyResult.ParentType parent_type = 5; -} diff --git a/proto/platform/tenant/v1/policy_results.platform_grpc.pb.go b/proto/platform/tenant/v1/policy_results.platform_grpc.pb.go deleted file mode 100644 index 148a00b6..00000000 --- a/proto/platform/tenant/v1/policy_results.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: policy_results.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - PolicyResults_List_FullMethodName = "/chainguard.platform.tenant.PolicyResults/List" -) - -// PolicyResultsClient is the client API for PolicyResults service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type PolicyResultsClient interface { - List(ctx context.Context, in *PolicyResultFilter, opts ...grpc.CallOption) (*PolicyResultList, error) -} - -type policyResultsClient struct { - cc grpc.ClientConnInterface -} - -func NewPolicyResultsClient(cc grpc.ClientConnInterface) PolicyResultsClient { - return &policyResultsClient{cc} -} - -func (c *policyResultsClient) List(ctx context.Context, in *PolicyResultFilter, opts ...grpc.CallOption) (*PolicyResultList, error) { - out := new(PolicyResultList) - err := c.cc.Invoke(ctx, PolicyResults_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// PolicyResultsServer is the server API for PolicyResults service. -// All implementations must embed UnimplementedPolicyResultsServer -// for forward compatibility -type PolicyResultsServer interface { - List(context.Context, *PolicyResultFilter) (*PolicyResultList, error) - mustEmbedUnimplementedPolicyResultsServer() -} - -// UnimplementedPolicyResultsServer must be embedded to have forward compatible implementations. -type UnimplementedPolicyResultsServer struct { -} - -func (UnimplementedPolicyResultsServer) List(context.Context, *PolicyResultFilter) (*PolicyResultList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedPolicyResultsServer) mustEmbedUnimplementedPolicyResultsServer() {} - -// UnsafePolicyResultsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to PolicyResultsServer will -// result in compilation errors. -type UnsafePolicyResultsServer interface { - mustEmbedUnimplementedPolicyResultsServer() -} - -func RegisterPolicyResultsServer(s grpc.ServiceRegistrar, srv PolicyResultsServer) { - s.RegisterService(&PolicyResults_ServiceDesc, srv) -} - -func _PolicyResults_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(PolicyResultFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PolicyResultsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: PolicyResults_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PolicyResultsServer).List(ctx, req.(*PolicyResultFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// PolicyResults_ServiceDesc is the grpc.ServiceDesc for PolicyResults service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var PolicyResults_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.PolicyResults", - HandlerType: (*PolicyResultsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _PolicyResults_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "policy_results.platform.proto", -} diff --git a/proto/platform/tenant/v1/test/mock_client.go b/proto/platform/tenant/v1/test/mock_client.go index 5d4fdc68..8c0ac6d6 100644 --- a/proto/platform/tenant/v1/test/mock_client.go +++ b/proto/platform/tenant/v1/test/mock_client.go @@ -12,13 +12,11 @@ import ( type MockTenantClient struct { OnClose error - RecordsClient MockRecordsClient - RecordContextsClient MockRecordContextsClient - SbomsClient MockSbomsClient - SignaturesClient MockSignaturesClient - PolicyResultsClient MockPolicyResultsClient - VulnReportsClient MockVulnReportsClient - AttestationClient MockAttestationsClientt + RecordsClient MockRecordsClient + SbomsClient MockSbomsClient + SignaturesClient MockSignaturesClient + VulnReportsClient MockVulnReportsClient + AttestationClient MockAttestationsClientt } var _ tenant.Clients = (*MockTenantClient)(nil) @@ -27,10 +25,6 @@ func (m MockTenantClient) Records() tenant.RecordsClient { return &m.RecordsClient } -func (m MockTenantClient) RecordContexts() tenant.RecordContextsClient { - return &m.RecordContextsClient -} - func (m MockTenantClient) Sboms() tenant.SbomsClient { return &m.SbomsClient } @@ -39,10 +33,6 @@ func (m MockTenantClient) Signatures() tenant.SignaturesClient { return &m.SignaturesClient } -func (m MockTenantClient) PolicyResults() tenant.PolicyResultsClient { - return &m.PolicyResultsClient -} - func (m MockTenantClient) VulnReports() tenant.VulnReportsClient { return &m.VulnReportsClient } diff --git a/proto/platform/tenant/v1/test/mock_contexts.go b/proto/platform/tenant/v1/test/mock_contexts.go deleted file mode 100644 index 1bf9a53a..00000000 --- a/proto/platform/tenant/v1/test/mock_contexts.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.RecordContextsClient = (*MockRecordContextsClient)(nil) - -type MockRecordContextsClient struct { - OnList []RecordContextsOnList -} - -type RecordContextsOnList struct { - Given *tenant.RecordContextFilter - List *tenant.RecordContextList - Error error -} - -func (m MockRecordContextsClient) List(_ context.Context, given *tenant.RecordContextFilter, _ ...grpc.CallOption) (*tenant.RecordContextList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} diff --git a/proto/platform/tenant/v1/test/mock_policy_results.go b/proto/platform/tenant/v1/test/mock_policy_results.go deleted file mode 100644 index 790caa73..00000000 --- a/proto/platform/tenant/v1/test/mock_policy_results.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.PolicyResultsClient = (*MockPolicyResultsClient)(nil) - -type MockPolicyResultsClient struct { - OnList []PolicyResultsOnList -} - -type PolicyResultsOnList struct { - Given *tenant.PolicyResultFilter - List *tenant.PolicyResultList - Error error -} - -func (m MockPolicyResultsClient) List(_ context.Context, given *tenant.PolicyResultFilter, _ ...grpc.CallOption) (*tenant.PolicyResultList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} From 774fffcbc38f176903bd78b9ff5fb5ed4f2a1ad9 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Mon, 22 Apr 2024 13:35:49 -0700 Subject: [PATCH 28/41] Export 4a5cb79bb0102a8495186517ddd92f832eb5a4b1 Export: 4a5cb79bb0102a8495186517ddd92f832eb5a4b1 --- events/admission/admission.go | 18 - events/admission/namespace.go | 55 - events/policy/policy.go | 46 - go.mod | 2 +- proto/platform/tenant/v1/clients.go | 9 - proto/platform/tenant/v1/doc.go | 1 - .../platform/tenant/v1/record.platform.pb.go | 1465 ----------------- .../tenant/v1/record.platform.pb.gw.go | 200 --- .../platform/tenant/v1/record.platform.proto | 203 --- .../tenant/v1/record.platform_grpc.pb.go | 109 -- proto/platform/tenant/v1/test/mock_client.go | 5 - proto/platform/tenant/v1/test/mock_records.go | 38 - 12 files changed, 1 insertion(+), 2150 deletions(-) delete mode 100644 events/admission/admission.go delete mode 100644 events/admission/namespace.go delete mode 100644 events/policy/policy.go delete mode 100644 proto/platform/tenant/v1/record.platform.pb.go delete mode 100644 proto/platform/tenant/v1/record.platform.pb.gw.go delete mode 100644 proto/platform/tenant/v1/record.platform.proto delete mode 100644 proto/platform/tenant/v1/record.platform_grpc.pb.go delete mode 100644 proto/platform/tenant/v1/test/mock_records.go diff --git a/events/admission/admission.go b/events/admission/admission.go deleted file mode 100644 index 5da13dcf..00000000 --- a/events/admission/admission.go +++ /dev/null @@ -1,18 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package admission - -import ( - admissionv1 "k8s.io/api/admission/v1" -) - -// ReviewEventType is the cloudevents event type when an admission controller -// is invoked. -const ReviewEventType = "dev.chainguard.admission.v1" - -// ReviewBody is the body of the Chainguard event Occurrence when the event type -// is ReviewEventType. -type ReviewBody admissionv1.AdmissionReview diff --git a/events/admission/namespace.go b/events/admission/namespace.go deleted file mode 100644 index 8e9f3eb0..00000000 --- a/events/admission/namespace.go +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package admission - -import ( - "chainguard.dev/sdk/uidp" -) - -// NamespaceEventType is the cloudevents event type when a namespace's scope -// changes to include or exclude a particular admission controller. -const NamespaceEventType = "dev.chainguard.admission.namespace.v1" - -// Change is an enumeration of the types of changes we will emit events for. -type Change string - -const ( - // CreatedChange is emitted the first time we see a resource - CreatedChange Change = "created" - - // UpdatedChange is emitted when we see a resource change. - UpdatedChange Change = "updated" -) - -// EnforcerState is an enumeration of the possible states that the enforcer may -// be in. -type EnforcerState string - -const ( - // EnabledEnforcerState is emitted when enforcement is enabled. - EnabledEnforcerState EnforcerState = "enabled" - - // DisabledEnforcerState is emitted when enforcement is disabled. - DisabledEnforcerState EnforcerState = "disabled" -) - -// NamespaceBody is the body of the Chainguard event Occurrence when the event -// type is NamespaceEventType. -type NamespaceBody struct { - // Name is the name of the namespace as it appears within the user's cluster - // e.g. kube-system - Name string `json:"name"` - - // ID is the UIDP of the Namespace (whose parent is the Cluster UIDP) - ID uidp.UIDP `json:"id"` - - // Change holds the type of change to the namespace we have observed. - Change Change `json:"change"` - - // EnforcerState holds the state that policy enforcement is in for a - // particular namespace. - EnforcerState EnforcerState `json:"enforcer_state"` -} diff --git a/events/policy/policy.go b/events/policy/policy.go deleted file mode 100644 index f1748aa6..00000000 --- a/events/policy/policy.go +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package policy - -import cloudevents "github.com/cloudevents/sdk-go/v2" - -// ChangedEventType is the cloudevents event type for validation state change for policy. -const ChangedEventType = "dev.chainguard.policy.validation.changed.v1" - -const ( - // NewChange is for new policy state. - NewChange = "new" - // DegradedChange says the policy was passing and now is failing. - DegradedChange = "degraded" - // ImprovedChange says the policy was failing and now is passing. - ImprovedChange = "improved" -) - -// ImagePolicyRecord is policy states for an image in a cluster. -type ImagePolicyRecord struct { - // ClusterID identifies the specific cluster the Request pertains to. - ClusterID string `json:"cluster_id,omitempty"` - // ImageID that this ExistenceRecord belongs to. - ImageID string `json:"image_id,omitempty"` - // LastSeen is the last time we've seen this image_id anywhere on this cluster. - LastSeen *cloudevents.Timestamp `json:"last_seen,omitempty"` - // Policies are a map of policy name to policy state that apply to this image. - Policies map[string]*State `json:"policies,omitempty"` -} - -// State is the state of a policy and how it has changed. -type State struct { - // LastChecked is the time the information was last updated. - LastChecked *cloudevents.Timestamp `json:"last_checked,omitempty"` - // Valid is if the image passes the policy. - Valid bool `json:"valid"` - // Diagnostic holds any diagnostic messages surfaced during the evaluation - // of this policy. - Diagnostic string `json:"diagnostic,omitempty"` - // Change is the kind of change we have seen for this image between checks. - // Can be [Empty, "new", "degraded", "improved"] - Change string `json:"change,omitempty"` -} diff --git a/go.mod b/go.mod index f7736189..29aece63 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,6 @@ require ( google.golang.org/grpc v1.62.1 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 google.golang.org/protobuf v1.33.0 - k8s.io/api v0.29.1 k8s.io/apimachinery v0.29.1 ) @@ -70,6 +69,7 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/api v0.29.1 // indirect k8s.io/klog/v2 v2.120.1 // indirect k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect knative.dev/pkg v0.0.0-20231101193506-b09d4f2a2845 // indirect diff --git a/proto/platform/tenant/v1/clients.go b/proto/platform/tenant/v1/clients.go index fbf13ea7..e3fc43d6 100644 --- a/proto/platform/tenant/v1/clients.go +++ b/proto/platform/tenant/v1/clients.go @@ -19,7 +19,6 @@ import ( ) type Clients interface { - Records() RecordsClient Sboms() SbomsClient Signatures() SignaturesClient VulnReports() VulnReportsClient @@ -53,7 +52,6 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) } return &clients{ - records: NewRecordsClient(conn), sboms: NewSbomsClient(conn), vulnReports: NewVulnReportsClient(conn), signatures: NewSignaturesClient(conn), @@ -64,7 +62,6 @@ func NewClients(ctx context.Context, addr string, token string) (Clients, error) func NewClientsFromConnection(conn *grpc.ClientConn) Clients { return &clients{ - records: NewRecordsClient(conn), sboms: NewSbomsClient(conn), vulnReports: NewVulnReportsClient(conn), signatures: NewSignaturesClient(conn), @@ -73,8 +70,6 @@ func NewClientsFromConnection(conn *grpc.ClientConn) Clients { } type clients struct { - records RecordsClient - sboms SbomsClient signatures SignaturesClient vulnReports VulnReportsClient @@ -82,10 +77,6 @@ type clients struct { conn *grpc.ClientConn } -func (c *clients) Records() RecordsClient { - return c.records -} - func (c *clients) Sboms() SbomsClient { return c.sboms } diff --git a/proto/platform/tenant/v1/doc.go b/proto/platform/tenant/v1/doc.go index fefa86c9..6a950653 100644 --- a/proto/platform/tenant/v1/doc.go +++ b/proto/platform/tenant/v1/doc.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0 // for implementing Tenant interactions for the Console. // //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative signature.platform.proto -//go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. record.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. sbom.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. vuln.platform.proto //go:generate protoc -I . -I ../.. -I ../../.. --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative --grpc-gateway_out=. --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true --grpc-gateway_opt omit_package_doc=true --openapiv2_out=. attestation.platform.proto diff --git a/proto/platform/tenant/v1/record.platform.pb.go b/proto/platform/tenant/v1/record.platform.pb.go deleted file mode 100644 index fccce90c..00000000 --- a/proto/platform/tenant/v1/record.platform.pb.go +++ /dev/null @@ -1,1465 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.33.0 -// protoc v3.21.12 -// source: record.platform.proto - -package v1 - -import ( - _ "chainguard.dev/sdk/proto/annotations" - v1 "chainguard.dev/sdk/proto/platform/common/v1" - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type RecordStatus_Result int32 - -const ( - RecordStatus_UNKNOWN RecordStatus_Result = 0 - RecordStatus_PASS RecordStatus_Result = 1 - RecordStatus_FAIL RecordStatus_Result = 2 -) - -// Enum value maps for RecordStatus_Result. -var ( - RecordStatus_Result_name = map[int32]string{ - 0: "UNKNOWN", - 1: "PASS", - 2: "FAIL", - } - RecordStatus_Result_value = map[string]int32{ - "UNKNOWN": 0, - "PASS": 1, - "FAIL": 2, - } -) - -func (x RecordStatus_Result) Enum() *RecordStatus_Result { - p := new(RecordStatus_Result) - *p = x - return p -} - -func (x RecordStatus_Result) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (RecordStatus_Result) Descriptor() protoreflect.EnumDescriptor { - return file_record_platform_proto_enumTypes[0].Descriptor() -} - -func (RecordStatus_Result) Type() protoreflect.EnumType { - return &file_record_platform_proto_enumTypes[0] -} - -func (x RecordStatus_Result) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use RecordStatus_Result.Descriptor instead. -func (RecordStatus_Result) EnumDescriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{1, 0} -} - -type Context_Ancestry_Role int32 - -const ( - Context_Ancestry_UNKNOWN Context_Ancestry_Role = 0 - Context_Ancestry_BASE Context_Ancestry_Role = 1 - Context_Ancestry_DERIVED Context_Ancestry_Role = 2 -) - -// Enum value maps for Context_Ancestry_Role. -var ( - Context_Ancestry_Role_name = map[int32]string{ - 0: "UNKNOWN", - 1: "BASE", - 2: "DERIVED", - } - Context_Ancestry_Role_value = map[string]int32{ - "UNKNOWN": 0, - "BASE": 1, - "DERIVED": 2, - } -) - -func (x Context_Ancestry_Role) Enum() *Context_Ancestry_Role { - p := new(Context_Ancestry_Role) - *p = x - return p -} - -func (x Context_Ancestry_Role) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Context_Ancestry_Role) Descriptor() protoreflect.EnumDescriptor { - return file_record_platform_proto_enumTypes[1].Descriptor() -} - -func (Context_Ancestry_Role) Type() protoreflect.EnumType { - return &file_record_platform_proto_enumTypes[1] -} - -func (x Context_Ancestry_Role) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Context_Ancestry_Role.Descriptor instead. -func (Context_Ancestry_Role) EnumDescriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{2, 1, 0} -} - -type Context_Variant_Role int32 - -const ( - Context_Variant_UNKNOWN Context_Variant_Role = 0 - Context_Variant_INDEX Context_Variant_Role = 1 - Context_Variant_VARIANT Context_Variant_Role = 2 -) - -// Enum value maps for Context_Variant_Role. -var ( - Context_Variant_Role_name = map[int32]string{ - 0: "UNKNOWN", - 1: "INDEX", - 2: "VARIANT", - } - Context_Variant_Role_value = map[string]int32{ - "UNKNOWN": 0, - "INDEX": 1, - "VARIANT": 2, - } -) - -func (x Context_Variant_Role) Enum() *Context_Variant_Role { - p := new(Context_Variant_Role) - *p = x - return p -} - -func (x Context_Variant_Role) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Context_Variant_Role) Descriptor() protoreflect.EnumDescriptor { - return file_record_platform_proto_enumTypes[2].Descriptor() -} - -func (Context_Variant_Role) Type() protoreflect.EnumType { - return &file_record_platform_proto_enumTypes[2] -} - -func (x Context_Variant_Role) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Context_Variant_Role.Descriptor instead. -func (Context_Variant_Role) EnumDescriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{2, 2, 0} -} - -type Record struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id holds the UIDP for this image's record - Id string `protobuf:"bytes,7,opt,name=id,proto3" json:"id,omitempty"` - // cluster identifies the specific cluster for the record. - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` - // image is the container image for the record. - Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` - // last_seen is the last time we've seen this image anywhere on this cluster. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` - // last_refreshed will hold a PredicateType => Last time it was successfully - // refreshed. - LastRefreshed map[string]*timestamppb.Timestamp `protobuf:"bytes,4,rep,name=last_refreshed,json=lastRefreshed,proto3" json:"last_refreshed,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Sboms []*Sbom `protobuf:"bytes,6,rep,name=sboms,proto3" json:"sboms,omitempty"` - // status is a map from analysis type (e.g. "sbom", "vuln") => RecordStatus to indidate success/failure, - // the analysis timestamp, as well as any diagnostic message in case of failures. - Status map[string]*RecordStatus `protobuf:"bytes,9,rep,name=status,proto3" json:"status,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Record) Reset() { - *x = Record{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Record) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Record) ProtoMessage() {} - -func (x *Record) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Record.ProtoReflect.Descriptor instead. -func (*Record) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{0} -} - -func (x *Record) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Record) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - -func (x *Record) GetImage() string { - if x != nil { - return x.Image - } - return "" -} - -func (x *Record) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -func (x *Record) GetLastRefreshed() map[string]*timestamppb.Timestamp { - if x != nil { - return x.LastRefreshed - } - return nil -} - -func (x *Record) GetSboms() []*Sbom { - if x != nil { - return x.Sboms - } - return nil -} - -func (x *Record) GetStatus() map[string]*RecordStatus { - if x != nil { - return x.Status - } - return nil -} - -type RecordStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LastChecked *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=last_checked,json=lastChecked,proto3" json:"last_checked,omitempty"` - Result RecordStatus_Result `protobuf:"varint,2,opt,name=result,proto3,enum=chainguard.platform.tenant.RecordStatus_Result" json:"result,omitempty"` - Diagnostic string `protobuf:"bytes,3,opt,name=diagnostic,proto3" json:"diagnostic,omitempty"` -} - -func (x *RecordStatus) Reset() { - *x = RecordStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordStatus) ProtoMessage() {} - -func (x *RecordStatus) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecordStatus.ProtoReflect.Descriptor instead. -func (*RecordStatus) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{1} -} - -func (x *RecordStatus) GetLastChecked() *timestamppb.Timestamp { - if x != nil { - return x.LastChecked - } - return nil -} - -func (x *RecordStatus) GetResult() RecordStatus_Result { - if x != nil { - return x.Result - } - return RecordStatus_UNKNOWN -} - -func (x *RecordStatus) GetDiagnostic() string { - if x != nil { - return x.Diagnostic - } - return "" -} - -type Context struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // context_id is a unique ID, output only. - ContextId string `protobuf:"bytes,1,opt,name=context_id,json=contextId,proto3" json:"context_id,omitempty"` - // last_seen is the last time we've seen the image_id in this context. - LastSeen *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` - // Types that are assignable to Context: - // - // *Context_Workload_ - // *Context_Ancestry_ - // *Context_Variant_ - Context isContext_Context `protobuf_oneof:"context"` -} - -func (x *Context) Reset() { - *x = Context{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Context) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Context) ProtoMessage() {} - -func (x *Context) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Context.ProtoReflect.Descriptor instead. -func (*Context) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{2} -} - -func (x *Context) GetContextId() string { - if x != nil { - return x.ContextId - } - return "" -} - -func (x *Context) GetLastSeen() *timestamppb.Timestamp { - if x != nil { - return x.LastSeen - } - return nil -} - -func (m *Context) GetContext() isContext_Context { - if m != nil { - return m.Context - } - return nil -} - -func (x *Context) GetWorkload() *Context_Workload { - if x, ok := x.GetContext().(*Context_Workload_); ok { - return x.Workload - } - return nil -} - -func (x *Context) GetAncestry() *Context_Ancestry { - if x, ok := x.GetContext().(*Context_Ancestry_); ok { - return x.Ancestry - } - return nil -} - -func (x *Context) GetVariant() *Context_Variant { - if x, ok := x.GetContext().(*Context_Variant_); ok { - return x.Variant - } - return nil -} - -type isContext_Context interface { - isContext_Context() -} - -type Context_Workload_ struct { - Workload *Context_Workload `protobuf:"bytes,10,opt,name=workload,proto3,oneof"` -} - -type Context_Ancestry_ struct { - Ancestry *Context_Ancestry `protobuf:"bytes,11,opt,name=ancestry,proto3,oneof"` -} - -type Context_Variant_ struct { - Variant *Context_Variant `protobuf:"bytes,12,opt,name=variant,proto3,oneof"` -} - -func (*Context_Workload_) isContext_Context() {} - -func (*Context_Ancestry_) isContext_Context() {} - -func (*Context_Variant_) isContext_Context() {} - -type Sbom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Packages []*Package `protobuf:"bytes,1,rep,name=packages,proto3" json:"packages,omitempty"` -} - -func (x *Sbom) Reset() { - *x = Sbom{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Sbom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Sbom) ProtoMessage() {} - -func (x *Sbom) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_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 Sbom.ProtoReflect.Descriptor instead. -func (*Sbom) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{3} -} - -func (x *Sbom) GetPackages() []*Package { - if x != nil { - return x.Packages - } - return nil -} - -type Package struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Purl string `protobuf:"bytes,3,opt,name=purl,proto3" json:"purl,omitempty"` -} - -func (x *Package) Reset() { - *x = Package{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Package) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Package) ProtoMessage() {} - -func (x *Package) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Package.ProtoReflect.Descriptor instead. -func (*Package) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{4} -} - -func (x *Package) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Package) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *Package) GetPurl() string { - if x != nil { - return x.Purl - } - return "" -} - -type Policy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // last_checked holds when this policy was last evaluated. - LastChecked *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=last_checked,json=lastChecked,proto3" json:"last_checked,omitempty"` - // valid holds whether the policy evaluation was successful. - Valid bool `protobuf:"varint,2,opt,name=valid,proto3" json:"valid,omitempty"` - // diagnostic holds any messages surfaced by the policy evaluation. - Diagnostic string `protobuf:"bytes,3,opt,name=diagnostic,proto3" json:"diagnostic,omitempty"` -} - -func (x *Policy) Reset() { - *x = Policy{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Policy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Policy) ProtoMessage() {} - -func (x *Policy) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Policy.ProtoReflect.Descriptor instead. -func (*Policy) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{5} -} - -func (x *Policy) GetLastChecked() *timestamppb.Timestamp { - if x != nil { - return x.LastChecked - } - return nil -} - -func (x *Policy) GetValid() bool { - if x != nil { - return x.Valid - } - return false -} - -func (x *Policy) GetDiagnostic() string { - if x != nil { - return x.Diagnostic - } - return "" -} - -type RecordList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Items []*Record `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` -} - -func (x *RecordList) Reset() { - *x = RecordList{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordList) ProtoMessage() {} - -func (x *RecordList) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecordList.ProtoReflect.Descriptor instead. -func (*RecordList) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{6} -} - -func (x *RecordList) GetItems() []*Record { - if x != nil { - return x.Items - } - return nil -} - -type RecordFilter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // id is the exact UID of the record. - Id string `protobuf:"bytes,5,opt,name=id,proto3" json:"id,omitempty"` - // uidp filters records based on their position in the group hierarchy. - Uidp *v1.UIDPFilter `protobuf:"bytes,6,opt,name=uidp,proto3" json:"uidp,omitempty"` - // image is specified if a specific Record is desired. - Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` - // predicate specifies to fetch Records where either there's no - // LastRefreshed for this predicate type, or if it needs to be refreshed. - Predicate string `protobuf:"bytes,2,opt,name=predicate,proto3" json:"predicate,omitempty"` - // cluster is specified if restricting to a given cluster id. - // This field is required. - Cluster string `protobuf:"bytes,3,opt,name=cluster,proto3" json:"cluster,omitempty"` - // active_since is the timestamp after which returned records should have been active. - // This applies to when an image was "last seen". - ActiveSince *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=active_since,json=activeSince,proto3" json:"active_since,omitempty"` -} - -func (x *RecordFilter) Reset() { - *x = RecordFilter{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordFilter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordFilter) ProtoMessage() {} - -func (x *RecordFilter) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecordFilter.ProtoReflect.Descriptor instead. -func (*RecordFilter) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{7} -} - -func (x *RecordFilter) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RecordFilter) GetUidp() *v1.UIDPFilter { - if x != nil { - return x.Uidp - } - return nil -} - -func (x *RecordFilter) GetImage() string { - if x != nil { - return x.Image - } - return "" -} - -func (x *RecordFilter) GetPredicate() string { - if x != nil { - return x.Predicate - } - return "" -} - -func (x *RecordFilter) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - -func (x *RecordFilter) GetActiveSince() *timestamppb.Timestamp { - if x != nil { - return x.ActiveSince - } - return nil -} - -// TODO: Replace with upstream proto messages wherever possible. -type GroupVersionKind struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` -} - -func (x *GroupVersionKind) Reset() { - *x = GroupVersionKind{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GroupVersionKind) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GroupVersionKind) ProtoMessage() {} - -func (x *GroupVersionKind) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GroupVersionKind.ProtoReflect.Descriptor instead. -func (*GroupVersionKind) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{8} -} - -func (x *GroupVersionKind) GetGroup() string { - if x != nil { - return x.Group - } - return "" -} - -func (x *GroupVersionKind) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -func (x *GroupVersionKind) GetKind() string { - if x != nil { - return x.Kind - } - return "" -} - -// Workload contexts are added to existence records that have been -// observed running on a cluster. -type Context_Workload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Kind *GroupVersionKind `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - Uid string `protobuf:"bytes,4,opt,name=uid,proto3" json:"uid,omitempty"` -} - -func (x *Context_Workload) Reset() { - *x = Context_Workload{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Context_Workload) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Context_Workload) ProtoMessage() {} - -func (x *Context_Workload) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Context_Workload.ProtoReflect.Descriptor instead. -func (*Context_Workload) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{2, 0} -} - -func (x *Context_Workload) GetKind() *GroupVersionKind { - if x != nil { - return x.Kind - } - return nil -} - -func (x *Context_Workload) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -func (x *Context_Workload) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Context_Workload) GetUid() string { - if x != nil { - return x.Uid - } - return "" -} - -// Ancestry relationships are added to records when a "base image" -// relationship has been uncovered. This context is added to BOTH -// records with their respective roles. The base image will get -// the Role BASE, and the derivative image will get the Rile DERIVED. -type Context_Ancestry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Role Context_Ancestry_Role `protobuf:"varint,1,opt,name=role,proto3,enum=chainguard.platform.tenant.Context_Ancestry_Role" json:"role,omitempty"` - // The id of the other image's record in this ancestry relationship. - // If our Role is BASE, then this will hold the ID of the DERIVED - // image's record, and vice versa. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` -} - -func (x *Context_Ancestry) Reset() { - *x = Context_Ancestry{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Context_Ancestry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Context_Ancestry) ProtoMessage() {} - -func (x *Context_Ancestry) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Context_Ancestry.ProtoReflect.Descriptor instead. -func (*Context_Ancestry) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{2, 1} -} - -func (x *Context_Ancestry) GetRole() Context_Ancestry_Role { - if x != nil { - return x.Role - } - return Context_Ancestry_UNKNOWN -} - -func (x *Context_Ancestry) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -// Variant relationships are added to records when we find an "index" -// containing multiple different variations (typically os/arch) of the -// same logical image. These are referred to as "OCI Image Index", -// "Docker Manifest List", and occasionally "fat images". This context -// is added to ALL records including the INDEX and all VARIANTs of that -// index. The INDEX will typically contain N contexts carrying the Role -// INDEX, the id of the VARIANT's record, and the version information -// that discriminates that VARIANT from other VARIANTs. The VARIANT -// will typically (but not always!) contain 1 context varrying the Role -// VARIANT, the id of the INDEX's record, and the version information -// that discriminates it among the other VARIANTs in the INDEX. -type Context_Variant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Role Context_Variant_Role `protobuf:"varint,1,opt,name=role,proto3,enum=chainguard.platform.tenant.Context_Variant_Role" json:"role,omitempty"` - // The id of the image index's record linking this - // image (transitively) to the cluster. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - // The version information distinguishing this variant - // from other possible variants of the index. - Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` -} - -func (x *Context_Variant) Reset() { - *x = Context_Variant{} - if protoimpl.UnsafeEnabled { - mi := &file_record_platform_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Context_Variant) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Context_Variant) ProtoMessage() {} - -func (x *Context_Variant) ProtoReflect() protoreflect.Message { - mi := &file_record_platform_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Context_Variant.ProtoReflect.Descriptor instead. -func (*Context_Variant) Descriptor() ([]byte, []int) { - return file_record_platform_proto_rawDescGZIP(), []int{2, 2} -} - -func (x *Context_Variant) GetRole() Context_Variant_Role { - if x != nil { - return x.Role - } - return Context_Variant_UNKNOWN -} - -func (x *Context_Variant) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Context_Variant) GetVersion() string { - if x != nil { - return x.Version - } - return "" -} - -var File_record_platform_proto protoreflect.FileDescriptor - -var file_record_platform_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x16, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x75, - 0x69, 0x64, 0x70, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xae, 0x04, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, - 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, - 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x5c, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, - 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x2e, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x65, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x73, 0x62, 0x6f, 0x6d, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x05, 0x73, 0x62, 0x6f, 0x6d, 0x73, 0x12, 0x46, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x1a, 0x5c, 0x0a, 0x12, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x66, 0x72, - 0x65, 0x73, 0x68, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x75, 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, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, - 0x08, 0x10, 0x09, 0x22, 0xe1, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1e, 0x0a, 0x0a, - 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x64, 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x22, 0x29, 0x0a, 0x06, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x53, 0x53, 0x10, 0x01, 0x12, 0x08, 0x0a, - 0x04, 0x46, 0x41, 0x49, 0x4c, 0x10, 0x02, 0x22, 0x99, 0x06, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x4a, 0x0a, 0x08, 0x77, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x48, 0x00, 0x52, 0x08, 0x77, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x4a, 0x0a, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x74, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x41, - 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x61, 0x6e, 0x63, 0x65, 0x73, - 0x74, 0x72, 0x79, 0x12, 0x47, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x1a, 0x90, 0x01, 0x0a, - 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x40, 0x0a, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x1a, - 0x8d, 0x01, 0x0a, 0x08, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x12, 0x45, 0x0a, 0x04, - 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, - 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x22, 0x2a, 0x0a, 0x04, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x41, 0x53, 0x45, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x52, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x1a, - 0xa6, 0x01, 0x0a, 0x07, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x04, 0x72, - 0x6f, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x04, 0x72, 0x6f, 0x6c, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x2b, 0x0a, 0x04, 0x52, - 0x6f, 0x6c, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x56, - 0x41, 0x52, 0x49, 0x41, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x22, 0x47, 0x0a, 0x04, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x3f, 0x0a, 0x08, 0x70, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x07, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x22, 0x83, 0x01, 0x0a, 0x06, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x69, 0x61, - 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, - 0x69, 0x61, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, - 0x46, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, - 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, - 0x75, 0x69, 0x64, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, - 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x69, 0x6e, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x69, 0x6e, 0x63, - 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x56, 0x0a, 0x10, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, - 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x32, - 0xa1, 0x01, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x04, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, - 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xdb, - 0x04, 0x10, 0x01, 0x42, 0x72, 0x0a, 0x25, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x1a, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2b, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_record_platform_proto_rawDescOnce sync.Once - file_record_platform_proto_rawDescData = file_record_platform_proto_rawDesc -) - -func file_record_platform_proto_rawDescGZIP() []byte { - file_record_platform_proto_rawDescOnce.Do(func() { - file_record_platform_proto_rawDescData = protoimpl.X.CompressGZIP(file_record_platform_proto_rawDescData) - }) - return file_record_platform_proto_rawDescData -} - -var file_record_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_record_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 14) -var file_record_platform_proto_goTypes = []interface{}{ - (RecordStatus_Result)(0), // 0: chainguard.platform.tenant.RecordStatus.Result - (Context_Ancestry_Role)(0), // 1: chainguard.platform.tenant.Context.Ancestry.Role - (Context_Variant_Role)(0), // 2: chainguard.platform.tenant.Context.Variant.Role - (*Record)(nil), // 3: chainguard.platform.tenant.Record - (*RecordStatus)(nil), // 4: chainguard.platform.tenant.RecordStatus - (*Context)(nil), // 5: chainguard.platform.tenant.Context - (*Sbom)(nil), // 6: chainguard.platform.tenant.Sbom - (*Package)(nil), // 7: chainguard.platform.tenant.Package - (*Policy)(nil), // 8: chainguard.platform.tenant.Policy - (*RecordList)(nil), // 9: chainguard.platform.tenant.RecordList - (*RecordFilter)(nil), // 10: chainguard.platform.tenant.RecordFilter - (*GroupVersionKind)(nil), // 11: chainguard.platform.tenant.GroupVersionKind - nil, // 12: chainguard.platform.tenant.Record.LastRefreshedEntry - nil, // 13: chainguard.platform.tenant.Record.StatusEntry - (*Context_Workload)(nil), // 14: chainguard.platform.tenant.Context.Workload - (*Context_Ancestry)(nil), // 15: chainguard.platform.tenant.Context.Ancestry - (*Context_Variant)(nil), // 16: chainguard.platform.tenant.Context.Variant - (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 18: chainguard.platform.common.UIDPFilter -} -var file_record_platform_proto_depIdxs = []int32{ - 17, // 0: chainguard.platform.tenant.Record.last_seen:type_name -> google.protobuf.Timestamp - 12, // 1: chainguard.platform.tenant.Record.last_refreshed:type_name -> chainguard.platform.tenant.Record.LastRefreshedEntry - 6, // 2: chainguard.platform.tenant.Record.sboms:type_name -> chainguard.platform.tenant.Sbom - 13, // 3: chainguard.platform.tenant.Record.status:type_name -> chainguard.platform.tenant.Record.StatusEntry - 17, // 4: chainguard.platform.tenant.RecordStatus.last_checked:type_name -> google.protobuf.Timestamp - 0, // 5: chainguard.platform.tenant.RecordStatus.result:type_name -> chainguard.platform.tenant.RecordStatus.Result - 17, // 6: chainguard.platform.tenant.Context.last_seen:type_name -> google.protobuf.Timestamp - 14, // 7: chainguard.platform.tenant.Context.workload:type_name -> chainguard.platform.tenant.Context.Workload - 15, // 8: chainguard.platform.tenant.Context.ancestry:type_name -> chainguard.platform.tenant.Context.Ancestry - 16, // 9: chainguard.platform.tenant.Context.variant:type_name -> chainguard.platform.tenant.Context.Variant - 7, // 10: chainguard.platform.tenant.Sbom.packages:type_name -> chainguard.platform.tenant.Package - 17, // 11: chainguard.platform.tenant.Policy.last_checked:type_name -> google.protobuf.Timestamp - 3, // 12: chainguard.platform.tenant.RecordList.items:type_name -> chainguard.platform.tenant.Record - 18, // 13: chainguard.platform.tenant.RecordFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 17, // 14: chainguard.platform.tenant.RecordFilter.active_since:type_name -> google.protobuf.Timestamp - 17, // 15: chainguard.platform.tenant.Record.LastRefreshedEntry.value:type_name -> google.protobuf.Timestamp - 4, // 16: chainguard.platform.tenant.Record.StatusEntry.value:type_name -> chainguard.platform.tenant.RecordStatus - 11, // 17: chainguard.platform.tenant.Context.Workload.kind:type_name -> chainguard.platform.tenant.GroupVersionKind - 1, // 18: chainguard.platform.tenant.Context.Ancestry.role:type_name -> chainguard.platform.tenant.Context.Ancestry.Role - 2, // 19: chainguard.platform.tenant.Context.Variant.role:type_name -> chainguard.platform.tenant.Context.Variant.Role - 10, // 20: chainguard.platform.tenant.Records.List:input_type -> chainguard.platform.tenant.RecordFilter - 9, // 21: chainguard.platform.tenant.Records.List:output_type -> chainguard.platform.tenant.RecordList - 21, // [21:22] is the sub-list for method output_type - 20, // [20:21] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name -} - -func init() { file_record_platform_proto_init() } -func file_record_platform_proto_init() { - if File_record_platform_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_record_platform_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Record); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Context); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Sbom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Package); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Policy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordFilter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GroupVersionKind); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Context_Workload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Context_Ancestry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_record_platform_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Context_Variant); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_record_platform_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*Context_Workload_)(nil), - (*Context_Ancestry_)(nil), - (*Context_Variant_)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_record_platform_proto_rawDesc, - NumEnums: 3, - NumMessages: 14, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_record_platform_proto_goTypes, - DependencyIndexes: file_record_platform_proto_depIdxs, - EnumInfos: file_record_platform_proto_enumTypes, - MessageInfos: file_record_platform_proto_msgTypes, - }.Build() - File_record_platform_proto = out.File - file_record_platform_proto_rawDesc = nil - file_record_platform_proto_goTypes = nil - file_record_platform_proto_depIdxs = nil -} diff --git a/proto/platform/tenant/v1/record.platform.pb.gw.go b/proto/platform/tenant/v1/record.platform.pb.gw.go deleted file mode 100644 index 043b5665..00000000 --- a/proto/platform/tenant/v1/record.platform.pb.gw.go +++ /dev/null @@ -1,200 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: record.platform.proto - -package v1 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -var ( - filter_Records_List_0 = &utilities.DoubleArray{Encoding: map[string]int{"cluster": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} -) - -func request_Records_List_0(ctx context.Context, marshaler runtime.Marshaler, client RecordsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RecordFilter - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["cluster"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cluster") - } - - protoReq.Cluster, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cluster", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Records_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.List(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Records_List_0(ctx context.Context, marshaler runtime.Marshaler, server RecordsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq RecordFilter - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["cluster"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "cluster") - } - - protoReq.Cluster, err = runtime.String(val) - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "cluster", err) - } - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Records_List_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.List(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterRecordsHandlerServer registers the http handlers for service Records to "mux". -// UnaryRPC :call RecordsServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterRecordsHandlerFromEndpoint instead. -func RegisterRecordsHandlerServer(ctx context.Context, mux *runtime.ServeMux, server RecordsServer) error { - - mux.Handle("GET", pattern_Records_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.tenant.Records/List", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{cluster}/records")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Records_List_0(ctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Records_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterRecordsHandlerFromEndpoint is same as RegisterRecordsHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterRecordsHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterRecordsHandler(ctx, mux, conn) -} - -// RegisterRecordsHandler registers the http handlers for service Records to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterRecordsHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterRecordsHandlerClient(ctx, mux, NewRecordsClient(conn)) -} - -// RegisterRecordsHandlerClient registers the http handlers for service Records -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "RecordsClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "RecordsClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "RecordsClient" to call the correct interceptors. -func RegisterRecordsHandlerClient(ctx context.Context, mux *runtime.ServeMux, client RecordsClient) error { - - mux.Handle("GET", pattern_Records_List_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.tenant.Records/List", runtime.WithHTTPPathPattern("/tenant/v1/clusters/{cluster}/records")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Records_List_0(ctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Records_List_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_Records_List_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"tenant", "v1", "clusters", "cluster", "records"}, "")) -) - -var ( - forward_Records_List_0 = runtime.ForwardResponseMessage -) diff --git a/proto/platform/tenant/v1/record.platform.proto b/proto/platform/tenant/v1/record.platform.proto deleted file mode 100644 index 81a0dbf7..00000000 --- a/proto/platform/tenant/v1/record.platform.proto +++ /dev/null @@ -1,203 +0,0 @@ -syntax = "proto3"; - -option go_package = "chainguard.dev/sdk/proto/platform/tenant/v1"; -option java_multiple_files = true; -option java_package = "dev.chainguard.sdk.platform.tenant.v1"; -option java_outer_classname = "PlatformTenantClusterProto"; - -package chainguard.platform.tenant; - -import "google/api/annotations.proto"; -import "google/protobuf/timestamp.proto"; -import "annotations/auth.proto"; -import "platform/common/v1/uidp.platform.proto"; - -service Records { - rpc List(RecordFilter) returns (RecordList) { - option (google.api.http) = { - // TODO: I am not sure this inner cluster will work with our id. Gotta test. - get: "/tenant/v1/clusters/{cluster}/records" - }; - option (chainguard.annotations.iam) = { - enabled: { - capabilities: [CAP_TENANT_RECORDS_LIST] - unscoped: true - } - }; - } -} - -message Record { - // id holds the UIDP for this image's record - string id = 7; - - // cluster identifies the specific cluster for the record. - string cluster = 1; - - // image is the container image for the record. - string image = 2; - - // last_seen is the last time we've seen this image anywhere on this cluster. - google.protobuf.Timestamp last_seen = 3; - - // last_refreshed will hold a PredicateType => Last time it was successfully - // refreshed. - map last_refreshed = 4; - - // This field was retired and is no longer served. - reserved 5; - - repeated Sbom sboms = 6; - - // This field was retired and is no longer served. - reserved 8; - - // status is a map from analysis type (e.g. "sbom", "vuln") => RecordStatus to indidate success/failure, - // the analysis timestamp, as well as any diagnostic message in case of failures. - map status = 9; -} - -message RecordStatus { - google.protobuf.Timestamp last_checked = 1; - Result result = 2; - string diagnostic = 3; - - enum Result { - UNKNOWN = 0; - PASS = 1; - FAIL = 2; - } -} - -message Context { - // context_id is a unique ID, output only. - string context_id = 1; - - // last_seen is the last time we've seen the image_id in this context. - google.protobuf.Timestamp last_seen = 2; - - oneof context { - Workload workload = 10; - Ancestry ancestry = 11; - Variant variant = 12; - } - - // Workload contexts are added to existence records that have been - // observed running on a cluster. - message Workload { - GroupVersionKind kind = 1; - string namespace = 2; - string name = 3; - string uid = 4; - } - - // Ancestry relationships are added to records when a "base image" - // relationship has been uncovered. This context is added to BOTH - // records with their respective roles. The base image will get - // the Role BASE, and the derivative image will get the Rile DERIVED. - message Ancestry { - Role role = 1; - - // The id of the other image's record in this ancestry relationship. - // If our Role is BASE, then this will hold the ID of the DERIVED - // image's record, and vice versa. - string id = 2; - - enum Role { - UNKNOWN = 0; - BASE = 1; - DERIVED = 2; - } - } - - // Variant relationships are added to records when we find an "index" - // containing multiple different variations (typically os/arch) of the - // same logical image. These are referred to as "OCI Image Index", - // "Docker Manifest List", and occasionally "fat images". This context - // is added to ALL records including the INDEX and all VARIANTs of that - // index. The INDEX will typically contain N contexts carrying the Role - // INDEX, the id of the VARIANT's record, and the version information - // that discriminates that VARIANT from other VARIANTs. The VARIANT - // will typically (but not always!) contain 1 context varrying the Role - // VARIANT, the id of the INDEX's record, and the version information - // that discriminates it among the other VARIANTs in the INDEX. - message Variant { - Role role = 1; - - // The id of the image index's record linking this - // image (transitively) to the cluster. - string id = 2; - - // The version information distinguishing this variant - // from other possible variants of the index. - string version = 3; - - enum Role { - UNKNOWN = 0; - INDEX = 1; - VARIANT = 2; - } - } -} - -message Sbom { - repeated Package packages = 1; -} - -message Package { - string name = 1; - string version = 2; - string purl = 3; -} - -message Policy { - // last_checked holds when this policy was last evaluated. - google.protobuf.Timestamp last_checked = 1; - - // valid holds whether the policy evaluation was successful. - bool valid = 2; - - // diagnostic holds any messages surfaced by the policy evaluation. - string diagnostic = 3; - - reserved 4; -} - -message RecordList { - repeated Record items = 1; -} - -message RecordFilter { - // id is the exact UID of the record. - string id = 5; - - // uidp filters records based on their position in the group hierarchy. - chainguard.platform.common.UIDPFilter uidp = 6; - - // image is specified if a specific Record is desired. - string image = 1; - - // predicate specifies to fetch Records where either there's no - // LastRefreshed for this predicate type, or if it needs to be refreshed. - string predicate = 2; - - // cluster is specified if restricting to a given cluster id. - // This field is required. - string cluster = 3; - - // active_since is the timestamp after which returned records should have been active. - // This applies to when an image was "last seen". - google.protobuf.Timestamp active_since = 4; - - // This field was retired and is no longer served. - reserved 7; - - // Next ID: 8 -} - -// TODO: Replace with upstream proto messages wherever possible. -message GroupVersionKind { - string group = 1; - string version = 2; - string kind = 3; -} diff --git a/proto/platform/tenant/v1/record.platform_grpc.pb.go b/proto/platform/tenant/v1/record.platform_grpc.pb.go deleted file mode 100644 index d94b1499..00000000 --- a/proto/platform/tenant/v1/record.platform_grpc.pb.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. -// versions: -// - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 -// source: record.platform.proto - -package v1 - -import ( - context "context" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" -) - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 - -const ( - Records_List_FullMethodName = "/chainguard.platform.tenant.Records/List" -) - -// RecordsClient is the client API for Records service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. -type RecordsClient interface { - List(ctx context.Context, in *RecordFilter, opts ...grpc.CallOption) (*RecordList, error) -} - -type recordsClient struct { - cc grpc.ClientConnInterface -} - -func NewRecordsClient(cc grpc.ClientConnInterface) RecordsClient { - return &recordsClient{cc} -} - -func (c *recordsClient) List(ctx context.Context, in *RecordFilter, opts ...grpc.CallOption) (*RecordList, error) { - out := new(RecordList) - err := c.cc.Invoke(ctx, Records_List_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RecordsServer is the server API for Records service. -// All implementations must embed UnimplementedRecordsServer -// for forward compatibility -type RecordsServer interface { - List(context.Context, *RecordFilter) (*RecordList, error) - mustEmbedUnimplementedRecordsServer() -} - -// UnimplementedRecordsServer must be embedded to have forward compatible implementations. -type UnimplementedRecordsServer struct { -} - -func (UnimplementedRecordsServer) List(context.Context, *RecordFilter) (*RecordList, error) { - return nil, status.Errorf(codes.Unimplemented, "method List not implemented") -} -func (UnimplementedRecordsServer) mustEmbedUnimplementedRecordsServer() {} - -// UnsafeRecordsServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to RecordsServer will -// result in compilation errors. -type UnsafeRecordsServer interface { - mustEmbedUnimplementedRecordsServer() -} - -func RegisterRecordsServer(s grpc.ServiceRegistrar, srv RecordsServer) { - s.RegisterService(&Records_ServiceDesc, srv) -} - -func _Records_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RecordFilter) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RecordsServer).List(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Records_List_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RecordsServer).List(ctx, req.(*RecordFilter)) - } - return interceptor(ctx, in, info, handler) -} - -// Records_ServiceDesc is the grpc.ServiceDesc for Records service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var Records_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "chainguard.platform.tenant.Records", - HandlerType: (*RecordsServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "List", - Handler: _Records_List_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "record.platform.proto", -} diff --git a/proto/platform/tenant/v1/test/mock_client.go b/proto/platform/tenant/v1/test/mock_client.go index 8c0ac6d6..d1777b69 100644 --- a/proto/platform/tenant/v1/test/mock_client.go +++ b/proto/platform/tenant/v1/test/mock_client.go @@ -12,7 +12,6 @@ import ( type MockTenantClient struct { OnClose error - RecordsClient MockRecordsClient SbomsClient MockSbomsClient SignaturesClient MockSignaturesClient VulnReportsClient MockVulnReportsClient @@ -21,10 +20,6 @@ type MockTenantClient struct { var _ tenant.Clients = (*MockTenantClient)(nil) -func (m MockTenantClient) Records() tenant.RecordsClient { - return &m.RecordsClient -} - func (m MockTenantClient) Sboms() tenant.SbomsClient { return &m.SbomsClient } diff --git a/proto/platform/tenant/v1/test/mock_records.go b/proto/platform/tenant/v1/test/mock_records.go deleted file mode 100644 index c2ae2a64..00000000 --- a/proto/platform/tenant/v1/test/mock_records.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2022 Chainguard, Inc. -SPDX-License-Identifier: Apache-2.0 -*/ - -package test - -import ( - "context" - "fmt" - - "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" - "google.golang.org/protobuf/testing/protocmp" - - tenant "chainguard.dev/sdk/proto/platform/tenant/v1" -) - -var _ tenant.RecordsClient = (*MockRecordsClient)(nil) - -type MockRecordsClient struct { - OnList []RecordsOnList -} - -type RecordsOnList struct { - Given *tenant.RecordFilter - List *tenant.RecordList - Error error -} - -func (m MockRecordsClient) List(_ context.Context, given *tenant.RecordFilter, _ ...grpc.CallOption) (*tenant.RecordList, error) { - for _, o := range m.OnList { - if cmp.Equal(o.Given, given, protocmp.Transform()) { - return o.List, o.Error - } - } - return nil, fmt.Errorf("mock not found for %v", given) -} From f27d7e37f16565805d4d1d0af97627558d6b66f6 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Thu, 25 Apr 2024 09:51:56 -0700 Subject: [PATCH 29/41] Export 166b2dd07676ba1d5003763e4da015d83340a5d9 Export: 166b2dd07676ba1d5003763e4da015d83340a5d9 --- go.mod | 18 ++++++++---------- go.sum | 32 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/go.mod b/go.mod index 29aece63..01999ae3 100644 --- a/go.mod +++ b/go.mod @@ -17,10 +17,10 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/russross/blackfriday/v2 v2.1.0 go.uber.org/zap v1.27.0 - golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 + golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb golang.org/x/oauth2 v0.19.0 - google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 - google.golang.org/grpc v1.62.1 + google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c + google.golang.org/grpc v1.63.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 google.golang.org/protobuf v1.33.0 k8s.io/apimachinery v0.29.1 @@ -37,7 +37,6 @@ require ( github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.4 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/css v1.0.0 // indirect @@ -53,19 +52,18 @@ require ( github.com/prometheus/common v0.51.1 // indirect github.com/prometheus/procfs v0.12.0 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/stretchr/testify v1.9.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect + go.opentelemetry.io/otel v1.26.0 // indirect + go.opentelemetry.io/otel/metric v1.26.0 // indirect + go.opentelemetry.io/otel/trace v1.26.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.22.0 // indirect - golang.org/x/net v0.23.0 // indirect + golang.org/x/net v0.24.0 // indirect golang.org/x/sys v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.19.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index e0169a6c..3d01b98d 100644 --- a/go.sum +++ b/go.sum @@ -140,12 +140,12 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= @@ -167,8 +167,8 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 h1:mchzmB1XO2pMaKFRqk/+MV3mgGG96aqaPXaMifQU47w= -golang.org/x/exp v0.0.0-20231108232855-2478ac86f678/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb h1:c0vyKkb6yr3KR7jEfJaOSv4lG7xPkbN6r52aJz1d8a8= +golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -192,8 +192,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= @@ -257,18 +257,18 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 h1:oqta3O3AnlWbmIE3bFnWbu4bRxZjfbWCp0cKSuZh01E= -google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c h1:kaI7oewGK5YnVwj+Y+EJBO/YN1ht8iTL9XkFHtVZLsc= +google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= -google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= From a7579575a1a3216bf5f019179b033ebbdc9dd6d1 Mon Sep 17 00:00:00 2001 From: Jenny Shi Date: Mon, 29 Apr 2024 13:16:25 -0400 Subject: [PATCH 30/41] Export d1c60e43b3b1086196d5d4bd8001182242bd8de4 Export: d1c60e43b3b1086196d5d4bd8001182242bd8de4 --- .../registry/v1/registry.platform.pb.go | 1301 +++++++++++------ .../registry/v1/registry.platform.pb.gw.go | 139 ++ .../registry/v1/registry.platform.proto | 51 + .../registry/v1/registry.platform_grpc.pb.go | 37 + proto/platform/registry/v1/test/registry.go | 16 + 5 files changed, 1088 insertions(+), 456 deletions(-) diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index 46cc6135..c7785e57 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -1171,6 +1171,125 @@ func (x *ChangedImageConfig) GetVolumes() *ChangedImageConfig_VolumeDiff { return nil } +type ImageConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User defines the username or UID which the process in the container should run as. + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + ExposedPorts map[string]*ImageConfig_ExposedPort `protobuf:"bytes,2,rep,name=exposed_ports,json=exposedPorts,proto3" json:"exposed_ports,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Env is a list of environment variables to be used in a container. + Env []string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty"` + // Entrypoint defines a list of arguments to use as the command to execute when the container starts. + Entrypoint []string `protobuf:"bytes,4,rep,name=entrypoint,proto3" json:"entrypoint,omitempty"` + // Cmd defines the default arguments to the entrypoint of the container. + Cmd []string `protobuf:"bytes,5,rep,name=cmd,proto3" json:"cmd,omitempty"` + // Volumes is a set of directories describing where the process is likely write data specific to a container instance. + Volumes map[string]*ImageConfig_Volume `protobuf:"bytes,6,rep,name=volumes,proto3" json:"volumes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // WorkingDir sets the current working directory of the entrypoint process in the container. + WorkingDir string `protobuf:"bytes,7,opt,name=working_dir,json=workingDir,proto3" json:"working_dir,omitempty"` + // Labels contains arbitrary metadata for the container. + Labels map[string]string `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // StopSignal contains the system call signal that will be sent to the container to exit. + StopSignal string `protobuf:"bytes,9,opt,name=stop_signal,json=stopSignal,proto3" json:"stop_signal,omitempty"` +} + +func (x *ImageConfig) Reset() { + *x = ImageConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageConfig) ProtoMessage() {} + +func (x *ImageConfig) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImageConfig.ProtoReflect.Descriptor instead. +func (*ImageConfig) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{17} +} + +func (x *ImageConfig) GetUser() string { + if x != nil { + return x.User + } + return "" +} + +func (x *ImageConfig) GetExposedPorts() map[string]*ImageConfig_ExposedPort { + if x != nil { + return x.ExposedPorts + } + return nil +} + +func (x *ImageConfig) GetEnv() []string { + if x != nil { + return x.Env + } + return nil +} + +func (x *ImageConfig) GetEntrypoint() []string { + if x != nil { + return x.Entrypoint + } + return nil +} + +func (x *ImageConfig) GetCmd() []string { + if x != nil { + return x.Cmd + } + return nil +} + +func (x *ImageConfig) GetVolumes() map[string]*ImageConfig_Volume { + if x != nil { + return x.Volumes + } + return nil +} + +func (x *ImageConfig) GetWorkingDir() string { + if x != nil { + return x.WorkingDir + } + return "" +} + +func (x *ImageConfig) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *ImageConfig) GetStopSignal() string { + if x != nil { + return x.StopSignal + } + return "" +} + type PackagesDiff struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1184,7 +1303,7 @@ type PackagesDiff struct { func (x *PackagesDiff) Reset() { *x = PackagesDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[17] + mi := &file_registry_platform_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1197,7 +1316,7 @@ func (x *PackagesDiff) String() string { func (*PackagesDiff) ProtoMessage() {} func (x *PackagesDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[17] + mi := &file_registry_platform_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1210,7 +1329,7 @@ func (x *PackagesDiff) ProtoReflect() protoreflect.Message { // Deprecated: Use PackagesDiff.ProtoReflect.Descriptor instead. func (*PackagesDiff) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{17} + return file_registry_platform_proto_rawDescGZIP(), []int{18} } func (x *PackagesDiff) GetAdded() []*PackageReference { @@ -1246,7 +1365,7 @@ type VersionReference struct { func (x *VersionReference) Reset() { *x = VersionReference{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[18] + mi := &file_registry_platform_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1259,7 +1378,7 @@ func (x *VersionReference) String() string { func (*VersionReference) ProtoMessage() {} func (x *VersionReference) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[18] + mi := &file_registry_platform_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1272,7 +1391,7 @@ func (x *VersionReference) ProtoReflect() protoreflect.Message { // Deprecated: Use VersionReference.ProtoReflect.Descriptor instead. func (*VersionReference) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{18} + return file_registry_platform_proto_rawDescGZIP(), []int{19} } func (x *VersionReference) GetVersion() string { @@ -1303,7 +1422,7 @@ type PackageReference struct { func (x *PackageReference) Reset() { *x = PackageReference{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[19] + mi := &file_registry_platform_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1316,7 +1435,7 @@ func (x *PackageReference) String() string { func (*PackageReference) ProtoMessage() {} func (x *PackageReference) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[19] + mi := &file_registry_platform_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1329,7 +1448,7 @@ func (x *PackageReference) ProtoReflect() protoreflect.Message { // Deprecated: Use PackageReference.ProtoReflect.Descriptor instead. func (*PackageReference) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{19} + return file_registry_platform_proto_rawDescGZIP(), []int{20} } func (x *PackageReference) GetName() string { @@ -1366,7 +1485,7 @@ type VulnerabilitiesDiff struct { func (x *VulnerabilitiesDiff) Reset() { *x = VulnerabilitiesDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[20] + mi := &file_registry_platform_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1379,7 +1498,7 @@ func (x *VulnerabilitiesDiff) String() string { func (*VulnerabilitiesDiff) ProtoMessage() {} func (x *VulnerabilitiesDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[20] + mi := &file_registry_platform_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1392,7 +1511,7 @@ func (x *VulnerabilitiesDiff) ProtoReflect() protoreflect.Message { // Deprecated: Use VulnerabilitiesDiff.ProtoReflect.Descriptor instead. func (*VulnerabilitiesDiff) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{20} + return file_registry_platform_proto_rawDescGZIP(), []int{21} } func (x *VulnerabilitiesDiff) GetAdded() []*VulnerabilityReference { @@ -1430,7 +1549,7 @@ type ScannerMetadata struct { func (x *ScannerMetadata) Reset() { *x = ScannerMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[21] + mi := &file_registry_platform_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1443,7 +1562,7 @@ func (x *ScannerMetadata) String() string { func (*ScannerMetadata) ProtoMessage() {} func (x *ScannerMetadata) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[21] + mi := &file_registry_platform_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1456,7 +1575,7 @@ func (x *ScannerMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ScannerMetadata.ProtoReflect.Descriptor instead. func (*ScannerMetadata) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{21} + return file_registry_platform_proto_rawDescGZIP(), []int{22} } func (x *ScannerMetadata) GetDigest() string { @@ -1501,7 +1620,7 @@ type VulnerabilityReference struct { func (x *VulnerabilityReference) Reset() { *x = VulnerabilityReference{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[22] + mi := &file_registry_platform_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1514,7 +1633,7 @@ func (x *VulnerabilityReference) String() string { func (*VulnerabilityReference) ProtoMessage() {} func (x *VulnerabilityReference) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[22] + mi := &file_registry_platform_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1527,7 +1646,7 @@ func (x *VulnerabilityReference) ProtoReflect() protoreflect.Message { // Deprecated: Use VulnerabilityReference.ProtoReflect.Descriptor instead. func (*VulnerabilityReference) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{22} + return file_registry_platform_proto_rawDescGZIP(), []int{23} } func (x *VulnerabilityReference) GetId() string { @@ -1566,7 +1685,7 @@ type DiffImageRequest struct { func (x *DiffImageRequest) Reset() { *x = DiffImageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[23] + mi := &file_registry_platform_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1579,7 +1698,7 @@ func (x *DiffImageRequest) String() string { func (*DiffImageRequest) ProtoMessage() {} func (x *DiffImageRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[23] + mi := &file_registry_platform_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1592,7 +1711,7 @@ func (x *DiffImageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DiffImageRequest.ProtoReflect.Descriptor instead. func (*DiffImageRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{23} + return file_registry_platform_proto_rawDescGZIP(), []int{24} } func (x *DiffImageRequest) GetRepoId() string { @@ -1630,7 +1749,7 @@ type SbomRequest struct { func (x *SbomRequest) Reset() { *x = SbomRequest{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[24] + mi := &file_registry_platform_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1643,7 +1762,7 @@ func (x *SbomRequest) String() string { func (*SbomRequest) ProtoMessage() {} func (x *SbomRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[24] + mi := &file_registry_platform_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1656,7 +1775,7 @@ func (x *SbomRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SbomRequest.ProtoReflect.Descriptor instead. func (*SbomRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{24} + return file_registry_platform_proto_rawDescGZIP(), []int{25} } func (x *SbomRequest) GetRepoId() string { @@ -1673,6 +1792,72 @@ func (x *SbomRequest) GetDigest() string { return "" } +type ImageConfigRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The UIDP of the image repo to get config for. + RepoId string `protobuf:"bytes,1,opt,name=repo_id,json=repoId,proto3" json:"repo_id,omitempty"` + // The digest of the image to get config for. + Digest string `protobuf:"bytes,2,opt,name=digest,proto3" json:"digest,omitempty"` + // The architecture to get config for. + Arch string `protobuf:"bytes,3,opt,name=arch,proto3" json:"arch,omitempty"` +} + +func (x *ImageConfigRequest) Reset() { + *x = ImageConfigRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageConfigRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageConfigRequest) ProtoMessage() {} + +func (x *ImageConfigRequest) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[26] + 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 ImageConfigRequest.ProtoReflect.Descriptor instead. +func (*ImageConfigRequest) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{26} +} + +func (x *ImageConfigRequest) GetRepoId() string { + if x != nil { + return x.RepoId + } + return "" +} + +func (x *ImageConfigRequest) GetDigest() string { + if x != nil { + return x.Digest + } + return "" +} + +func (x *ImageConfigRequest) GetArch() string { + if x != nil { + return x.Arch + } + return "" +} + type VulnReportRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1687,7 +1872,7 @@ type VulnReportRequest struct { func (x *VulnReportRequest) Reset() { *x = VulnReportRequest{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[25] + mi := &file_registry_platform_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1700,7 +1885,7 @@ func (x *VulnReportRequest) String() string { func (*VulnReportRequest) ProtoMessage() {} func (x *VulnReportRequest) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[25] + mi := &file_registry_platform_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1713,7 +1898,7 @@ func (x *VulnReportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VulnReportRequest.ProtoReflect.Descriptor instead. func (*VulnReportRequest) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{25} + return file_registry_platform_proto_rawDescGZIP(), []int{27} } func (x *VulnReportRequest) GetRepoId() string { @@ -1744,7 +1929,7 @@ type ManifestMetadataIndexFilter struct { func (x *ManifestMetadataIndexFilter) Reset() { *x = ManifestMetadataIndexFilter{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[26] + mi := &file_registry_platform_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1757,7 +1942,7 @@ func (x *ManifestMetadataIndexFilter) String() string { func (*ManifestMetadataIndexFilter) ProtoMessage() {} func (x *ManifestMetadataIndexFilter) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[26] + mi := &file_registry_platform_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1770,7 +1955,7 @@ func (x *ManifestMetadataIndexFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use ManifestMetadataIndexFilter.ProtoReflect.Descriptor instead. func (*ManifestMetadataIndexFilter) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{26} + return file_registry_platform_proto_rawDescGZIP(), []int{28} } func (x *ManifestMetadataIndexFilter) GetDigest() string { @@ -1802,7 +1987,7 @@ type ManifestMetadataFilterEntry struct { func (x *ManifestMetadataFilterEntry) Reset() { *x = ManifestMetadataFilterEntry{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[27] + mi := &file_registry_platform_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1815,7 +2000,7 @@ func (x *ManifestMetadataFilterEntry) String() string { func (*ManifestMetadataFilterEntry) ProtoMessage() {} func (x *ManifestMetadataFilterEntry) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[27] + mi := &file_registry_platform_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1828,7 +2013,7 @@ func (x *ManifestMetadataFilterEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use ManifestMetadataFilterEntry.ProtoReflect.Descriptor instead. func (*ManifestMetadataFilterEntry) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{27} + return file_registry_platform_proto_rawDescGZIP(), []int{29} } func (m *ManifestMetadataFilterEntry) GetFilter() isManifestMetadataFilterEntry_Filter { @@ -1885,7 +2070,7 @@ type ManifestMetadataFilter struct { func (x *ManifestMetadataFilter) Reset() { *x = ManifestMetadataFilter{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[28] + mi := &file_registry_platform_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1898,7 +2083,7 @@ func (x *ManifestMetadataFilter) String() string { func (*ManifestMetadataFilter) ProtoMessage() {} func (x *ManifestMetadataFilter) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[28] + mi := &file_registry_platform_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1911,7 +2096,7 @@ func (x *ManifestMetadataFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use ManifestMetadataFilter.ProtoReflect.Descriptor instead. func (*ManifestMetadataFilter) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{28} + return file_registry_platform_proto_rawDescGZIP(), []int{30} } func (x *ManifestMetadataFilter) GetRepoId() string { @@ -1948,7 +2133,7 @@ type PkgMetadata struct { func (x *PkgMetadata) Reset() { *x = PkgMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[29] + mi := &file_registry_platform_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1961,7 +2146,7 @@ func (x *PkgMetadata) String() string { func (*PkgMetadata) ProtoMessage() {} func (x *PkgMetadata) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[29] + mi := &file_registry_platform_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1974,7 +2159,7 @@ func (x *PkgMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use PkgMetadata.ProtoReflect.Descriptor instead. func (*PkgMetadata) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{29} + return file_registry_platform_proto_rawDescGZIP(), []int{31} } func (x *PkgMetadata) GetPurl() string { @@ -2026,7 +2211,7 @@ type ManifestMetadata struct { func (x *ManifestMetadata) Reset() { *x = ManifestMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[30] + mi := &file_registry_platform_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2039,7 +2224,7 @@ func (x *ManifestMetadata) String() string { func (*ManifestMetadata) ProtoMessage() {} func (x *ManifestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[30] + mi := &file_registry_platform_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2052,7 +2237,7 @@ func (x *ManifestMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ManifestMetadata.ProtoReflect.Descriptor instead. func (*ManifestMetadata) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{30} + return file_registry_platform_proto_rawDescGZIP(), []int{32} } func (x *ManifestMetadata) GetDigest() string { @@ -2080,7 +2265,7 @@ type ManifestMetadataList struct { func (x *ManifestMetadataList) Reset() { *x = ManifestMetadataList{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[31] + mi := &file_registry_platform_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2093,7 +2278,7 @@ func (x *ManifestMetadataList) String() string { func (*ManifestMetadataList) ProtoMessage() {} func (x *ManifestMetadataList) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[31] + mi := &file_registry_platform_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2106,7 +2291,7 @@ func (x *ManifestMetadataList) ProtoReflect() protoreflect.Message { // Deprecated: Use ManifestMetadataList.ProtoReflect.Descriptor instead. func (*ManifestMetadataList) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{31} + return file_registry_platform_proto_rawDescGZIP(), []int{33} } func (x *ManifestMetadataList) GetItems() []*ManifestMetadata { @@ -2128,7 +2313,7 @@ type ChangedImageConfig_ChangedUser struct { func (x *ChangedImageConfig_ChangedUser) Reset() { *x = ChangedImageConfig_ChangedUser{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[32] + mi := &file_registry_platform_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2141,7 +2326,7 @@ func (x *ChangedImageConfig_ChangedUser) String() string { func (*ChangedImageConfig_ChangedUser) ProtoMessage() {} func (x *ChangedImageConfig_ChangedUser) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[32] + mi := &file_registry_platform_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2183,7 +2368,7 @@ type ChangedImageConfig_ChangedWorkingDir struct { func (x *ChangedImageConfig_ChangedWorkingDir) Reset() { *x = ChangedImageConfig_ChangedWorkingDir{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[33] + mi := &file_registry_platform_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2196,7 +2381,7 @@ func (x *ChangedImageConfig_ChangedWorkingDir) String() string { func (*ChangedImageConfig_ChangedWorkingDir) ProtoMessage() {} func (x *ChangedImageConfig_ChangedWorkingDir) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[33] + mi := &file_registry_platform_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2238,7 +2423,7 @@ type ChangedImageConfig_EntrypointDiff struct { func (x *ChangedImageConfig_EntrypointDiff) Reset() { *x = ChangedImageConfig_EntrypointDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[34] + mi := &file_registry_platform_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2251,7 +2436,7 @@ func (x *ChangedImageConfig_EntrypointDiff) String() string { func (*ChangedImageConfig_EntrypointDiff) ProtoMessage() {} func (x *ChangedImageConfig_EntrypointDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[34] + mi := &file_registry_platform_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2293,7 +2478,7 @@ type ChangedImageConfig_EnvDiff struct { func (x *ChangedImageConfig_EnvDiff) Reset() { *x = ChangedImageConfig_EnvDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[35] + mi := &file_registry_platform_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2306,7 +2491,7 @@ func (x *ChangedImageConfig_EnvDiff) String() string { func (*ChangedImageConfig_EnvDiff) ProtoMessage() {} func (x *ChangedImageConfig_EnvDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[35] + mi := &file_registry_platform_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2348,7 +2533,7 @@ type ChangedImageConfig_CmdDiff struct { func (x *ChangedImageConfig_CmdDiff) Reset() { *x = ChangedImageConfig_CmdDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[36] + mi := &file_registry_platform_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2361,7 +2546,7 @@ func (x *ChangedImageConfig_CmdDiff) String() string { func (*ChangedImageConfig_CmdDiff) ProtoMessage() {} func (x *ChangedImageConfig_CmdDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[36] + mi := &file_registry_platform_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2403,7 +2588,7 @@ type ChangedImageConfig_ChangedStopSignal struct { func (x *ChangedImageConfig_ChangedStopSignal) Reset() { *x = ChangedImageConfig_ChangedStopSignal{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[37] + mi := &file_registry_platform_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2416,7 +2601,7 @@ func (x *ChangedImageConfig_ChangedStopSignal) String() string { func (*ChangedImageConfig_ChangedStopSignal) ProtoMessage() {} func (x *ChangedImageConfig_ChangedStopSignal) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[37] + mi := &file_registry_platform_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2455,7 +2640,7 @@ type ChangedImageConfig_Volume struct { func (x *ChangedImageConfig_Volume) Reset() { *x = ChangedImageConfig_Volume{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[38] + mi := &file_registry_platform_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2468,7 +2653,7 @@ func (x *ChangedImageConfig_Volume) String() string { func (*ChangedImageConfig_Volume) ProtoMessage() {} func (x *ChangedImageConfig_Volume) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[38] + mi := &file_registry_platform_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2496,7 +2681,7 @@ type ChangedImageConfig_VolumeDiff struct { func (x *ChangedImageConfig_VolumeDiff) Reset() { *x = ChangedImageConfig_VolumeDiff{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[39] + mi := &file_registry_platform_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2509,7 +2694,7 @@ func (x *ChangedImageConfig_VolumeDiff) String() string { func (*ChangedImageConfig_VolumeDiff) ProtoMessage() {} func (x *ChangedImageConfig_VolumeDiff) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[39] + mi := &file_registry_platform_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2539,6 +2724,83 @@ func (x *ChangedImageConfig_VolumeDiff) GetRemoved() map[string]*ChangedImageCon return nil } +// ExposedPorts a set of ports to expose from a container running this image. +type ImageConfig_ExposedPort struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ImageConfig_ExposedPort) Reset() { + *x = ImageConfig_ExposedPort{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageConfig_ExposedPort) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageConfig_ExposedPort) ProtoMessage() {} + +func (x *ImageConfig_ExposedPort) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[44] + 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 ImageConfig_ExposedPort.ProtoReflect.Descriptor instead. +func (*ImageConfig_ExposedPort) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{17, 0} +} + +type ImageConfig_Volume struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ImageConfig_Volume) Reset() { + *x = ImageConfig_Volume{} + if protoimpl.UnsafeEnabled { + mi := &file_registry_platform_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImageConfig_Volume) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageConfig_Volume) ProtoMessage() {} + +func (x *ImageConfig_Volume) ProtoReflect() protoreflect.Message { + mi := &file_registry_platform_proto_msgTypes[46] + 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 ImageConfig_Volume.ProtoReflect.Descriptor instead. +func (*ImageConfig_Volume) Descriptor() ([]byte, []int) { + return file_registry_platform_proto_rawDescGZIP(), []int{17, 2} +} + type PackagesDiff_ChangedPackageReference struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2552,7 +2814,7 @@ type PackagesDiff_ChangedPackageReference struct { func (x *PackagesDiff_ChangedPackageReference) Reset() { *x = PackagesDiff_ChangedPackageReference{} if protoimpl.UnsafeEnabled { - mi := &file_registry_platform_proto_msgTypes[42] + mi := &file_registry_platform_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2565,7 +2827,7 @@ func (x *PackagesDiff_ChangedPackageReference) String() string { func (*PackagesDiff_ChangedPackageReference) ProtoMessage() {} func (x *PackagesDiff_ChangedPackageReference) ProtoReflect() protoreflect.Message { - mi := &file_registry_platform_proto_msgTypes[42] + mi := &file_registry_platform_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2578,7 +2840,7 @@ func (x *PackagesDiff_ChangedPackageReference) ProtoReflect() protoreflect.Messa // Deprecated: Use PackagesDiff_ChangedPackageReference.ProtoReflect.Descriptor instead. func (*PackagesDiff_ChangedPackageReference) Descriptor() ([]byte, []int) { - return file_registry_platform_proto_rawDescGZIP(), []int{17, 0} + return file_registry_platform_proto_rawDescGZIP(), []int{18, 0} } func (x *PackagesDiff_ChangedPackageReference) GetName() string { @@ -2850,287 +3112,352 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc2, 0x03, 0x0a, 0x0c, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x44, 0x0a, 0x05, - 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, - 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x07, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, 0xc3, 0x01, 0x0a, 0x17, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x07, 0x63, 0x75, - 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, + 0x60, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, - 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x10, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, - 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, + 0x65, 0x6e, 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, + 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, + 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, + 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 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, 0x4b, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, + 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 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, 0x46, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, + 0x69, 0x66, 0x66, 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x93, 0x02, 0x0a, 0x0f, - 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, - 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, - 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, - 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, - 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x1f, 0x76, 0x75, - 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, - 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, - 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, - 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, - 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, - 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, - 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, - 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, - 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, - 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, - 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, - 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, - 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, - 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, - 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, - 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x1a, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x48, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, - 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, - 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, - 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, - 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, 0x32, 0x9b, 0x13, 0x0a, 0x08, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, - 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, + 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, + 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, + 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, + 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x45, 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, + 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, + 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, + 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, + 0x46, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, + 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, + 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, + 0x72, 0x63, 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, + 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, + 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, + 0xd8, 0x01, 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, + 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, + 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x50, 0x75, 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, + 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, + 0x44, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, + 0x4d, 0x10, 0x03, 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x12, 0xe4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, + 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, - 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, - 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, + 0x52, 0x65, 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, + 0x65, 0x70, 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, + 0xc3, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, + 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, + 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, + 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, - 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, - 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, - 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, - 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, - 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, - 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, - 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, - 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, - 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, - 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, - 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, + 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, + 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, + 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, + 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, + 0x2a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, + 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, - 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, - 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, - 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, - 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, + 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, + 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, + 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, + 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, + 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, + 0xcd, 0x0c, 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, - 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, - 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, - 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, - 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, - 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, - 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, + 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, + 0x02, 0xcd, 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, + 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x39, 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, + 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x40, 0x12, 0x3e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, 0xbd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, @@ -3179,7 +3506,7 @@ func file_registry_platform_proto_rawDescGZIP() []byte { } var file_registry_platform_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_registry_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_registry_platform_proto_msgTypes = make([]protoimpl.MessageInfo, 50) var file_registry_platform_proto_goTypes = []interface{}{ (CatalogTier)(0), // 0: chainguard.platform.registry.CatalogTier (*Repo)(nil), // 1: chainguard.platform.registry.Repo @@ -3199,116 +3526,130 @@ var file_registry_platform_proto_goTypes = []interface{}{ (*DiffImageResponse)(nil), // 15: chainguard.platform.registry.DiffImageResponse (*ImageConfigDiff)(nil), // 16: chainguard.platform.registry.ImageConfigDiff (*ChangedImageConfig)(nil), // 17: chainguard.platform.registry.ChangedImageConfig - (*PackagesDiff)(nil), // 18: chainguard.platform.registry.PackagesDiff - (*VersionReference)(nil), // 19: chainguard.platform.registry.VersionReference - (*PackageReference)(nil), // 20: chainguard.platform.registry.PackageReference - (*VulnerabilitiesDiff)(nil), // 21: chainguard.platform.registry.VulnerabilitiesDiff - (*ScannerMetadata)(nil), // 22: chainguard.platform.registry.ScannerMetadata - (*VulnerabilityReference)(nil), // 23: chainguard.platform.registry.VulnerabilityReference - (*DiffImageRequest)(nil), // 24: chainguard.platform.registry.DiffImageRequest - (*SbomRequest)(nil), // 25: chainguard.platform.registry.SbomRequest - (*VulnReportRequest)(nil), // 26: chainguard.platform.registry.VulnReportRequest - (*ManifestMetadataIndexFilter)(nil), // 27: chainguard.platform.registry.ManifestMetadataIndexFilter - (*ManifestMetadataFilterEntry)(nil), // 28: chainguard.platform.registry.ManifestMetadataFilterEntry - (*ManifestMetadataFilter)(nil), // 29: chainguard.platform.registry.ManifestMetadataFilter - (*PkgMetadata)(nil), // 30: chainguard.platform.registry.PkgMetadata - (*ManifestMetadata)(nil), // 31: chainguard.platform.registry.ManifestMetadata - (*ManifestMetadataList)(nil), // 32: chainguard.platform.registry.ManifestMetadataList - (*ChangedImageConfig_ChangedUser)(nil), // 33: chainguard.platform.registry.ChangedImageConfig.ChangedUser - (*ChangedImageConfig_ChangedWorkingDir)(nil), // 34: chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - (*ChangedImageConfig_EntrypointDiff)(nil), // 35: chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - (*ChangedImageConfig_EnvDiff)(nil), // 36: chainguard.platform.registry.ChangedImageConfig.EnvDiff - (*ChangedImageConfig_CmdDiff)(nil), // 37: chainguard.platform.registry.ChangedImageConfig.CmdDiff - (*ChangedImageConfig_ChangedStopSignal)(nil), // 38: chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - (*ChangedImageConfig_Volume)(nil), // 39: chainguard.platform.registry.ChangedImageConfig.Volume - (*ChangedImageConfig_VolumeDiff)(nil), // 40: chainguard.platform.registry.ChangedImageConfig.VolumeDiff - nil, // 41: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - nil, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - (*PackagesDiff_ChangedPackageReference)(nil), // 43: chainguard.platform.registry.PackagesDiff.ChangedPackageReference - (*v1.UIDPFilter)(nil), // 44: chainguard.platform.common.UIDPFilter - (*timestamppb.Timestamp)(nil), // 45: google.protobuf.Timestamp - (*v11.Scanner)(nil), // 46: chainguard.platform.tenant.Scanner - (*emptypb.Empty)(nil), // 47: google.protobuf.Empty - (*v11.Sbom2)(nil), // 48: chainguard.platform.tenant.Sbom2 - (*v11.VulnReport)(nil), // 49: chainguard.platform.tenant.VulnReport + (*ImageConfig)(nil), // 18: chainguard.platform.registry.ImageConfig + (*PackagesDiff)(nil), // 19: chainguard.platform.registry.PackagesDiff + (*VersionReference)(nil), // 20: chainguard.platform.registry.VersionReference + (*PackageReference)(nil), // 21: chainguard.platform.registry.PackageReference + (*VulnerabilitiesDiff)(nil), // 22: chainguard.platform.registry.VulnerabilitiesDiff + (*ScannerMetadata)(nil), // 23: chainguard.platform.registry.ScannerMetadata + (*VulnerabilityReference)(nil), // 24: chainguard.platform.registry.VulnerabilityReference + (*DiffImageRequest)(nil), // 25: chainguard.platform.registry.DiffImageRequest + (*SbomRequest)(nil), // 26: chainguard.platform.registry.SbomRequest + (*ImageConfigRequest)(nil), // 27: chainguard.platform.registry.ImageConfigRequest + (*VulnReportRequest)(nil), // 28: chainguard.platform.registry.VulnReportRequest + (*ManifestMetadataIndexFilter)(nil), // 29: chainguard.platform.registry.ManifestMetadataIndexFilter + (*ManifestMetadataFilterEntry)(nil), // 30: chainguard.platform.registry.ManifestMetadataFilterEntry + (*ManifestMetadataFilter)(nil), // 31: chainguard.platform.registry.ManifestMetadataFilter + (*PkgMetadata)(nil), // 32: chainguard.platform.registry.PkgMetadata + (*ManifestMetadata)(nil), // 33: chainguard.platform.registry.ManifestMetadata + (*ManifestMetadataList)(nil), // 34: chainguard.platform.registry.ManifestMetadataList + (*ChangedImageConfig_ChangedUser)(nil), // 35: chainguard.platform.registry.ChangedImageConfig.ChangedUser + (*ChangedImageConfig_ChangedWorkingDir)(nil), // 36: chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + (*ChangedImageConfig_EntrypointDiff)(nil), // 37: chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + (*ChangedImageConfig_EnvDiff)(nil), // 38: chainguard.platform.registry.ChangedImageConfig.EnvDiff + (*ChangedImageConfig_CmdDiff)(nil), // 39: chainguard.platform.registry.ChangedImageConfig.CmdDiff + (*ChangedImageConfig_ChangedStopSignal)(nil), // 40: chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + (*ChangedImageConfig_Volume)(nil), // 41: chainguard.platform.registry.ChangedImageConfig.Volume + (*ChangedImageConfig_VolumeDiff)(nil), // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff + nil, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + nil, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + (*ImageConfig_ExposedPort)(nil), // 45: chainguard.platform.registry.ImageConfig.ExposedPort + nil, // 46: chainguard.platform.registry.ImageConfig.ExposedPortsEntry + (*ImageConfig_Volume)(nil), // 47: chainguard.platform.registry.ImageConfig.Volume + nil, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry + nil, // 49: chainguard.platform.registry.ImageConfig.LabelsEntry + (*PackagesDiff_ChangedPackageReference)(nil), // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference + (*v1.UIDPFilter)(nil), // 51: chainguard.platform.common.UIDPFilter + (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp + (*v11.Scanner)(nil), // 53: chainguard.platform.tenant.Scanner + (*emptypb.Empty)(nil), // 54: google.protobuf.Empty + (*v11.Sbom2)(nil), // 55: chainguard.platform.tenant.Sbom2 + (*v11.VulnReport)(nil), // 56: chainguard.platform.tenant.VulnReport } var file_registry_platform_proto_depIdxs = []int32{ 0, // 0: chainguard.platform.registry.Repo.catalog_tier:type_name -> chainguard.platform.registry.CatalogTier 2, // 1: chainguard.platform.registry.Repo.sync_config:type_name -> chainguard.platform.registry.SyncConfig 1, // 2: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo 1, // 3: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo - 44, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 51, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter 9, // 5: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag - 45, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp - 44, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 45, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp + 52, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp + 51, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 52, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp 9, // 9: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag - 45, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp - 45, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp + 52, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp + 52, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp 14, // 12: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory - 45, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp - 18, // 14: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff - 21, // 15: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff + 52, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp + 19, // 14: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff + 22, // 15: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff 16, // 16: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff 17, // 17: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig - 33, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser - 34, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - 35, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - 36, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff - 37, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff - 38, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - 40, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff - 20, // 25: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference - 20, // 26: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference - 43, // 27: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference - 23, // 28: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference - 23, // 29: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference - 22, // 30: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata - 46, // 31: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner - 45, // 32: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp - 27, // 33: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter - 28, // 34: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry - 45, // 35: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp - 45, // 36: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp - 30, // 37: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata - 31, // 38: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata - 41, // 39: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - 42, // 40: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - 39, // 41: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 39, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 19, // 43: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference - 19, // 44: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference - 3, // 45: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest - 1, // 46: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo - 6, // 47: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter - 4, // 48: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest - 7, // 49: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest - 9, // 50: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag - 8, // 51: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest - 10, // 52: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter - 12, // 53: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter - 24, // 54: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest - 25, // 55: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest - 26, // 56: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest - 29, // 57: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter - 1, // 58: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo - 1, // 59: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo - 5, // 60: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList - 47, // 61: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty - 9, // 62: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag - 9, // 63: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag - 47, // 64: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty - 11, // 65: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList - 13, // 66: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList - 15, // 67: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse - 48, // 68: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 - 49, // 69: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport - 32, // 70: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList - 58, // [58:71] is the sub-list for method output_type - 45, // [45:58] is the sub-list for method input_type - 45, // [45:45] is the sub-list for extension type_name - 45, // [45:45] is the sub-list for extension extendee - 0, // [0:45] is the sub-list for field type_name + 35, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser + 36, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + 37, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + 38, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff + 39, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff + 40, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + 42, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff + 46, // 25: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry + 48, // 26: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry + 49, // 27: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry + 21, // 28: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference + 21, // 29: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference + 50, // 30: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference + 24, // 31: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference + 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference + 23, // 33: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata + 53, // 34: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner + 52, // 35: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp + 29, // 36: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter + 30, // 37: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry + 52, // 38: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp + 52, // 39: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp + 32, // 40: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata + 33, // 41: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata + 43, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + 44, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + 41, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 45, // 46: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort + 47, // 47: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume + 20, // 48: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference + 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference + 3, // 50: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest + 1, // 51: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo + 6, // 52: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter + 4, // 53: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest + 7, // 54: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest + 9, // 55: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag + 8, // 56: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest + 10, // 57: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter + 12, // 58: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter + 25, // 59: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest + 26, // 60: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest + 27, // 61: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest + 28, // 62: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest + 31, // 63: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter + 1, // 64: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo + 1, // 65: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo + 5, // 66: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList + 54, // 67: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty + 9, // 68: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag + 9, // 69: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag + 54, // 70: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty + 11, // 71: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList + 13, // 72: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList + 15, // 73: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse + 55, // 74: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 + 18, // 75: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig + 56, // 76: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport + 34, // 77: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList + 64, // [64:78] is the sub-list for method output_type + 50, // [50:64] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_registry_platform_proto_init() } @@ -3522,7 +3863,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackagesDiff); i { + switch v := v.(*ImageConfig); i { case 0: return &v.state case 1: @@ -3534,7 +3875,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VersionReference); i { + switch v := v.(*PackagesDiff); i { case 0: return &v.state case 1: @@ -3546,7 +3887,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PackageReference); i { + switch v := v.(*VersionReference); i { case 0: return &v.state case 1: @@ -3558,7 +3899,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilitiesDiff); i { + switch v := v.(*PackageReference); i { case 0: return &v.state case 1: @@ -3570,7 +3911,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ScannerMetadata); i { + switch v := v.(*VulnerabilitiesDiff); i { case 0: return &v.state case 1: @@ -3582,7 +3923,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnerabilityReference); i { + switch v := v.(*ScannerMetadata); i { case 0: return &v.state case 1: @@ -3594,7 +3935,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiffImageRequest); i { + switch v := v.(*VulnerabilityReference); i { case 0: return &v.state case 1: @@ -3606,7 +3947,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SbomRequest); i { + switch v := v.(*DiffImageRequest); i { case 0: return &v.state case 1: @@ -3618,7 +3959,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VulnReportRequest); i { + switch v := v.(*SbomRequest); i { case 0: return &v.state case 1: @@ -3630,7 +3971,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadataIndexFilter); i { + switch v := v.(*ImageConfigRequest); i { case 0: return &v.state case 1: @@ -3642,7 +3983,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadataFilterEntry); i { + switch v := v.(*VulnReportRequest); i { case 0: return &v.state case 1: @@ -3654,7 +3995,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadataFilter); i { + switch v := v.(*ManifestMetadataIndexFilter); i { case 0: return &v.state case 1: @@ -3666,7 +4007,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PkgMetadata); i { + switch v := v.(*ManifestMetadataFilterEntry); i { case 0: return &v.state case 1: @@ -3678,7 +4019,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadata); i { + switch v := v.(*ManifestMetadataFilter); i { case 0: return &v.state case 1: @@ -3690,7 +4031,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ManifestMetadataList); i { + switch v := v.(*PkgMetadata); i { case 0: return &v.state case 1: @@ -3702,7 +4043,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_ChangedUser); i { + switch v := v.(*ManifestMetadata); i { case 0: return &v.state case 1: @@ -3714,7 +4055,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_ChangedWorkingDir); i { + switch v := v.(*ManifestMetadataList); i { case 0: return &v.state case 1: @@ -3726,7 +4067,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_EntrypointDiff); i { + switch v := v.(*ChangedImageConfig_ChangedUser); i { case 0: return &v.state case 1: @@ -3738,7 +4079,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_EnvDiff); i { + switch v := v.(*ChangedImageConfig_ChangedWorkingDir); i { case 0: return &v.state case 1: @@ -3750,7 +4091,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_CmdDiff); i { + switch v := v.(*ChangedImageConfig_EntrypointDiff); i { case 0: return &v.state case 1: @@ -3762,7 +4103,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_ChangedStopSignal); i { + switch v := v.(*ChangedImageConfig_EnvDiff); i { case 0: return &v.state case 1: @@ -3774,7 +4115,7 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChangedImageConfig_Volume); i { + switch v := v.(*ChangedImageConfig_CmdDiff); i { case 0: return &v.state case 1: @@ -3786,6 +4127,30 @@ func file_registry_platform_proto_init() { } } file_registry_platform_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_ChangedStopSignal); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChangedImageConfig_Volume); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChangedImageConfig_VolumeDiff); i { case 0: return &v.state @@ -3797,7 +4162,31 @@ func file_registry_platform_proto_init() { return nil } } - file_registry_platform_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_registry_platform_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageConfig_ExposedPort); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImageConfig_Volume); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_registry_platform_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PackagesDiff_ChangedPackageReference); i { case 0: return &v.state @@ -3810,7 +4199,7 @@ func file_registry_platform_proto_init() { } } } - file_registry_platform_proto_msgTypes[27].OneofWrappers = []interface{}{ + file_registry_platform_proto_msgTypes[29].OneofWrappers = []interface{}{ (*ManifestMetadataFilterEntry_ImageDigest)(nil), (*ManifestMetadataFilterEntry_IndexFilter)(nil), } @@ -3820,7 +4209,7 @@ func file_registry_platform_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_registry_platform_proto_rawDesc, NumEnums: 1, - NumMessages: 43, + NumMessages: 50, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/platform/registry/v1/registry.platform.pb.gw.go b/proto/platform/registry/v1/registry.platform.pb.gw.go index 190731c4..612df8bf 100644 --- a/proto/platform/registry/v1/registry.platform.pb.gw.go +++ b/proto/platform/registry/v1/registry.platform.pb.gw.go @@ -686,6 +686,96 @@ func local_request_Registry_GetSbom_0(ctx context.Context, marshaler runtime.Mar } +var ( + filter_Registry_GetImageConfig_0 = &utilities.DoubleArray{Encoding: map[string]int{"repo_id": 0, "digest": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_Registry_GetImageConfig_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ImageConfigRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + val, ok = pathParams["digest"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") + } + + protoReq.Digest, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_GetImageConfig_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetImageConfig(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Registry_GetImageConfig_0(ctx context.Context, marshaler runtime.Marshaler, server RegistryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ImageConfigRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["repo_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "repo_id") + } + + protoReq.RepoId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "repo_id", err) + } + + val, ok = pathParams["digest"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "digest") + } + + protoReq.Digest, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "digest", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Registry_GetImageConfig_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetImageConfig(ctx, &protoReq) + return msg, metadata, err + +} + func request_Registry_GetVulnReport_0(ctx context.Context, marshaler runtime.Marshaler, client RegistryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq VulnReportRequest var metadata runtime.ServerMetadata @@ -1098,6 +1188,30 @@ func RegisterRegistryHandlerServer(ctx context.Context, mux *runtime.ServeMux, s }) + mux.Handle("GET", pattern_Registry_GetImageConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetImageConfig", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/imageconfig")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Registry_GetImageConfig_0(ctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_GetImageConfig_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Registry_GetVulnReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1418,6 +1532,27 @@ func RegisterRegistryHandlerClient(ctx context.Context, mux *runtime.ServeMux, c }) + mux.Handle("GET", pattern_Registry_GetImageConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + ctx, err = runtime.AnnotateContext(ctx, mux, req, "/chainguard.platform.registry.Registry/GetImageConfig", runtime.WithHTTPPathPattern("/registry/v1/repos/{repo_id=**}/digests/{digest=*}/imageconfig")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Registry_GetImageConfig_0(ctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Registry_GetImageConfig_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_Registry_GetVulnReport_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -1486,6 +1621,8 @@ var ( pattern_Registry_GetSbom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "sbom"}, "")) + pattern_Registry_GetImageConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "imageconfig"}, "")) + pattern_Registry_GetVulnReport_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6}, []string{"registry", "v1", "repos", "repo_id", "digests", "digest", "vulnreport"}, "")) pattern_Registry_ListManifestMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 3, 0, 4, 1, 5, 3, 2, 4}, []string{"registry", "v1", "repos", "repo_id", "manifestmetdata"}, "")) @@ -1514,6 +1651,8 @@ var ( forward_Registry_GetSbom_0 = runtime.ForwardResponseMessage + forward_Registry_GetImageConfig_0 = runtime.ForwardResponseMessage + forward_Registry_GetVulnReport_0 = runtime.ForwardResponseMessage forward_Registry_ListManifestMetadata_0 = runtime.ForwardResponseMessage diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto index ba3c2cf1..43f7dc8f 100644 --- a/proto/platform/registry/v1/registry.platform.proto +++ b/proto/platform/registry/v1/registry.platform.proto @@ -174,6 +174,17 @@ service Registry { }; } + rpc GetImageConfig(ImageConfigRequest) returns (ImageConfig) { + option (google.api.http) = { + get: "/registry/v1/repos/{repo_id=**}/digests/{digest=*}/imageconfig" + }; + option (chainguard.annotations.iam) = { + enabled: { + capabilities: [CAP_REPO_LIST, CAP_MANIFEST_METADATA_LIST] + } + }; + } + rpc GetVulnReport(VulnReportRequest) returns (chainguard.platform.tenant.VulnReport) { option (google.api.http) = { get: "/registry/v1/repos/{repo_id=**}/digests/{digest=*}/vulnreport" @@ -399,6 +410,37 @@ message ChangedImageConfig { VolumeDiff volumes = 7; } +message ImageConfig { + // User defines the username or UID which the process in the container should run as. + string user = 1; + + // ExposedPorts a set of ports to expose from a container running this image. + message ExposedPort {} + map exposed_ports = 2; + + // Env is a list of environment variables to be used in a container. + repeated string env = 3; + + // Entrypoint defines a list of arguments to use as the command to execute when the container starts. + repeated string entrypoint = 4; + + // Cmd defines the default arguments to the entrypoint of the container. + repeated string cmd = 5; + + message Volume {} + // Volumes is a set of directories describing where the process is likely write data specific to a container instance. + map volumes = 6; + + // WorkingDir sets the current working directory of the entrypoint process in the container. + string working_dir = 7; + + // Labels contains arbitrary metadata for the container. + map labels = 8; + + // StopSignal contains the system call signal that will be sent to the container to exit. + string stop_signal = 9; +} + message PackagesDiff { repeated PackageReference added = 1; repeated PackageReference removed = 2; @@ -460,6 +502,15 @@ message SbomRequest { string digest = 2; } +message ImageConfigRequest { + // The UIDP of the image repo to get config for. + string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; + // The digest of the image to get config for. + string digest = 2; + // The architecture to get config for. + string arch = 3; +} + message VulnReportRequest { // The UIDP of the image repo to get a VulnReport for. string repo_id = 1 [(chainguard.annotations.iam_scope) = true]; diff --git a/proto/platform/registry/v1/registry.platform_grpc.pb.go b/proto/platform/registry/v1/registry.platform_grpc.pb.go index fe91f502..e6f20a31 100644 --- a/proto/platform/registry/v1/registry.platform_grpc.pb.go +++ b/proto/platform/registry/v1/registry.platform_grpc.pb.go @@ -32,6 +32,7 @@ const ( Registry_ListTagHistory_FullMethodName = "/chainguard.platform.registry.Registry/ListTagHistory" Registry_DiffImage_FullMethodName = "/chainguard.platform.registry.Registry/DiffImage" Registry_GetSbom_FullMethodName = "/chainguard.platform.registry.Registry/GetSbom" + Registry_GetImageConfig_FullMethodName = "/chainguard.platform.registry.Registry/GetImageConfig" Registry_GetVulnReport_FullMethodName = "/chainguard.platform.registry.Registry/GetVulnReport" Registry_ListManifestMetadata_FullMethodName = "/chainguard.platform.registry.Registry/ListManifestMetadata" ) @@ -51,6 +52,7 @@ type RegistryClient interface { ListTagHistory(ctx context.Context, in *TagHistoryFilter, opts ...grpc.CallOption) (*TagHistoryList, error) DiffImage(ctx context.Context, in *DiffImageRequest, opts ...grpc.CallOption) (*DiffImageResponse, error) GetSbom(ctx context.Context, in *SbomRequest, opts ...grpc.CallOption) (*v1.Sbom2, error) + GetImageConfig(ctx context.Context, in *ImageConfigRequest, opts ...grpc.CallOption) (*ImageConfig, error) GetVulnReport(ctx context.Context, in *VulnReportRequest, opts ...grpc.CallOption) (*v1.VulnReport, error) ListManifestMetadata(ctx context.Context, in *ManifestMetadataFilter, opts ...grpc.CallOption) (*ManifestMetadataList, error) } @@ -162,6 +164,15 @@ func (c *registryClient) GetSbom(ctx context.Context, in *SbomRequest, opts ...g return out, nil } +func (c *registryClient) GetImageConfig(ctx context.Context, in *ImageConfigRequest, opts ...grpc.CallOption) (*ImageConfig, error) { + out := new(ImageConfig) + err := c.cc.Invoke(ctx, Registry_GetImageConfig_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *registryClient) GetVulnReport(ctx context.Context, in *VulnReportRequest, opts ...grpc.CallOption) (*v1.VulnReport, error) { out := new(v1.VulnReport) err := c.cc.Invoke(ctx, Registry_GetVulnReport_FullMethodName, in, out, opts...) @@ -195,6 +206,7 @@ type RegistryServer interface { ListTagHistory(context.Context, *TagHistoryFilter) (*TagHistoryList, error) DiffImage(context.Context, *DiffImageRequest) (*DiffImageResponse, error) GetSbom(context.Context, *SbomRequest) (*v1.Sbom2, error) + GetImageConfig(context.Context, *ImageConfigRequest) (*ImageConfig, error) GetVulnReport(context.Context, *VulnReportRequest) (*v1.VulnReport, error) ListManifestMetadata(context.Context, *ManifestMetadataFilter) (*ManifestMetadataList, error) mustEmbedUnimplementedRegistryServer() @@ -237,6 +249,9 @@ func (UnimplementedRegistryServer) DiffImage(context.Context, *DiffImageRequest) func (UnimplementedRegistryServer) GetSbom(context.Context, *SbomRequest) (*v1.Sbom2, error) { return nil, status.Errorf(codes.Unimplemented, "method GetSbom not implemented") } +func (UnimplementedRegistryServer) GetImageConfig(context.Context, *ImageConfigRequest) (*ImageConfig, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetImageConfig not implemented") +} func (UnimplementedRegistryServer) GetVulnReport(context.Context, *VulnReportRequest) (*v1.VulnReport, error) { return nil, status.Errorf(codes.Unimplemented, "method GetVulnReport not implemented") } @@ -454,6 +469,24 @@ func _Registry_GetSbom_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Registry_GetImageConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ImageConfigRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RegistryServer).GetImageConfig(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Registry_GetImageConfig_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RegistryServer).GetImageConfig(ctx, req.(*ImageConfigRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Registry_GetVulnReport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(VulnReportRequest) if err := dec(in); err != nil { @@ -541,6 +574,10 @@ var Registry_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetSbom", Handler: _Registry_GetSbom_Handler, }, + { + MethodName: "GetImageConfig", + Handler: _Registry_GetImageConfig_Handler, + }, { MethodName: "GetVulnReport", Handler: _Registry_GetVulnReport_Handler, diff --git a/proto/platform/registry/v1/test/registry.go b/proto/platform/registry/v1/test/registry.go index 82493f9c..a0abfed0 100644 --- a/proto/platform/registry/v1/test/registry.go +++ b/proto/platform/registry/v1/test/registry.go @@ -47,6 +47,7 @@ type MockRegistryClient struct { OnListTags []TagsOnList OnUpdateRepo []RepoOnUpdate OnListTagHistory []TagHistoryOnList + OnGetImageConfig []ImageConfigOnGet OnGetSbom []SbomOnGet OnGetVulnReport []VulnReportOnGet OnDiffImage []DiffImage @@ -111,6 +112,12 @@ type TagHistoryOnList struct { Error error } +type ImageConfigOnGet struct { + Given *registry.ImageConfigRequest + Get *registry.ImageConfig + Error error +} + type SbomOnGet struct { Given *registry.SbomRequest Get *tenant.Sbom2 @@ -210,6 +217,15 @@ func (m MockRegistryClient) ListTagHistory(_ context.Context, given *registry.Ta return nil, fmt.Errorf("mock not found for %v", given) } +func (m MockRegistryClient) GetImageConfig(_ context.Context, given *registry.ImageConfigRequest, _ ...grpc.CallOption) (*registry.ImageConfig, error) { //nolint: revive + for _, o := range m.OnGetImageConfig { + if cmp.Equal(o.Given, given, protocmp.Transform()) { + return o.Get, o.Error + } + } + return nil, fmt.Errorf("mock not found for %v", given) +} + func (m MockRegistryClient) GetSbom(_ context.Context, given *registry.SbomRequest, _ ...grpc.CallOption) (*tenant.Sbom2, error) { //nolint: revive for _, o := range m.OnGetSbom { if cmp.Equal(o.Given, given, protocmp.Transform()) { From e82c08874547afb64196f059b30e6147ad55d30e Mon Sep 17 00:00:00 2001 From: Matt Moore Date: Tue, 30 Apr 2024 11:27:14 -0700 Subject: [PATCH 31/41] Export 6ffe83d6b6b5baec495674d38f52a0fa81454b7b Export: 6ffe83d6b6b5baec495674d38f52a0fa81454b7b --- .../v1/identity_providers.platform.event.go | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/proto/platform/iam/v1/identity_providers.platform.event.go b/proto/platform/iam/v1/identity_providers.platform.event.go index c3a344ec..052684da 100644 --- a/proto/platform/iam/v1/identity_providers.platform.event.go +++ b/proto/platform/iam/v1/identity_providers.platform.event.go @@ -24,6 +24,34 @@ func (x *IdentityProvider) CloudEventsSubject() string { return x.GetId() } +// CloudEventsRedact implements chainguard.dev/sdk/events/Redactable.CloudEventsRedact. +func (x *IdentityProvider) CloudEventsRedact() interface{} { + idp := &IdentityProvider{ + Id: x.Id, + Name: x.Name, + Description: x.Description, + DefaultRole: x.DefaultRole, + } + + switch cfg := x.Configuration.(type) { + case *IdentityProvider_Oidc: + // redact OIDC configuration + idp.Configuration = &IdentityProvider_Oidc{ + Oidc: &IdentityProvider_OIDC{ + Issuer: cfg.Oidc.Issuer, + ClientId: cfg.Oidc.ClientId, + // ClientSecret is redacted. + AdditionalScopes: cfg.Oidc.AdditionalScopes, + }, + } + default: + // no redaction + idp.Configuration = x.Configuration + } + + return idp +} + // CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension func (x *DeleteIdentityProviderRequest) CloudEventsExtension(key string) (string, bool) { switch key { From 63997ad26308e220e147f3568d3e0c5514edbd46 Mon Sep 17 00:00:00 2001 From: Matt Moore Date: Tue, 30 Apr 2024 18:34:31 -0700 Subject: [PATCH 32/41] Export e86b070e80c0d819aa4d32048acd7de475af147d Export: e86b070e80c0d819aa4d32048acd7de475af147d --- README.md | 2 +- proto/annotations/auth.pb.go | 2 +- proto/annotations/events.pb.go | 2 +- proto/capabilities/capabilities.pb.go | 2 +- proto/platform/advisory/v1/advisory.platform.pb.go | 2 +- proto/platform/advisory/v1/advisory.platform_grpc.pb.go | 2 +- proto/platform/auth/v1/auth.platform.pb.go | 2 +- proto/platform/auth/v1/auth.platform_grpc.pb.go | 2 +- proto/platform/common/v1/uidp.platform.pb.go | 2 +- proto/platform/events/v1/identities.platform.pb.go | 2 +- proto/platform/events/v1/identities.platform_grpc.pb.go | 2 +- proto/platform/events/v1/subscriptions.platform.pb.go | 2 +- proto/platform/events/v1/subscriptions.platform_grpc.pb.go | 2 +- proto/platform/iam/v1/account_associations.platform.pb.go | 2 +- proto/platform/iam/v1/account_associations.platform_grpc.pb.go | 2 +- proto/platform/iam/v1/group.platform.pb.go | 2 +- proto/platform/iam/v1/group.platform_grpc.pb.go | 2 +- proto/platform/iam/v1/group_invites.platform.pb.go | 2 +- proto/platform/iam/v1/group_invites.platform_grpc.pb.go | 2 +- proto/platform/iam/v1/identity.platform.pb.go | 2 +- proto/platform/iam/v1/identity.platform_grpc.pb.go | 2 +- proto/platform/iam/v1/identity_providers.platform.pb.go | 2 +- proto/platform/iam/v1/identity_providers.platform_grpc.pb.go | 2 +- proto/platform/iam/v1/role.platform.pb.go | 2 +- proto/platform/iam/v1/role.platform_grpc.pb.go | 2 +- proto/platform/iam/v1/role_binding.platform.pb.go | 2 +- proto/platform/iam/v1/role_binding.platform_grpc.pb.go | 2 +- proto/platform/oidc/v1/oidc.platform.pb.go | 2 +- proto/platform/oidc/v1/oidc.platform_grpc.pb.go | 2 +- proto/platform/ping/v1/ping.platform.pb.go | 2 +- proto/platform/ping/v1/ping.platform_grpc.pb.go | 2 +- proto/platform/registry/v1/registry.platform.pb.go | 2 +- proto/platform/registry/v1/registry.platform_grpc.pb.go | 2 +- proto/platform/tenant/v1/attestation.platform.pb.go | 2 +- proto/platform/tenant/v1/attestation.platform_grpc.pb.go | 2 +- proto/platform/tenant/v1/sbom.platform.pb.go | 2 +- proto/platform/tenant/v1/sbom.platform_grpc.pb.go | 2 +- proto/platform/tenant/v1/signature.platform.pb.go | 2 +- proto/platform/tenant/v1/signature.platform_grpc.pb.go | 2 +- proto/platform/tenant/v1/vuln.platform.pb.go | 2 +- proto/platform/tenant/v1/vuln.platform_grpc.pb.go | 2 +- 41 files changed, 41 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 6664b400..e650c9b0 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Example for MacOS: brew install protobuf ``` -We currently require `protoc` v21.12. +We currently require `protoc` v5.26.1. Install `protoc` codegen dependencies: diff --git a/proto/annotations/auth.pb.go b/proto/annotations/auth.pb.go index 32414401..b41797d0 100644 --- a/proto/annotations/auth.pb.go +++ b/proto/annotations/auth.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: auth.proto package annotations diff --git a/proto/annotations/events.pb.go b/proto/annotations/events.pb.go index 9c6a02d6..0b371f7d 100644 --- a/proto/annotations/events.pb.go +++ b/proto/annotations/events.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: events.proto package annotations diff --git a/proto/capabilities/capabilities.pb.go b/proto/capabilities/capabilities.pb.go index 48cd9f59..69e77d49 100644 --- a/proto/capabilities/capabilities.pb.go +++ b/proto/capabilities/capabilities.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: capabilities.proto package capabilities diff --git a/proto/platform/advisory/v1/advisory.platform.pb.go b/proto/platform/advisory/v1/advisory.platform.pb.go index 86fa949e..889b4650 100644 --- a/proto/platform/advisory/v1/advisory.platform.pb.go +++ b/proto/platform/advisory/v1/advisory.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: advisory.platform.proto package v1 diff --git a/proto/platform/advisory/v1/advisory.platform_grpc.pb.go b/proto/platform/advisory/v1/advisory.platform_grpc.pb.go index a5657e05..21682e0a 100644 --- a/proto/platform/advisory/v1/advisory.platform_grpc.pb.go +++ b/proto/platform/advisory/v1/advisory.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: advisory.platform.proto package v1 diff --git a/proto/platform/auth/v1/auth.platform.pb.go b/proto/platform/auth/v1/auth.platform.pb.go index 05fbafbf..e458bdf2 100644 --- a/proto/platform/auth/v1/auth.platform.pb.go +++ b/proto/platform/auth/v1/auth.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: auth.platform.proto package v1 diff --git a/proto/platform/auth/v1/auth.platform_grpc.pb.go b/proto/platform/auth/v1/auth.platform_grpc.pb.go index 17053a34..eef4dcd9 100644 --- a/proto/platform/auth/v1/auth.platform_grpc.pb.go +++ b/proto/platform/auth/v1/auth.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: auth.platform.proto package v1 diff --git a/proto/platform/common/v1/uidp.platform.pb.go b/proto/platform/common/v1/uidp.platform.pb.go index b96a0549..7bc5551c 100644 --- a/proto/platform/common/v1/uidp.platform.pb.go +++ b/proto/platform/common/v1/uidp.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: uidp.platform.proto package v1 diff --git a/proto/platform/events/v1/identities.platform.pb.go b/proto/platform/events/v1/identities.platform.pb.go index eb94e7d9..c3e04c0a 100644 --- a/proto/platform/events/v1/identities.platform.pb.go +++ b/proto/platform/events/v1/identities.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: identities.platform.proto package v1 diff --git a/proto/platform/events/v1/identities.platform_grpc.pb.go b/proto/platform/events/v1/identities.platform_grpc.pb.go index 4ca37918..7b97ffcd 100644 --- a/proto/platform/events/v1/identities.platform_grpc.pb.go +++ b/proto/platform/events/v1/identities.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: identities.platform.proto package v1 diff --git a/proto/platform/events/v1/subscriptions.platform.pb.go b/proto/platform/events/v1/subscriptions.platform.pb.go index dd1799e6..cc923951 100644 --- a/proto/platform/events/v1/subscriptions.platform.pb.go +++ b/proto/platform/events/v1/subscriptions.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: subscriptions.platform.proto package v1 diff --git a/proto/platform/events/v1/subscriptions.platform_grpc.pb.go b/proto/platform/events/v1/subscriptions.platform_grpc.pb.go index 54ba9058..ce225769 100644 --- a/proto/platform/events/v1/subscriptions.platform_grpc.pb.go +++ b/proto/platform/events/v1/subscriptions.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: subscriptions.platform.proto package v1 diff --git a/proto/platform/iam/v1/account_associations.platform.pb.go b/proto/platform/iam/v1/account_associations.platform.pb.go index 1af0b54d..2e02c7f7 100644 --- a/proto/platform/iam/v1/account_associations.platform.pb.go +++ b/proto/platform/iam/v1/account_associations.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: account_associations.platform.proto package v1 diff --git a/proto/platform/iam/v1/account_associations.platform_grpc.pb.go b/proto/platform/iam/v1/account_associations.platform_grpc.pb.go index 195b4de6..7c5482e3 100644 --- a/proto/platform/iam/v1/account_associations.platform_grpc.pb.go +++ b/proto/platform/iam/v1/account_associations.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: account_associations.platform.proto package v1 diff --git a/proto/platform/iam/v1/group.platform.pb.go b/proto/platform/iam/v1/group.platform.pb.go index 47162929..9860a173 100644 --- a/proto/platform/iam/v1/group.platform.pb.go +++ b/proto/platform/iam/v1/group.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: group.platform.proto package v1 diff --git a/proto/platform/iam/v1/group.platform_grpc.pb.go b/proto/platform/iam/v1/group.platform_grpc.pb.go index 94c10942..a86b2aad 100644 --- a/proto/platform/iam/v1/group.platform_grpc.pb.go +++ b/proto/platform/iam/v1/group.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: group.platform.proto package v1 diff --git a/proto/platform/iam/v1/group_invites.platform.pb.go b/proto/platform/iam/v1/group_invites.platform.pb.go index 342f4663..87a0b464 100644 --- a/proto/platform/iam/v1/group_invites.platform.pb.go +++ b/proto/platform/iam/v1/group_invites.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: group_invites.platform.proto package v1 diff --git a/proto/platform/iam/v1/group_invites.platform_grpc.pb.go b/proto/platform/iam/v1/group_invites.platform_grpc.pb.go index 13dcbff8..9a9b9c75 100644 --- a/proto/platform/iam/v1/group_invites.platform_grpc.pb.go +++ b/proto/platform/iam/v1/group_invites.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: group_invites.platform.proto package v1 diff --git a/proto/platform/iam/v1/identity.platform.pb.go b/proto/platform/iam/v1/identity.platform.pb.go index 1e88a650..693c98f5 100644 --- a/proto/platform/iam/v1/identity.platform.pb.go +++ b/proto/platform/iam/v1/identity.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: identity.platform.proto package v1 diff --git a/proto/platform/iam/v1/identity.platform_grpc.pb.go b/proto/platform/iam/v1/identity.platform_grpc.pb.go index 7dfa1065..f509c4d3 100644 --- a/proto/platform/iam/v1/identity.platform_grpc.pb.go +++ b/proto/platform/iam/v1/identity.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: identity.platform.proto package v1 diff --git a/proto/platform/iam/v1/identity_providers.platform.pb.go b/proto/platform/iam/v1/identity_providers.platform.pb.go index 886c5145..abed021a 100644 --- a/proto/platform/iam/v1/identity_providers.platform.pb.go +++ b/proto/platform/iam/v1/identity_providers.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: identity_providers.platform.proto package v1 diff --git a/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go b/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go index 63930595..60b20f6c 100644 --- a/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go +++ b/proto/platform/iam/v1/identity_providers.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: identity_providers.platform.proto package v1 diff --git a/proto/platform/iam/v1/role.platform.pb.go b/proto/platform/iam/v1/role.platform.pb.go index 28515544..816400c0 100644 --- a/proto/platform/iam/v1/role.platform.pb.go +++ b/proto/platform/iam/v1/role.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: role.platform.proto package v1 diff --git a/proto/platform/iam/v1/role.platform_grpc.pb.go b/proto/platform/iam/v1/role.platform_grpc.pb.go index c6456ef5..593891b8 100644 --- a/proto/platform/iam/v1/role.platform_grpc.pb.go +++ b/proto/platform/iam/v1/role.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: role.platform.proto package v1 diff --git a/proto/platform/iam/v1/role_binding.platform.pb.go b/proto/platform/iam/v1/role_binding.platform.pb.go index 40b25231..a0d6b4da 100644 --- a/proto/platform/iam/v1/role_binding.platform.pb.go +++ b/proto/platform/iam/v1/role_binding.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: role_binding.platform.proto package v1 diff --git a/proto/platform/iam/v1/role_binding.platform_grpc.pb.go b/proto/platform/iam/v1/role_binding.platform_grpc.pb.go index 2c8bbc27..70734cf3 100644 --- a/proto/platform/iam/v1/role_binding.platform_grpc.pb.go +++ b/proto/platform/iam/v1/role_binding.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: role_binding.platform.proto package v1 diff --git a/proto/platform/oidc/v1/oidc.platform.pb.go b/proto/platform/oidc/v1/oidc.platform.pb.go index d26d3b45..9b2888c5 100644 --- a/proto/platform/oidc/v1/oidc.platform.pb.go +++ b/proto/platform/oidc/v1/oidc.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: oidc.platform.proto package v1 diff --git a/proto/platform/oidc/v1/oidc.platform_grpc.pb.go b/proto/platform/oidc/v1/oidc.platform_grpc.pb.go index 80b069e5..f08ece4e 100644 --- a/proto/platform/oidc/v1/oidc.platform_grpc.pb.go +++ b/proto/platform/oidc/v1/oidc.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: oidc.platform.proto package v1 diff --git a/proto/platform/ping/v1/ping.platform.pb.go b/proto/platform/ping/v1/ping.platform.pb.go index d55b2916..45a42d39 100644 --- a/proto/platform/ping/v1/ping.platform.pb.go +++ b/proto/platform/ping/v1/ping.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: ping.platform.proto package v1 diff --git a/proto/platform/ping/v1/ping.platform_grpc.pb.go b/proto/platform/ping/v1/ping.platform_grpc.pb.go index f4feefd8..8367718d 100644 --- a/proto/platform/ping/v1/ping.platform_grpc.pb.go +++ b/proto/platform/ping/v1/ping.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: ping.platform.proto package v1 diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index c7785e57..0f8794dd 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: registry.platform.proto package v1 diff --git a/proto/platform/registry/v1/registry.platform_grpc.pb.go b/proto/platform/registry/v1/registry.platform_grpc.pb.go index e6f20a31..1ce0e110 100644 --- a/proto/platform/registry/v1/registry.platform_grpc.pb.go +++ b/proto/platform/registry/v1/registry.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: registry.platform.proto package v1 diff --git a/proto/platform/tenant/v1/attestation.platform.pb.go b/proto/platform/tenant/v1/attestation.platform.pb.go index f2036725..347da47a 100644 --- a/proto/platform/tenant/v1/attestation.platform.pb.go +++ b/proto/platform/tenant/v1/attestation.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: attestation.platform.proto package v1 diff --git a/proto/platform/tenant/v1/attestation.platform_grpc.pb.go b/proto/platform/tenant/v1/attestation.platform_grpc.pb.go index 321d546e..29dad01f 100644 --- a/proto/platform/tenant/v1/attestation.platform_grpc.pb.go +++ b/proto/platform/tenant/v1/attestation.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: attestation.platform.proto package v1 diff --git a/proto/platform/tenant/v1/sbom.platform.pb.go b/proto/platform/tenant/v1/sbom.platform.pb.go index 6db35c23..69a23ca4 100644 --- a/proto/platform/tenant/v1/sbom.platform.pb.go +++ b/proto/platform/tenant/v1/sbom.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: sbom.platform.proto package v1 diff --git a/proto/platform/tenant/v1/sbom.platform_grpc.pb.go b/proto/platform/tenant/v1/sbom.platform_grpc.pb.go index 4f8ecc26..85c02032 100644 --- a/proto/platform/tenant/v1/sbom.platform_grpc.pb.go +++ b/proto/platform/tenant/v1/sbom.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: sbom.platform.proto package v1 diff --git a/proto/platform/tenant/v1/signature.platform.pb.go b/proto/platform/tenant/v1/signature.platform.pb.go index 1320a8b7..40c8acfc 100644 --- a/proto/platform/tenant/v1/signature.platform.pb.go +++ b/proto/platform/tenant/v1/signature.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: signature.platform.proto package v1 diff --git a/proto/platform/tenant/v1/signature.platform_grpc.pb.go b/proto/platform/tenant/v1/signature.platform_grpc.pb.go index 52506e8c..86f0c51f 100644 --- a/proto/platform/tenant/v1/signature.platform_grpc.pb.go +++ b/proto/platform/tenant/v1/signature.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: signature.platform.proto package v1 diff --git a/proto/platform/tenant/v1/vuln.platform.pb.go b/proto/platform/tenant/v1/vuln.platform.pb.go index 2881b884..96be9e43 100644 --- a/proto/platform/tenant/v1/vuln.platform.pb.go +++ b/proto/platform/tenant/v1/vuln.platform.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.33.0 -// protoc v3.21.12 +// protoc v5.26.1 // source: vuln.platform.proto package v1 diff --git a/proto/platform/tenant/v1/vuln.platform_grpc.pb.go b/proto/platform/tenant/v1/vuln.platform_grpc.pb.go index 818be6ab..f11dfa37 100644 --- a/proto/platform/tenant/v1/vuln.platform_grpc.pb.go +++ b/proto/platform/tenant/v1/vuln.platform_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v3.21.12 +// - protoc v5.26.1 // source: vuln.platform.proto package v1 From 061962da67489cc9bc3b71f3584e9215fac4d1b9 Mon Sep 17 00:00:00 2001 From: Matt Moore Date: Tue, 30 Apr 2024 19:40:08 -0700 Subject: [PATCH 33/41] Export 651fc169533e8e6539d6cfd16278c60dda050cd0 Export: 651fc169533e8e6539d6cfd16278c60dda050cd0 --- .../registry/v1/registry.platform.pb.go | 1301 +++++++++-------- .../registry/v1/registry.platform.proto | 3 + 2 files changed, 660 insertions(+), 644 deletions(-) diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index 0f8794dd..a700c2c9 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -181,6 +181,8 @@ type SyncConfig struct { Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // Controls whether exported tags will be uniquely labeled. UniqueTags bool `protobuf:"varint,2,opt,name=unique_tags,json=uniqueTags,proto3" json:"unique_tags,omitempty"` + // When the catalog syncer should stop syncing from the source repository. + Expiration *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=expiration,proto3" json:"expiration,omitempty"` } func (x *SyncConfig) Reset() { @@ -229,6 +231,13 @@ func (x *SyncConfig) GetUniqueTags() bool { return false } +func (x *SyncConfig) GetExpiration() *timestamppb.Timestamp { + if x != nil { + return x.Expiration + } + return nil +} + type CreateRepoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2900,597 +2909,600 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x73, 0x79, 0x6e, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x45, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x22, 0x70, - 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, - 0x22, 0x2b, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, - 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, - 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x68, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, - 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, - 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, - 0x09, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, - 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, - 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, - 0x67, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, - 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, - 0x6e, 0x64, 0x22, 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, + 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x12, 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x22, 0xa1, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, - 0x5b, 0x0a, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, - 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, + 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x2b, 0x0a, + 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x08, 0x52, 0x65, + 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, + 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, - 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x68, + 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, + 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, + 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x09, 0x54, 0x61, + 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, + 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, + 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, + 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, + 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xa1, + 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, + 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, + 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x04, 0x08, 0x03, + 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, - 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, - 0x69, 0x66, 0x66, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x12, 0x4c, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, - 0x0a, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, - 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, - 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x6e, + 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, + 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, + 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x4c, 0x0a, + 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, + 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, 0x0a, 0x04, 0x63, + 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6d, 0x64, 0x44, + 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, + 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, 0x0a, 0x07, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, + 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x12, + 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, + 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, + 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, + 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, - 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, - 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, - 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x1a, 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, - 0x66, 0x12, 0x5c, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x46, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, - 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, - 0x62, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, - 0x60, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, - 0x65, 0x6e, 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, - 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 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, 0x4b, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, + 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x12, 0x5c, + 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, - 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 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, 0x46, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, 0x64, 0x65, 0x64, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x60, 0x0a, 0x0d, + 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, + 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, + 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x63, + 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x5f, + 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, + 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, + 0x6f, 0x72, 0x74, 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, 0x4b, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, + 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x08, 0x0a, 0x06, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, - 0x69, 0x66, 0x66, 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x1a, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x48, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, - 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, + 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, 0xc3, + 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, + 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, - 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, - 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, - 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x45, 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, - 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, - 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, - 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, - 0x46, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, - 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, - 0x72, 0x63, 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, - 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, - 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, - 0xd8, 0x01, 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, - 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, - 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, - 0x50, 0x75, 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, + 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, + 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, + 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, - 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, + 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, + 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, + 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, + 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, 0x66, + 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x0b, + 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, + 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, + 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, + 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, + 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, - 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, - 0x44, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, - 0x4d, 0x10, 0x03, 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x12, 0xe4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, - 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x52, 0x65, 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, - 0x65, 0x70, 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, - 0xc3, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, - 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, + 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, - 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, - 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, - 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, - 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, - 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, - 0x2a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, - 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, 0x0a, + 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, + 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, + 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, 0x72, + 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, + 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, 0x66, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, + 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, + 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, + 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, + 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, + 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, - 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, - 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, - 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, + 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, + 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, + 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, - 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, - 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, - 0xcd, 0x0c, 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, - 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, - 0x02, 0xcd, 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, + 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, - 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x39, 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, + 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, + 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x40, 0x12, 0x3e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, - 0xbd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, + 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, + 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, - 0xc5, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, + 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, + 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, + 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, + 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x76, 0x31, 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, + 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, + 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, + 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, + 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, + 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, + 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, + 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, 0xbd, 0x01, 0x0a, + 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2f, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, + 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, + 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, + 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, + 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, 0xc5, 0x01, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, + 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x42, + 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3559,8 +3571,8 @@ var file_registry_platform_proto_goTypes = []interface{}{ nil, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry nil, // 49: chainguard.platform.registry.ImageConfig.LabelsEntry (*PackagesDiff_ChangedPackageReference)(nil), // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference - (*v1.UIDPFilter)(nil), // 51: chainguard.platform.common.UIDPFilter - (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp + (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 52: chainguard.platform.common.UIDPFilter (*v11.Scanner)(nil), // 53: chainguard.platform.tenant.Scanner (*emptypb.Empty)(nil), // 54: google.protobuf.Empty (*v11.Sbom2)(nil), // 55: chainguard.platform.tenant.Sbom2 @@ -3569,87 +3581,88 @@ var file_registry_platform_proto_goTypes = []interface{}{ var file_registry_platform_proto_depIdxs = []int32{ 0, // 0: chainguard.platform.registry.Repo.catalog_tier:type_name -> chainguard.platform.registry.CatalogTier 2, // 1: chainguard.platform.registry.Repo.sync_config:type_name -> chainguard.platform.registry.SyncConfig - 1, // 2: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo - 1, // 3: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo - 51, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 9, // 5: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag - 52, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp - 51, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 52, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp - 9, // 9: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag - 52, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp - 52, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp - 14, // 12: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory - 52, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp - 19, // 14: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff - 22, // 15: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff - 16, // 16: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff - 17, // 17: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig - 35, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser - 36, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - 37, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - 38, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff - 39, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff - 40, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - 42, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff - 46, // 25: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry - 48, // 26: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry - 49, // 27: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry - 21, // 28: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference - 21, // 29: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference - 50, // 30: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference - 24, // 31: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference - 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference - 23, // 33: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata - 53, // 34: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner - 52, // 35: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp - 29, // 36: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter - 30, // 37: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry - 52, // 38: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp - 52, // 39: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp - 32, // 40: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata - 33, // 41: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata - 43, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - 44, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - 41, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 45, // 46: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort - 47, // 47: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume - 20, // 48: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference - 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference - 3, // 50: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest - 1, // 51: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo - 6, // 52: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter - 4, // 53: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest - 7, // 54: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest - 9, // 55: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag - 8, // 56: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest - 10, // 57: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter - 12, // 58: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter - 25, // 59: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest - 26, // 60: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest - 27, // 61: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest - 28, // 62: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest - 31, // 63: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter - 1, // 64: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo - 1, // 65: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo - 5, // 66: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList - 54, // 67: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty - 9, // 68: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag - 9, // 69: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag - 54, // 70: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty - 11, // 71: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList - 13, // 72: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList - 15, // 73: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse - 55, // 74: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 - 18, // 75: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig - 56, // 76: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport - 34, // 77: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList - 64, // [64:78] is the sub-list for method output_type - 50, // [50:64] is the sub-list for method input_type - 50, // [50:50] is the sub-list for extension type_name - 50, // [50:50] is the sub-list for extension extendee - 0, // [0:50] is the sub-list for field type_name + 51, // 2: chainguard.platform.registry.SyncConfig.expiration:type_name -> google.protobuf.Timestamp + 1, // 3: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo + 1, // 4: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo + 52, // 5: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 9, // 6: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag + 51, // 7: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp + 52, // 8: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 51, // 9: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp + 9, // 10: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag + 51, // 11: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp + 51, // 12: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp + 14, // 13: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory + 51, // 14: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp + 19, // 15: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff + 22, // 16: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff + 16, // 17: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff + 17, // 18: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig + 35, // 19: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser + 36, // 20: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + 37, // 21: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + 38, // 22: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff + 39, // 23: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff + 40, // 24: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + 42, // 25: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff + 46, // 26: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry + 48, // 27: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry + 49, // 28: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry + 21, // 29: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference + 21, // 30: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference + 50, // 31: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference + 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference + 24, // 33: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference + 23, // 34: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata + 53, // 35: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner + 51, // 36: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp + 29, // 37: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter + 30, // 38: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry + 51, // 39: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp + 51, // 40: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp + 32, // 41: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata + 33, // 42: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata + 43, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + 44, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 41, // 46: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 45, // 47: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort + 47, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume + 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference + 20, // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference + 3, // 51: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest + 1, // 52: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo + 6, // 53: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter + 4, // 54: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest + 7, // 55: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest + 9, // 56: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag + 8, // 57: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest + 10, // 58: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter + 12, // 59: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter + 25, // 60: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest + 26, // 61: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest + 27, // 62: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest + 28, // 63: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest + 31, // 64: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter + 1, // 65: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo + 1, // 66: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo + 5, // 67: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList + 54, // 68: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty + 9, // 69: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag + 9, // 70: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag + 54, // 71: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty + 11, // 72: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList + 13, // 73: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList + 15, // 74: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse + 55, // 75: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 + 18, // 76: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig + 56, // 77: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport + 34, // 78: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList + 65, // [65:79] is the sub-list for method output_type + 51, // [51:65] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_registry_platform_proto_init() } diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto index 43f7dc8f..f3ac9395 100644 --- a/proto/platform/registry/v1/registry.platform.proto +++ b/proto/platform/registry/v1/registry.platform.proto @@ -242,6 +242,9 @@ message SyncConfig { // Controls whether exported tags will be uniquely labeled. bool unique_tags = 2; + + // When the catalog syncer should stop syncing from the source repository. + google.protobuf.Timestamp expiration = 3; } message CreateRepoRequest { From 93842880cfc4ff39c73c67f5305534f9d6f8e4f7 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Tue, 30 Apr 2024 19:53:10 -0700 Subject: [PATCH 34/41] Export bb2b985b20049e156a090a7ccd142d3c434f46e3 Export: bb2b985b20049e156a090a7ccd142d3c434f46e3 --- .github/workflows/verify.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml index 7b8366ca..33939348 100644 --- a/.github/workflows/verify.yaml +++ b/.github/workflows/verify.yaml @@ -52,7 +52,7 @@ jobs: - name: Install Protoc run: | cd "$(mktemp -d)" - wget -O protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-linux-x86_64.zip + wget -O protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v26.1/protoc-26.1-linux-x86_64.zip unzip protoc.zip -d . chmod +x ./bin/protoc echo "$(pwd)/bin" >> "$GITHUB_PATH" From 8f0fcb7d5f021dda7ef8b9b07abef5e874e09630 Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Wed, 1 May 2024 11:55:35 -0400 Subject: [PATCH 35/41] Export 80c5fec7641b5813ab3c8f7967a0e490b1c21228 Export: 80c5fec7641b5813ab3c8f7967a0e490b1c21228 --- .../registry/v1/registry.platform.pb.go | 1301 ++++++++--------- .../registry/v1/registry.platform.proto | 3 - 2 files changed, 644 insertions(+), 660 deletions(-) diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index a700c2c9..0f8794dd 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -181,8 +181,6 @@ type SyncConfig struct { Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // Controls whether exported tags will be uniquely labeled. UniqueTags bool `protobuf:"varint,2,opt,name=unique_tags,json=uniqueTags,proto3" json:"unique_tags,omitempty"` - // When the catalog syncer should stop syncing from the source repository. - Expiration *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=expiration,proto3" json:"expiration,omitempty"` } func (x *SyncConfig) Reset() { @@ -231,13 +229,6 @@ func (x *SyncConfig) GetUniqueTags() bool { return false } -func (x *SyncConfig) GetExpiration() *timestamppb.Timestamp { - if x != nil { - return x.Expiration - } - return nil -} - type CreateRepoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2909,600 +2900,597 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x73, 0x79, 0x6e, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, - 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x11, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x45, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x22, 0x70, + 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x22, 0x2b, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, + 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, + 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x68, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, + 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x2b, 0x0a, - 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x08, 0x52, 0x65, - 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, - 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x68, - 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, - 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, - 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x09, 0x54, 0x61, - 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, - 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, - 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, - 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, + 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xa1, - 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, - 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, - 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, + 0x09, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, + 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, + 0x67, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, + 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, + 0x6e, 0x64, 0x22, 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, - 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x4c, 0x0a, - 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, - 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, 0x0a, 0x04, 0x63, - 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x22, 0xa1, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x5b, 0x0a, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, + 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6d, 0x64, 0x44, - 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, - 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, 0x0a, 0x07, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, + 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, + 0x69, 0x66, 0x66, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x12, 0x4c, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, + 0x0a, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x12, - 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, - 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, + 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, + 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, + 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, - 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x12, 0x5c, - 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, 0x64, 0x65, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, + 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, + 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, + 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, + 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x1a, 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, + 0x66, 0x12, 0x5c, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x46, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, + 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, + 0x62, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, + 0x60, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, + 0x65, 0x6e, 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, + 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, + 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, + 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 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, 0x4b, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x60, 0x0a, 0x0d, - 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, - 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x63, - 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x5f, - 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, - 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, - 0x6f, 0x72, 0x74, 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, 0x4b, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, + 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 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, 0x46, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, - 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x08, 0x0a, 0x06, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, - 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, 0xc3, - 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, - 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, - 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, + 0x69, 0x66, 0x66, 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x1a, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x48, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, - 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, + 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, + 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, + 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x45, 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, + 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, + 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, - 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, - 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, - 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, + 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, + 0x46, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, + 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, + 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, + 0x72, 0x63, 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, + 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, + 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, + 0xd8, 0x01, 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, + 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, + 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x50, 0x75, 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, - 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, - 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, - 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, 0x66, - 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x0b, - 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, - 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, - 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, - 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, - 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, + 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, - 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, + 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, + 0x44, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, + 0x4d, 0x10, 0x03, 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x12, 0xe4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, + 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, + 0x65, 0x70, 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, + 0xc3, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, + 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, 0x0a, - 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, - 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, 0x72, - 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, - 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, + 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, + 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, + 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, + 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, + 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, + 0x2a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, + 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, - 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, - 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, - 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, - 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, - 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, - 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, - 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, - 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, + 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, + 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, + 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, + 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, + 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, + 0xcd, 0x0c, 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, - 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, + 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, + 0x02, 0xcd, 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, - 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, + 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, + 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, - 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, - 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x39, 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, + 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x40, 0x12, 0x3e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, + 0xbd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, - 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, - 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, - 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, + 0xc5, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, - 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, - 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, - 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, - 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, - 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, - 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, - 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, - 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, 0xbd, 0x01, 0x0a, - 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2f, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, - 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, - 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, - 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, 0xc5, 0x01, 0x0a, - 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, - 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x42, - 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x76, 0x31, 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -3571,8 +3559,8 @@ var file_registry_platform_proto_goTypes = []interface{}{ nil, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry nil, // 49: chainguard.platform.registry.ImageConfig.LabelsEntry (*PackagesDiff_ChangedPackageReference)(nil), // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference - (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 52: chainguard.platform.common.UIDPFilter + (*v1.UIDPFilter)(nil), // 51: chainguard.platform.common.UIDPFilter + (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp (*v11.Scanner)(nil), // 53: chainguard.platform.tenant.Scanner (*emptypb.Empty)(nil), // 54: google.protobuf.Empty (*v11.Sbom2)(nil), // 55: chainguard.platform.tenant.Sbom2 @@ -3581,88 +3569,87 @@ var file_registry_platform_proto_goTypes = []interface{}{ var file_registry_platform_proto_depIdxs = []int32{ 0, // 0: chainguard.platform.registry.Repo.catalog_tier:type_name -> chainguard.platform.registry.CatalogTier 2, // 1: chainguard.platform.registry.Repo.sync_config:type_name -> chainguard.platform.registry.SyncConfig - 51, // 2: chainguard.platform.registry.SyncConfig.expiration:type_name -> google.protobuf.Timestamp - 1, // 3: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo - 1, // 4: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo - 52, // 5: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 9, // 6: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag - 51, // 7: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp - 52, // 8: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 51, // 9: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp - 9, // 10: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag - 51, // 11: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp - 51, // 12: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp - 14, // 13: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory - 51, // 14: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp - 19, // 15: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff - 22, // 16: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff - 16, // 17: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff - 17, // 18: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig - 35, // 19: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser - 36, // 20: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - 37, // 21: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - 38, // 22: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff - 39, // 23: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff - 40, // 24: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - 42, // 25: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff - 46, // 26: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry - 48, // 27: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry - 49, // 28: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry - 21, // 29: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference - 21, // 30: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference - 50, // 31: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference - 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference - 24, // 33: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference - 23, // 34: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata - 53, // 35: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner - 51, // 36: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp - 29, // 37: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter - 30, // 38: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry - 51, // 39: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp - 51, // 40: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp - 32, // 41: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata - 33, // 42: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata - 43, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - 44, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 41, // 46: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 45, // 47: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort - 47, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume - 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference - 20, // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference - 3, // 51: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest - 1, // 52: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo - 6, // 53: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter - 4, // 54: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest - 7, // 55: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest - 9, // 56: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag - 8, // 57: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest - 10, // 58: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter - 12, // 59: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter - 25, // 60: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest - 26, // 61: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest - 27, // 62: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest - 28, // 63: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest - 31, // 64: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter - 1, // 65: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo - 1, // 66: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo - 5, // 67: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList - 54, // 68: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty - 9, // 69: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag - 9, // 70: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag - 54, // 71: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty - 11, // 72: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList - 13, // 73: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList - 15, // 74: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse - 55, // 75: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 - 18, // 76: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig - 56, // 77: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport - 34, // 78: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList - 65, // [65:79] is the sub-list for method output_type - 51, // [51:65] is the sub-list for method input_type - 51, // [51:51] is the sub-list for extension type_name - 51, // [51:51] is the sub-list for extension extendee - 0, // [0:51] is the sub-list for field type_name + 1, // 2: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo + 1, // 3: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo + 51, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 9, // 5: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag + 52, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp + 51, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 52, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp + 9, // 9: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag + 52, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp + 52, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp + 14, // 12: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory + 52, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp + 19, // 14: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff + 22, // 15: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff + 16, // 16: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff + 17, // 17: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig + 35, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser + 36, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + 37, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + 38, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff + 39, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff + 40, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + 42, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff + 46, // 25: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry + 48, // 26: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry + 49, // 27: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry + 21, // 28: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference + 21, // 29: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference + 50, // 30: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference + 24, // 31: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference + 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference + 23, // 33: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata + 53, // 34: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner + 52, // 35: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp + 29, // 36: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter + 30, // 37: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry + 52, // 38: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp + 52, // 39: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp + 32, // 40: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata + 33, // 41: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata + 43, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + 44, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + 41, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 45, // 46: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort + 47, // 47: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume + 20, // 48: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference + 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference + 3, // 50: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest + 1, // 51: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo + 6, // 52: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter + 4, // 53: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest + 7, // 54: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest + 9, // 55: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag + 8, // 56: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest + 10, // 57: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter + 12, // 58: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter + 25, // 59: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest + 26, // 60: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest + 27, // 61: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest + 28, // 62: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest + 31, // 63: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter + 1, // 64: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo + 1, // 65: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo + 5, // 66: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList + 54, // 67: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty + 9, // 68: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag + 9, // 69: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag + 54, // 70: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty + 11, // 71: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList + 13, // 72: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList + 15, // 73: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse + 55, // 74: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 + 18, // 75: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig + 56, // 76: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport + 34, // 77: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList + 64, // [64:78] is the sub-list for method output_type + 50, // [50:64] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_registry_platform_proto_init() } diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto index f3ac9395..43f7dc8f 100644 --- a/proto/platform/registry/v1/registry.platform.proto +++ b/proto/platform/registry/v1/registry.platform.proto @@ -242,9 +242,6 @@ message SyncConfig { // Controls whether exported tags will be uniquely labeled. bool unique_tags = 2; - - // When the catalog syncer should stop syncing from the source repository. - google.protobuf.Timestamp expiration = 3; } message CreateRepoRequest { From 22226d5f672dce0651a97e4937ae6241791a694b Mon Sep 17 00:00:00 2001 From: Matt Moore Date: Wed, 1 May 2024 09:57:58 -0700 Subject: [PATCH 36/41] Export d32da0b797c348bde7ce4237303052ff28b3f737 Export: d32da0b797c348bde7ce4237303052ff28b3f737 --- .../registry/v1/registry.platform.pb.go | 1301 +++++++++-------- .../registry/v1/registry.platform.proto | 3 + 2 files changed, 660 insertions(+), 644 deletions(-) diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index 0f8794dd..a700c2c9 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -181,6 +181,8 @@ type SyncConfig struct { Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // Controls whether exported tags will be uniquely labeled. UniqueTags bool `protobuf:"varint,2,opt,name=unique_tags,json=uniqueTags,proto3" json:"unique_tags,omitempty"` + // When the catalog syncer should stop syncing from the source repository. + Expiration *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=expiration,proto3" json:"expiration,omitempty"` } func (x *SyncConfig) Reset() { @@ -229,6 +231,13 @@ func (x *SyncConfig) GetUniqueTags() bool { return false } +func (x *SyncConfig) GetExpiration() *timestamppb.Timestamp { + if x != nil { + return x.Expiration + } + return nil +} + type CreateRepoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2900,597 +2909,600 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x73, 0x79, 0x6e, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x45, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x22, 0x70, - 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, - 0x22, 0x2b, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, - 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, - 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x68, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, - 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, - 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, - 0x09, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, - 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, - 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, - 0x67, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, - 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, - 0x6e, 0x64, 0x22, 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, + 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x12, 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x22, 0xa1, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, - 0x5b, 0x0a, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, - 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, + 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x2b, 0x0a, + 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x08, 0x52, 0x65, + 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, + 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, - 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x68, + 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, + 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, + 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x09, 0x54, 0x61, + 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, + 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, + 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, + 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, + 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xa1, + 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, + 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, + 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x04, 0x08, 0x03, + 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, - 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, - 0x69, 0x66, 0x66, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x12, 0x4c, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, - 0x0a, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, - 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, - 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x6e, + 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, + 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, + 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x4c, 0x0a, + 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, + 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, 0x0a, 0x04, 0x63, + 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6d, 0x64, 0x44, + 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, + 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, 0x0a, 0x07, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, + 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x12, + 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, + 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, + 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, + 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, - 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, - 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, - 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x1a, 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, - 0x66, 0x12, 0x5c, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x46, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, - 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, - 0x62, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, - 0x60, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, - 0x65, 0x6e, 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, - 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 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, 0x4b, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, + 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x12, 0x5c, + 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, - 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 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, 0x46, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, 0x64, 0x65, 0x64, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x60, 0x0a, 0x0d, + 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, + 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, + 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x63, + 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x5f, + 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, + 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, + 0x6f, 0x72, 0x74, 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, 0x4b, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, + 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x08, 0x0a, 0x06, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, - 0x69, 0x66, 0x66, 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x1a, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x48, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, - 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, + 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, 0xc3, + 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, + 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, - 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, - 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, - 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x45, 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, - 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, - 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, - 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, - 0x46, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, - 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, - 0x72, 0x63, 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, - 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, - 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, - 0xd8, 0x01, 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, - 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, - 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, - 0x50, 0x75, 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, + 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, + 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, + 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, - 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, + 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, + 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, + 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, + 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, 0x66, + 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x0b, + 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, + 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, + 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, + 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, + 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, - 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, - 0x44, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, - 0x4d, 0x10, 0x03, 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x12, 0xe4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, - 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x52, 0x65, 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, - 0x65, 0x70, 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, - 0xc3, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, - 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, + 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, - 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, - 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, - 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, - 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, - 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, - 0x2a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, - 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, 0x0a, + 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, + 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, + 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, 0x72, + 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, + 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, 0x66, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, + 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, + 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, + 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, + 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, + 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, - 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, - 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, - 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, + 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, + 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, + 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, - 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, - 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, - 0xcd, 0x0c, 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, - 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, - 0x02, 0xcd, 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, + 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, - 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x39, 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, + 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, + 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x40, 0x12, 0x3e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, - 0xbd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, + 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, + 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, - 0xc5, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, + 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, + 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, + 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, + 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x76, 0x31, 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, + 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, + 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, + 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, + 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, + 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, + 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, + 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, 0xbd, 0x01, 0x0a, + 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2f, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, + 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, + 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, + 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, + 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, 0xc5, 0x01, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, + 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x42, + 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3559,8 +3571,8 @@ var file_registry_platform_proto_goTypes = []interface{}{ nil, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry nil, // 49: chainguard.platform.registry.ImageConfig.LabelsEntry (*PackagesDiff_ChangedPackageReference)(nil), // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference - (*v1.UIDPFilter)(nil), // 51: chainguard.platform.common.UIDPFilter - (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp + (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 52: chainguard.platform.common.UIDPFilter (*v11.Scanner)(nil), // 53: chainguard.platform.tenant.Scanner (*emptypb.Empty)(nil), // 54: google.protobuf.Empty (*v11.Sbom2)(nil), // 55: chainguard.platform.tenant.Sbom2 @@ -3569,87 +3581,88 @@ var file_registry_platform_proto_goTypes = []interface{}{ var file_registry_platform_proto_depIdxs = []int32{ 0, // 0: chainguard.platform.registry.Repo.catalog_tier:type_name -> chainguard.platform.registry.CatalogTier 2, // 1: chainguard.platform.registry.Repo.sync_config:type_name -> chainguard.platform.registry.SyncConfig - 1, // 2: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo - 1, // 3: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo - 51, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 9, // 5: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag - 52, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp - 51, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 52, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp - 9, // 9: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag - 52, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp - 52, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp - 14, // 12: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory - 52, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp - 19, // 14: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff - 22, // 15: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff - 16, // 16: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff - 17, // 17: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig - 35, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser - 36, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - 37, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - 38, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff - 39, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff - 40, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - 42, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff - 46, // 25: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry - 48, // 26: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry - 49, // 27: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry - 21, // 28: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference - 21, // 29: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference - 50, // 30: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference - 24, // 31: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference - 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference - 23, // 33: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata - 53, // 34: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner - 52, // 35: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp - 29, // 36: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter - 30, // 37: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry - 52, // 38: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp - 52, // 39: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp - 32, // 40: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata - 33, // 41: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata - 43, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - 44, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - 41, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 45, // 46: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort - 47, // 47: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume - 20, // 48: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference - 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference - 3, // 50: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest - 1, // 51: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo - 6, // 52: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter - 4, // 53: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest - 7, // 54: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest - 9, // 55: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag - 8, // 56: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest - 10, // 57: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter - 12, // 58: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter - 25, // 59: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest - 26, // 60: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest - 27, // 61: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest - 28, // 62: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest - 31, // 63: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter - 1, // 64: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo - 1, // 65: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo - 5, // 66: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList - 54, // 67: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty - 9, // 68: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag - 9, // 69: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag - 54, // 70: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty - 11, // 71: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList - 13, // 72: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList - 15, // 73: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse - 55, // 74: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 - 18, // 75: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig - 56, // 76: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport - 34, // 77: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList - 64, // [64:78] is the sub-list for method output_type - 50, // [50:64] is the sub-list for method input_type - 50, // [50:50] is the sub-list for extension type_name - 50, // [50:50] is the sub-list for extension extendee - 0, // [0:50] is the sub-list for field type_name + 51, // 2: chainguard.platform.registry.SyncConfig.expiration:type_name -> google.protobuf.Timestamp + 1, // 3: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo + 1, // 4: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo + 52, // 5: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 9, // 6: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag + 51, // 7: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp + 52, // 8: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 51, // 9: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp + 9, // 10: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag + 51, // 11: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp + 51, // 12: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp + 14, // 13: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory + 51, // 14: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp + 19, // 15: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff + 22, // 16: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff + 16, // 17: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff + 17, // 18: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig + 35, // 19: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser + 36, // 20: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + 37, // 21: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + 38, // 22: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff + 39, // 23: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff + 40, // 24: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + 42, // 25: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff + 46, // 26: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry + 48, // 27: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry + 49, // 28: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry + 21, // 29: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference + 21, // 30: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference + 50, // 31: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference + 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference + 24, // 33: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference + 23, // 34: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata + 53, // 35: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner + 51, // 36: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp + 29, // 37: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter + 30, // 38: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry + 51, // 39: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp + 51, // 40: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp + 32, // 41: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata + 33, // 42: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata + 43, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + 44, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 41, // 46: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 45, // 47: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort + 47, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume + 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference + 20, // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference + 3, // 51: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest + 1, // 52: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo + 6, // 53: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter + 4, // 54: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest + 7, // 55: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest + 9, // 56: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag + 8, // 57: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest + 10, // 58: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter + 12, // 59: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter + 25, // 60: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest + 26, // 61: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest + 27, // 62: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest + 28, // 63: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest + 31, // 64: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter + 1, // 65: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo + 1, // 66: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo + 5, // 67: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList + 54, // 68: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty + 9, // 69: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag + 9, // 70: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag + 54, // 71: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty + 11, // 72: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList + 13, // 73: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList + 15, // 74: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse + 55, // 75: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 + 18, // 76: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig + 56, // 77: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport + 34, // 78: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList + 65, // [65:79] is the sub-list for method output_type + 51, // [51:65] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_registry_platform_proto_init() } diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto index 43f7dc8f..f3ac9395 100644 --- a/proto/platform/registry/v1/registry.platform.proto +++ b/proto/platform/registry/v1/registry.platform.proto @@ -242,6 +242,9 @@ message SyncConfig { // Controls whether exported tags will be uniquely labeled. bool unique_tags = 2; + + // When the catalog syncer should stop syncing from the source repository. + google.protobuf.Timestamp expiration = 3; } message CreateRepoRequest { From 2f792c8b1541a8a4b1bcb0da93c56c1c147422fd Mon Sep 17 00:00:00 2001 From: Matt Moore Date: Wed, 1 May 2024 12:08:08 -0700 Subject: [PATCH 37/41] Export 7a6c4c5e9a09d7b03887f684b0b4516579836b72 Export: 7a6c4c5e9a09d7b03887f684b0b4516579836b72 --- .../registry/v1/registry.platform.pb.go | 1301 ++++++++--------- .../registry/v1/registry.platform.proto | 3 - 2 files changed, 644 insertions(+), 660 deletions(-) diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index a700c2c9..0f8794dd 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -181,8 +181,6 @@ type SyncConfig struct { Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // Controls whether exported tags will be uniquely labeled. UniqueTags bool `protobuf:"varint,2,opt,name=unique_tags,json=uniqueTags,proto3" json:"unique_tags,omitempty"` - // When the catalog syncer should stop syncing from the source repository. - Expiration *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=expiration,proto3" json:"expiration,omitempty"` } func (x *SyncConfig) Reset() { @@ -231,13 +229,6 @@ func (x *SyncConfig) GetUniqueTags() bool { return false } -func (x *SyncConfig) GetExpiration() *timestamppb.Timestamp { - if x != nil { - return x.Expiration - } - return nil -} - type CreateRepoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2909,600 +2900,597 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x73, 0x79, 0x6e, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, - 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x11, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x45, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x22, 0x70, + 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x22, 0x2b, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, + 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, + 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x68, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, + 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x2b, 0x0a, - 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x08, 0x52, 0x65, - 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, - 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x68, - 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, - 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, - 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x09, 0x54, 0x61, - 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, - 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, - 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, - 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, + 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xa1, - 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, - 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, - 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, + 0x09, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, + 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, + 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, + 0x6f, 0x63, 0x68, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, + 0x67, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, + 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, + 0x6e, 0x64, 0x22, 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, - 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x4c, 0x0a, - 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, - 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, 0x0a, 0x04, 0x63, - 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x12, 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x22, 0xa1, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, + 0x5b, 0x0a, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, + 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6d, 0x64, 0x44, - 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, - 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, 0x0a, 0x07, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, + 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, + 0x69, 0x66, 0x66, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x12, 0x4c, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, + 0x0a, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x12, - 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, - 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, + 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, + 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, + 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, - 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x12, 0x5c, - 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, 0x64, 0x65, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, + 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, + 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, + 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, + 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x1a, 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, + 0x66, 0x12, 0x5c, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x46, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, + 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, + 0x62, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, + 0x60, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, + 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, + 0x65, 0x6e, 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, + 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, + 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, + 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 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, 0x4b, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x60, 0x0a, 0x0d, - 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, - 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x63, - 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x5f, - 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, - 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, - 0x6f, 0x72, 0x74, 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, 0x4b, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, + 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 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, 0x46, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, - 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x08, 0x0a, 0x06, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, - 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, 0xc3, - 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, - 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, - 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, + 0x69, 0x66, 0x66, 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x1a, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, + 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x48, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, - 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, + 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, + 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, + 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, + 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x45, 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, + 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, + 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, - 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, - 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, - 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, + 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, + 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, + 0x46, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, + 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, + 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, + 0x72, 0x63, 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, + 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, + 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, + 0xd8, 0x01, 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, + 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, + 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x50, 0x75, 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, - 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, - 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, - 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, 0x66, - 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x0b, - 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, - 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, - 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, - 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, - 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, + 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, - 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, + 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, + 0x44, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, + 0x4d, 0x10, 0x03, 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x12, 0xe4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, + 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x52, 0x65, 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, + 0x65, 0x70, 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, + 0xc3, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, + 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, 0x0a, - 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, - 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, 0x72, - 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, - 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, + 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, + 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, + 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, + 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, + 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, + 0x2a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, + 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, - 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, - 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, - 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, - 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, - 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, - 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, - 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, - 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, + 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, + 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, + 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, + 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, + 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, + 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, + 0xcd, 0x0c, 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, - 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, + 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, + 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, + 0x02, 0xcd, 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, - 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, + 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, + 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, - 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, - 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x39, 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, + 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x40, 0x12, 0x3e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, + 0xbd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, - 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, - 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, - 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, + 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, + 0xc5, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, - 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, - 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, - 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, - 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, - 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, - 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, - 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, - 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, 0xbd, 0x01, 0x0a, - 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2f, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, - 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, - 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, - 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, 0xc5, 0x01, 0x0a, - 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, - 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x42, - 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, + 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x76, 0x31, 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -3571,8 +3559,8 @@ var file_registry_platform_proto_goTypes = []interface{}{ nil, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry nil, // 49: chainguard.platform.registry.ImageConfig.LabelsEntry (*PackagesDiff_ChangedPackageReference)(nil), // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference - (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp - (*v1.UIDPFilter)(nil), // 52: chainguard.platform.common.UIDPFilter + (*v1.UIDPFilter)(nil), // 51: chainguard.platform.common.UIDPFilter + (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp (*v11.Scanner)(nil), // 53: chainguard.platform.tenant.Scanner (*emptypb.Empty)(nil), // 54: google.protobuf.Empty (*v11.Sbom2)(nil), // 55: chainguard.platform.tenant.Sbom2 @@ -3581,88 +3569,87 @@ var file_registry_platform_proto_goTypes = []interface{}{ var file_registry_platform_proto_depIdxs = []int32{ 0, // 0: chainguard.platform.registry.Repo.catalog_tier:type_name -> chainguard.platform.registry.CatalogTier 2, // 1: chainguard.platform.registry.Repo.sync_config:type_name -> chainguard.platform.registry.SyncConfig - 51, // 2: chainguard.platform.registry.SyncConfig.expiration:type_name -> google.protobuf.Timestamp - 1, // 3: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo - 1, // 4: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo - 52, // 5: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 9, // 6: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag - 51, // 7: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp - 52, // 8: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 51, // 9: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp - 9, // 10: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag - 51, // 11: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp - 51, // 12: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp - 14, // 13: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory - 51, // 14: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp - 19, // 15: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff - 22, // 16: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff - 16, // 17: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff - 17, // 18: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig - 35, // 19: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser - 36, // 20: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - 37, // 21: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - 38, // 22: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff - 39, // 23: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff - 40, // 24: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - 42, // 25: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff - 46, // 26: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry - 48, // 27: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry - 49, // 28: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry - 21, // 29: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference - 21, // 30: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference - 50, // 31: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference - 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference - 24, // 33: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference - 23, // 34: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata - 53, // 35: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner - 51, // 36: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp - 29, // 37: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter - 30, // 38: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry - 51, // 39: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp - 51, // 40: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp - 32, // 41: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata - 33, // 42: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata - 43, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - 44, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 41, // 46: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 45, // 47: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort - 47, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume - 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference - 20, // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference - 3, // 51: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest - 1, // 52: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo - 6, // 53: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter - 4, // 54: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest - 7, // 55: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest - 9, // 56: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag - 8, // 57: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest - 10, // 58: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter - 12, // 59: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter - 25, // 60: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest - 26, // 61: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest - 27, // 62: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest - 28, // 63: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest - 31, // 64: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter - 1, // 65: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo - 1, // 66: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo - 5, // 67: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList - 54, // 68: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty - 9, // 69: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag - 9, // 70: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag - 54, // 71: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty - 11, // 72: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList - 13, // 73: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList - 15, // 74: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse - 55, // 75: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 - 18, // 76: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig - 56, // 77: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport - 34, // 78: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList - 65, // [65:79] is the sub-list for method output_type - 51, // [51:65] is the sub-list for method input_type - 51, // [51:51] is the sub-list for extension type_name - 51, // [51:51] is the sub-list for extension extendee - 0, // [0:51] is the sub-list for field type_name + 1, // 2: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo + 1, // 3: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo + 51, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 9, // 5: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag + 52, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp + 51, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 52, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp + 9, // 9: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag + 52, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp + 52, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp + 14, // 12: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory + 52, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp + 19, // 14: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff + 22, // 15: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff + 16, // 16: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff + 17, // 17: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig + 35, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser + 36, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + 37, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + 38, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff + 39, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff + 40, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + 42, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff + 46, // 25: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry + 48, // 26: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry + 49, // 27: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry + 21, // 28: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference + 21, // 29: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference + 50, // 30: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference + 24, // 31: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference + 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference + 23, // 33: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata + 53, // 34: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner + 52, // 35: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp + 29, // 36: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter + 30, // 37: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry + 52, // 38: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp + 52, // 39: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp + 32, // 40: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata + 33, // 41: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata + 43, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + 44, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + 41, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 45, // 46: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort + 47, // 47: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume + 20, // 48: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference + 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference + 3, // 50: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest + 1, // 51: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo + 6, // 52: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter + 4, // 53: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest + 7, // 54: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest + 9, // 55: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag + 8, // 56: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest + 10, // 57: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter + 12, // 58: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter + 25, // 59: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest + 26, // 60: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest + 27, // 61: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest + 28, // 62: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest + 31, // 63: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter + 1, // 64: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo + 1, // 65: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo + 5, // 66: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList + 54, // 67: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty + 9, // 68: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag + 9, // 69: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag + 54, // 70: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty + 11, // 71: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList + 13, // 72: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList + 15, // 73: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse + 55, // 74: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 + 18, // 75: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig + 56, // 76: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport + 34, // 77: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList + 64, // [64:78] is the sub-list for method output_type + 50, // [50:64] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_registry_platform_proto_init() } diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto index f3ac9395..43f7dc8f 100644 --- a/proto/platform/registry/v1/registry.platform.proto +++ b/proto/platform/registry/v1/registry.platform.proto @@ -242,9 +242,6 @@ message SyncConfig { // Controls whether exported tags will be uniquely labeled. bool unique_tags = 2; - - // When the catalog syncer should stop syncing from the source repository. - google.protobuf.Timestamp expiration = 3; } message CreateRepoRequest { From c6e5c0490bf1bfb9f0c8f2e15e930b7b18f3928e Mon Sep 17 00:00:00 2001 From: Matt Moore Date: Thu, 2 May 2024 08:29:31 -0700 Subject: [PATCH 38/41] Export c6fb2950ad10bc0134a614dda9d216e89cdc03cf Export: c6fb2950ad10bc0134a614dda9d216e89cdc03cf --- .../registry/v1/registry.platform.pb.go | 1301 +++++++++-------- .../registry/v1/registry.platform.proto | 3 + 2 files changed, 660 insertions(+), 644 deletions(-) diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index 0f8794dd..a700c2c9 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -181,6 +181,8 @@ type SyncConfig struct { Source string `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` // Controls whether exported tags will be uniquely labeled. UniqueTags bool `protobuf:"varint,2,opt,name=unique_tags,json=uniqueTags,proto3" json:"unique_tags,omitempty"` + // When the catalog syncer should stop syncing from the source repository. + Expiration *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=expiration,proto3" json:"expiration,omitempty"` } func (x *SyncConfig) Reset() { @@ -229,6 +231,13 @@ func (x *SyncConfig) GetUniqueTags() bool { return false } +func (x *SyncConfig) GetExpiration() *timestamppb.Timestamp { + if x != nil { + return x.Expiration + } + return nil +} + type CreateRepoRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2900,597 +2909,600 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x73, 0x79, 0x6e, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x45, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x22, 0x70, - 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, - 0x22, 0x2b, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, - 0x08, 0x52, 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, - 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x68, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, - 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, - 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, - 0x09, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, - 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, - 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, - 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x37, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, - 0x67, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, - 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, - 0x6e, 0x64, 0x22, 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, + 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, - 0x72, 0x79, 0x12, 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x22, 0xa1, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, - 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, - 0x5b, 0x0a, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, - 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, + 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x2b, 0x0a, + 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x08, 0x52, 0x65, + 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, + 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, - 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x68, + 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, + 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, + 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x09, 0x54, 0x61, + 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, + 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, + 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, + 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, + 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xa1, + 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, + 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, + 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x04, 0x08, 0x03, + 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, - 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, - 0x69, 0x66, 0x66, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x12, 0x4c, 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, - 0x0a, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, - 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, - 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x6e, + 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, - 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, + 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, + 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x4c, 0x0a, + 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, + 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, 0x0a, 0x04, 0x63, + 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6d, 0x64, 0x44, + 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, + 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, 0x0a, 0x07, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, + 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x12, + 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, + 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, + 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, + 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, - 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, - 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, - 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x1a, 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, - 0x66, 0x12, 0x5c, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x46, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, - 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, - 0x62, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x48, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, - 0x60, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, - 0x73, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, - 0x65, 0x6e, 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x03, 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, - 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, - 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, - 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 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, 0x4b, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, + 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x12, 0x5c, + 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, - 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, - 0x75, 0x6d, 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, 0x46, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, 0x64, 0x65, 0x64, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x60, 0x0a, 0x0d, + 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, + 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, + 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x63, + 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x5f, + 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, + 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, + 0x6f, 0x72, 0x74, 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, 0x4b, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, + 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x08, 0x0a, 0x06, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, - 0x69, 0x66, 0x66, 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x1a, 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x48, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, - 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, + 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, + 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, 0xc3, + 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, + 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, - 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, - 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, - 0x20, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, - 0x62, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x45, 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, - 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, - 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, - 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, - 0x46, 0x0a, 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, - 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, - 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, - 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, - 0x72, 0x63, 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, - 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, - 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, - 0xd8, 0x01, 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x12, 0x0a, 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, - 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, - 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, - 0x50, 0x75, 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, + 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, + 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, + 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, - 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, + 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, + 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, + 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, + 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, 0x66, + 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x0b, + 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, + 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, + 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, + 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, + 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, + 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, - 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, - 0x44, 0x41, 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, - 0x4d, 0x10, 0x03, 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x12, 0xe4, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, - 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x52, 0x65, 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, - 0x65, 0x70, 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, - 0xc3, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, - 0x65, 0x70, 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, + 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, + 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, - 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, - 0x70, 0x6f, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x70, 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, - 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, - 0x12, 0xca, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, - 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, - 0x2a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, - 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, - 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, - 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, 0x0a, + 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, + 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, + 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, 0x72, + 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, + 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, 0x66, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, + 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, + 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, + 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, + 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, + 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, - 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, - 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, - 0x67, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, + 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, + 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, + 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, + 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, - 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, - 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, - 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, - 0xcd, 0x0c, 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, - 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, - 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, - 0x02, 0xcd, 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, + 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, - 0x12, 0xa6, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x39, 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, - 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, + 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, + 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x40, 0x12, 0x3e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, - 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, - 0xbd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, + 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, + 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, - 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, - 0xc5, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, + 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, + 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, + 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, + 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, + 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, + 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, + 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, + 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, - 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, - 0x66, 0x65, 0x73, 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x76, 0x31, 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, + 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, + 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, + 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, + 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, + 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, + 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, + 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, + 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, 0xbd, 0x01, 0x0a, + 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2f, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, + 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, + 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, + 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, + 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, 0xc5, 0x01, 0x0a, + 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x22, + 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, + 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, + 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x42, + 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3559,8 +3571,8 @@ var file_registry_platform_proto_goTypes = []interface{}{ nil, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry nil, // 49: chainguard.platform.registry.ImageConfig.LabelsEntry (*PackagesDiff_ChangedPackageReference)(nil), // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference - (*v1.UIDPFilter)(nil), // 51: chainguard.platform.common.UIDPFilter - (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp + (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp + (*v1.UIDPFilter)(nil), // 52: chainguard.platform.common.UIDPFilter (*v11.Scanner)(nil), // 53: chainguard.platform.tenant.Scanner (*emptypb.Empty)(nil), // 54: google.protobuf.Empty (*v11.Sbom2)(nil), // 55: chainguard.platform.tenant.Sbom2 @@ -3569,87 +3581,88 @@ var file_registry_platform_proto_goTypes = []interface{}{ var file_registry_platform_proto_depIdxs = []int32{ 0, // 0: chainguard.platform.registry.Repo.catalog_tier:type_name -> chainguard.platform.registry.CatalogTier 2, // 1: chainguard.platform.registry.Repo.sync_config:type_name -> chainguard.platform.registry.SyncConfig - 1, // 2: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo - 1, // 3: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo - 51, // 4: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 9, // 5: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag - 52, // 6: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp - 51, // 7: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter - 52, // 8: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp - 9, // 9: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag - 52, // 10: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp - 52, // 11: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp - 14, // 12: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory - 52, // 13: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp - 19, // 14: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff - 22, // 15: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff - 16, // 16: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff - 17, // 17: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig - 35, // 18: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser - 36, // 19: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir - 37, // 20: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff - 38, // 21: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff - 39, // 22: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff - 40, // 23: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal - 42, // 24: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff - 46, // 25: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry - 48, // 26: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry - 49, // 27: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry - 21, // 28: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference - 21, // 29: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference - 50, // 30: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference - 24, // 31: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference - 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference - 23, // 33: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata - 53, // 34: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner - 52, // 35: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp - 29, // 36: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter - 30, // 37: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry - 52, // 38: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp - 52, // 39: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp - 32, // 40: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata - 33, // 41: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata - 43, // 42: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry - 44, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry - 41, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume - 45, // 46: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort - 47, // 47: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume - 20, // 48: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference - 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference - 3, // 50: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest - 1, // 51: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo - 6, // 52: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter - 4, // 53: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest - 7, // 54: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest - 9, // 55: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag - 8, // 56: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest - 10, // 57: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter - 12, // 58: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter - 25, // 59: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest - 26, // 60: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest - 27, // 61: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest - 28, // 62: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest - 31, // 63: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter - 1, // 64: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo - 1, // 65: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo - 5, // 66: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList - 54, // 67: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty - 9, // 68: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag - 9, // 69: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag - 54, // 70: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty - 11, // 71: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList - 13, // 72: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList - 15, // 73: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse - 55, // 74: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 - 18, // 75: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig - 56, // 76: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport - 34, // 77: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList - 64, // [64:78] is the sub-list for method output_type - 50, // [50:64] is the sub-list for method input_type - 50, // [50:50] is the sub-list for extension type_name - 50, // [50:50] is the sub-list for extension extendee - 0, // [0:50] is the sub-list for field type_name + 51, // 2: chainguard.platform.registry.SyncConfig.expiration:type_name -> google.protobuf.Timestamp + 1, // 3: chainguard.platform.registry.CreateRepoRequest.repo:type_name -> chainguard.platform.registry.Repo + 1, // 4: chainguard.platform.registry.RepoList.items:type_name -> chainguard.platform.registry.Repo + 52, // 5: chainguard.platform.registry.RepoFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 9, // 6: chainguard.platform.registry.CreateTagRequest.tag:type_name -> chainguard.platform.registry.Tag + 51, // 7: chainguard.platform.registry.Tag.last_updated:type_name -> google.protobuf.Timestamp + 52, // 8: chainguard.platform.registry.TagFilter.uidp:type_name -> chainguard.platform.common.UIDPFilter + 51, // 9: chainguard.platform.registry.TagFilter.updated_since:type_name -> google.protobuf.Timestamp + 9, // 10: chainguard.platform.registry.TagList.items:type_name -> chainguard.platform.registry.Tag + 51, // 11: chainguard.platform.registry.TagHistoryFilter.start:type_name -> google.protobuf.Timestamp + 51, // 12: chainguard.platform.registry.TagHistoryFilter.end:type_name -> google.protobuf.Timestamp + 14, // 13: chainguard.platform.registry.TagHistoryList.items:type_name -> chainguard.platform.registry.TagHistory + 51, // 14: chainguard.platform.registry.TagHistory.update_timestamp:type_name -> google.protobuf.Timestamp + 19, // 15: chainguard.platform.registry.DiffImageResponse.packages:type_name -> chainguard.platform.registry.PackagesDiff + 22, // 16: chainguard.platform.registry.DiffImageResponse.vulnerabilities:type_name -> chainguard.platform.registry.VulnerabilitiesDiff + 16, // 17: chainguard.platform.registry.DiffImageResponse.config:type_name -> chainguard.platform.registry.ImageConfigDiff + 17, // 18: chainguard.platform.registry.ImageConfigDiff.changed:type_name -> chainguard.platform.registry.ChangedImageConfig + 35, // 19: chainguard.platform.registry.ChangedImageConfig.changedUser:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedUser + 36, // 20: chainguard.platform.registry.ChangedImageConfig.changedWorkingDir:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedWorkingDir + 37, // 21: chainguard.platform.registry.ChangedImageConfig.entrypoints:type_name -> chainguard.platform.registry.ChangedImageConfig.EntrypointDiff + 38, // 22: chainguard.platform.registry.ChangedImageConfig.envs:type_name -> chainguard.platform.registry.ChangedImageConfig.EnvDiff + 39, // 23: chainguard.platform.registry.ChangedImageConfig.cmds:type_name -> chainguard.platform.registry.ChangedImageConfig.CmdDiff + 40, // 24: chainguard.platform.registry.ChangedImageConfig.changedStopSignal:type_name -> chainguard.platform.registry.ChangedImageConfig.ChangedStopSignal + 42, // 25: chainguard.platform.registry.ChangedImageConfig.volumes:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff + 46, // 26: chainguard.platform.registry.ImageConfig.exposed_ports:type_name -> chainguard.platform.registry.ImageConfig.ExposedPortsEntry + 48, // 27: chainguard.platform.registry.ImageConfig.volumes:type_name -> chainguard.platform.registry.ImageConfig.VolumesEntry + 49, // 28: chainguard.platform.registry.ImageConfig.labels:type_name -> chainguard.platform.registry.ImageConfig.LabelsEntry + 21, // 29: chainguard.platform.registry.PackagesDiff.added:type_name -> chainguard.platform.registry.PackageReference + 21, // 30: chainguard.platform.registry.PackagesDiff.removed:type_name -> chainguard.platform.registry.PackageReference + 50, // 31: chainguard.platform.registry.PackagesDiff.changed:type_name -> chainguard.platform.registry.PackagesDiff.ChangedPackageReference + 24, // 32: chainguard.platform.registry.VulnerabilitiesDiff.added:type_name -> chainguard.platform.registry.VulnerabilityReference + 24, // 33: chainguard.platform.registry.VulnerabilitiesDiff.removed:type_name -> chainguard.platform.registry.VulnerabilityReference + 23, // 34: chainguard.platform.registry.VulnerabilitiesDiff.metadata:type_name -> chainguard.platform.registry.ScannerMetadata + 53, // 35: chainguard.platform.registry.ScannerMetadata.scanner:type_name -> chainguard.platform.tenant.Scanner + 51, // 36: chainguard.platform.registry.ScannerMetadata.vulnerability_db_last_build_time:type_name -> google.protobuf.Timestamp + 29, // 37: chainguard.platform.registry.ManifestMetadataFilterEntry.index_filter:type_name -> chainguard.platform.registry.ManifestMetadataIndexFilter + 30, // 38: chainguard.platform.registry.ManifestMetadataFilter.items:type_name -> chainguard.platform.registry.ManifestMetadataFilterEntry + 51, // 39: chainguard.platform.registry.PkgMetadata.eol_date:type_name -> google.protobuf.Timestamp + 51, // 40: chainguard.platform.registry.PkgMetadata.build_timestamp:type_name -> google.protobuf.Timestamp + 32, // 41: chainguard.platform.registry.ManifestMetadata.pkg_metadata:type_name -> chainguard.platform.registry.PkgMetadata + 33, // 42: chainguard.platform.registry.ManifestMetadataList.items:type_name -> chainguard.platform.registry.ManifestMetadata + 43, // 43: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.added:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry + 44, // 44: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.removed:type_name -> chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry + 41, // 45: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.AddedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 41, // 46: chainguard.platform.registry.ChangedImageConfig.VolumeDiff.RemovedEntry.value:type_name -> chainguard.platform.registry.ChangedImageConfig.Volume + 45, // 47: chainguard.platform.registry.ImageConfig.ExposedPortsEntry.value:type_name -> chainguard.platform.registry.ImageConfig.ExposedPort + 47, // 48: chainguard.platform.registry.ImageConfig.VolumesEntry.value:type_name -> chainguard.platform.registry.ImageConfig.Volume + 20, // 49: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.current:type_name -> chainguard.platform.registry.VersionReference + 20, // 50: chainguard.platform.registry.PackagesDiff.ChangedPackageReference.previous:type_name -> chainguard.platform.registry.VersionReference + 3, // 51: chainguard.platform.registry.Registry.CreateRepo:input_type -> chainguard.platform.registry.CreateRepoRequest + 1, // 52: chainguard.platform.registry.Registry.UpdateRepo:input_type -> chainguard.platform.registry.Repo + 6, // 53: chainguard.platform.registry.Registry.ListRepos:input_type -> chainguard.platform.registry.RepoFilter + 4, // 54: chainguard.platform.registry.Registry.DeleteRepo:input_type -> chainguard.platform.registry.DeleteRepoRequest + 7, // 55: chainguard.platform.registry.Registry.CreateTag:input_type -> chainguard.platform.registry.CreateTagRequest + 9, // 56: chainguard.platform.registry.Registry.UpdateTag:input_type -> chainguard.platform.registry.Tag + 8, // 57: chainguard.platform.registry.Registry.DeleteTag:input_type -> chainguard.platform.registry.DeleteTagRequest + 10, // 58: chainguard.platform.registry.Registry.ListTags:input_type -> chainguard.platform.registry.TagFilter + 12, // 59: chainguard.platform.registry.Registry.ListTagHistory:input_type -> chainguard.platform.registry.TagHistoryFilter + 25, // 60: chainguard.platform.registry.Registry.DiffImage:input_type -> chainguard.platform.registry.DiffImageRequest + 26, // 61: chainguard.platform.registry.Registry.GetSbom:input_type -> chainguard.platform.registry.SbomRequest + 27, // 62: chainguard.platform.registry.Registry.GetImageConfig:input_type -> chainguard.platform.registry.ImageConfigRequest + 28, // 63: chainguard.platform.registry.Registry.GetVulnReport:input_type -> chainguard.platform.registry.VulnReportRequest + 31, // 64: chainguard.platform.registry.Registry.ListManifestMetadata:input_type -> chainguard.platform.registry.ManifestMetadataFilter + 1, // 65: chainguard.platform.registry.Registry.CreateRepo:output_type -> chainguard.platform.registry.Repo + 1, // 66: chainguard.platform.registry.Registry.UpdateRepo:output_type -> chainguard.platform.registry.Repo + 5, // 67: chainguard.platform.registry.Registry.ListRepos:output_type -> chainguard.platform.registry.RepoList + 54, // 68: chainguard.platform.registry.Registry.DeleteRepo:output_type -> google.protobuf.Empty + 9, // 69: chainguard.platform.registry.Registry.CreateTag:output_type -> chainguard.platform.registry.Tag + 9, // 70: chainguard.platform.registry.Registry.UpdateTag:output_type -> chainguard.platform.registry.Tag + 54, // 71: chainguard.platform.registry.Registry.DeleteTag:output_type -> google.protobuf.Empty + 11, // 72: chainguard.platform.registry.Registry.ListTags:output_type -> chainguard.platform.registry.TagList + 13, // 73: chainguard.platform.registry.Registry.ListTagHistory:output_type -> chainguard.platform.registry.TagHistoryList + 15, // 74: chainguard.platform.registry.Registry.DiffImage:output_type -> chainguard.platform.registry.DiffImageResponse + 55, // 75: chainguard.platform.registry.Registry.GetSbom:output_type -> chainguard.platform.tenant.Sbom2 + 18, // 76: chainguard.platform.registry.Registry.GetImageConfig:output_type -> chainguard.platform.registry.ImageConfig + 56, // 77: chainguard.platform.registry.Registry.GetVulnReport:output_type -> chainguard.platform.tenant.VulnReport + 34, // 78: chainguard.platform.registry.Registry.ListManifestMetadata:output_type -> chainguard.platform.registry.ManifestMetadataList + 65, // [65:79] is the sub-list for method output_type + 51, // [51:65] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_registry_platform_proto_init() } diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto index 43f7dc8f..f3ac9395 100644 --- a/proto/platform/registry/v1/registry.platform.proto +++ b/proto/platform/registry/v1/registry.platform.proto @@ -242,6 +242,9 @@ message SyncConfig { // Controls whether exported tags will be uniquely labeled. bool unique_tags = 2; + + // When the catalog syncer should stop syncing from the source repository. + google.protobuf.Timestamp expiration = 3; } message CreateRepoRequest { From cf1d605c3d893fd505bc820799734632fee59c45 Mon Sep 17 00:00:00 2001 From: Josh Dolitsky <393494+jdolitsky@users.noreply.github.com> Date: Tue, 7 May 2024 10:28:56 -0500 Subject: [PATCH 39/41] Export edb6c356d926827fb679c7c3111dcbed0de0eba5 Export: edb6c356d926827fb679c7c3111dcbed0de0eba5 --- events/registry/registry.go | 6 + .../registry/v1/registry.platform.event.go | 21 + .../registry/v1/registry.platform.pb.go | 1136 +++++++++-------- .../registry/v1/registry.platform.proto | 4 +- 4 files changed, 599 insertions(+), 568 deletions(-) create mode 100644 proto/platform/registry/v1/registry.platform.event.go diff --git a/events/registry/registry.go b/events/registry/registry.go index dc338ac2..ff4519f5 100644 --- a/events/registry/registry.go +++ b/events/registry/registry.go @@ -13,6 +13,12 @@ const ( // PushedEventType is the cloudevents event type for registry pushes PushedEventType = "dev.chainguard.registry.push.v1" + + // RepoCreatedEventType is the cloudevents event type for registry repo created + RepoCreatedEventType = "dev.chainguard.api.platform.registry.repo.created.v1" + + // RepoUpdatedEventType is the cloudevents event type for registry repo updated + RepoUpdatedEventType = "dev.chainguard.api.platform.registry.repo.updated.v1" ) // PullEvent describes an item being pulled from the registry. diff --git a/proto/platform/registry/v1/registry.platform.event.go b/proto/platform/registry/v1/registry.platform.event.go new file mode 100644 index 00000000..78043833 --- /dev/null +++ b/proto/platform/registry/v1/registry.platform.event.go @@ -0,0 +1,21 @@ +/* +Copyright 2024 Chainguard, Inc. +SPDX-License-Identifier: Apache-2.0 +*/ + +package v1 + +// CloudEventsExtension implements chainguard.dev/sdk/events/Extendable.CloudEventsExtension +func (x *Repo) CloudEventsExtension(key string) (string, bool) { + switch key { + case "group": + return x.GetId(), true + default: + return "", false + } +} + +// CloudEventsSubject implements chainguard.dev/sdk/events/Eventable.CloudEventsSubject. +func (x *Repo) CloudEventsSubject() string { + return x.GetId() +} diff --git a/proto/platform/registry/v1/registry.platform.pb.go b/proto/platform/registry/v1/registry.platform.pb.go index a700c2c9..fc59a93b 100644 --- a/proto/platform/registry/v1/registry.platform.pb.go +++ b/proto/platform/registry/v1/registry.platform.pb.go @@ -95,7 +95,9 @@ type Repo struct { Readme string `protobuf:"bytes,5,opt,name=readme,proto3" json:"readme,omitempty"` // (optional) Repository sync configuration. If enabled, images are synced from the source to this repo. // NOTE: This property can only be set by Chainguard. - SyncConfig *SyncConfig `protobuf:"bytes,6,opt,name=sync_config,json=syncConfig,proto3" json:"sync_config,omitempty"` + // Note: the json_name defaults to "syncConfig" which causes our eventing + // system to not work properly (since the protobuf name is "sync_config") + SyncConfig *SyncConfig `protobuf:"bytes,6,opt,name=sync_config,proto3" json:"sync_config,omitempty"` } func (x *Repo) Reset() { @@ -2893,7 +2895,7 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x76, 0x75, 0x6c, 0x6e, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x73, 0x62, 0x6f, 0x6d, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x01, 0x0a, 0x04, 0x52, 0x65, 0x70, 0x6f, + 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfe, 0x01, 0x0a, 0x04, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x0c, @@ -2904,605 +2906,605 @@ var file_registry_platform_proto_rawDesc = []byte{ 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x0b, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x73, 0x79, 0x6e, - 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, 0x12, - 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x11, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x2b, 0x0a, - 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x08, 0x52, 0x65, - 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, - 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x68, - 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, - 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, - 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x09, 0x54, 0x61, - 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, - 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, 0x6f, 0x63, 0x68, - 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, 0x05, - 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, - 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, - 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, - 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xa1, - 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, - 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x0f, - 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, - 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x73, 0x79, 0x6e, + 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x81, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x1f, 0x0a, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x54, 0x61, 0x67, 0x73, + 0x12, 0x3a, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x11, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x22, 0x2b, + 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x08, 0x52, + 0x65, 0x70, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x22, 0x6c, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, 0x66, - 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x4c, 0x0a, - 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, - 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, 0x0a, 0x04, 0x63, - 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6d, 0x64, 0x44, - 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x06, + 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x68, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, + 0x70, 0x6f, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x54, 0x61, 0x67, 0x52, 0x03, 0x74, 0x61, 0x67, 0x22, 0x2a, 0x0a, 0x10, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, + 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc2, 0x01, 0x0a, 0x03, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, + 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x09, 0x54, + 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, + 0x75, 0x69, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x72, 0x65, 0x72, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x44, 0x61, 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x45, 0x70, 0x6f, 0x63, + 0x68, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x42, 0x0a, 0x07, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x52, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x97, 0x01, 0x0a, 0x10, 0x54, 0x61, 0x67, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x09, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x03, 0x65, 0x6e, 0x64, + 0x22, 0x50, 0x0a, 0x0e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, + 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x22, 0x6b, 0x0a, 0x0a, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, + 0x12, 0x45, 0x0a, 0x10, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, + 0xa1, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, + 0x69, 0x66, 0x66, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x5b, 0x0a, + 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x52, 0x0f, 0x76, 0x75, 0x6c, 0x6e, 0x65, + 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x73, 0x4a, 0x04, 0x08, + 0x03, 0x10, 0x04, 0x22, 0x5d, 0x0a, 0x0f, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x22, 0x84, 0x0c, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5e, 0x0a, 0x0b, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, - 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, 0x0a, 0x07, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x57, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x61, 0x0a, 0x0b, 0x65, + 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x3f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x44, 0x69, 0x66, + 0x66, 0x52, 0x0b, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x4c, + 0x0a, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, 0x65, - 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x12, - 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, - 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, - 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x12, 0x5c, - 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, 0x64, 0x65, 0x64, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, + 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, + 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x65, 0x6e, 0x76, 0x73, 0x12, 0x4c, 0x0a, 0x04, + 0x63, 0x6d, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6d, 0x64, + 0x44, 0x69, 0x66, 0x66, 0x52, 0x04, 0x63, 0x6d, 0x64, 0x73, 0x12, 0x70, 0x0a, 0x11, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, + 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x12, 0x55, 0x0a, 0x07, + 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, 0x49, 0x6d, 0x61, - 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x60, 0x0a, 0x0d, - 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, - 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, - 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x63, - 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x5f, - 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x70, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, - 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, - 0x6f, 0x72, 0x74, 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, 0x4b, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, - 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x08, 0x0a, 0x06, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 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, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x55, 0x73, + 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x49, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x1a, 0x40, 0x0a, 0x0e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x39, 0x0a, 0x07, 0x45, 0x6e, 0x76, 0x44, 0x69, 0x66, 0x66, + 0x12, 0x14, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x1a, 0x39, 0x0a, 0x07, 0x43, 0x6d, 0x64, 0x44, 0x69, 0x66, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x1a, 0x49, 0x0a, 0x11, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x53, 0x74, 0x6f, 0x70, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, + 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, + 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x1a, 0x08, 0x0a, 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x1a, 0xb6, 0x03, 0x0a, 0x0a, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x12, + 0x5c, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x41, 0x64, 0x64, 0x65, + 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x62, 0x0a, + 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x1a, 0x71, 0x0a, 0x0a, 0x41, 0x64, 0x64, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, - 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, 0xc3, - 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x48, - 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, - 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x76, - 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x76, - 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x61, - 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe4, 0x05, 0x0a, 0x0b, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x60, 0x0a, + 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, + 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, + 0x76, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x6d, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, + 0x63, 0x6d, 0x64, 0x12, 0x50, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x5f, 0x64, 0x69, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, + 0x69, 0x6e, 0x67, 0x44, 0x69, 0x72, 0x12, 0x4d, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x73, - 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, 0x75, - 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, - 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, - 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, - 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, 0x66, - 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, 0x0b, - 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, - 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, - 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x70, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x1a, 0x0d, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, + 0x64, 0x50, 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, + 0x50, 0x6f, 0x72, 0x74, 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, 0x4b, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, + 0x72, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x08, 0x0a, + 0x06, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 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, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xc2, 0x03, 0x0a, 0x0c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, + 0x66, 0x12, 0x44, 0x0a, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x05, 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x12, 0x5c, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x1a, + 0xc3, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x48, 0x0a, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x07, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x08, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x22, 0x5e, 0x0a, 0x10, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x13, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x44, 0x69, 0x66, 0x66, 0x12, 0x4a, 0x0a, 0x05, 0x61, 0x64, 0x64, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, + 0x61, 0x64, 0x64, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x07, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x93, 0x02, 0x0a, 0x0f, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x07, + 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x62, 0x0a, 0x20, 0x76, + 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x62, 0x5f, + 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x44, 0x62, 0x4c, 0x61, 0x73, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x45, 0x0a, 0x1f, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x5f, 0x64, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x44, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x62, 0x0a, 0x16, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0x71, 0x0a, 0x10, 0x44, 0x69, + 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, + 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x46, 0x0a, + 0x0b, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, - 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x61, 0x0a, 0x12, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x07, 0x72, + 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, + 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x22, 0x4c, 0x0a, 0x11, 0x56, 0x75, 0x6c, 0x6e, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, + 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, + 0x68, 0x22, 0xac, 0x01, 0x0a, 0x1b, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x22, 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, + 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, + 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, - 0x8a, 0x01, 0x0a, 0x16, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x07, 0x72, 0x65, - 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, - 0xd2, 0x05, 0x01, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x49, 0x64, 0x12, 0x4f, 0x0a, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x68, 0x61, + 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, + 0x0a, 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, + 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, + 0x72, 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, + 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, + 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, - 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0xd8, 0x01, 0x0a, - 0x0b, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x70, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x72, 0x6c, - 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x70, 0x75, 0x72, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x50, 0x75, 0x72, - 0x6c, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6f, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x07, 0x65, 0x6f, 0x6c, 0x44, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, 0x0f, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, - 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x78, 0x0a, 0x10, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x6b, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x50, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x70, 0x6b, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x5c, 0x0a, 0x14, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x74, 0x65, - 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2a, - 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x46, - 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, - 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x03, - 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, 0x01, - 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x2a, 0x3f, 0x0a, 0x0b, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x54, 0x69, 0x65, 0x72, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x46, 0x52, 0x45, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, + 0x52, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x10, + 0x03, 0x32, 0xe1, 0x14, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x12, 0xe4, + 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, - 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, 0x6f, - 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, - 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, 0xc2, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, + 0x70, 0x6f, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x3a, 0x04, 0x72, 0x65, 0x70, + 0x6f, 0x22, 0x21, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc3, 0x0c, + 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, + 0x6f, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, - 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x18, 0x01, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x70, 0x6f, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x1a, 0x22, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x22, 0x76, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x1a, 0x1a, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xc4, 0x0c, 0xc2, 0xf0, - 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6f, - 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x4c, - 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x8a, - 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, 0x01, - 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, 0x63, + 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x01, 0x12, 0x87, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, + 0x6f, 0x73, 0x12, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, 0x2f, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, - 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, 0x76, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x4c, 0x69, 0x73, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, + 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xc5, 0x0c, 0x10, 0x01, 0x12, 0xca, + 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x2f, 0x2e, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x2a, 0x1a, + 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, + 0x12, 0x04, 0x0a, 0x02, 0xc6, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3f, 0x0a, 0x34, 0x64, 0x65, + 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, + 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, + 0x04, 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x2e, 0x72, 0x65, 0x70, 0x6f, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, - 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xdb, 0x01, 0x0a, 0x09, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x61, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x7b, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x25, 0x3a, 0x03, 0x74, 0x61, 0x67, 0x22, 0x1e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0xcb, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, + 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, + 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, + 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, + 0x67, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x54, 0x61, 0x67, 0x12, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, + 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, + 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, + 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x22, 0x74, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x1a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, - 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcc, 0x0c, 0xc2, 0xf0, - 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x01, 0x12, 0xc6, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, - 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, - 0x2a, 0x19, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, - 0x06, 0x12, 0x04, 0x0a, 0x02, 0xce, 0x0c, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x3e, 0x0a, 0x33, 0x64, - 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x74, 0x61, 0x67, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, - 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x83, 0x01, 0x0a, 0x08, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x27, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, - 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, - 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, - 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, 0x10, - 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, 0x0c, - 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x2e, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, - 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, 0x69, - 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, 0x01, - 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, - 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, - 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, - 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, - 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, - 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x3d, - 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, 0xbd, 0x01, 0x0a, - 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2f, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, 0x75, - 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, 0x6c, - 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, - 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x1a, 0x25, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, + 0x79, 0x2e, 0x54, 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x13, 0x12, 0x11, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x61, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0xcd, 0x0c, + 0x10, 0x01, 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x67, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x72, 0x79, 0x2e, 0x54, 0x61, 0x67, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x4c, + 0x69, 0x73, 0x74, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x2f, 0x7b, + 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x68, 0x69, + 0x73, 0x74, 0x6f, 0x72, 0x79, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0xcd, + 0x0c, 0x12, 0xaa, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, + 0x2e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, + 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x44, + 0x69, 0x66, 0x66, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x66, 0x66, 0x8a, 0xaf, + 0xa8, 0xd2, 0x05, 0x0a, 0x12, 0x08, 0x0a, 0x06, 0xc5, 0x0c, 0x94, 0x05, 0x8a, 0x05, 0x12, 0xa6, + 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x53, 0x62, 0x6f, 0x6d, 0x12, 0x29, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, + 0x6e, 0x74, 0x2e, 0x53, 0x62, 0x6f, 0x6d, 0x32, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, + 0x12, 0x37, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, + 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x73, 0x62, 0x6f, 0x6d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, + 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x8a, 0x05, 0x12, 0xc3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, + 0x3e, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, 0xaf, - 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, 0xc5, 0x01, 0x0a, - 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, - 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, - 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, 0x42, - 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x3d, 0x2a, 0x7d, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0xcf, 0x0c, 0x12, 0xbd, 0x01, + 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, + 0x2f, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x56, + 0x75, 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x56, 0x75, + 0x6c, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, + 0x12, 0x3d, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, + 0x7d, 0x2f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x3d, 0x2a, 0x7d, 0x2f, 0x76, 0x75, 0x6c, 0x6e, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x8a, + 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x04, 0xc5, 0x0c, 0x94, 0x05, 0x12, 0xc5, 0x01, + 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x32, 0x2e, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4d, 0x61, 0x6e, 0x69, + 0x66, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x73, 0x74, + 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x12, 0x2f, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x70, 0x6f, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, + 0x73, 0x74, 0x6d, 0x65, 0x74, 0x64, 0x61, 0x74, 0x61, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, + 0x04, 0x0a, 0x02, 0xcf, 0x0c, 0x42, 0x71, 0x0a, 0x27, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x76, 0x31, + 0x42, 0x15, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/platform/registry/v1/registry.platform.proto b/proto/platform/registry/v1/registry.platform.proto index f3ac9395..6a072f7a 100644 --- a/proto/platform/registry/v1/registry.platform.proto +++ b/proto/platform/registry/v1/registry.platform.proto @@ -226,7 +226,9 @@ message Repo { // (optional) Repository sync configuration. If enabled, images are synced from the source to this repo. // NOTE: This property can only be set by Chainguard. - SyncConfig sync_config = 6; + // Note: the json_name defaults to "syncConfig" which causes our eventing + // system to not work properly (since the protobuf name is "sync_config") + SyncConfig sync_config = 6 [json_name="sync_config"]; } enum CatalogTier { From c5355edcaa11d0c0ab38489769930cd726a8166e Mon Sep 17 00:00:00 2001 From: Jenny Shi Date: Thu, 9 May 2024 16:02:59 -0400 Subject: [PATCH 40/41] Export ef3a849d451e346a2e99dc7eb3a81657c631c147 Export: ef3a849d451e346a2e99dc7eb3a81657c631c147 --- .../iam/v1/role_binding.platform.pb.go | 158 ++++++++++-------- .../iam/v1/role_binding.platform.proto | 4 +- 2 files changed, 88 insertions(+), 74 deletions(-) diff --git a/proto/platform/iam/v1/role_binding.platform.pb.go b/proto/platform/iam/v1/role_binding.platform.pb.go index a0d6b4da..ef46feb5 100644 --- a/proto/platform/iam/v1/role_binding.platform.pb.go +++ b/proto/platform/iam/v1/role_binding.platform.pb.go @@ -326,7 +326,7 @@ type RoleBindingList_Binding struct { Identity string `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` // role of the bound identity. Role *Role `protobuf:"bytes,4,opt,name=role,proto3" json:"role,omitempty"` - // email of the bound identity. + // verified email of the bound identity. Email string `protobuf:"bytes,5,opt,name=email,proto3" json:"email,omitempty"` // ClaimMatch issuer of the bound identity. ClaimMatchIssuer string `protobuf:"bytes,6,opt,name=claim_match_issuer,json=claimMatchIssuer,proto3" json:"claim_match_issuer,omitempty"` @@ -334,6 +334,8 @@ type RoleBindingList_Binding struct { ClaimMatchSubject string `protobuf:"bytes,7,opt,name=claim_match_subject,json=claimMatchSubject,proto3" json:"claim_match_subject,omitempty"` // created_at is the timestamp for when the role binding was created. CreatedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + // unverified email of the bound identity. + EmailUnverified string `protobuf:"bytes,9,opt,name=email_unverified,json=emailUnverified,proto3" json:"email_unverified,omitempty"` } func (x *RoleBindingList_Binding) Reset() { @@ -424,6 +426,13 @@ func (x *RoleBindingList_Binding) GetCreatedAt() *timestamppb.Timestamp { return nil } +func (x *RoleBindingList_Binding) GetEmailUnverified() string { + if x != nil { + return x.EmailUnverified + } + return "" +} + var File_role_binding_platform_proto protoreflect.FileDescriptor var file_role_binding_platform_proto_rawDesc = []byte{ @@ -451,13 +460,13 @@ var file_role_binding_platform_proto_rawDesc = []byte{ 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xa9, 0x03, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, + 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x22, 0xd4, 0x03, 0x0a, 0x0f, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x05, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x1a, 0xcd, 0x02, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x74, 0x65, 0x6d, 0x73, 0x1a, 0xf8, 0x02, 0x0a, 0x07, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, @@ -478,81 +487,84 @@ var file_role_binding_platform_proto_rawDesc = []byte{ 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x22, 0x5f, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, - 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, - 0x04, 0x75, 0x69, 0x64, 0x70, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x0b, - 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x32, 0x0a, 0x18, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, - 0x93, 0x06, 0x0a, 0x0c, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x12, 0xe5, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, - 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x0c, 0x72, - 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, - 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, - 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0xc8, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x75, 0x6e, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x55, 0x6e, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, + 0x5f, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x70, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x55, 0x49, 0x44, 0x50, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x04, 0x75, 0x69, 0x64, 0x70, + 0x22, 0x83, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0x90, + 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x47, 0x0a, + 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, - 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, + 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x32, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0x90, 0xaf, 0xa8, 0xd2, 0x05, 0x01, 0x52, 0x02, 0x69, 0x64, 0x32, 0x93, 0x06, 0x0a, 0x0c, 0x52, + 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xe5, 0x01, 0x0a, 0x06, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, - 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, 0x1c, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, - 0x0a, 0x02, 0x92, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, + 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x20, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, + 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, + 0x0a, 0x02, 0x91, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x01, 0x12, 0x88, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, - 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, - 0x73, 0x74, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x69, 0x61, 0x6d, - 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x08, 0x12, 0x06, 0x0a, 0x02, 0x93, 0x03, 0x10, 0x01, 0x12, 0xc4, - 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, - 0x69, 0x61, 0x6d, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x69, - 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, - 0x12, 0x04, 0x0a, 0x02, 0x94, 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, - 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x18, 0x01, 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x41, 0x4d, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, - 0x6d, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x18, 0x01, 0x12, 0xc8, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x24, + 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x1a, 0x24, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, + 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x1a, 0x1c, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, + 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x92, 0x03, 0xc2, + 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x72, 0x6f, + 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x12, 0x88, + 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, + 0x6d, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x1a, 0x28, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x52, 0x6f, + 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x2a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x72, + 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, + 0x08, 0x12, 0x06, 0x0a, 0x02, 0x93, 0x03, 0x10, 0x01, 0x12, 0xc4, 0x01, 0x0a, 0x06, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x69, 0x61, 0x6d, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, + 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x2a, 0x1c, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, + 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x3d, 0x2a, 0x2a, 0x7d, 0x8a, 0xaf, 0xa8, 0xd2, 0x05, 0x06, 0x12, 0x04, 0x0a, 0x02, 0x94, + 0x03, 0xc2, 0xf0, 0x8e, 0xfc, 0x0b, 0x39, 0x0a, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x69, 0x61, 0x6d, 0x2e, + 0x72, 0x6f, 0x6c, 0x65, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x2e, 0x76, 0x31, 0x12, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, + 0x42, 0x6d, 0x0a, 0x22, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x2e, 0x73, 0x64, 0x6b, 0x2e, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x69, 0x61, 0x6d, 0x2e, 0x76, 0x31, 0x42, 0x1b, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x49, 0x41, 0x4d, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x28, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x69, 0x61, 0x6d, 0x2f, 0x76, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/platform/iam/v1/role_binding.platform.proto b/proto/platform/iam/v1/role_binding.platform.proto index 1041b77f..3c683999 100644 --- a/proto/platform/iam/v1/role_binding.platform.proto +++ b/proto/platform/iam/v1/role_binding.platform.proto @@ -102,7 +102,7 @@ message RoleBindingList { string identity = 3; // role of the bound identity. chainguard.platform.iam.Role role = 4; - // email of the bound identity. + // verified email of the bound identity. string email = 5; // ClaimMatch issuer of the bound identity. string claim_match_issuer = 6; @@ -110,6 +110,8 @@ message RoleBindingList { string claim_match_subject = 7; // created_at is the timestamp for when the role binding was created. google.protobuf.Timestamp created_at = 8; + // unverified email of the bound identity. + string email_unverified = 9; } repeated Binding items = 1; } From e877740e868e96af5ca16341a806106d059c0fb2 Mon Sep 17 00:00:00 2001 From: Kenny Leung Date: Fri, 10 May 2024 09:26:10 -0700 Subject: [PATCH 41/41] Export 22b45eb376aeacebc98b6371d79d64c40a5355d1 Export: 22b45eb376aeacebc98b6371d79d64c40a5355d1 --- go.mod | 10 +++++----- go.sum | 26 ++++++++++++++------------ 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index 01999ae3..f032553a 100644 --- a/go.mod +++ b/go.mod @@ -18,11 +18,11 @@ require ( github.com/russross/blackfriday/v2 v2.1.0 go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20231206192017-f3f8817b8deb - golang.org/x/oauth2 v0.19.0 - google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c + golang.org/x/oauth2 v0.20.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 google.golang.org/grpc v1.63.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.33.0 + google.golang.org/protobuf v1.34.1 k8s.io/apimachinery v0.29.1 ) @@ -62,8 +62,8 @@ require ( golang.org/x/sys v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.19.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be // indirect + golang.org/x/tools v0.20.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 3d01b98d..06e2b5ca 100644 --- a/go.sum +++ b/go.sum @@ -177,8 +177,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= -golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -195,8 +195,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= -golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= +golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= +golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -204,6 +204,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -246,8 +248,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= -golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -257,10 +259,10 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c h1:kaI7oewGK5YnVwj+Y+EJBO/YN1ht8iTL9XkFHtVZLsc= -google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be h1:LG9vZxsWGOmUKieR8wPAUR3u3MpnYFQZROPIMaXh7/A= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240415180920-8c6c420018be/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 h1:DTJM0R8LECCgFeUwApvcEJHz85HLagW8uRENYxHh1ww= +google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6/go.mod h1:10yRODfgim2/T8csjQsMPgZOMvtytXKTDRzH6HRGzRw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 h1:DujSIu+2tC9Ht0aPNA7jgj23Iq8Ewi5sgkQ++wdvonE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.18.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= @@ -271,8 +273,8 @@ google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 h1:rNBFJjBCOgVr9pWD7rs/knKL4FRTKgpZmsRfV214zcA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0/go.mod h1:Dk1tviKTvMCz5tvh7t+fh94dhmQVHuCt2OzJB3CTW9Y= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=