From 87e20040aee972192d0d2c4b4b8a643725337e77 Mon Sep 17 00:00:00 2001 From: Marcos Yacob Date: Thu, 18 Aug 2022 12:54:56 -0300 Subject: [PATCH 01/24] Add PR workflow (#28) Signed-off-by: Marcos Yacob --- .github/workflows/pr_build.yaml | 47 +++++++++++++++++++++++++++++++++ Makefile | 23 +++++++++++++--- 2 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/pr_build.yaml diff --git a/.github/workflows/pr_build.yaml b/.github/workflows/pr_build.yaml new file mode 100644 index 0000000..14519e1 --- /dev/null +++ b/.github/workflows/pr_build.yaml @@ -0,0 +1,47 @@ +name: PR Build +on: + pull_request: {} + workflow_dispatch: {} +env: + GO_VERSION: 1.14 +permissions: + contents: read + +jobs: + lint: + name: lint + runs-on: ubuntu-18.04 + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup go + uses: actions/setup-go@v3 + with: + go-version: ${{ env.GO_VERSION }} + - name: Tidy check + run: make tidy-check + - name: Generate check + run: make generate-check + + unit-test: + runs-on: ubuntu-18.04 + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup go + uses: actions/setup-go@v3 + with: + go-version: ${{ env.GO_VERSION }} + - name: Run unit tests + run: make test + + # This job is just here to make sure that the other jobs have completed + # and is used as a single job to block PR merge from. GH doesn't have a + # way to say "all jobs from this action", which would be ideal. + success: + needs: [unit-test, lint] + runs-on: ubuntu-18.04 + steps: + - name: Shout it out + run: echo SUCCESS + diff --git a/Makefile b/Makefile index 29777f8..05cf0a2 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,7 @@ help: @echo "$(bold)Usage:$(reset) make $(cyan)$(reset)" @echo " $(cyan)generate$(reset) - generate gRPC and plugin interface code" @echo " $(cyan)generate-check$(reset) - ensure generated code is up to date" + @echo " $(cyan)test$(reset) - run unit tests" @echo @echo "For verbose output set V=1" @echo " for example: $(cyan)make V=1$(reset)" @@ -102,10 +103,6 @@ go_bin_dir := $(go_dir)/bin go_url = https://storage.googleapis.com/golang/go$(go_version).$(os1)-$(arch2).tar.gz go_path := PATH="$(go_bin_dir):$(PATH)" -golangci_lint_version = v1.27.0 -golangci_lint_dir = $(build_dir)/golangci_lint/$(golangci_lint_version) -golangci_lint_bin = $(golangci_lint_dir)/golangci-lint - protoc_version = 3.20.1 ifeq ($(arch2),arm64) protoc_url = https://github.com/protocolbuffers/protobuf/releases/download/v$(protoc_version)/protoc-$(protoc_version)-$(os2)-aarch_64.zip @@ -146,6 +143,24 @@ else @echo "Git repository is clean." endif +############################################################################# +# Code cleanliness +############################################################################# + +.PHONY: tidy tidy-check lint lint-code +tidy: | go-check + $(E)$(go_path) go mod tidy + $(E)cd proto/spire; $(go_path) go mod tidy + +tidy-check: +ifneq ($(git_dirty),) + $(error tidy-check must be invoked on a clean repository) +endif + @echo "Running go tidy..." + $(E)$(MAKE) tidy + @echo "Ensuring git repository is clean..." + $(E)$(MAKE) git-clean-check + ############################################################################# # Test Targets ############################################################################# From 118dccc8746e21d8936400c807c63269430eae3d Mon Sep 17 00:00:00 2001 From: Andrew Harding Date: Thu, 18 Aug 2022 09:58:56 -0600 Subject: [PATCH 02/24] Update CODEOWNERS (#29) Updates to reflect current SPIRE CODEOWNERS. Signed-off-by: Andrew Harding --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 72696b7..9913872 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @evan2645 @amartinezfayo @azdagron @APTy @rturner3 +* @evan2645 @amartinezfayo @azdagron @MarcosDY @rturner3 From 65fb743ba134ee3e6d6b4a8fb570226f71b542dd Mon Sep 17 00:00:00 2001 From: Andrew Harding Date: Mon, 12 Sep 2022 14:38:36 -0600 Subject: [PATCH 03/24] Facilitate graceful cleanup Signed-off-by: Andrew Harding --- docs/AUTHORING.md | 16 ++ .../spire/service/private/init/v1/init.pb.go | 154 +++++++++++++++--- .../spire/service/private/init/v1/init.proto | 8 + .../service/private/init/v1/init_grpc.pb.go | 36 ++++ plugintest/serve.go | 6 + plugintest/serve_test.go | 7 +- private/init.go | 16 ++ private/register.go | 21 +++ 8 files changed, 243 insertions(+), 21 deletions(-) diff --git a/docs/AUTHORING.md b/docs/AUTHORING.md index 6880569..95b59b8 100644 --- a/docs/AUTHORING.md +++ b/docs/AUTHORING.md @@ -148,6 +148,22 @@ Plugin authors can decide if the lack of support for a specific host service is an error or not. If the plugin returns an error from BrokerHostServices, the plugin will fail to load. +## Cleanup + +Plugins are seperate processes and are terminated when the plugin is unloaded. +However, it may be desirable to perform some graceful cleanup operations. + +To facilitate this, if plugin/service implementations implement the io.Closer +interface, then the `Close` method will be invoked before the plugin is +unloaded. No other RPCs will be invoked at any time during or after the `Close` +method is called. Errors returned from `Close` are simply logged and will not +impact any runtime behavior of SPIRE Server. + +Implementations of `Close` should avoid long running or blocking behavior. +SPIRE may employ deadlines on the operation and could terminate the plugin +before the cleanup is fully completed if plugin implementations ignore this +advice. + ## Unit Testing The [plugintest](https://pkg.go.dev/github.com/spiffe/spire-plugin-sdk/plugintest) diff --git a/internal/proto/spire/service/private/init/v1/init.pb.go b/internal/proto/spire/service/private/init/v1/init.pb.go index a7239bd..ae2504c 100644 --- a/internal/proto/spire/service/private/init/v1/init.pb.go +++ b/internal/proto/spire/service/private/init/v1/init.pb.go @@ -122,6 +122,84 @@ func (x *InitResponse) GetPluginServiceNames() []string { return nil } +// Deinit request parameters +type DeinitRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DeinitRequest) Reset() { + *x = DeinitRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_service_private_init_v1_init_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeinitRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeinitRequest) ProtoMessage() {} + +func (x *DeinitRequest) ProtoReflect() protoreflect.Message { + mi := &file_spire_service_private_init_v1_init_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 DeinitRequest.ProtoReflect.Descriptor instead. +func (*DeinitRequest) Descriptor() ([]byte, []int) { + return file_spire_service_private_init_v1_init_proto_rawDescGZIP(), []int{2} +} + +// Deinit response parameters +type DeinitResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *DeinitResponse) Reset() { + *x = DeinitResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_service_private_init_v1_init_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeinitResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeinitResponse) ProtoMessage() {} + +func (x *DeinitResponse) ProtoReflect() protoreflect.Message { + mi := &file_spire_service_private_init_v1_init_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 DeinitResponse.ProtoReflect.Descriptor instead. +func (*DeinitResponse) Descriptor() ([]byte, []int) { + return file_spire_service_private_init_v1_init_proto_rawDescGZIP(), []int{3} +} + var File_spire_service_private_init_v1_init_proto protoreflect.FileDescriptor var file_spire_service_private_init_v1_init_proto_rawDesc = []byte{ @@ -137,20 +215,28 @@ var file_spire_service_private_init_v1_init_proto_rawDesc = []byte{ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x32, 0x67, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, - 0x12, 0x5f, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x2a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, + 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x0f, 0x0a, 0x0d, 0x44, 0x65, 0x69, 0x6e, + 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x69, + 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xce, 0x01, 0x0a, 0x04, + 0x49, 0x6e, 0x69, 0x74, 0x12, 0x5f, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x2a, 0x2e, 0x73, + 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x69, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x69, - 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x6e, 0x69, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x06, 0x44, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x12, + 0x2c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, + 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x69, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x58, 0x5a, 0x56, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, + 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, + 0x64, 0x6b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x3b, + 0x69, 0x6e, 0x69, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -165,16 +251,20 @@ func file_spire_service_private_init_v1_init_proto_rawDescGZIP() []byte { return file_spire_service_private_init_v1_init_proto_rawDescData } -var file_spire_service_private_init_v1_init_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_spire_service_private_init_v1_init_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_spire_service_private_init_v1_init_proto_goTypes = []interface{}{ - (*InitRequest)(nil), // 0: spire.service.private.init.v1.InitRequest - (*InitResponse)(nil), // 1: spire.service.private.init.v1.InitResponse + (*InitRequest)(nil), // 0: spire.service.private.init.v1.InitRequest + (*InitResponse)(nil), // 1: spire.service.private.init.v1.InitResponse + (*DeinitRequest)(nil), // 2: spire.service.private.init.v1.DeinitRequest + (*DeinitResponse)(nil), // 3: spire.service.private.init.v1.DeinitResponse } var file_spire_service_private_init_v1_init_proto_depIdxs = []int32{ 0, // 0: spire.service.private.init.v1.Init.Init:input_type -> spire.service.private.init.v1.InitRequest - 1, // 1: spire.service.private.init.v1.Init.Init:output_type -> spire.service.private.init.v1.InitResponse - 1, // [1:2] is the sub-list for method output_type - 0, // [0:1] is the sub-list for method input_type + 2, // 1: spire.service.private.init.v1.Init.Deinit:input_type -> spire.service.private.init.v1.DeinitRequest + 1, // 2: spire.service.private.init.v1.Init.Init:output_type -> spire.service.private.init.v1.InitResponse + 3, // 3: spire.service.private.init.v1.Init.Deinit:output_type -> spire.service.private.init.v1.DeinitResponse + 2, // [2:4] is the sub-list for method output_type + 0, // [0:2] 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 @@ -210,6 +300,30 @@ func file_spire_service_private_init_v1_init_proto_init() { return nil } } + file_spire_service_private_init_v1_init_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeinitRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_service_private_init_v1_init_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeinitResponse); 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{ @@ -217,7 +331,7 @@ func file_spire_service_private_init_v1_init_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_spire_service_private_init_v1_init_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 4, NumExtensions: 0, NumServices: 1, }, diff --git a/internal/proto/spire/service/private/init/v1/init.proto b/internal/proto/spire/service/private/init/v1/init.proto index 0d4b537..dfe3c88 100644 --- a/internal/proto/spire/service/private/init/v1/init.proto +++ b/internal/proto/spire/service/private/init/v1/init.proto @@ -8,8 +8,10 @@ option go_package = "github.com/spiffe/spire-plugin-sdk/internal/proto/spire/ser // plugin client connects, since the client is responsible for hosting the // broker that is used to provide host services. If we initialize before that, // there would be no broker available to connect to host services with. +// The service is also used for graceful cleanup when the plugin is unloaded. service Init { rpc Init(InitRequest) returns (InitResponse); + rpc Deinit(DeinitRequest) returns (DeinitResponse); } // Init request parameters @@ -27,3 +29,9 @@ message InitResponse { // spire.plugin.server.keymanager.v1.Keymanager). repeated string plugin_service_names = 1; } + +// Deinit request parameters +message DeinitRequest {} + +// Deinit response parameters +message DeinitResponse {} diff --git a/internal/proto/spire/service/private/init/v1/init_grpc.pb.go b/internal/proto/spire/service/private/init/v1/init_grpc.pb.go index 41f7e33..f1234c3 100644 --- a/internal/proto/spire/service/private/init/v1/init_grpc.pb.go +++ b/internal/proto/spire/service/private/init/v1/init_grpc.pb.go @@ -19,6 +19,7 @@ const _ = grpc.SupportPackageIsVersion7 // 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 InitClient interface { Init(ctx context.Context, in *InitRequest, opts ...grpc.CallOption) (*InitResponse, error) + Deinit(ctx context.Context, in *DeinitRequest, opts ...grpc.CallOption) (*DeinitResponse, error) } type initClient struct { @@ -38,11 +39,21 @@ func (c *initClient) Init(ctx context.Context, in *InitRequest, opts ...grpc.Cal return out, nil } +func (c *initClient) Deinit(ctx context.Context, in *DeinitRequest, opts ...grpc.CallOption) (*DeinitResponse, error) { + out := new(DeinitResponse) + err := c.cc.Invoke(ctx, "/spire.service.private.init.v1.Init/Deinit", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // InitServer is the server API for Init service. // All implementations must embed UnimplementedInitServer // for forward compatibility type InitServer interface { Init(context.Context, *InitRequest) (*InitResponse, error) + Deinit(context.Context, *DeinitRequest) (*DeinitResponse, error) mustEmbedUnimplementedInitServer() } @@ -53,6 +64,9 @@ type UnimplementedInitServer struct { func (UnimplementedInitServer) Init(context.Context, *InitRequest) (*InitResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Init not implemented") } +func (UnimplementedInitServer) Deinit(context.Context, *DeinitRequest) (*DeinitResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Deinit not implemented") +} func (UnimplementedInitServer) mustEmbedUnimplementedInitServer() {} // UnsafeInitServer may be embedded to opt out of forward compatibility for this service. @@ -84,6 +98,24 @@ func _Init_Init_Handler(srv interface{}, ctx context.Context, dec func(interface return interceptor(ctx, in, info, handler) } +func _Init_Deinit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeinitRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InitServer).Deinit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/spire.service.private.init.v1.Init/Deinit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InitServer).Deinit(ctx, req.(*DeinitRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Init_ServiceDesc is the grpc.ServiceDesc for Init service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -95,6 +127,10 @@ var Init_ServiceDesc = grpc.ServiceDesc{ MethodName: "Init", Handler: _Init_Init_Handler, }, + { + MethodName: "Deinit", + Handler: _Init_Deinit_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "spire/service/private/init/v1/init.proto", diff --git a/plugintest/serve.go b/plugintest/serve.go index c0bf04f..f040279 100644 --- a/plugintest/serve.go +++ b/plugintest/serve.go @@ -131,6 +131,12 @@ func ServeInBackground(t *testing.T, config Config) { t.Fatalf("failed to initialize plugin: %v", err) } + t.Cleanup(func() { + if err := private.Deinit(ctx, conn); err != nil { + t.Fatalf("failed to deinitialize plugin: %v", err) + } + }) + assertInitClient(t, conn, config.PluginClient, grpcServiceNames) for _, serviceClient := range config.ServiceClients { assertInitClient(t, conn, serviceClient, grpcServiceNames) diff --git a/plugintest/serve_test.go b/plugintest/serve_test.go index 5e65404..70f1124 100644 --- a/plugintest/serve_test.go +++ b/plugintest/serve_test.go @@ -63,7 +63,7 @@ func TestServe(t *testing.T) { assertStringEqual(t, "hostService-in,hostService-out", hostServiceResp.Out) }) - assertStringEqual(t, "[INFO] PLUGIN: in=plugin-in\n[INFO] SERVICE: in=service-in\n", log.String()) + assertStringEqual(t, "[INFO] PLUGIN: in=plugin-in\n[INFO] SERVICE: in=service-in\n[INFO] CLOSED\n", log.String()) } func assertStringEqual(t *testing.T, expected, actual string) { @@ -105,6 +105,11 @@ func (p *TestPlugin) ServiceEcho(_ context.Context, req *test.EchoRequest) (*tes return &test.EchoResponse{Out: req.In + ",service-out"}, nil } +func (p *TestPlugin) Close() error { + p.log.Info("CLOSED") + return nil +} + type someHostService struct { test.UnimplementedSomeHostServiceServer } diff --git a/private/init.go b/private/init.go index ade283e..86ba5b0 100644 --- a/private/init.go +++ b/private/init.go @@ -5,6 +5,8 @@ import ( initv1 "github.com/spiffe/spire-plugin-sdk/internal/proto/spire/service/private/init/v1" "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) // Init initializes the plugin and advertises the given host service names to @@ -21,3 +23,17 @@ func Init(ctx context.Context, conn grpc.ClientConnInterface, hostServiceNames [ } return resp.PluginServiceNames, nil } + +// Deinit deinitializes the plugin. It should only be called right before the +// host unloads the plugin and will not be invoking any other plugin or service +// RPCs. +func Deinit(ctx context.Context, conn grpc.ClientConnInterface) error { + client := initv1.NewInitClient(conn) + _, err := client.Deinit(ctx, &initv1.DeinitRequest{}) + switch status.Code(err) { + case codes.OK, codes.Unimplemented: + return nil + default: + return err + } +} diff --git a/private/register.go b/private/register.go index 577b2dd..ac44de3 100644 --- a/private/register.go +++ b/private/register.go @@ -2,6 +2,7 @@ package private import ( "context" + "io" "github.com/hashicorp/go-hclog" initv1 "github.com/spiffe/spire-plugin-sdk/internal/proto/spire/service/private/init/v1" @@ -77,6 +78,26 @@ func (s *initService) Init(ctx context.Context, req *initv1.InitRequest) (*initv }, nil } +func (s *initService) Deinit(ctx context.Context, req *initv1.DeinitRequest) (*initv1.DeinitResponse, error) { + deinitted := map[interface{}]struct{}{} + for _, impl := range s.impls { + // Deinitialize the implementation. Since the same + // implementation might back more than one server, only deinitialize + // once. + if _, ok := deinitted[impl]; ok { + continue + } + deinitted[impl] = struct{}{} + + if impl, ok := impl.(io.Closer); ok { + if err := impl.Close(); err != nil { + s.logger.Error("Plugin implementation failed to deinitialize", "error", err) + } + } + } + return &initv1.DeinitResponse{}, nil +} + type serviceBroker struct { conn grpc.ClientConnInterface hostServiceNames []string From 96cd475f085549eebb2429654bce9460546f017a Mon Sep 17 00:00:00 2001 From: Andrew Harding Date: Wed, 1 Feb 2023 07:51:07 -0700 Subject: [PATCH 04/24] Updating CONTRIBUTING.md with next branch policy Signed-off-by: Andrew Harding --- docs/CONTRIBUTING.md | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 23f7b1e..42cd246 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -29,24 +29,27 @@ $ make If you are adding a new .proto file, you first need to update the `Makefile` and add the .proto file to the relevant variables. -## Consuming Changes in SPIRE +## Opening PRs + +All PRs should target the `next` branch. The `next` branch is a staging area +for all features under development but not ready for release in an official +version of SPIRE. -SPIRE's main branch depends on a pseudo-version of this repository (see -https://golang.org/ref/mod#pseudo-versions). +Changes are cherry-picked into `main` from the `next` branch ahead of an +official SPIRE release. The commits in `main` are tagged with the supporting +SPIRE version. -While a new change in this repository is under development, you can add a -temporary `replace` directive to the SPIRE `go.mod` to allow you to consume the -changes. Care must be taken to not push the `replace` directive change up to -SPIRE. +## Consuming Changes in SPIRE -Once those changes have been merged and you are ready to consume them from -SPIRE, run `go get github.com/spiffe/spire-plugin-sdk@` in the SPIRE -repository. This will update `go.mod` in SPIRE to use the latest pseudo version -with that commit. +While a new change in this repository is under development, you can use [Go +Workspaces](https://go.dev/ref/mod#workspaces) to allow SPIRE to consume the +changes before they are merged into this repository. -When cutting a SPIRE release, this repository is tagged with the SPIRE -release version. The release branch in SPIRE is updated to depend explicitly -on that version (i.e. `go get github.com/spiffe/spire-plugin-sdk@`). +SPIRE's main branch depends on a pseudo-version of this repository based on the +`next` branch (see https://golang.org/ref/mod#pseudo-versions). Once changes +have been merged into the `next` branch, the pseudo-version dependency in the +SPIRE repository can be updated by running `go get +github.com/spiffe/spire-plugin-sdk@next` from the SPIRE repository. Relying on a pseudo versions means that this repository only needs tags for the offically released versions, while still allowing SPIRE to work with From 63b96350ea82b4f9477bb9af31c29ac6a80fe4f0 Mon Sep 17 00:00:00 2001 From: Andrew Harding Date: Thu, 18 Aug 2022 09:32:40 -0600 Subject: [PATCH 05/24] Credential Composer plugin (#27) Signed-off-by: Andrew Harding --- Makefile | 1 + README.md | 15 +- .../v1/credentialcomposer.pb.go | 1499 +++++++++++++++++ .../v1/credentialcomposer.proto | 206 +++ .../v1/credentialcomposer_grpc.pb.go | 313 ++++ .../v1/credentialcomposer_spire_plugin.pb.go | 50 + .../credentialcomposer/credentialcomposer.go | 182 ++ .../credentialcomposer_test.go | 36 + 8 files changed, 2295 insertions(+), 7 deletions(-) create mode 100644 proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go create mode 100644 proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto create mode 100644 proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer_grpc.pb.go create mode 100644 proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer_spire_plugin.pb.go create mode 100644 templates/server/credentialcomposer/credentialcomposer.go create mode 100644 templates/server/credentialcomposer/credentialcomposer_test.go diff --git a/Makefile b/Makefile index 05cf0a2..e2102e4 100644 --- a/Makefile +++ b/Makefile @@ -40,6 +40,7 @@ plugin-protos := \ proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.proto \ proto/spire/plugin/agent/svidstore/v1/svidstore.proto \ proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.proto \ + proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto \ proto/spire/plugin/server/keymanager/v1/keymanager.proto \ proto/spire/plugin/server/nodeattestor/v1/nodeattestor.proto \ proto/spire/plugin/server/noderesolver/v1/noderesolver.proto \ diff --git a/README.md b/README.md index 1027a16..46f581d 100644 --- a/README.md +++ b/README.md @@ -32,13 +32,14 @@ There are three types of interfaces: ### Server -| Plugin | Versions | Description | Template | -| ------ | -------- | ----------- | ----------- | -| KeyManager | [v1](proto/spire/plugin/server/keymanager/v1/keymanager.proto) | Manages private keys and performs signing operations. | [link](templates/server/keymanager) | -| NodeAttestor | [v1](proto/spire/plugin/server/nodeattestor/v1/nodeattestor.proto) | Performs the server side of the node attestation flow. | [link](templates/server/nodeattestor) | -| NodeResolver | [v1](proto/spire/plugin/server/noderesolver/v1/noderesolver.proto) | Provides additional selectors for attested nodes. | [link](templates/server/noderesolver) | -| Notifier | [v1](proto/spire/plugin/server/notifier/v1/notifier.proto) | Notifies external systems of certain SPIRE events. | [link](templates/server/notifier) | -| UpstreamAuthority | [v1](proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto) | Plugs SPIRE into an upstream PKI. | [link](templates/server/upstreamauthority) | +| Plugin | Versions | Description | Template | +| ------ | -------- | ----------- | ----------- | +| CredentialComposer | [v1](proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto) | Allows customization of SVID and CA attributes. | [link](templates/server/credentialcomposer) | +| KeyManager | [v1](proto/spire/plugin/server/keymanager/v1/keymanager.proto) | Manages private keys and performs signing operations. | [link](templates/server/keymanager) | +| NodeAttestor | [v1](proto/spire/plugin/server/nodeattestor/v1/nodeattestor.proto) | Performs the server side of the node attestation flow. | [link](templates/server/nodeattestor) | +| NodeResolver | [v1](proto/spire/plugin/server/noderesolver/v1/noderesolver.proto) | Provides additional selectors for attested nodes. | [link](templates/server/noderesolver) | +| Notifier | [v1](proto/spire/plugin/server/notifier/v1/notifier.proto) | Notifies external systems of certain SPIRE events. | [link](templates/server/notifier) | +| UpstreamAuthority | [v1](proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto) | Plugs SPIRE into an upstream PKI. | [link](templates/server/upstreamauthority) | ## Services diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go new file mode 100644 index 0000000..57e3595 --- /dev/null +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go @@ -0,0 +1,1499 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.0 +// protoc v3.20.1 +// source: spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto + +package credentialcomposerv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + structpb "google.golang.org/protobuf/types/known/structpb" + 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 ComposeServerX509CARequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The default attributes for the server X509 CA. + Attributes *X509CAAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` +} + +func (x *ComposeServerX509CARequest) Reset() { + *x = ComposeServerX509CARequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeServerX509CARequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeServerX509CARequest) ProtoMessage() {} + +func (x *ComposeServerX509CARequest) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeServerX509CARequest.ProtoReflect.Descriptor instead. +func (*ComposeServerX509CARequest) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{0} +} + +func (x *ComposeServerX509CARequest) GetAttributes() *X509CAAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +type ComposeServerX509CAResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The attributes for the X509 CA. If not included in the response, the + // default attributes sent in the request will be used. + Attributes *X509CAAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` +} + +func (x *ComposeServerX509CAResponse) Reset() { + *x = ComposeServerX509CAResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeServerX509CAResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeServerX509CAResponse) ProtoMessage() {} + +func (x *ComposeServerX509CAResponse) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeServerX509CAResponse.ProtoReflect.Descriptor instead. +func (*ComposeServerX509CAResponse) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{1} +} + +func (x *ComposeServerX509CAResponse) GetAttributes() *X509CAAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +type ComposeServerX509SVIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The default attributes for the server X509-SVID. + Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` +} + +func (x *ComposeServerX509SVIDRequest) Reset() { + *x = ComposeServerX509SVIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeServerX509SVIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeServerX509SVIDRequest) ProtoMessage() {} + +func (x *ComposeServerX509SVIDRequest) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeServerX509SVIDRequest.ProtoReflect.Descriptor instead. +func (*ComposeServerX509SVIDRequest) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{2} +} + +func (x *ComposeServerX509SVIDRequest) GetAttributes() *X509SVIDAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +type ComposeServerX509SVIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The attributes for the X509-SVID. If not included in the response, the + // default attributes sent in the request will be used. + Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` +} + +func (x *ComposeServerX509SVIDResponse) Reset() { + *x = ComposeServerX509SVIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeServerX509SVIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeServerX509SVIDResponse) ProtoMessage() {} + +func (x *ComposeServerX509SVIDResponse) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeServerX509SVIDResponse.ProtoReflect.Descriptor instead. +func (*ComposeServerX509SVIDResponse) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{3} +} + +func (x *ComposeServerX509SVIDResponse) GetAttributes() *X509SVIDAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +type ComposeAgentX509SVIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The default attributes for the server X509-SVID. + Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` +} + +func (x *ComposeAgentX509SVIDRequest) Reset() { + *x = ComposeAgentX509SVIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeAgentX509SVIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeAgentX509SVIDRequest) ProtoMessage() {} + +func (x *ComposeAgentX509SVIDRequest) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeAgentX509SVIDRequest.ProtoReflect.Descriptor instead. +func (*ComposeAgentX509SVIDRequest) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{4} +} + +func (x *ComposeAgentX509SVIDRequest) GetAttributes() *X509SVIDAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +type ComposeAgentX509SVIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The attributes for the X509-SVID. If not included in the response, the + // default attributes sent in the request will be used. + Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` +} + +func (x *ComposeAgentX509SVIDResponse) Reset() { + *x = ComposeAgentX509SVIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeAgentX509SVIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeAgentX509SVIDResponse) ProtoMessage() {} + +func (x *ComposeAgentX509SVIDResponse) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeAgentX509SVIDResponse.ProtoReflect.Descriptor instead. +func (*ComposeAgentX509SVIDResponse) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{5} +} + +func (x *ComposeAgentX509SVIDResponse) GetAttributes() *X509SVIDAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +type ComposeWorkloadX509SVIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The default attributes for the X509-SVID. + Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` + // The SPIFFE ID of the workload. + SpiffeId string `protobuf:"bytes,2,opt,name=spiffe_id,json=spiffeId,proto3" json:"spiffe_id,omitempty"` + // PKIX encoded public key of the workload. + PublicKey []byte `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` +} + +func (x *ComposeWorkloadX509SVIDRequest) Reset() { + *x = ComposeWorkloadX509SVIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeWorkloadX509SVIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeWorkloadX509SVIDRequest) ProtoMessage() {} + +func (x *ComposeWorkloadX509SVIDRequest) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeWorkloadX509SVIDRequest.ProtoReflect.Descriptor instead. +func (*ComposeWorkloadX509SVIDRequest) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{6} +} + +func (x *ComposeWorkloadX509SVIDRequest) GetAttributes() *X509SVIDAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *ComposeWorkloadX509SVIDRequest) GetSpiffeId() string { + if x != nil { + return x.SpiffeId + } + return "" +} + +func (x *ComposeWorkloadX509SVIDRequest) GetPublicKey() []byte { + if x != nil { + return x.PublicKey + } + return nil +} + +type ComposeWorkloadX509SVIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The attributes for the X509-SVID. If not included in the response, the + // default attributes sent in the request will be used. + Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` +} + +func (x *ComposeWorkloadX509SVIDResponse) Reset() { + *x = ComposeWorkloadX509SVIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeWorkloadX509SVIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeWorkloadX509SVIDResponse) ProtoMessage() {} + +func (x *ComposeWorkloadX509SVIDResponse) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeWorkloadX509SVIDResponse.ProtoReflect.Descriptor instead. +func (*ComposeWorkloadX509SVIDResponse) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{7} +} + +func (x *ComposeWorkloadX509SVIDResponse) GetAttributes() *X509SVIDAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +type ComposeWorkloadJWTSVIDRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The default attributes for the JWT-SVID. + Attributes *JWTSVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` + // The SPIFFE ID of the workload. + SpiffeId string `protobuf:"bytes,2,opt,name=spiffe_id,json=spiffeId,proto3" json:"spiffe_id,omitempty"` +} + +func (x *ComposeWorkloadJWTSVIDRequest) Reset() { + *x = ComposeWorkloadJWTSVIDRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeWorkloadJWTSVIDRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeWorkloadJWTSVIDRequest) ProtoMessage() {} + +func (x *ComposeWorkloadJWTSVIDRequest) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeWorkloadJWTSVIDRequest.ProtoReflect.Descriptor instead. +func (*ComposeWorkloadJWTSVIDRequest) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{8} +} + +func (x *ComposeWorkloadJWTSVIDRequest) GetAttributes() *JWTSVIDAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +func (x *ComposeWorkloadJWTSVIDRequest) GetSpiffeId() string { + if x != nil { + return x.SpiffeId + } + return "" +} + +type ComposeWorkloadJWTSVIDResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The attributes for the JWT-SVID. If not included in the response, the + // default attributes sent in the request will be used. + Attributes *JWTSVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` +} + +func (x *ComposeWorkloadJWTSVIDResponse) Reset() { + *x = ComposeWorkloadJWTSVIDResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ComposeWorkloadJWTSVIDResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComposeWorkloadJWTSVIDResponse) ProtoMessage() {} + +func (x *ComposeWorkloadJWTSVIDResponse) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 ComposeWorkloadJWTSVIDResponse.ProtoReflect.Descriptor instead. +func (*ComposeWorkloadJWTSVIDResponse) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{9} +} + +func (x *ComposeWorkloadJWTSVIDResponse) GetAttributes() *JWTSVIDAttributes { + if x != nil { + return x.Attributes + } + return nil +} + +type X509CAAttributes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The subject of the X509 CA. + Subject *DistinguishedName `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"` + // Zero or more policy identifiers (OIDs) to apply to the CA. + PolicyIdentifiers []string `protobuf:"bytes,2,rep,name=policy_identifiers,json=policyIdentifiers,proto3" json:"policy_identifiers,omitempty"` + // Zero or more extensions to apply to the X509 CA. These will override + // any extensions otherwise added by the other fields. + ExtraExtensions []*X509Extension `protobuf:"bytes,3,rep,name=extra_extensions,json=extraExtensions,proto3" json:"extra_extensions,omitempty"` +} + +func (x *X509CAAttributes) Reset() { + *x = X509CAAttributes{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *X509CAAttributes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*X509CAAttributes) ProtoMessage() {} + +func (x *X509CAAttributes) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 X509CAAttributes.ProtoReflect.Descriptor instead. +func (*X509CAAttributes) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{10} +} + +func (x *X509CAAttributes) GetSubject() *DistinguishedName { + if x != nil { + return x.Subject + } + return nil +} + +func (x *X509CAAttributes) GetPolicyIdentifiers() []string { + if x != nil { + return x.PolicyIdentifiers + } + return nil +} + +func (x *X509CAAttributes) GetExtraExtensions() []*X509Extension { + if x != nil { + return x.ExtraExtensions + } + return nil +} + +type X509SVIDAttributes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The subject of the X509-SVID. + Subject *DistinguishedName `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"` + // Zero or more DNS SANs to apply to the X509-SVID. + DnsSans []string `protobuf:"bytes,2,rep,name=dns_sans,json=dnsSans,proto3" json:"dns_sans,omitempty"` + // Zero or more extensions to apply to the X509-SVID . These will override + // any extensions otherwise added by the other fields. This field cannot + // be used to change the URI SAN of the X509-SVID (i.e. the SPIFFE ID). + ExtraExtensions []*X509Extension `protobuf:"bytes,3,rep,name=extra_extensions,json=extraExtensions,proto3" json:"extra_extensions,omitempty"` +} + +func (x *X509SVIDAttributes) Reset() { + *x = X509SVIDAttributes{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *X509SVIDAttributes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*X509SVIDAttributes) ProtoMessage() {} + +func (x *X509SVIDAttributes) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 X509SVIDAttributes.ProtoReflect.Descriptor instead. +func (*X509SVIDAttributes) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{11} +} + +func (x *X509SVIDAttributes) GetSubject() *DistinguishedName { + if x != nil { + return x.Subject + } + return nil +} + +func (x *X509SVIDAttributes) GetDnsSans() []string { + if x != nil { + return x.DnsSans + } + return nil +} + +func (x *X509SVIDAttributes) GetExtraExtensions() []*X509Extension { + if x != nil { + return x.ExtraExtensions + } + return nil +} + +type X509Extension struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The OID of the X.509 extension (e.g. "1.2.3.4") + Oid string `protobuf:"bytes,1,opt,name=oid,proto3" json:"oid,omitempty"` + // Opaque value of the extension. No validity checking is performed on + // this value. Plugin implementors must ensure they are providing well + // formed values for the given extension OID. + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // Whether or not the extension is critical, i.e., must be + // handled/understood by verifiers or not. + Critical bool `protobuf:"varint,3,opt,name=critical,proto3" json:"critical,omitempty"` +} + +func (x *X509Extension) Reset() { + *x = X509Extension{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *X509Extension) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*X509Extension) ProtoMessage() {} + +func (x *X509Extension) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 X509Extension.ProtoReflect.Descriptor instead. +func (*X509Extension) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{12} +} + +func (x *X509Extension) GetOid() string { + if x != nil { + return x.Oid + } + return "" +} + +func (x *X509Extension) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +func (x *X509Extension) GetCritical() bool { + if x != nil { + return x.Critical + } + return false +} + +type DistinguishedName struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Zero or more country designations. + Country []string `protobuf:"bytes,1,rep,name=country,proto3" json:"country,omitempty"` + // Zero or more organization designations. + Organization []string `protobuf:"bytes,2,rep,name=organization,proto3" json:"organization,omitempty"` + // Zero or more organizational unit designations. + OrganizationalUnit []string `protobuf:"bytes,3,rep,name=organizational_unit,json=organizationalUnit,proto3" json:"organizational_unit,omitempty"` + // Zero or more locality designations. + Locality []string `protobuf:"bytes,4,rep,name=locality,proto3" json:"locality,omitempty"` + // Zero or more province designations. + Province []string `protobuf:"bytes,5,rep,name=province,proto3" json:"province,omitempty"` + // The serial number designation. The attribute is only set if this field + // is non-empty. + SerialNumber string `protobuf:"bytes,6,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"` + // The common name designation. The attribute is only set if this field is + // non-empty. + CommonName string `protobuf:"bytes,7,opt,name=common_name,json=commonName,proto3" json:"common_name,omitempty"` + // Extra names, determined by oid and value, to be added to the + // distinguished names. This field is to support names not covered by the + // DistinguishedName message. It will override values specified in other + // fields in the DistinguishedName if the attributes overlap. + ExtraNames []*AttributeTypeAndValue `protobuf:"bytes,8,rep,name=extra_names,json=extraNames,proto3" json:"extra_names,omitempty"` +} + +func (x *DistinguishedName) Reset() { + *x = DistinguishedName{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DistinguishedName) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DistinguishedName) ProtoMessage() {} + +func (x *DistinguishedName) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 DistinguishedName.ProtoReflect.Descriptor instead. +func (*DistinguishedName) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{13} +} + +func (x *DistinguishedName) GetCountry() []string { + if x != nil { + return x.Country + } + return nil +} + +func (x *DistinguishedName) GetOrganization() []string { + if x != nil { + return x.Organization + } + return nil +} + +func (x *DistinguishedName) GetOrganizationalUnit() []string { + if x != nil { + return x.OrganizationalUnit + } + return nil +} + +func (x *DistinguishedName) GetLocality() []string { + if x != nil { + return x.Locality + } + return nil +} + +func (x *DistinguishedName) GetProvince() []string { + if x != nil { + return x.Province + } + return nil +} + +func (x *DistinguishedName) GetSerialNumber() string { + if x != nil { + return x.SerialNumber + } + return "" +} + +func (x *DistinguishedName) GetCommonName() string { + if x != nil { + return x.CommonName + } + return "" +} + +func (x *DistinguishedName) GetExtraNames() []*AttributeTypeAndValue { + if x != nil { + return x.ExtraNames + } + return nil +} + +type AttributeTypeAndValue struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The OID of the attribute (e.g. "1.2.3.4"). + Oid string `protobuf:"bytes,1,opt,name=oid,proto3" json:"oid,omitempty"` + // The value of the attribute. Only UTF-8 strings are currently supported. + // this field may be encapsulated in a oneof at a later point. + StringValue string `protobuf:"bytes,2,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"` +} + +func (x *AttributeTypeAndValue) Reset() { + *x = AttributeTypeAndValue{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttributeTypeAndValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttributeTypeAndValue) ProtoMessage() {} + +func (x *AttributeTypeAndValue) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 AttributeTypeAndValue.ProtoReflect.Descriptor instead. +func (*AttributeTypeAndValue) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{14} +} + +func (x *AttributeTypeAndValue) GetOid() string { + if x != nil { + return x.Oid + } + return "" +} + +func (x *AttributeTypeAndValue) GetStringValue() string { + if x != nil { + return x.StringValue + } + return "" +} + +type JWTSVIDAttributes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The audience. + Audience string `protobuf:"bytes,1,opt,name=audience,proto3" json:"audience,omitempty"` + // Extra arbitrary claims. Cannot to be used to override the subject or + // issuer. If the audience claim is provided, it will override that + // supplied in the audience field. + ExtraClaims map[string]*structpb.Value `protobuf:"bytes,2,rep,name=extra_claims,json=extraClaims,proto3" json:"extra_claims,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *JWTSVIDAttributes) Reset() { + *x = JWTSVIDAttributes{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JWTSVIDAttributes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JWTSVIDAttributes) ProtoMessage() {} + +func (x *JWTSVIDAttributes) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_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 JWTSVIDAttributes.ProtoReflect.Descriptor instead. +func (*JWTSVIDAttributes) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{15} +} + +func (x *JWTSVIDAttributes) GetAudience() string { + if x != nil { + return x.Audience + } + return "" +} + +func (x *JWTSVIDAttributes) GetExtraClaims() map[string]*structpb.Value { + if x != nil { + return x.ExtraClaims + } + return nil +} + +var File_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto protoreflect.FileDescriptor + +var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDesc = []byte{ + 0x0a, 0x42, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x29, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x79, 0x0a, + 0x1a, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, + 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x0a, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x3b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, + 0x43, 0x41, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x7a, 0x0a, 0x1b, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x73, 0x70, + 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x22, 0x7d, 0x0a, 0x1c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x22, 0x7e, 0x0a, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x22, 0x7c, 0x0a, 0x1b, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x22, 0x7d, 0x0a, 0x1c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x22, 0xbb, 0x01, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x80, + 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x22, 0x9a, 0x01, 0x0a, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x5c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x64, 0x22, 0x7e, + 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xfe, + 0x01, 0x0a, 0x10, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x63, 0x0a, 0x10, 0x65, 0x78, + 0x74, 0x72, 0x61, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0xec, 0x01, 0x0a, 0x12, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x64, 0x6e, 0x73, 0x5f, 0x73, 0x61, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x07, 0x64, 0x6e, 0x73, 0x53, 0x61, 0x6e, 0x73, 0x12, 0x63, 0x0a, 0x10, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x53, + 0x0a, 0x0d, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, + 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, + 0x63, 0x61, 0x6c, 0x22, 0xe3, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x61, 0x6e, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x73, 0x70, + 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x15, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6f, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xf9, 0x01, 0x0a, 0x11, 0x4a, 0x57, 0x54, 0x53, + 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x70, 0x0a, 0x0c, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x4d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x57, 0x54, 0x53, + 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x45, 0x78, + 0x74, 0x72, 0x61, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x1a, 0x56, 0x0a, 0x10, 0x45, + 0x78, 0x74, 0x72, 0x61, 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, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x32, 0xf5, 0x06, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x12, 0xa4, 0x01, 0x0a, 0x13, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, + 0x43, 0x41, 0x12, 0x45, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, + 0x43, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x73, 0x70, 0x69, 0x72, + 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, + 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x47, 0x2e, 0x73, 0x70, + 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, + 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa7, + 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, + 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x46, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x47, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, + 0x53, 0x56, 0x49, 0x44, 0x12, 0x49, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x4a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, + 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x16, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, + 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x12, 0x48, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x49, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, + 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x69, 0x5a, 0x67, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, + 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, + 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2f, 0x76, + 0x31, 0x3b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescOnce sync.Once + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescData = file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDesc +) + +func file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP() []byte { + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescOnce.Do(func() { + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescData) + }) + return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescData +} + +var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_goTypes = []interface{}{ + (*ComposeServerX509CARequest)(nil), // 0: spire.plugin.server.credentialcomposer.v1.ComposeServerX509CARequest + (*ComposeServerX509CAResponse)(nil), // 1: spire.plugin.server.credentialcomposer.v1.ComposeServerX509CAResponse + (*ComposeServerX509SVIDRequest)(nil), // 2: spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDRequest + (*ComposeServerX509SVIDResponse)(nil), // 3: spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDResponse + (*ComposeAgentX509SVIDRequest)(nil), // 4: spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDRequest + (*ComposeAgentX509SVIDResponse)(nil), // 5: spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDResponse + (*ComposeWorkloadX509SVIDRequest)(nil), // 6: spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDRequest + (*ComposeWorkloadX509SVIDResponse)(nil), // 7: spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDResponse + (*ComposeWorkloadJWTSVIDRequest)(nil), // 8: spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDRequest + (*ComposeWorkloadJWTSVIDResponse)(nil), // 9: spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDResponse + (*X509CAAttributes)(nil), // 10: spire.plugin.server.credentialcomposer.v1.X509CAAttributes + (*X509SVIDAttributes)(nil), // 11: spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes + (*X509Extension)(nil), // 12: spire.plugin.server.credentialcomposer.v1.X509Extension + (*DistinguishedName)(nil), // 13: spire.plugin.server.credentialcomposer.v1.DistinguishedName + (*AttributeTypeAndValue)(nil), // 14: spire.plugin.server.credentialcomposer.v1.AttributeTypeAndValue + (*JWTSVIDAttributes)(nil), // 15: spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes + nil, // 16: spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes.ExtraClaimsEntry + (*structpb.Value)(nil), // 17: google.protobuf.Value +} +var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_depIdxs = []int32{ + 10, // 0: spire.plugin.server.credentialcomposer.v1.ComposeServerX509CARequest.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.X509CAAttributes + 10, // 1: spire.plugin.server.credentialcomposer.v1.ComposeServerX509CAResponse.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.X509CAAttributes + 11, // 2: spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDRequest.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes + 11, // 3: spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDResponse.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes + 11, // 4: spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDRequest.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes + 11, // 5: spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDResponse.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes + 11, // 6: spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDRequest.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes + 11, // 7: spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDResponse.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes + 15, // 8: spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDRequest.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes + 15, // 9: spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDResponse.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes + 13, // 10: spire.plugin.server.credentialcomposer.v1.X509CAAttributes.subject:type_name -> spire.plugin.server.credentialcomposer.v1.DistinguishedName + 12, // 11: spire.plugin.server.credentialcomposer.v1.X509CAAttributes.extra_extensions:type_name -> spire.plugin.server.credentialcomposer.v1.X509Extension + 13, // 12: spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes.subject:type_name -> spire.plugin.server.credentialcomposer.v1.DistinguishedName + 12, // 13: spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes.extra_extensions:type_name -> spire.plugin.server.credentialcomposer.v1.X509Extension + 14, // 14: spire.plugin.server.credentialcomposer.v1.DistinguishedName.extra_names:type_name -> spire.plugin.server.credentialcomposer.v1.AttributeTypeAndValue + 16, // 15: spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes.extra_claims:type_name -> spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes.ExtraClaimsEntry + 17, // 16: spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes.ExtraClaimsEntry.value:type_name -> google.protobuf.Value + 0, // 17: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509CA:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509CARequest + 2, // 18: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509SVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDRequest + 4, // 19: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeAgentX509SVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDRequest + 6, // 20: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadX509SVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDRequest + 8, // 21: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadJWTSVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDRequest + 1, // 22: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509CA:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509CAResponse + 3, // 23: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509SVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDResponse + 5, // 24: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeAgentX509SVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDResponse + 7, // 25: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadX509SVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDResponse + 9, // 26: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadJWTSVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDResponse + 22, // [22:27] is the sub-list for method output_type + 17, // [17:22] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name +} + +func init() { file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_init() } +func file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_init() { + if File_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeServerX509CARequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeServerX509CAResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeServerX509SVIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeServerX509SVIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeAgentX509SVIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeAgentX509SVIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeWorkloadX509SVIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeWorkloadX509SVIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeWorkloadJWTSVIDRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ComposeWorkloadJWTSVIDResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*X509CAAttributes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*X509SVIDAttributes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*X509Extension); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DistinguishedName); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AttributeTypeAndValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JWTSVIDAttributes); 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_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDesc, + NumEnums: 0, + NumMessages: 17, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_goTypes, + DependencyIndexes: file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_depIdxs, + MessageInfos: file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes, + }.Build() + File_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto = out.File + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDesc = nil + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_goTypes = nil + file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_depIdxs = nil +} diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto new file mode 100644 index 0000000..7b1f6d7 --- /dev/null +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto @@ -0,0 +1,206 @@ +syntax = "proto3"; +package spire.plugin.server.credentialcomposer.v1; +option go_package = "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/credentialcomposer/v1;credentialcomposerv1"; + +import "google/protobuf/struct.proto"; + +// The CredentialComposer plugin influences the attributes of X.509 +// certificates and JWT tokens minted by or on behalf of SPIRE Server. +service CredentialComposer { + // Composes the SPIRE Server X509 CA. The server will supply the default + // attributes it will apply to the CA. If the plugin returns an empty + // response or NOT_IMPLEMENTED, the server will apply the default + // attributes. Otherwise the returned attributes are used. If a CA is + // produced that does not conform to the SPIFFE X509-SVID specification for + // signing certificates, it will be rejected. + rpc ComposeServerX509CA(ComposeServerX509CARequest) returns (ComposeServerX509CAResponse); + + // Composes the SPIRE Server X509-SVID. The server will supply the default + // attributes it will apply to the server X509-SVID. If the plugin returns + // an empty response or NOT_IMPLEMENTED, the server will apply the default + // attributes. Otherwise the returned attributes are used. If an X509-SVID + // is produced that does not conform to the SPIFFE X509-SVID specification + // for leaf certificates, it will be rejected. This function cannot be used + // to modify the SPIFFE ID of the X509-SVID. + rpc ComposeServerX509SVID(ComposeServerX509SVIDRequest) returns (ComposeServerX509SVIDResponse); + + // Composes the SPIRE Agent X509-SVID. The server will supply the default + // attributes it will apply to the agent X509-SVID. If the plugin returns + // an empty response or NOT_IMPLEMENTED, the server will apply the default + // attributes. Otherwise the returned attributes are used. If an X509-SVID + // is produced that does not conform to the SPIFFE X509-SVID specification + // for leaf certificates, it will be rejected. This function cannot be used + // to modify the SPIFFE ID of the X509-SVID. + rpc ComposeAgentX509SVID(ComposeAgentX509SVIDRequest) returns (ComposeAgentX509SVIDResponse); + + // Composes workload X509-SVIDs. The server will supply the default + // attributes it will apply to the workload X509-SVID. If the plugin + // returns an empty response or NOT_IMPLEMENTED, the server will apply the + // default attributes. Otherwise the returned attributes are used. If an + // X509-SVID is produced that does not conform to the SPIFFE X509-SVID + // specification for leaf certificates, it will be rejected. This function + // cannot be used to modify the SPIFFE ID of the X509-SVID. + rpc ComposeWorkloadX509SVID(ComposeWorkloadX509SVIDRequest) returns (ComposeWorkloadX509SVIDResponse); + + // Composes workload JWT-SVIDs. The server will supply the default + // attributes it will apply to the workload JWT-SVID. If the plugin + // returns an empty response or NOT_IMPLEMENTED, the server will apply the + // default attributes. Otherwise the returned attributes are used. If a + // JWT-SVID is produced that does not conform to the SPIFFE JWT-SVID + // specification, it will be rejected. This function cannot be used to + // modify the SPIFFE ID of the JWT-SVID. + rpc ComposeWorkloadJWTSVID(ComposeWorkloadJWTSVIDRequest) returns (ComposeWorkloadJWTSVIDResponse); +} + +message ComposeServerX509CARequest { + // The default attributes for the server X509 CA. + X509CAAttributes attributes = 1; +} + +message ComposeServerX509CAResponse { + // The attributes for the X509 CA. If not included in the response, the + // default attributes sent in the request will be used. + X509CAAttributes attributes = 1; +} + +message ComposeServerX509SVIDRequest { + // The default attributes for the server X509-SVID. + X509SVIDAttributes attributes = 1; +} + +message ComposeServerX509SVIDResponse { + // The attributes for the X509-SVID. If not included in the response, the + // default attributes sent in the request will be used. + X509SVIDAttributes attributes = 1; +} + +message ComposeAgentX509SVIDRequest { + // The default attributes for the server X509-SVID. + X509SVIDAttributes attributes = 1; +} + +message ComposeAgentX509SVIDResponse { + // The attributes for the X509-SVID. If not included in the response, the + // default attributes sent in the request will be used. + X509SVIDAttributes attributes = 1; +} + +message ComposeWorkloadX509SVIDRequest { + // The default attributes for the X509-SVID. + X509SVIDAttributes attributes = 1; + + // The SPIFFE ID of the workload. + string spiffe_id = 2; + + // PKIX encoded public key of the workload. + bytes public_key = 3; +} + +message ComposeWorkloadX509SVIDResponse { + // The attributes for the X509-SVID. If not included in the response, the + // default attributes sent in the request will be used. + X509SVIDAttributes attributes = 1; +} + +message ComposeWorkloadJWTSVIDRequest { + // The default attributes for the JWT-SVID. + JWTSVIDAttributes attributes = 1; + + // The SPIFFE ID of the workload. + string spiffe_id = 2; +} + +message ComposeWorkloadJWTSVIDResponse { + // The attributes for the JWT-SVID. If not included in the response, the + // default attributes sent in the request will be used. + JWTSVIDAttributes attributes = 1; +} + +message X509CAAttributes { + // The subject of the X509 CA. + DistinguishedName subject = 1; + + // Zero or more policy identifiers (OIDs) to apply to the CA. + repeated string policy_identifiers = 2; + + // Zero or more extensions to apply to the X509 CA. These will override + // any extensions otherwise added by the other fields. + repeated X509Extension extra_extensions = 3; +} + +message X509SVIDAttributes { + // The subject of the X509-SVID. + DistinguishedName subject = 1; + + // Zero or more DNS SANs to apply to the X509-SVID. + repeated string dns_sans = 2; + + // Zero or more extensions to apply to the X509-SVID . These will override + // any extensions otherwise added by the other fields. This field cannot + // be used to change the URI SAN of the X509-SVID (i.e. the SPIFFE ID). + repeated X509Extension extra_extensions = 3; +} + +message X509Extension { + // The OID of the X.509 extension (e.g. "1.2.3.4") + string oid = 1; + + // Opaque value of the extension. No validity checking is performed on + // this value. Plugin implementors must ensure they are providing well + // formed values for the given extension OID. + bytes value = 2; + + // Whether or not the extension is critical, i.e., must be + // handled/understood by verifiers or not. + bool critical = 3; +} + +message DistinguishedName { + // Zero or more country designations. + repeated string country = 1; + + // Zero or more organization designations. + repeated string organization = 2; + + // Zero or more organizational unit designations. + repeated string organizational_unit = 3; + + // Zero or more locality designations. + repeated string locality = 4; + + // Zero or more province designations. + repeated string province = 5; + + // The serial number designation. The attribute is only set if this field + // is non-empty. + string serial_number = 6; + + // The common name designation. The attribute is only set if this field is + // non-empty. + string common_name = 7; + + // Extra names, determined by oid and value, to be added to the + // distinguished names. This field is to support names not covered by the + // DistinguishedName message. It will override values specified in other + // fields in the DistinguishedName if the attributes overlap. + repeated AttributeTypeAndValue extra_names = 8; +} + +message AttributeTypeAndValue { + // The OID of the attribute (e.g. "1.2.3.4"). + string oid = 1; + + // The value of the attribute. Only UTF-8 strings are currently supported. + // this field may be encapsulated in a oneof at a later point. + string string_value = 2; +} + +message JWTSVIDAttributes { + // The audience. + string audience = 1; + + // Extra arbitrary claims. Cannot to be used to override the subject or + // issuer. If the audience claim is provided, it will override that + // supplied in the audience field. + map extra_claims = 2; +} diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer_grpc.pb.go b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer_grpc.pb.go new file mode 100644 index 0000000..ec61a66 --- /dev/null +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer_grpc.pb.go @@ -0,0 +1,313 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package credentialcomposerv1 + +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 + +// CredentialComposerClient is the client API for CredentialComposer 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 CredentialComposerClient interface { + // Composes the SPIRE Server X509 CA. The server will supply the default + // attributes it will apply to the CA. If the plugin returns an empty + // response or NOT_IMPLEMENTED, the server will apply the default + // attributes. Otherwise the returned attributes are used. If a CA is + // produced that does not conform to the SPIFFE X509-SVID specification for + // signing certificates, it will be rejected. + ComposeServerX509CA(ctx context.Context, in *ComposeServerX509CARequest, opts ...grpc.CallOption) (*ComposeServerX509CAResponse, error) + // Composes the SPIRE Server X509-SVID. The server will supply the default + // attributes it will apply to the server X509-SVID. If the plugin returns + // an empty response or NOT_IMPLEMENTED, the server will apply the default + // attributes. Otherwise the returned attributes are used. If an X509-SVID + // is produced that does not conform to the SPIFFE X509-SVID specification + // for leaf certificates, it will be rejected. This function cannot be used + // to modify the SPIFFE ID of the X509-SVID. + ComposeServerX509SVID(ctx context.Context, in *ComposeServerX509SVIDRequest, opts ...grpc.CallOption) (*ComposeServerX509SVIDResponse, error) + // Composes the SPIRE Agent X509-SVID. The server will supply the default + // attributes it will apply to the agent X509-SVID. If the plugin returns + // an empty response or NOT_IMPLEMENTED, the server will apply the default + // attributes. Otherwise the returned attributes are used. If an X509-SVID + // is produced that does not conform to the SPIFFE X509-SVID specification + // for leaf certificates, it will be rejected. This function cannot be used + // to modify the SPIFFE ID of the X509-SVID. + ComposeAgentX509SVID(ctx context.Context, in *ComposeAgentX509SVIDRequest, opts ...grpc.CallOption) (*ComposeAgentX509SVIDResponse, error) + // Composes workload X509-SVIDs. The server will supply the default + // attributes it will apply to the workload X509-SVID. If the plugin + // returns an empty response or NOT_IMPLEMENTED, the server will apply the + // default attributes. Otherwise the returned attributes are used. If an + // X509-SVID is produced that does not conform to the SPIFFE X509-SVID + // specification for leaf certificates, it will be rejected. This function + // cannot be used to modify the SPIFFE ID of the X509-SVID. + ComposeWorkloadX509SVID(ctx context.Context, in *ComposeWorkloadX509SVIDRequest, opts ...grpc.CallOption) (*ComposeWorkloadX509SVIDResponse, error) + // Composes workload JWT-SVIDs. The server will supply the default + // attributes it will apply to the workload JWT-SVID. If the plugin + // returns an empty response or NOT_IMPLEMENTED, the server will apply the + // default attributes. Otherwise the returned attributes are used. If a + // JWT-SVID is produced that does not conform to the SPIFFE JWT-SVID + // specification, it will be rejected. This function cannot be used to + // modify the SPIFFE ID of the JWT-SVID. + ComposeWorkloadJWTSVID(ctx context.Context, in *ComposeWorkloadJWTSVIDRequest, opts ...grpc.CallOption) (*ComposeWorkloadJWTSVIDResponse, error) +} + +type credentialComposerClient struct { + cc grpc.ClientConnInterface +} + +func NewCredentialComposerClient(cc grpc.ClientConnInterface) CredentialComposerClient { + return &credentialComposerClient{cc} +} + +func (c *credentialComposerClient) ComposeServerX509CA(ctx context.Context, in *ComposeServerX509CARequest, opts ...grpc.CallOption) (*ComposeServerX509CAResponse, error) { + out := new(ComposeServerX509CAResponse) + err := c.cc.Invoke(ctx, "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeServerX509CA", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *credentialComposerClient) ComposeServerX509SVID(ctx context.Context, in *ComposeServerX509SVIDRequest, opts ...grpc.CallOption) (*ComposeServerX509SVIDResponse, error) { + out := new(ComposeServerX509SVIDResponse) + err := c.cc.Invoke(ctx, "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeServerX509SVID", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *credentialComposerClient) ComposeAgentX509SVID(ctx context.Context, in *ComposeAgentX509SVIDRequest, opts ...grpc.CallOption) (*ComposeAgentX509SVIDResponse, error) { + out := new(ComposeAgentX509SVIDResponse) + err := c.cc.Invoke(ctx, "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeAgentX509SVID", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *credentialComposerClient) ComposeWorkloadX509SVID(ctx context.Context, in *ComposeWorkloadX509SVIDRequest, opts ...grpc.CallOption) (*ComposeWorkloadX509SVIDResponse, error) { + out := new(ComposeWorkloadX509SVIDResponse) + err := c.cc.Invoke(ctx, "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeWorkloadX509SVID", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *credentialComposerClient) ComposeWorkloadJWTSVID(ctx context.Context, in *ComposeWorkloadJWTSVIDRequest, opts ...grpc.CallOption) (*ComposeWorkloadJWTSVIDResponse, error) { + out := new(ComposeWorkloadJWTSVIDResponse) + err := c.cc.Invoke(ctx, "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeWorkloadJWTSVID", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// CredentialComposerServer is the server API for CredentialComposer service. +// All implementations must embed UnimplementedCredentialComposerServer +// for forward compatibility +type CredentialComposerServer interface { + // Composes the SPIRE Server X509 CA. The server will supply the default + // attributes it will apply to the CA. If the plugin returns an empty + // response or NOT_IMPLEMENTED, the server will apply the default + // attributes. Otherwise the returned attributes are used. If a CA is + // produced that does not conform to the SPIFFE X509-SVID specification for + // signing certificates, it will be rejected. + ComposeServerX509CA(context.Context, *ComposeServerX509CARequest) (*ComposeServerX509CAResponse, error) + // Composes the SPIRE Server X509-SVID. The server will supply the default + // attributes it will apply to the server X509-SVID. If the plugin returns + // an empty response or NOT_IMPLEMENTED, the server will apply the default + // attributes. Otherwise the returned attributes are used. If an X509-SVID + // is produced that does not conform to the SPIFFE X509-SVID specification + // for leaf certificates, it will be rejected. This function cannot be used + // to modify the SPIFFE ID of the X509-SVID. + ComposeServerX509SVID(context.Context, *ComposeServerX509SVIDRequest) (*ComposeServerX509SVIDResponse, error) + // Composes the SPIRE Agent X509-SVID. The server will supply the default + // attributes it will apply to the agent X509-SVID. If the plugin returns + // an empty response or NOT_IMPLEMENTED, the server will apply the default + // attributes. Otherwise the returned attributes are used. If an X509-SVID + // is produced that does not conform to the SPIFFE X509-SVID specification + // for leaf certificates, it will be rejected. This function cannot be used + // to modify the SPIFFE ID of the X509-SVID. + ComposeAgentX509SVID(context.Context, *ComposeAgentX509SVIDRequest) (*ComposeAgentX509SVIDResponse, error) + // Composes workload X509-SVIDs. The server will supply the default + // attributes it will apply to the workload X509-SVID. If the plugin + // returns an empty response or NOT_IMPLEMENTED, the server will apply the + // default attributes. Otherwise the returned attributes are used. If an + // X509-SVID is produced that does not conform to the SPIFFE X509-SVID + // specification for leaf certificates, it will be rejected. This function + // cannot be used to modify the SPIFFE ID of the X509-SVID. + ComposeWorkloadX509SVID(context.Context, *ComposeWorkloadX509SVIDRequest) (*ComposeWorkloadX509SVIDResponse, error) + // Composes workload JWT-SVIDs. The server will supply the default + // attributes it will apply to the workload JWT-SVID. If the plugin + // returns an empty response or NOT_IMPLEMENTED, the server will apply the + // default attributes. Otherwise the returned attributes are used. If a + // JWT-SVID is produced that does not conform to the SPIFFE JWT-SVID + // specification, it will be rejected. This function cannot be used to + // modify the SPIFFE ID of the JWT-SVID. + ComposeWorkloadJWTSVID(context.Context, *ComposeWorkloadJWTSVIDRequest) (*ComposeWorkloadJWTSVIDResponse, error) + mustEmbedUnimplementedCredentialComposerServer() +} + +// UnimplementedCredentialComposerServer must be embedded to have forward compatible implementations. +type UnimplementedCredentialComposerServer struct { +} + +func (UnimplementedCredentialComposerServer) ComposeServerX509CA(context.Context, *ComposeServerX509CARequest) (*ComposeServerX509CAResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ComposeServerX509CA not implemented") +} +func (UnimplementedCredentialComposerServer) ComposeServerX509SVID(context.Context, *ComposeServerX509SVIDRequest) (*ComposeServerX509SVIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ComposeServerX509SVID not implemented") +} +func (UnimplementedCredentialComposerServer) ComposeAgentX509SVID(context.Context, *ComposeAgentX509SVIDRequest) (*ComposeAgentX509SVIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ComposeAgentX509SVID not implemented") +} +func (UnimplementedCredentialComposerServer) ComposeWorkloadX509SVID(context.Context, *ComposeWorkloadX509SVIDRequest) (*ComposeWorkloadX509SVIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ComposeWorkloadX509SVID not implemented") +} +func (UnimplementedCredentialComposerServer) ComposeWorkloadJWTSVID(context.Context, *ComposeWorkloadJWTSVIDRequest) (*ComposeWorkloadJWTSVIDResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ComposeWorkloadJWTSVID not implemented") +} +func (UnimplementedCredentialComposerServer) mustEmbedUnimplementedCredentialComposerServer() {} + +// UnsafeCredentialComposerServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to CredentialComposerServer will +// result in compilation errors. +type UnsafeCredentialComposerServer interface { + mustEmbedUnimplementedCredentialComposerServer() +} + +func RegisterCredentialComposerServer(s grpc.ServiceRegistrar, srv CredentialComposerServer) { + s.RegisterService(&CredentialComposer_ServiceDesc, srv) +} + +func _CredentialComposer_ComposeServerX509CA_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ComposeServerX509CARequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CredentialComposerServer).ComposeServerX509CA(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeServerX509CA", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CredentialComposerServer).ComposeServerX509CA(ctx, req.(*ComposeServerX509CARequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CredentialComposer_ComposeServerX509SVID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ComposeServerX509SVIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CredentialComposerServer).ComposeServerX509SVID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeServerX509SVID", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CredentialComposerServer).ComposeServerX509SVID(ctx, req.(*ComposeServerX509SVIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CredentialComposer_ComposeAgentX509SVID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ComposeAgentX509SVIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CredentialComposerServer).ComposeAgentX509SVID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeAgentX509SVID", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CredentialComposerServer).ComposeAgentX509SVID(ctx, req.(*ComposeAgentX509SVIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CredentialComposer_ComposeWorkloadX509SVID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ComposeWorkloadX509SVIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CredentialComposerServer).ComposeWorkloadX509SVID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeWorkloadX509SVID", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CredentialComposerServer).ComposeWorkloadX509SVID(ctx, req.(*ComposeWorkloadX509SVIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _CredentialComposer_ComposeWorkloadJWTSVID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ComposeWorkloadJWTSVIDRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(CredentialComposerServer).ComposeWorkloadJWTSVID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/spire.plugin.server.credentialcomposer.v1.CredentialComposer/ComposeWorkloadJWTSVID", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(CredentialComposerServer).ComposeWorkloadJWTSVID(ctx, req.(*ComposeWorkloadJWTSVIDRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// CredentialComposer_ServiceDesc is the grpc.ServiceDesc for CredentialComposer service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var CredentialComposer_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "spire.plugin.server.credentialcomposer.v1.CredentialComposer", + HandlerType: (*CredentialComposerServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ComposeServerX509CA", + Handler: _CredentialComposer_ComposeServerX509CA_Handler, + }, + { + MethodName: "ComposeServerX509SVID", + Handler: _CredentialComposer_ComposeServerX509SVID_Handler, + }, + { + MethodName: "ComposeAgentX509SVID", + Handler: _CredentialComposer_ComposeAgentX509SVID_Handler, + }, + { + MethodName: "ComposeWorkloadX509SVID", + Handler: _CredentialComposer_ComposeWorkloadX509SVID_Handler, + }, + { + MethodName: "ComposeWorkloadJWTSVID", + Handler: _CredentialComposer_ComposeWorkloadJWTSVID_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto", +} diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer_spire_plugin.pb.go b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer_spire_plugin.pb.go new file mode 100644 index 0000000..a9d6c50 --- /dev/null +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer_spire_plugin.pb.go @@ -0,0 +1,50 @@ +// Code generated by protoc-gen-go-spire. DO NOT EDIT. + +package credentialcomposerv1 + +import ( + pluginsdk "github.com/spiffe/spire-plugin-sdk/pluginsdk" + grpc "google.golang.org/grpc" +) + +func CredentialComposerPluginServer(server CredentialComposerServer) pluginsdk.PluginServer { + return credentialComposerPluginServer{CredentialComposerServer: server} +} + +type credentialComposerPluginServer struct { + CredentialComposerServer +} + +func (s credentialComposerPluginServer) Type() string { + return "CredentialComposer" +} + +func (s credentialComposerPluginServer) GRPCServiceName() string { + return "spire.plugin.server.credentialcomposer.v1.CredentialComposer" +} + +func (s credentialComposerPluginServer) RegisterServer(server *grpc.Server) interface{} { + RegisterCredentialComposerServer(server, s.CredentialComposerServer) + return s.CredentialComposerServer +} + +type CredentialComposerPluginClient struct { + CredentialComposerClient +} + +func (s CredentialComposerPluginClient) Type() string { + return "CredentialComposer" +} + +func (c *CredentialComposerPluginClient) IsInitialized() bool { + return c.CredentialComposerClient != nil +} + +func (c *CredentialComposerPluginClient) GRPCServiceName() string { + return "spire.plugin.server.credentialcomposer.v1.CredentialComposer" +} + +func (c *CredentialComposerPluginClient) InitClient(conn grpc.ClientConnInterface) interface{} { + c.CredentialComposerClient = NewCredentialComposerClient(conn) + return c.CredentialComposerClient +} diff --git a/templates/server/credentialcomposer/credentialcomposer.go b/templates/server/credentialcomposer/credentialcomposer.go new file mode 100644 index 0000000..7519577 --- /dev/null +++ b/templates/server/credentialcomposer/credentialcomposer.go @@ -0,0 +1,182 @@ +package credentialcomposer + +import ( + "context" + "sync" + + "github.com/hashicorp/go-hclog" + "github.com/hashicorp/hcl" + "github.com/spiffe/spire-plugin-sdk/pluginmain" + "github.com/spiffe/spire-plugin-sdk/pluginsdk" + credentialcomposerv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/credentialcomposer/v1" + configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +var ( + // This compile time assertion ensures the plugin conforms properly to the + // pluginsdk.NeedsLogger interface. + // TODO: Remove if the plugin does not need the logger. + _ pluginsdk.NeedsLogger = (*Plugin)(nil) + + // This compile time assertion ensures the plugin conforms properly to the + // pluginsdk.NeedsHostServices interface. + // TODO: Remove if the plugin does not need host services. + _ pluginsdk.NeedsHostServices = (*Plugin)(nil) +) + +// Config defines the configuration for the plugin. +// TODO: Add relevant configurables or remove if no configuration is required. +type Config struct { +} + +// Plugin implements the CredentialComposer plugin +type Plugin struct { + // UnimplementedCredentialComposerServer is embedded to satisfy gRPC + credentialcomposerv1.UnimplementedCredentialComposerServer + + // UnimplementedConfigServer is embedded to satisfy gRPC + // TODO: Remove if this plugin does not require configuration + configv1.UnimplementedConfigServer + + // Configuration should be set atomically + // TODO: Remove if this plugin does not require configuration + configMtx sync.RWMutex + config *Config + + // The logger received from the framework via the SetLogger method + // TODO: Remove if this plugin does not need the logger. + logger hclog.Logger +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +func (p *Plugin) ComposeServerX509CA(ctx context.Context, req *credentialcomposerv1.ComposeServerX509CARequest) (*credentialcomposerv1.ComposeServerX509CAResponse, error) { + config, err := p.getConfig() + if err != nil { + return nil, err + } + + // TODO: Implement the RPC behavior. The following line silences compiler + // warnings and can be removed once the configuration is referenced by the + // implementation. + config = config + + return nil, status.Error(codes.Unimplemented, "not implemented") +} + +func (p *Plugin) ComposeServerX509SVID(ctx context.Context, req *credentialcomposerv1.ComposeServerX509SVIDRequest) (*credentialcomposerv1.ComposeServerX509SVIDResponse, error) { + config, err := p.getConfig() + if err != nil { + return nil, err + } + + // TODO: Implement the RPC behavior. The following line silences compiler + // warnings and can be removed once the configuration is referenced by the + // implementation. + config = config + + return nil, status.Error(codes.Unimplemented, "not implemented") +} + +func (p *Plugin) ComposeAgentX509SVID(ctx context.Context, req *credentialcomposerv1.ComposeAgentX509SVIDRequest) (*credentialcomposerv1.ComposeAgentX509SVIDResponse, error) { + config, err := p.getConfig() + if err != nil { + return nil, err + } + + // TODO: Implement the RPC behavior. The following line silences compiler + // warnings and can be removed once the configuration is referenced by the + // implementation. + config = config + + return nil, status.Error(codes.Unimplemented, "not implemented") +} + +func (p *Plugin) ComposeWorkloadX509SVID(ctx context.Context, req *credentialcomposerv1.ComposeWorkloadX509SVIDRequest) (*credentialcomposerv1.ComposeWorkloadX509SVIDResponse, error) { + config, err := p.getConfig() + if err != nil { + return nil, err + } + + // TODO: Implement the RPC behavior. The following line silences compiler + // warnings and can be removed once the configuration is referenced by the + // implementation. + config = config + + return nil, status.Error(codes.Unimplemented, "not implemented") +} +func (p *Plugin) ComposeWorkloadJWTSVID(ctx context.Context, req *credentialcomposerv1.ComposeWorkloadJWTSVIDRequest) (*credentialcomposerv1.ComposeWorkloadJWTSVIDResponse, error) { + config, err := p.getConfig() + if err != nil { + return nil, err + } + + // TODO: Implement the RPC behavior. The following line silences compiler + // warnings and can be removed once the configuration is referenced by the + // implementation. + config = config + + return nil, status.Error(codes.Unimplemented, "not implemented") +} + +// Configure configures the plugin. This is invoked by SPIRE when the plugin is +// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// As such, it should replace the previous configuration atomically. +// TODO: Remove if no configuration is required +func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { + config := new(Config) + if err := hcl.Decode(config, req.HclConfiguration); err != nil { + return nil, status.Errorf(codes.InvalidArgument, "failed to decode configuration: %v", err) + } + + // TODO: Validate configuration before setting/replacing existing + // configuration + + p.setConfig(config) + return &configv1.ConfigureResponse{}, nil +} + +// setConfig replaces the configuration atomically under a write lock. +// TODO: Remove if no configuration is required +func (p *Plugin) setConfig(config *Config) { + p.configMtx.Lock() + p.config = config + p.configMtx.Unlock() +} + +// getConfig gets the configuration under a read lock. +// TODO: Remove if no configuration is required +func (p *Plugin) getConfig() (*Config, error) { + p.configMtx.RLock() + defer p.configMtx.RUnlock() + if p.config == nil { + return nil, status.Error(codes.FailedPrecondition, "not configured") + } + return p.config, nil +} + +func main() { + plugin := new(Plugin) + // Serve the plugin. This function call will not return. If there is a + // failure to serve, the process will exit with a non-zero exit code. + pluginmain.Serve( + credentialcomposerv1.CredentialComposerPluginServer(plugin), + // TODO: Remove if no configuration is required + configv1.ConfigServiceServer(plugin), + ) +} diff --git a/templates/server/credentialcomposer/credentialcomposer_test.go b/templates/server/credentialcomposer/credentialcomposer_test.go new file mode 100644 index 0000000..a10551b --- /dev/null +++ b/templates/server/credentialcomposer/credentialcomposer_test.go @@ -0,0 +1,36 @@ +package credentialcomposer_test + +import ( + "testing" + + "github.com/spiffe/spire-plugin-sdk/pluginsdk" + "github.com/spiffe/spire-plugin-sdk/plugintest" + credentialcomposerv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/credentialcomposer/v1" + configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" + "github.com/spiffe/spire-plugin-sdk/templates/server/credentialcomposer" +) + +func Test(t *testing.T) { + plugin := new(credentialcomposer.Plugin) + pluginClient := new(credentialcomposerv1.CredentialComposerPluginClient) + configClient := new(configv1.ConfigServiceClient) + + // Serve the plugin in the background with the configured plugin and + // service servers. The servers will be cleaned up when the test finishes. + // TODO: Remove the config service server and client if no configuration + // is required. + // TODO: Provide host service server implementations if required by the + // plugin. + plugintest.ServeInBackground(t, plugintest.Config{ + PluginServer: credentialcomposerv1.CredentialComposerPluginServer(plugin), + PluginClient: pluginClient, + ServiceServers: []pluginsdk.ServiceServer{ + configv1.ConfigServiceServer(plugin), + }, + ServiceClients: []pluginsdk.ServiceClient{ + configClient, + }, + }) + + // TODO: Invoke methods on the clients and assert the results +} From 9e9075484b484692155aa4dd56db20d7efa059ca Mon Sep 17 00:00:00 2001 From: Andrew Harding Date: Tue, 20 Sep 2022 13:31:23 -0600 Subject: [PATCH 06/24] Add forward compat guidance to CredentialComposer Signed-off-by: Andrew Harding --- .../v1/credentialcomposer.pb.go | 60 ++++++++++++++----- .../v1/credentialcomposer.proto | 60 ++++++++++++++----- 2 files changed, 90 insertions(+), 30 deletions(-) diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go index 57e3595..795dffa 100644 --- a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go @@ -26,7 +26,10 @@ type ComposeServerX509CARequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The default attributes for the server X509 CA. + // The attributes for the server X509 CA. To maintain forward compatability + // with future attribute field additions, these attributes SHOULD be + // mutated and used to populate the attributes field in the + // ComposeServerX509CAResponse. Attributes *X509CAAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` } @@ -74,8 +77,11 @@ type ComposeServerX509CAResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The attributes for the X509 CA. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the server X509 CA. To maintain forward compatability + // with future attribute field additions, these attributes SHOULD be + // populated with the mutated attributes field in the + // ComposeServerX509CARequest. If this field is not included in the + // response, the original attributes sent in the request will be used. Attributes *X509CAAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` } @@ -123,7 +129,10 @@ type ComposeServerX509SVIDRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The default attributes for the server X509-SVID. + // The attributes for the server X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be mutated and used to populate the attributes field in the + // ComposeServerX509SVIDResponse. Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` } @@ -171,8 +180,11 @@ type ComposeServerX509SVIDResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The attributes for the X509-SVID. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the server X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be populated with the mutated attributes field in the + // ComposeServerX509SVIDRequest. If this field is not included in the + // response, the original attributes sent in the request will be used. Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` } @@ -220,7 +232,10 @@ type ComposeAgentX509SVIDRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The default attributes for the server X509-SVID. + // The attributes for the agent X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be mutated and used to populate the attributes field in the + // ComposeAgentX509SVIDResponse. Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` } @@ -268,8 +283,11 @@ type ComposeAgentX509SVIDResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The attributes for the X509-SVID. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the agent X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be populated with the mutated attributes field in the + // ComposeAgentX509SVIDRequest. If this field is not included in the + // response, the original attributes sent in the request will be used. Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` } @@ -317,7 +335,10 @@ type ComposeWorkloadX509SVIDRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The default attributes for the X509-SVID. + // The attributes for the workload X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be mutated and used to populate the attributes field in the + // ComposeWorkloadX509SVIDResponse. Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` // The SPIFFE ID of the workload. SpiffeId string `protobuf:"bytes,2,opt,name=spiffe_id,json=spiffeId,proto3" json:"spiffe_id,omitempty"` @@ -383,8 +404,11 @@ type ComposeWorkloadX509SVIDResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The attributes for the X509-SVID. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the workload X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be populated with the mutated attributes field in the + // ComposeWorkloadX509SVIDRequest. If this message is not included in the + // response, the original attributes sent in the request will be used. Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` } @@ -432,7 +456,10 @@ type ComposeWorkloadJWTSVIDRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The default attributes for the JWT-SVID. + // The attributes for the workload JWT-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be mutated and used to populate the attributes field in the + // ComposeWorkloadJWTSVIDResponse. Attributes *JWTSVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` // The SPIFFE ID of the workload. SpiffeId string `protobuf:"bytes,2,opt,name=spiffe_id,json=spiffeId,proto3" json:"spiffe_id,omitempty"` @@ -489,8 +516,11 @@ type ComposeWorkloadJWTSVIDResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The attributes for the JWT-SVID. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the workload JWT-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be populated with the mutated attributes field in the + // ComposeWorkloadJWTSVIDRequest. If this field is not included in the + // response, the original attributes sent in the request will be used. Attributes *JWTSVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` } diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto index 7b1f6d7..6dfaf53 100644 --- a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto @@ -53,40 +53,61 @@ service CredentialComposer { } message ComposeServerX509CARequest { - // The default attributes for the server X509 CA. + // The attributes for the server X509 CA. To maintain forward compatability + // with future attribute field additions, these attributes SHOULD be + // mutated and used to populate the attributes field in the + // ComposeServerX509CAResponse. X509CAAttributes attributes = 1; } message ComposeServerX509CAResponse { - // The attributes for the X509 CA. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the server X509 CA. To maintain forward compatability + // with future attribute field additions, these attributes SHOULD be + // populated with the mutated attributes field in the + // ComposeServerX509CARequest. If this field is not included in the + // response, the original attributes sent in the request will be used. X509CAAttributes attributes = 1; } message ComposeServerX509SVIDRequest { - // The default attributes for the server X509-SVID. + // The attributes for the server X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be mutated and used to populate the attributes field in the + // ComposeServerX509SVIDResponse. X509SVIDAttributes attributes = 1; } message ComposeServerX509SVIDResponse { - // The attributes for the X509-SVID. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the server X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be populated with the mutated attributes field in the + // ComposeServerX509SVIDRequest. If this field is not included in the + // response, the original attributes sent in the request will be used. X509SVIDAttributes attributes = 1; } message ComposeAgentX509SVIDRequest { - // The default attributes for the server X509-SVID. + // The attributes for the agent X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be mutated and used to populate the attributes field in the + // ComposeAgentX509SVIDResponse. X509SVIDAttributes attributes = 1; } message ComposeAgentX509SVIDResponse { - // The attributes for the X509-SVID. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the agent X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be populated with the mutated attributes field in the + // ComposeAgentX509SVIDRequest. If this field is not included in the + // response, the original attributes sent in the request will be used. X509SVIDAttributes attributes = 1; } message ComposeWorkloadX509SVIDRequest { - // The default attributes for the X509-SVID. + // The attributes for the workload X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be mutated and used to populate the attributes field in the + // ComposeWorkloadX509SVIDResponse. X509SVIDAttributes attributes = 1; // The SPIFFE ID of the workload. @@ -97,13 +118,19 @@ message ComposeWorkloadX509SVIDRequest { } message ComposeWorkloadX509SVIDResponse { - // The attributes for the X509-SVID. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the workload X509-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be populated with the mutated attributes field in the + // ComposeWorkloadX509SVIDRequest. If this message is not included in the + // response, the original attributes sent in the request will be used. X509SVIDAttributes attributes = 1; } message ComposeWorkloadJWTSVIDRequest { - // The default attributes for the JWT-SVID. + // The attributes for the workload JWT-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be mutated and used to populate the attributes field in the + // ComposeWorkloadJWTSVIDResponse. JWTSVIDAttributes attributes = 1; // The SPIFFE ID of the workload. @@ -111,8 +138,11 @@ message ComposeWorkloadJWTSVIDRequest { } message ComposeWorkloadJWTSVIDResponse { - // The attributes for the JWT-SVID. If not included in the response, the - // default attributes sent in the request will be used. + // The attributes for the workload JWT-SVID. To maintain forward + // compatability with future attribute field additions, these attributes + // SHOULD be populated with the mutated attributes field in the + // ComposeWorkloadJWTSVIDRequest. If this field is not included in the + // response, the original attributes sent in the request will be used. JWTSVIDAttributes attributes = 1; } From 59c9cfaac10456a55a48f24787cb0734624a2cec Mon Sep 17 00:00:00 2001 From: Andrew Harding Date: Fri, 7 Oct 2022 09:41:12 -0600 Subject: [PATCH 07/24] Additional CredentialComposer changes - consolidates JWT attributes into a single struct proto - fixes spelling typo - provides agent id/pubkey to the ComposeAgentX509SVID RPC Signed-off-by: Andrew Harding --- .../v1/credentialcomposer.pb.go | 427 +++++++++--------- .../v1/credentialcomposer.proto | 40 +- 2 files changed, 238 insertions(+), 229 deletions(-) diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go index 795dffa..6633422 100644 --- a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go @@ -26,7 +26,7 @@ type ComposeServerX509CARequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The attributes for the server X509 CA. To maintain forward compatability + // The attributes for the server X509 CA. To maintain forward compatibility // with future attribute field additions, these attributes SHOULD be // mutated and used to populate the attributes field in the // ComposeServerX509CAResponse. @@ -77,7 +77,7 @@ type ComposeServerX509CAResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The attributes for the server X509 CA. To maintain forward compatability + // The attributes for the server X509 CA. To maintain forward compatibility // with future attribute field additions, these attributes SHOULD be // populated with the mutated attributes field in the // ComposeServerX509CARequest. If this field is not included in the @@ -130,7 +130,7 @@ type ComposeServerX509SVIDRequest struct { unknownFields protoimpl.UnknownFields // The attributes for the server X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be mutated and used to populate the attributes field in the // ComposeServerX509SVIDResponse. Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` @@ -181,7 +181,7 @@ type ComposeServerX509SVIDResponse struct { unknownFields protoimpl.UnknownFields // The attributes for the server X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be populated with the mutated attributes field in the // ComposeServerX509SVIDRequest. If this field is not included in the // response, the original attributes sent in the request will be used. @@ -233,10 +233,14 @@ type ComposeAgentX509SVIDRequest struct { unknownFields protoimpl.UnknownFields // The attributes for the agent X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be mutated and used to populate the attributes field in the // ComposeAgentX509SVIDResponse. Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` + // The SPIFFE ID of the agent. + SpiffeId string `protobuf:"bytes,2,opt,name=spiffe_id,json=spiffeId,proto3" json:"spiffe_id,omitempty"` + // PKIX encoded public key of the agent. + PublicKey []byte `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` } func (x *ComposeAgentX509SVIDRequest) Reset() { @@ -278,13 +282,27 @@ func (x *ComposeAgentX509SVIDRequest) GetAttributes() *X509SVIDAttributes { return nil } +func (x *ComposeAgentX509SVIDRequest) GetSpiffeId() string { + if x != nil { + return x.SpiffeId + } + return "" +} + +func (x *ComposeAgentX509SVIDRequest) GetPublicKey() []byte { + if x != nil { + return x.PublicKey + } + return nil +} + type ComposeAgentX509SVIDResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The attributes for the agent X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be populated with the mutated attributes field in the // ComposeAgentX509SVIDRequest. If this field is not included in the // response, the original attributes sent in the request will be used. @@ -336,7 +354,7 @@ type ComposeWorkloadX509SVIDRequest struct { unknownFields protoimpl.UnknownFields // The attributes for the workload X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be mutated and used to populate the attributes field in the // ComposeWorkloadX509SVIDResponse. Attributes *X509SVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` @@ -405,7 +423,7 @@ type ComposeWorkloadX509SVIDResponse struct { unknownFields protoimpl.UnknownFields // The attributes for the workload X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be populated with the mutated attributes field in the // ComposeWorkloadX509SVIDRequest. If this message is not included in the // response, the original attributes sent in the request will be used. @@ -457,7 +475,7 @@ type ComposeWorkloadJWTSVIDRequest struct { unknownFields protoimpl.UnknownFields // The attributes for the workload JWT-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be mutated and used to populate the attributes field in the // ComposeWorkloadJWTSVIDResponse. Attributes *JWTSVIDAttributes `protobuf:"bytes,1,opt,name=attributes,proto3" json:"attributes,omitempty"` @@ -517,7 +535,7 @@ type ComposeWorkloadJWTSVIDResponse struct { unknownFields protoimpl.UnknownFields // The attributes for the workload JWT-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be populated with the mutated attributes field in the // ComposeWorkloadJWTSVIDRequest. If this field is not included in the // response, the original attributes sent in the request will be used. @@ -946,12 +964,13 @@ type JWTSVIDAttributes struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The audience. - Audience string `protobuf:"bytes,1,opt,name=audience,proto3" json:"audience,omitempty"` - // Extra arbitrary claims. Cannot to be used to override the subject or - // issuer. If the audience claim is provided, it will override that - // supplied in the audience field. - ExtraClaims map[string]*structpb.Value `protobuf:"bytes,2,rep,name=extra_claims,json=extraClaims,proto3" json:"extra_claims,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The JWT-SVID claims. Returned attributes must contain all of the + // claims required by the JWT-SVID specification: + // + // https://github.com/spiffe/spiffe/blob/main/standards/JWT-SVID.md + // + // The subject claim (i.e. SPIFFE ID) cannot be overriden. + Claims *structpb.Struct `protobuf:"bytes,1,opt,name=claims,proto3" json:"claims,omitempty"` } func (x *JWTSVIDAttributes) Reset() { @@ -986,16 +1005,9 @@ func (*JWTSVIDAttributes) Descriptor() ([]byte, []int) { return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescGZIP(), []int{15} } -func (x *JWTSVIDAttributes) GetAudience() string { - if x != nil { - return x.Audience - } - return "" -} - -func (x *JWTSVIDAttributes) GetExtraClaims() map[string]*structpb.Value { +func (x *JWTSVIDAttributes) GetClaims() *structpb.Struct { if x != nil { - return x.ExtraClaims + return x.Claims } return nil } @@ -1043,24 +1055,8 @@ var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawD 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x22, 0x7c, 0x0a, 0x1b, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x22, 0x7d, 0x0a, 0x1c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x22, 0xbb, 0x01, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, + 0x74, 0x65, 0x73, 0x22, 0xb8, 0x01, 0x0a, 0x1b, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, @@ -1070,175 +1066,184 @@ var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawD 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x80, - 0x01, 0x0a, 0x1f, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x22, 0x9a, 0x01, 0x0a, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x5c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x64, 0x22, 0x7e, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x7d, + 0x0a, 0x1c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, 0x35, + 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, + 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x58, + 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, + 0x1b, 0x0a, 0x09, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x80, 0x01, 0x0a, 0x1f, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, + 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x9a, + 0x01, 0x0a, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5c, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xfe, - 0x01, 0x0a, 0x10, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x65, 0x73, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1b, + 0x0a, 0x09, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x64, 0x22, 0x7e, 0x0a, 0x1e, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, + 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, + 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x57, + 0x54, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, + 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x10, + 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x12, 0x56, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x52, + 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x63, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, + 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xec, 0x01, 0x0a, + 0x12, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x63, 0x0a, 0x10, 0x65, 0x78, - 0x74, 0x72, 0x61, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0xec, 0x01, 0x0a, 0x12, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x64, 0x6e, 0x73, 0x5f, 0x73, 0x61, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x07, 0x64, 0x6e, 0x73, 0x53, 0x61, 0x6e, 0x73, 0x12, 0x63, 0x0a, 0x10, 0x65, 0x78, 0x74, - 0x72, 0x61, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x53, - 0x0a, 0x0d, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x6d, 0x65, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x64, + 0x6e, 0x73, 0x5f, 0x73, 0x61, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x64, + 0x6e, 0x73, 0x53, 0x61, 0x6e, 0x73, 0x12, 0x63, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x38, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, + 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x53, 0x0a, 0x0d, 0x58, + 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, + 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, + 0x22, 0xe3, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, + 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x12, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, + 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x15, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x22, 0xe3, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x65, - 0x78, 0x74, 0x72, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x15, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6f, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xf9, 0x01, 0x0a, 0x11, 0x4a, 0x57, 0x54, 0x53, - 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, - 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x70, 0x0a, 0x0c, 0x65, 0x78, 0x74, - 0x72, 0x61, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x4d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x57, 0x54, 0x53, - 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x45, 0x78, - 0x74, 0x72, 0x61, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, - 0x65, 0x78, 0x74, 0x72, 0x61, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x1a, 0x56, 0x0a, 0x10, 0x45, - 0x78, 0x74, 0x72, 0x61, 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, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x32, 0xf5, 0x06, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x12, 0xa4, 0x01, 0x0a, 0x13, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, - 0x43, 0x41, 0x12, 0x45, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, - 0x43, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x73, 0x70, 0x69, 0x72, + 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x44, 0x0a, 0x11, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x32, 0xf5, 0x06, 0x0a, 0x12, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, + 0x72, 0x12, 0xa4, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x12, 0x45, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x47, 0x2e, 0x73, 0x70, + 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x46, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, + 0x49, 0x44, 0x12, 0x47, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, + 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, - 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa7, - 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, - 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x46, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x47, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, - 0x53, 0x56, 0x49, 0x44, 0x12, 0x49, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x4a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, - 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x16, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, - 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x12, 0x48, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, + 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x46, + 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, + 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x47, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, + 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0xb0, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x49, 0x2e, 0x73, 0x70, + 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x49, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, - 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x69, 0x5a, 0x67, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, - 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, - 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2f, 0x76, - 0x31, 0x3b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x73, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x12, 0x48, 0x2e, + 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, + 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, + 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x69, 0x5a, 0x67, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, + 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1253,7 +1258,7 @@ func file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_raw return file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDescData } -var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_msgTypes = make([]protoimpl.MessageInfo, 16) var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_goTypes = []interface{}{ (*ComposeServerX509CARequest)(nil), // 0: spire.plugin.server.credentialcomposer.v1.ComposeServerX509CARequest (*ComposeServerX509CAResponse)(nil), // 1: spire.plugin.server.credentialcomposer.v1.ComposeServerX509CAResponse @@ -1271,8 +1276,7 @@ var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_goTy (*DistinguishedName)(nil), // 13: spire.plugin.server.credentialcomposer.v1.DistinguishedName (*AttributeTypeAndValue)(nil), // 14: spire.plugin.server.credentialcomposer.v1.AttributeTypeAndValue (*JWTSVIDAttributes)(nil), // 15: spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes - nil, // 16: spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes.ExtraClaimsEntry - (*structpb.Value)(nil), // 17: google.protobuf.Value + (*structpb.Struct)(nil), // 16: google.protobuf.Struct } var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_depIdxs = []int32{ 10, // 0: spire.plugin.server.credentialcomposer.v1.ComposeServerX509CARequest.attributes:type_name -> spire.plugin.server.credentialcomposer.v1.X509CAAttributes @@ -1290,23 +1294,22 @@ var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_depI 13, // 12: spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes.subject:type_name -> spire.plugin.server.credentialcomposer.v1.DistinguishedName 12, // 13: spire.plugin.server.credentialcomposer.v1.X509SVIDAttributes.extra_extensions:type_name -> spire.plugin.server.credentialcomposer.v1.X509Extension 14, // 14: spire.plugin.server.credentialcomposer.v1.DistinguishedName.extra_names:type_name -> spire.plugin.server.credentialcomposer.v1.AttributeTypeAndValue - 16, // 15: spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes.extra_claims:type_name -> spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes.ExtraClaimsEntry - 17, // 16: spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes.ExtraClaimsEntry.value:type_name -> google.protobuf.Value - 0, // 17: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509CA:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509CARequest - 2, // 18: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509SVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDRequest - 4, // 19: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeAgentX509SVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDRequest - 6, // 20: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadX509SVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDRequest - 8, // 21: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadJWTSVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDRequest - 1, // 22: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509CA:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509CAResponse - 3, // 23: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509SVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDResponse - 5, // 24: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeAgentX509SVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDResponse - 7, // 25: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadX509SVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDResponse - 9, // 26: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadJWTSVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDResponse - 22, // [22:27] is the sub-list for method output_type - 17, // [17:22] is the sub-list for method input_type - 17, // [17:17] is the sub-list for extension type_name - 17, // [17:17] is the sub-list for extension extendee - 0, // [0:17] is the sub-list for field type_name + 16, // 15: spire.plugin.server.credentialcomposer.v1.JWTSVIDAttributes.claims:type_name -> google.protobuf.Struct + 0, // 16: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509CA:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509CARequest + 2, // 17: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509SVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDRequest + 4, // 18: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeAgentX509SVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDRequest + 6, // 19: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadX509SVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDRequest + 8, // 20: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadJWTSVID:input_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDRequest + 1, // 21: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509CA:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509CAResponse + 3, // 22: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeServerX509SVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeServerX509SVIDResponse + 5, // 23: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeAgentX509SVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeAgentX509SVIDResponse + 7, // 24: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadX509SVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadX509SVIDResponse + 9, // 25: spire.plugin.server.credentialcomposer.v1.CredentialComposer.ComposeWorkloadJWTSVID:output_type -> spire.plugin.server.credentialcomposer.v1.ComposeWorkloadJWTSVIDResponse + 21, // [21:26] is the sub-list for method output_type + 16, // [16:21] 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_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_init() } @@ -1514,7 +1517,7 @@ func file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_ini GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawDesc, NumEnums: 0, - NumMessages: 17, + NumMessages: 16, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto index 6dfaf53..d6155ca 100644 --- a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto @@ -53,7 +53,7 @@ service CredentialComposer { } message ComposeServerX509CARequest { - // The attributes for the server X509 CA. To maintain forward compatability + // The attributes for the server X509 CA. To maintain forward compatibility // with future attribute field additions, these attributes SHOULD be // mutated and used to populate the attributes field in the // ComposeServerX509CAResponse. @@ -61,7 +61,7 @@ message ComposeServerX509CARequest { } message ComposeServerX509CAResponse { - // The attributes for the server X509 CA. To maintain forward compatability + // The attributes for the server X509 CA. To maintain forward compatibility // with future attribute field additions, these attributes SHOULD be // populated with the mutated attributes field in the // ComposeServerX509CARequest. If this field is not included in the @@ -71,7 +71,7 @@ message ComposeServerX509CAResponse { message ComposeServerX509SVIDRequest { // The attributes for the server X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be mutated and used to populate the attributes field in the // ComposeServerX509SVIDResponse. X509SVIDAttributes attributes = 1; @@ -79,7 +79,7 @@ message ComposeServerX509SVIDRequest { message ComposeServerX509SVIDResponse { // The attributes for the server X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be populated with the mutated attributes field in the // ComposeServerX509SVIDRequest. If this field is not included in the // response, the original attributes sent in the request will be used. @@ -88,15 +88,21 @@ message ComposeServerX509SVIDResponse { message ComposeAgentX509SVIDRequest { // The attributes for the agent X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be mutated and used to populate the attributes field in the // ComposeAgentX509SVIDResponse. X509SVIDAttributes attributes = 1; + + // The SPIFFE ID of the agent. + string spiffe_id = 2; + + // PKIX encoded public key of the agent. + bytes public_key = 3; } message ComposeAgentX509SVIDResponse { // The attributes for the agent X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be populated with the mutated attributes field in the // ComposeAgentX509SVIDRequest. If this field is not included in the // response, the original attributes sent in the request will be used. @@ -105,7 +111,7 @@ message ComposeAgentX509SVIDResponse { message ComposeWorkloadX509SVIDRequest { // The attributes for the workload X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be mutated and used to populate the attributes field in the // ComposeWorkloadX509SVIDResponse. X509SVIDAttributes attributes = 1; @@ -119,7 +125,7 @@ message ComposeWorkloadX509SVIDRequest { message ComposeWorkloadX509SVIDResponse { // The attributes for the workload X509-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be populated with the mutated attributes field in the // ComposeWorkloadX509SVIDRequest. If this message is not included in the // response, the original attributes sent in the request will be used. @@ -128,7 +134,7 @@ message ComposeWorkloadX509SVIDResponse { message ComposeWorkloadJWTSVIDRequest { // The attributes for the workload JWT-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be mutated and used to populate the attributes field in the // ComposeWorkloadJWTSVIDResponse. JWTSVIDAttributes attributes = 1; @@ -139,7 +145,7 @@ message ComposeWorkloadJWTSVIDRequest { message ComposeWorkloadJWTSVIDResponse { // The attributes for the workload JWT-SVID. To maintain forward - // compatability with future attribute field additions, these attributes + // compatibility with future attribute field additions, these attributes // SHOULD be populated with the mutated attributes field in the // ComposeWorkloadJWTSVIDRequest. If this field is not included in the // response, the original attributes sent in the request will be used. @@ -226,11 +232,11 @@ message AttributeTypeAndValue { } message JWTSVIDAttributes { - // The audience. - string audience = 1; - - // Extra arbitrary claims. Cannot to be used to override the subject or - // issuer. If the audience claim is provided, it will override that - // supplied in the audience field. - map extra_claims = 2; + // The JWT-SVID claims. Returned attributes must contain all of the + // claims required by the JWT-SVID specification: + // + // https://github.com/spiffe/spiffe/blob/main/standards/JWT-SVID.md + // + // The subject claim (i.e. SPIFFE ID) cannot be overriden. + google.protobuf.Struct claims = 1; } From 745c1f09c9e3e6741301c0fba36297e63a234fe3 Mon Sep 17 00:00:00 2001 From: Andrew Harding Date: Fri, 3 Feb 2023 06:22:39 -0700 Subject: [PATCH 08/24] Add street_address and postal_code to DN Signed-off-by: Andrew Harding --- .../v1/credentialcomposer.pb.go | 186 ++++++++++-------- .../v1/credentialcomposer.proto | 12 +- 2 files changed, 113 insertions(+), 85 deletions(-) diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go index 6633422..2a32744 100644 --- a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go @@ -800,17 +800,21 @@ type DistinguishedName struct { Locality []string `protobuf:"bytes,4,rep,name=locality,proto3" json:"locality,omitempty"` // Zero or more province designations. Province []string `protobuf:"bytes,5,rep,name=province,proto3" json:"province,omitempty"` + // Zero or more street address designations. + StreetAddress []string `protobuf:"bytes,6,rep,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"` + // Zero or more postal code designations. + PostalCode []string `protobuf:"bytes,7,rep,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"` // The serial number designation. The attribute is only set if this field // is non-empty. - SerialNumber string `protobuf:"bytes,6,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"` + SerialNumber string `protobuf:"bytes,8,opt,name=serial_number,json=serialNumber,proto3" json:"serial_number,omitempty"` // The common name designation. The attribute is only set if this field is // non-empty. - CommonName string `protobuf:"bytes,7,opt,name=common_name,json=commonName,proto3" json:"common_name,omitempty"` + CommonName string `protobuf:"bytes,9,opt,name=common_name,json=commonName,proto3" json:"common_name,omitempty"` // Extra names, determined by oid and value, to be added to the // distinguished names. This field is to support names not covered by the // DistinguishedName message. It will override values specified in other // fields in the DistinguishedName if the attributes overlap. - ExtraNames []*AttributeTypeAndValue `protobuf:"bytes,8,rep,name=extra_names,json=extraNames,proto3" json:"extra_names,omitempty"` + ExtraNames []*AttributeTypeAndValue `protobuf:"bytes,10,rep,name=extra_names,json=extraNames,proto3" json:"extra_names,omitempty"` } func (x *DistinguishedName) Reset() { @@ -880,6 +884,20 @@ func (x *DistinguishedName) GetProvince() []string { return nil } +func (x *DistinguishedName) GetStreetAddress() []string { + if x != nil { + return x.StreetAddress + } + return nil +} + +func (x *DistinguishedName) GetPostalCode() []string { + if x != nil { + return x.PostalCode + } + return nil +} + func (x *DistinguishedName) GetSerialNumber() string { if x != nil { return x.SerialNumber @@ -1149,7 +1167,7 @@ var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawD 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x22, 0xe3, 0x02, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, + 0x22, 0xab, 0x03, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, @@ -1160,90 +1178,94 @@ var file_spire_plugin_server_credentialcomposer_v1_credentialcomposer_proto_rawD 0x6c, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x0b, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, + 0x0e, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x5f, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x61, + 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x0b, 0x65, + 0x78, 0x74, 0x72, 0x61, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x40, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x72, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x4c, + 0x0a, 0x15, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x41, + 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x44, 0x0a, 0x11, + 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x73, 0x32, 0xf5, 0x06, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x12, 0xa4, 0x01, 0x0a, 0x13, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, + 0x41, 0x12, 0x45, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, + 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x72, - 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x15, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x6f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x69, - 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x44, 0x0a, 0x11, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x32, 0xf5, 0x06, 0x0a, 0x12, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, - 0x72, 0x12, 0xa4, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x12, 0x45, 0x2e, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x46, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xaa, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, - 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, - 0x49, 0x44, 0x12, 0x47, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, - 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, - 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x46, + 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0xaa, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x47, 0x2e, 0x73, 0x70, 0x69, + 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x58, 0x35, 0x30, + 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa7, 0x01, + 0x0a, 0x14, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, 0x35, + 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x46, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, + 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, + 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x47, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x47, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x58, - 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0xb0, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x12, 0x49, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x12, 0x48, 0x2e, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, - 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x49, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x69, 0x5a, 0x67, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xb0, 0x01, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, + 0x56, 0x49, 0x44, 0x12, 0x49, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, + 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4a, + 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, + 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, + 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xad, 0x01, 0x0a, 0x16, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, + 0x54, 0x53, 0x56, 0x49, 0x44, 0x12, 0x48, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x49, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x73, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x57, 0x54, 0x53, 0x56, + 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x69, 0x5a, 0x67, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, + 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x72, 0x2f, 0x76, 0x31, + 0x3b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x63, 0x6f, 0x6d, 0x70, 0x6f, + 0x73, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto index d6155ca..34e63f5 100644 --- a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto @@ -207,19 +207,25 @@ message DistinguishedName { // Zero or more province designations. repeated string province = 5; + // Zero or more street address designations. + repeated string street_address = 6; + + // Zero or more postal code designations. + repeated string postal_code = 7; + // The serial number designation. The attribute is only set if this field // is non-empty. - string serial_number = 6; + string serial_number = 8; // The common name designation. The attribute is only set if this field is // non-empty. - string common_name = 7; + string common_name = 9; // Extra names, determined by oid and value, to be added to the // distinguished names. This field is to support names not covered by the // DistinguishedName message. It will override values specified in other // fields in the DistinguishedName if the attributes overlap. - repeated AttributeTypeAndValue extra_names = 8; + repeated AttributeTypeAndValue extra_names = 10; } message AttributeTypeAndValue { From 70d747ad3b255a9364763d2245eb93b1cf8c04b4 Mon Sep 17 00:00:00 2001 From: Andrew Harding Date: Tue, 21 Feb 2023 13:46:54 -0700 Subject: [PATCH 09/24] Update runners to ubuntu 22.04 (#41) Signed-off-by: Andrew Harding --- .github/workflows/pr_build.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr_build.yaml b/.github/workflows/pr_build.yaml index 14519e1..9787b4a 100644 --- a/.github/workflows/pr_build.yaml +++ b/.github/workflows/pr_build.yaml @@ -10,7 +10,7 @@ permissions: jobs: lint: name: lint - runs-on: ubuntu-18.04 + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v3 @@ -24,7 +24,7 @@ jobs: run: make generate-check unit-test: - runs-on: ubuntu-18.04 + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v3 @@ -40,7 +40,7 @@ jobs: # way to say "all jobs from this action", which would be ideal. success: needs: [unit-test, lint] - runs-on: ubuntu-18.04 + runs-on: ubuntu-22.04 steps: - name: Shout it out run: echo SUCCESS From c2cff311b5f1a3d7b4422fd113fbf942a5b95484 Mon Sep 17 00:00:00 2001 From: Andrew Harding Date: Wed, 22 Feb 2023 07:56:44 -0700 Subject: [PATCH 10/24] Remove NodeResolver plugin (#40) NodeResolver is no longer supported by SPIRE. Signed-off-by: Andrew Harding --- Makefile | 1 - README.md | 1 - docs/MIGRATING.md | 6 - .../server/noderesolver/v1/noderesolver.pb.go | 229 ------------------ .../server/noderesolver/v1/noderesolver.proto | 19 -- .../noderesolver/v1/noderesolver_grpc.pb.go | 103 -------- .../v1/noderesolver_spire_plugin.pb.go | 50 ---- templates/server/noderesolver/noderesolver.go | 128 ---------- .../server/noderesolver/noderesolver_test.go | 36 --- 9 files changed, 573 deletions(-) delete mode 100644 proto/spire/plugin/server/noderesolver/v1/noderesolver.pb.go delete mode 100644 proto/spire/plugin/server/noderesolver/v1/noderesolver.proto delete mode 100644 proto/spire/plugin/server/noderesolver/v1/noderesolver_grpc.pb.go delete mode 100644 proto/spire/plugin/server/noderesolver/v1/noderesolver_spire_plugin.pb.go delete mode 100644 templates/server/noderesolver/noderesolver.go delete mode 100644 templates/server/noderesolver/noderesolver_test.go diff --git a/Makefile b/Makefile index e2102e4..2ef0669 100644 --- a/Makefile +++ b/Makefile @@ -43,7 +43,6 @@ plugin-protos := \ proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto \ proto/spire/plugin/server/keymanager/v1/keymanager.proto \ proto/spire/plugin/server/nodeattestor/v1/nodeattestor.proto \ - proto/spire/plugin/server/noderesolver/v1/noderesolver.proto \ proto/spire/plugin/server/notifier/v1/notifier.proto \ proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto \ diff --git a/README.md b/README.md index 46f581d..a5a0a65 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,6 @@ There are three types of interfaces: | CredentialComposer | [v1](proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto) | Allows customization of SVID and CA attributes. | [link](templates/server/credentialcomposer) | | KeyManager | [v1](proto/spire/plugin/server/keymanager/v1/keymanager.proto) | Manages private keys and performs signing operations. | [link](templates/server/keymanager) | | NodeAttestor | [v1](proto/spire/plugin/server/nodeattestor/v1/nodeattestor.proto) | Performs the server side of the node attestation flow. | [link](templates/server/nodeattestor) | -| NodeResolver | [v1](proto/spire/plugin/server/noderesolver/v1/noderesolver.proto) | Provides additional selectors for attested nodes. | [link](templates/server/noderesolver) | | Notifier | [v1](proto/spire/plugin/server/notifier/v1/notifier.proto) | Notifies external systems of certain SPIRE events. | [link](templates/server/notifier) | | UpstreamAuthority | [v1](proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto) | Plugs SPIRE into an upstream PKI. | [link](templates/server/upstreamauthority) | diff --git a/docs/MIGRATING.md b/docs/MIGRATING.md index 5020dfe..9179e68 100644 --- a/docs/MIGRATING.md +++ b/docs/MIGRATING.md @@ -130,12 +130,6 @@ to include a type, since that is now inferred by SPIRE from the name of the plugin. The selectors returned in the final response are selector values only. The selector type is inferred by SPIRE from the name of the plugin. -### Server NodeResolver - -The `Resolve` RPC now handles resolution for a single agent SPIFFE ID instead -of a list of IDs. The response returns selector values only. The selector type -is inferred by SPIRE from the name of the plugin. - ### Server Notifier No substantial changes outside of the migration to plugin SDK types. diff --git a/proto/spire/plugin/server/noderesolver/v1/noderesolver.pb.go b/proto/spire/plugin/server/noderesolver/v1/noderesolver.pb.go deleted file mode 100644 index 948eb3b..0000000 --- a/proto/spire/plugin/server/noderesolver/v1/noderesolver.pb.go +++ /dev/null @@ -1,229 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc v3.20.1 -// source: spire/plugin/server/noderesolver/v1/noderesolver.proto - -package noderesolverv1 - -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 ResolveRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The agent ID to resolve selectors for. - AgentId string `protobuf:"bytes,1,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"` -} - -func (x *ResolveRequest) Reset() { - *x = ResolveRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_noderesolver_v1_noderesolver_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ResolveRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResolveRequest) ProtoMessage() {} - -func (x *ResolveRequest) ProtoReflect() protoreflect.Message { - mi := &file_spire_plugin_server_noderesolver_v1_noderesolver_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 ResolveRequest.ProtoReflect.Descriptor instead. -func (*ResolveRequest) Descriptor() ([]byte, []int) { - return file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDescGZIP(), []int{0} -} - -func (x *ResolveRequest) GetAgentId() string { - if x != nil { - return x.AgentId - } - return "" -} - -type ResolveResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. The selector values to ascribe to the agent. The type of - // the selector is inferred from the plugin name. - SelectorValues []string `protobuf:"bytes,1,rep,name=selector_values,json=selectorValues,proto3" json:"selector_values,omitempty"` -} - -func (x *ResolveResponse) Reset() { - *x = ResolveResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_noderesolver_v1_noderesolver_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ResolveResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResolveResponse) ProtoMessage() {} - -func (x *ResolveResponse) ProtoReflect() protoreflect.Message { - mi := &file_spire_plugin_server_noderesolver_v1_noderesolver_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 ResolveResponse.ProtoReflect.Descriptor instead. -func (*ResolveResponse) Descriptor() ([]byte, []int) { - return file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDescGZIP(), []int{1} -} - -func (x *ResolveResponse) GetSelectorValues() []string { - if x != nil { - return x.SelectorValues - } - return nil -} - -var File_spire_plugin_server_noderesolver_v1_noderesolver_proto protoreflect.FileDescriptor - -var file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDesc = []byte{ - 0x0a, 0x36, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x22, 0x2b, 0x0a, - 0x0e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x3a, 0x0a, 0x0f, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, - 0x0f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x32, 0x84, 0x01, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x52, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x12, 0x74, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x12, 0x33, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x5d, 0x5a, - 0x5b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, - 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, - 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x6e, 0x6f, - 0x64, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x6e, 0x6f, - 0x64, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDescOnce sync.Once - file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDescData = file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDesc -) - -func file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDescGZIP() []byte { - file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDescOnce.Do(func() { - file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDescData) - }) - return file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDescData -} - -var file_spire_plugin_server_noderesolver_v1_noderesolver_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_spire_plugin_server_noderesolver_v1_noderesolver_proto_goTypes = []interface{}{ - (*ResolveRequest)(nil), // 0: spire.plugin.server.noderesolver.v1.ResolveRequest - (*ResolveResponse)(nil), // 1: spire.plugin.server.noderesolver.v1.ResolveResponse -} -var file_spire_plugin_server_noderesolver_v1_noderesolver_proto_depIdxs = []int32{ - 0, // 0: spire.plugin.server.noderesolver.v1.NodeResolver.Resolve:input_type -> spire.plugin.server.noderesolver.v1.ResolveRequest - 1, // 1: spire.plugin.server.noderesolver.v1.NodeResolver.Resolve:output_type -> spire.plugin.server.noderesolver.v1.ResolveResponse - 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_spire_plugin_server_noderesolver_v1_noderesolver_proto_init() } -func file_spire_plugin_server_noderesolver_v1_noderesolver_proto_init() { - if File_spire_plugin_server_noderesolver_v1_noderesolver_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_server_noderesolver_v1_noderesolver_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_noderesolver_v1_noderesolver_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveResponse); 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_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_spire_plugin_server_noderesolver_v1_noderesolver_proto_goTypes, - DependencyIndexes: file_spire_plugin_server_noderesolver_v1_noderesolver_proto_depIdxs, - MessageInfos: file_spire_plugin_server_noderesolver_v1_noderesolver_proto_msgTypes, - }.Build() - File_spire_plugin_server_noderesolver_v1_noderesolver_proto = out.File - file_spire_plugin_server_noderesolver_v1_noderesolver_proto_rawDesc = nil - file_spire_plugin_server_noderesolver_v1_noderesolver_proto_goTypes = nil - file_spire_plugin_server_noderesolver_v1_noderesolver_proto_depIdxs = nil -} diff --git a/proto/spire/plugin/server/noderesolver/v1/noderesolver.proto b/proto/spire/plugin/server/noderesolver/v1/noderesolver.proto deleted file mode 100644 index aa429b3..0000000 --- a/proto/spire/plugin/server/noderesolver/v1/noderesolver.proto +++ /dev/null @@ -1,19 +0,0 @@ -syntax = "proto3"; -package spire.plugin.server.noderesolver.v1; -option go_package = "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/noderesolver/v1;noderesolverv1"; - -service NodeResolver { - // Resolve resolves additional selectors for a given agent. - rpc Resolve(ResolveRequest) returns (ResolveResponse); -} - -message ResolveRequest { - // Required. The agent ID to resolve selectors for. - string agent_id = 1; -} - -message ResolveResponse { - // Optional. The selector values to ascribe to the agent. The type of - // the selector is inferred from the plugin name. - repeated string selector_values = 1; -} diff --git a/proto/spire/plugin/server/noderesolver/v1/noderesolver_grpc.pb.go b/proto/spire/plugin/server/noderesolver/v1/noderesolver_grpc.pb.go deleted file mode 100644 index 24465a6..0000000 --- a/proto/spire/plugin/server/noderesolver/v1/noderesolver_grpc.pb.go +++ /dev/null @@ -1,103 +0,0 @@ -// Code generated by protoc-gen-go-grpc. DO NOT EDIT. - -package noderesolverv1 - -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 - -// NodeResolverClient is the client API for NodeResolver 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 NodeResolverClient interface { - // Resolve resolves additional selectors for a given agent. - Resolve(ctx context.Context, in *ResolveRequest, opts ...grpc.CallOption) (*ResolveResponse, error) -} - -type nodeResolverClient struct { - cc grpc.ClientConnInterface -} - -func NewNodeResolverClient(cc grpc.ClientConnInterface) NodeResolverClient { - return &nodeResolverClient{cc} -} - -func (c *nodeResolverClient) Resolve(ctx context.Context, in *ResolveRequest, opts ...grpc.CallOption) (*ResolveResponse, error) { - out := new(ResolveResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.server.noderesolver.v1.NodeResolver/Resolve", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// NodeResolverServer is the server API for NodeResolver service. -// All implementations must embed UnimplementedNodeResolverServer -// for forward compatibility -type NodeResolverServer interface { - // Resolve resolves additional selectors for a given agent. - Resolve(context.Context, *ResolveRequest) (*ResolveResponse, error) - mustEmbedUnimplementedNodeResolverServer() -} - -// UnimplementedNodeResolverServer must be embedded to have forward compatible implementations. -type UnimplementedNodeResolverServer struct { -} - -func (UnimplementedNodeResolverServer) Resolve(context.Context, *ResolveRequest) (*ResolveResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Resolve not implemented") -} -func (UnimplementedNodeResolverServer) mustEmbedUnimplementedNodeResolverServer() {} - -// UnsafeNodeResolverServer may be embedded to opt out of forward compatibility for this service. -// Use of this interface is not recommended, as added methods to NodeResolverServer will -// result in compilation errors. -type UnsafeNodeResolverServer interface { - mustEmbedUnimplementedNodeResolverServer() -} - -func RegisterNodeResolverServer(s grpc.ServiceRegistrar, srv NodeResolverServer) { - s.RegisterService(&NodeResolver_ServiceDesc, srv) -} - -func _NodeResolver_Resolve_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ResolveRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(NodeResolverServer).Resolve(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/spire.plugin.server.noderesolver.v1.NodeResolver/Resolve", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(NodeResolverServer).Resolve(ctx, req.(*ResolveRequest)) - } - return interceptor(ctx, in, info, handler) -} - -// NodeResolver_ServiceDesc is the grpc.ServiceDesc for NodeResolver service. -// It's only intended for direct use with grpc.RegisterService, -// and not to be introspected or modified (even as a copy) -var NodeResolver_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "spire.plugin.server.noderesolver.v1.NodeResolver", - HandlerType: (*NodeResolverServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Resolve", - Handler: _NodeResolver_Resolve_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "spire/plugin/server/noderesolver/v1/noderesolver.proto", -} diff --git a/proto/spire/plugin/server/noderesolver/v1/noderesolver_spire_plugin.pb.go b/proto/spire/plugin/server/noderesolver/v1/noderesolver_spire_plugin.pb.go deleted file mode 100644 index 27d3ada..0000000 --- a/proto/spire/plugin/server/noderesolver/v1/noderesolver_spire_plugin.pb.go +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by protoc-gen-go-spire. DO NOT EDIT. - -package noderesolverv1 - -import ( - pluginsdk "github.com/spiffe/spire-plugin-sdk/pluginsdk" - grpc "google.golang.org/grpc" -) - -func NodeResolverPluginServer(server NodeResolverServer) pluginsdk.PluginServer { - return nodeResolverPluginServer{NodeResolverServer: server} -} - -type nodeResolverPluginServer struct { - NodeResolverServer -} - -func (s nodeResolverPluginServer) Type() string { - return "NodeResolver" -} - -func (s nodeResolverPluginServer) GRPCServiceName() string { - return "spire.plugin.server.noderesolver.v1.NodeResolver" -} - -func (s nodeResolverPluginServer) RegisterServer(server *grpc.Server) interface{} { - RegisterNodeResolverServer(server, s.NodeResolverServer) - return s.NodeResolverServer -} - -type NodeResolverPluginClient struct { - NodeResolverClient -} - -func (s NodeResolverPluginClient) Type() string { - return "NodeResolver" -} - -func (c *NodeResolverPluginClient) IsInitialized() bool { - return c.NodeResolverClient != nil -} - -func (c *NodeResolverPluginClient) GRPCServiceName() string { - return "spire.plugin.server.noderesolver.v1.NodeResolver" -} - -func (c *NodeResolverPluginClient) InitClient(conn grpc.ClientConnInterface) interface{} { - c.NodeResolverClient = NewNodeResolverClient(conn) - return c.NodeResolverClient -} diff --git a/templates/server/noderesolver/noderesolver.go b/templates/server/noderesolver/noderesolver.go deleted file mode 100644 index b241f1b..0000000 --- a/templates/server/noderesolver/noderesolver.go +++ /dev/null @@ -1,128 +0,0 @@ -package noderesolver - -import ( - "context" - "sync" - - "github.com/hashicorp/go-hclog" - "github.com/hashicorp/hcl" - "github.com/spiffe/spire-plugin-sdk/pluginmain" - "github.com/spiffe/spire-plugin-sdk/pluginsdk" - noderesolverv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/noderesolver/v1" - configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -var ( - // This compile time assertion ensures the plugin conforms properly to the - // pluginsdk.NeedsLogger interface. - // TODO: Remove if the plugin does not need the logger. - _ pluginsdk.NeedsLogger = (*Plugin)(nil) - - // This compile time assertion ensures the plugin conforms properly to the - // pluginsdk.NeedsHostServices interface. - // TODO: Remove if the plugin does not need host services. - _ pluginsdk.NeedsHostServices = (*Plugin)(nil) -) - -// Config defines the configuration for the plugin. -// TODO: Add relevant configurables or remove if no configuration is required. -type Config struct { -} - -// Plugin implements the NodeResolver plugin -type Plugin struct { - // UnimplementedNodeResolverServer is embedded to satisfy gRPC - noderesolverv1.UnimplementedNodeResolverServer - - // UnimplementedConfigServer is embedded to satisfy gRPC - // TODO: Remove if this plugin does not require configuration - configv1.UnimplementedConfigServer - - // Configuration should be set atomically - // TODO: Remove if this plugin does not require configuration - configMtx sync.RWMutex - config *Config - - // The logger received from the framework via the SetLogger method - // TODO: Remove if this plugin does not need the logger. - logger hclog.Logger -} - -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - -// Attest implements the NodeResolver Attest RPC -func (p *Plugin) Resolve(ctx context.Context, req *noderesolverv1.ResolveRequest) (*noderesolverv1.ResolveResponse, error) { - config, err := p.getConfig() - if err != nil { - return nil, err - } - - // TODO: Implement the RPC behavior. The following line silences compiler - // warnings and can be removed once the configuration is referenced by the - // implementation. - config = config - - return nil, status.Error(codes.Unimplemented, "not implemented") -} - -// Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. -// As such, it should replace the previous configuration atomically. -// TODO: Remove if no configuration is required -func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { - config := new(Config) - if err := hcl.Decode(config, req.HclConfiguration); err != nil { - return nil, status.Errorf(codes.InvalidArgument, "failed to decode configuration: %v", err) - } - - // TODO: Validate configuration before setting/replacing existing - // configuration - - p.setConfig(config) - return &configv1.ConfigureResponse{}, nil -} - -// setConfig replaces the configuration atomically under a write lock. -// TODO: Remove if no configuration is required -func (p *Plugin) setConfig(config *Config) { - p.configMtx.Lock() - p.config = config - p.configMtx.Unlock() -} - -// getConfig gets the configuration under a read lock. -// TODO: Remove if no configuration is required -func (p *Plugin) getConfig() (*Config, error) { - p.configMtx.RLock() - defer p.configMtx.RUnlock() - if p.config == nil { - return nil, status.Error(codes.FailedPrecondition, "not configured") - } - return p.config, nil -} - -func main() { - plugin := new(Plugin) - // Serve the plugin. This function call will not return. If there is a - // failure to serve, the process will exit with a non-zero exit code. - pluginmain.Serve( - noderesolverv1.NodeResolverPluginServer(plugin), - // TODO: Remove if no configuration is required - configv1.ConfigServiceServer(plugin), - ) -} diff --git a/templates/server/noderesolver/noderesolver_test.go b/templates/server/noderesolver/noderesolver_test.go deleted file mode 100644 index 38db5db..0000000 --- a/templates/server/noderesolver/noderesolver_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package noderesolver_test - -import ( - "testing" - - "github.com/spiffe/spire-plugin-sdk/pluginsdk" - "github.com/spiffe/spire-plugin-sdk/plugintest" - noderesolverv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/noderesolver/v1" - configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" - "github.com/spiffe/spire-plugin-sdk/templates/server/noderesolver" -) - -func Test(t *testing.T) { - plugin := new(noderesolver.Plugin) - nrClient := new(noderesolverv1.NodeResolverPluginClient) - configClient := new(configv1.ConfigServiceClient) - - // Serve the plugin in the background with the configured plugin and - // service servers. The servers will be cleaned up when the test finishes. - // TODO: Remove the config service server and client if no configuration - // is required. - // TODO: Provide host service server implementations if required by the - // plugin. - plugintest.ServeInBackground(t, plugintest.Config{ - PluginServer: noderesolverv1.NodeResolverPluginServer(plugin), - PluginClient: nrClient, - ServiceServers: []pluginsdk.ServiceServer{ - configv1.ConfigServiceServer(plugin), - }, - ServiceClients: []pluginsdk.ServiceClient{ - configClient, - }, - }) - - // TODO: Invoke methods on the clients and assert the results -} From cee3865b9462d7e1bf079c87b280940a64a67528 Mon Sep 17 00:00:00 2001 From: Guilherme Carvalho Date: Mon, 17 Apr 2023 19:44:08 -0300 Subject: [PATCH 11/24] Add plugin templates authoring documentation (#47) Signed-off-by: Guilherme Carvalho --- docs/AUTHORING.md | 35 +++++++++-- docs/CONTRIBUTING.md | 2 +- docs/MIGRATING.md | 2 +- go.mod | 1 + pluginmain/serve.go | 14 ++--- templates/agent/keymanager/keymanager.go | 49 ++++++++------- templates/agent/keymanager/keymanager_test.go | 23 ++++++- templates/agent/nodeattestor/nodeattestor.go | 40 ++++++------ .../agent/nodeattestor/nodeattestor_test.go | 20 +++++- templates/agent/svidstore/svidstore.go | 40 ++++++------ templates/agent/svidstore/svidstore_test.go | 19 +++++- .../workloadattestor/workloadattestor.go | 42 +++++++------ .../workloadattestor/workloadattestor_test.go | 18 +++++- .../credentialcomposer/credentialcomposer.go | 61 +++++++++++++------ .../credentialcomposer_test.go | 25 +++++++- templates/server/keymanager/keymanager.go | 49 ++++++++------- .../server/keymanager/keymanager_test.go | 23 ++++++- templates/server/nodeattestor/nodeattestor.go | 40 ++++++------ .../server/nodeattestor/nodeattestor_test.go | 20 +++++- templates/server/notifier/notifier.go | 41 +++++++------ templates/server/notifier/notifier_test.go | 23 ++++++- .../upstreamauthority/upstreamauthority.go | 54 ++++++++++------ .../upstreamauthority_test.go | 24 +++++++- 23 files changed, 466 insertions(+), 199 deletions(-) diff --git a/docs/AUTHORING.md b/docs/AUTHORING.md index 95b59b8..bc3d1fe 100644 --- a/docs/AUTHORING.md +++ b/docs/AUTHORING.md @@ -3,7 +3,34 @@ This document gives guidance for authoring plugins. SPIRE plugins implement one and only one plugin _type_ (e.g. KeyManager). They -also implement zero or more services. +also implement zero or more services. Below is a list of plugin types, alongside templates that can be used as a base +for authoring plugins. + +## Templates +Each template contains a go file that can be used as a starting point for authoring plugins. A test file is also +provided for each template; the test file contains a test suite that can be used to verify that the plugin has been +loaded and is working as expected using [plugintest](https://pkg.go.dev/github.com/spiffe/spire-plugin-sdk/plugintest). + +### Agent + +| Plugin | Description | Template | +|------------------|-------------------------------------------------------|---------------------------------------------| +| KeyManager | Manages private keys and performs signing operations. | [link](../templates/agent/keymanager) | +| NodeAttestor | Performs the agent side of the node attestation flow. | [link](../templates/agent/nodeattestor) | +| SVIDStore | Stores workload X509-SVIDs to arbitrary destinations. | [link](../templates/agent/svidstore) | +| WorkloadAttestor | Attests workloads and provides selectors. | [link](../templates/agent/workloadattestor) | + +### Server + +| Plugin | Description | Template | +|--------------------|--------------------------------------------------------|------------------------------------------------| +| KeyManager | Manages private keys and performs signing operations. | [link](../templates/server/keymanager) | +| NodeAttestor | Performs the server side of the node attestation flow. | [link](../templates/server/nodeattestor) | +| Notifier | Notifies external systems of certain SPIRE events. | [link](../templates/server/notifier) | +| UpstreamAuthority | Plugs SPIRE into an upstream PKI. | [link](../templates/server/upstreamauthority) | +| CredentialComposer | Allows customization of SVID and CA attributes. | [link](../templates/server/credentialcomposer) | + + ## Configuration @@ -69,7 +96,7 @@ func main() { plugin := new(Plugin) pluginmain.Serve( keymanagerv1.KeyManagerPluginServer(plugin), - configv1.ConfigPluginServer(plugin), // <-- add the Config service server implementation + configv1.ConfigServiceServer(plugin), // <-- add the Config service server implementation ) } ``` @@ -150,7 +177,7 @@ plugin will fail to load. ## Cleanup -Plugins are seperate processes and are terminated when the plugin is unloaded. +Plugins are separate processes and are terminated when the plugin is unloaded. However, it may be desirable to perform some graceful cleanup operations. To facilitate this, if plugin/service implementations implement the io.Closer @@ -176,7 +203,7 @@ See the package docs for more information. ## Running The [pluginmain](https://pkg.go.dev/github.com/spiffe/spire-plugin-sdk/pluginmain) package -is used to run the plugin. It takes care of setting up all of the plugin facilities and +is used to run the plugin. It takes care of setting up all the plugin facilities and wiring up the logger and hostservices. See the package docs for more information. diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 42cd246..5f11ff7 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -52,5 +52,5 @@ SPIRE repository can be updated by running `go get github.com/spiffe/spire-plugin-sdk@next` from the SPIRE repository. Relying on a pseudo versions means that this repository only needs tags -for the offically released versions, while still allowing SPIRE to work with +for the officially released versions, while still allowing SPIRE to work with unreleased changes during development. diff --git a/docs/MIGRATING.md b/docs/MIGRATING.md index 9179e68..da2729b 100644 --- a/docs/MIGRATING.md +++ b/docs/MIGRATING.md @@ -125,7 +125,7 @@ to couple it to that operation. The `Attest` RPC request and response fields are now contained within `oneof`'s to strongly convey the difference in field requirements in requests and -responses during the atestation flow. The attestation payload no longer needs +responses during the attestation flow. The attestation payload no longer needs to include a type, since that is now inferred by SPIRE from the name of the plugin. The selectors returned in the final response are selector values only. The selector type is inferred by SPIRE from the name of the plugin. diff --git a/go.mod b/go.mod index 3c5374d..a9ebb7b 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/hashicorp/go-hclog v0.15.0 github.com/hashicorp/go-plugin v1.4.0 github.com/hashicorp/hcl v1.0.0 + github.com/stretchr/testify v1.7.0 google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.0 ) diff --git a/pluginmain/serve.go b/pluginmain/serve.go index ed2abe0..c32dbc9 100644 --- a/pluginmain/serve.go +++ b/pluginmain/serve.go @@ -8,13 +8,13 @@ import ( // Serve serves the plugin using the given plugin/service servers. It does // not return. It is intended to be called from main(). For example: // -// func main() { -// plugin := new(Plugin) -// pluginmain.Serve( -// keymanagerv1.KeyManagerPluginServer(plugin), -// configv1.ConfigPluginServer(plugin), -// ) -// } +// func main() { +// plugin := new(Plugin) +// pluginmain.Serve( +// keymanagerv1.KeyManagerPluginServer(plugin), +// configv1.ConfigServiceServer(plugin), +// ) +// } func Serve(pluginServer pluginsdk.PluginServer, serviceServers ...pluginsdk.ServiceServer) { logger := internal.NewLogger() internal.Serve(logger, logger, pluginServer, serviceServers, nil) diff --git a/templates/agent/keymanager/keymanager.go b/templates/agent/keymanager/keymanager.go index fbfc55d..a0f1fa8 100644 --- a/templates/agent/keymanager/keymanager.go +++ b/templates/agent/keymanager/keymanager.go @@ -15,12 +15,12 @@ import ( ) var ( - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsLogger interface. // TODO: Remove if the plugin does not need the logger. _ pluginsdk.NeedsLogger = (*Plugin)(nil) - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsHostServices interface. // TODO: Remove if the plugin does not need host services. _ pluginsdk.NeedsHostServices = (*Plugin)(nil) @@ -50,22 +50,8 @@ type Plugin struct { logger hclog.Logger } -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - -// GenerateKey implements the KeyManager GenerateKey RPC +// GenerateKey implements the KeyManager GenerateKey RPC. Generates a new private key with the given ID. +// If a key already exists under that ID, it is overwritten and given a different fingerprint. func (p *Plugin) GenerateKey(ctx context.Context, req *keymanagerv1.GenerateKeyRequest) (*keymanagerv1.GenerateKeyResponse, error) { config, err := p.getConfig() if err != nil { @@ -80,7 +66,8 @@ func (p *Plugin) GenerateKey(ctx context.Context, req *keymanagerv1.GenerateKeyR return nil, status.Error(codes.Unimplemented, "not implemented") } -// GetPublicKey implements the KeyManager GetPublicKey RPC +// GetPublicKey implements the KeyManager GetPublicKey RPC. Gets the public key information for the private key managed +// by the plugin with the given ID. If a key with the given ID does not exist, NOT_FOUND is returned. func (p *Plugin) GetPublicKey(ctx context.Context, req *keymanagerv1.GetPublicKeyRequest) (*keymanagerv1.GetPublicKeyResponse, error) { config, err := p.getConfig() if err != nil { @@ -95,7 +82,8 @@ func (p *Plugin) GetPublicKey(ctx context.Context, req *keymanagerv1.GetPublicKe return nil, status.Error(codes.Unimplemented, "not implemented") } -// GetPublicKeys implements the KeyManager GetPublicKeys RPC +// GetPublicKeys implements the KeyManager GetPublicKeys RPC. Gets all public key information for the private keys +// managed by the plugin. func (p *Plugin) GetPublicKeys(ctx context.Context, req *keymanagerv1.GetPublicKeysRequest) (*keymanagerv1.GetPublicKeysResponse, error) { config, err := p.getConfig() if err != nil { @@ -110,7 +98,9 @@ func (p *Plugin) GetPublicKeys(ctx context.Context, req *keymanagerv1.GetPublicK return nil, status.Error(codes.Unimplemented, "not implemented") } -// SignData implements the KeyManager SignData RPC +// SignData implements the KeyManager SignData RPC. Signs data with the private key identified by the given ID. If a key +// with the given ID does not exist, NOT_FOUND is returned. The response contains the signed data and the fingerprint of +// the key used to sign the data. See the PublicKey message for more details on the role of the fingerprint. func (p *Plugin) SignData(ctx context.Context, req *keymanagerv1.SignDataRequest) (*keymanagerv1.SignDataResponse, error) { config, err := p.getConfig() if err != nil { @@ -126,7 +116,7 @@ func (p *Plugin) SignData(ctx context.Context, req *keymanagerv1.SignDataRequest } // Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// first loaded. In the future, it may be invoked to reconfigure the plugin. // As such, it should replace the previous configuration atomically. // TODO: Remove if no configuration is required func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { @@ -142,6 +132,21 @@ func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) return &configv1.ConfigureResponse{}, nil } +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + // setConfig replaces the configuration atomically under a write lock. // TODO: Remove if no configuration is required func (p *Plugin) setConfig(config *Config) { diff --git a/templates/agent/keymanager/keymanager_test.go b/templates/agent/keymanager/keymanager_test.go index fde3cfe..f572a51 100644 --- a/templates/agent/keymanager/keymanager_test.go +++ b/templates/agent/keymanager/keymanager_test.go @@ -1,6 +1,7 @@ package keymanager_test import ( + "context" "testing" "github.com/spiffe/spire-plugin-sdk/pluginsdk" @@ -8,6 +9,8 @@ import ( keymanagerv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/agent/keymanager/v1" configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" "github.com/spiffe/spire-plugin-sdk/templates/agent/keymanager" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test(t *testing.T) { @@ -32,5 +35,23 @@ func Test(t *testing.T) { }, }) - // TODO: Invoke methods on the clients and assert the results + ctx := context.Background() + + // TODO: Remove if no configuration is required. + _, err := configClient.Configure(ctx, &configv1.ConfigureRequest{ + CoreConfiguration: &configv1.CoreConfiguration{TrustDomain: "example.org"}, + HclConfiguration: `{}`, + }) + assert.NoError(t, err) + + require.True(t, kmClient.IsInitialized()) + // TODO: Make assertions using the desired plugin behavior. + _, err = kmClient.GenerateKey(ctx, &keymanagerv1.GenerateKeyRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = kmClient.GetPublicKeys(ctx, &keymanagerv1.GetPublicKeysRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = kmClient.GetPublicKey(ctx, &keymanagerv1.GetPublicKeyRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = kmClient.SignData(ctx, &keymanagerv1.SignDataRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") } diff --git a/templates/agent/nodeattestor/nodeattestor.go b/templates/agent/nodeattestor/nodeattestor.go index 42a8028..9c205ee 100644 --- a/templates/agent/nodeattestor/nodeattestor.go +++ b/templates/agent/nodeattestor/nodeattestor.go @@ -15,12 +15,12 @@ import ( ) var ( - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsLogger interface. // TODO: Remove if the plugin does not need the logger. _ pluginsdk.NeedsLogger = (*Plugin)(nil) - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsHostServices interface. // TODO: Remove if the plugin does not need host services. _ pluginsdk.NeedsHostServices = (*Plugin)(nil) @@ -50,22 +50,9 @@ type Plugin struct { logger hclog.Logger } -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - -// AidAttestation implements the NodeAttestor AidAttestation RPC +// AidAttestation implements the NodeAttestor AidAttestation RPC. AidAttestation facilitates attestation by returning +// the attestation payload and participating in attestation challenge/response. This RPC uses a bidirectional stream for +// communication. func (p *Plugin) AidAttestation(stream nodeattestorv1.NodeAttestor_AidAttestationServer) error { config, err := p.getConfig() if err != nil { @@ -81,7 +68,7 @@ func (p *Plugin) AidAttestation(stream nodeattestorv1.NodeAttestor_AidAttestatio } // Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// first loaded. In the future, it may be invoked to reconfigure the plugin. // As such, it should replace the previous configuration atomically. // TODO: Remove if no configuration is required func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { @@ -97,6 +84,21 @@ func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) return &configv1.ConfigureResponse{}, nil } +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + // setConfig replaces the configuration atomically under a write lock. // TODO: Remove if no configuration is required func (p *Plugin) setConfig(config *Config) { diff --git a/templates/agent/nodeattestor/nodeattestor_test.go b/templates/agent/nodeattestor/nodeattestor_test.go index 71403ce..c8eb00b 100644 --- a/templates/agent/nodeattestor/nodeattestor_test.go +++ b/templates/agent/nodeattestor/nodeattestor_test.go @@ -1,6 +1,7 @@ package nodeattestor_test import ( + "context" "testing" "github.com/spiffe/spire-plugin-sdk/pluginsdk" @@ -8,6 +9,8 @@ import ( nodeattestorv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/agent/nodeattestor/v1" configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" "github.com/spiffe/spire-plugin-sdk/templates/agent/nodeattestor" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test(t *testing.T) { @@ -32,5 +35,20 @@ func Test(t *testing.T) { }, }) - // TODO: Invoke methods on the clients and assert the results + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // TODO: Remove if no configuration is required. + _, err := configClient.Configure(ctx, &configv1.ConfigureRequest{ + CoreConfiguration: &configv1.CoreConfiguration{TrustDomain: "example.org"}, + HclConfiguration: `{}`, + }) + assert.NoError(t, err) + + require.True(t, naClient.IsInitialized()) + // TODO: Make assertions using the desired plugin behavior. + stream, err := naClient.AidAttestation(ctx) + require.NoError(t, err) + _, err = stream.Recv() + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") } diff --git a/templates/agent/svidstore/svidstore.go b/templates/agent/svidstore/svidstore.go index 14689c7..7bff342 100644 --- a/templates/agent/svidstore/svidstore.go +++ b/templates/agent/svidstore/svidstore.go @@ -15,12 +15,12 @@ import ( ) var ( - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsLogger interface. // TODO: Remove if the plugin does not need the logger. _ pluginsdk.NeedsLogger = (*Plugin)(nil) - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsHostServices interface. // TODO: Remove if the plugin does not need host services. _ pluginsdk.NeedsHostServices = (*Plugin)(nil) @@ -50,22 +50,7 @@ type Plugin struct { logger hclog.Logger } -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - -// DeleteX509SVID implements the SVIDStore DeleteX509SVID RPC +// DeleteX509SVID implements the SVIDStore DeleteX509SVID RPC. Puts an X509-SVID in a configured secrets store. func (p *Plugin) DeleteX509SVID(ctx context.Context, req *svidstorev1.DeleteX509SVIDRequest) (*svidstorev1.DeleteX509SVIDResponse, error) { config, err := p.getConfig() if err != nil { @@ -80,7 +65,7 @@ func (p *Plugin) DeleteX509SVID(ctx context.Context, req *svidstorev1.DeleteX509 return nil, status.Error(codes.Unimplemented, "not implemented") } -// PutX509SVID implements the SVIDStore PutX509SVID RPC +// PutX509SVID implements the SVIDStore PutX509SVID RPC. Deletes an SVID from the store. func (p *Plugin) PutX509SVID(ctx context.Context, req *svidstorev1.PutX509SVIDRequest) (*svidstorev1.PutX509SVIDResponse, error) { config, err := p.getConfig() if err != nil { @@ -96,7 +81,7 @@ func (p *Plugin) PutX509SVID(ctx context.Context, req *svidstorev1.PutX509SVIDRe } // Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// first loaded. In the future, it may be invoked to reconfigure the plugin. // As such, it should replace the previous configuration atomically. // TODO: Remove if no configuration is required func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { @@ -112,6 +97,21 @@ func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) return &configv1.ConfigureResponse{}, nil } +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + // setConfig replaces the configuration atomically under a write lock. // TODO: Remove if no configuration is required func (p *Plugin) setConfig(config *Config) { diff --git a/templates/agent/svidstore/svidstore_test.go b/templates/agent/svidstore/svidstore_test.go index 775e3ac..37d07e3 100644 --- a/templates/agent/svidstore/svidstore_test.go +++ b/templates/agent/svidstore/svidstore_test.go @@ -1,6 +1,7 @@ package svidstore_test import ( + "context" "testing" "github.com/spiffe/spire-plugin-sdk/pluginsdk" @@ -8,6 +9,8 @@ import ( svidstorev1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/agent/svidstore/v1" configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" "github.com/spiffe/spire-plugin-sdk/templates/agent/svidstore" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test(t *testing.T) { @@ -32,5 +35,19 @@ func Test(t *testing.T) { }, }) - // TODO: Invoke methods on the clients and assert the results + ctx := context.Background() + + // TODO: Remove if no configuration is required. + _, err := configClient.Configure(ctx, &configv1.ConfigureRequest{ + CoreConfiguration: &configv1.CoreConfiguration{TrustDomain: "example.org"}, + HclConfiguration: `{}`, + }) + assert.NoError(t, err) + + require.True(t, ssClient.IsInitialized()) + // TODO: Make assertions using the desired plugin behavior. + _, err = ssClient.PutX509SVID(ctx, &svidstorev1.PutX509SVIDRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = ssClient.DeleteX509SVID(ctx, &svidstorev1.DeleteX509SVIDRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") } diff --git a/templates/agent/workloadattestor/workloadattestor.go b/templates/agent/workloadattestor/workloadattestor.go index 430753d..8ed63be 100644 --- a/templates/agent/workloadattestor/workloadattestor.go +++ b/templates/agent/workloadattestor/workloadattestor.go @@ -15,12 +15,12 @@ import ( ) var ( - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsLogger interface. // TODO: Remove if the plugin does not need the logger. _ pluginsdk.NeedsLogger = (*Plugin)(nil) - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsHostServices interface. // TODO: Remove if the plugin does not need host services. _ pluginsdk.NeedsHostServices = (*Plugin)(nil) @@ -50,22 +50,11 @@ type Plugin struct { logger hclog.Logger } -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - -// Attest implements the WorkloadAttestor Attest RPC +// Attest implements the WorkloadAttestor Attest RPC. Attests the specified workload process. If the process is not one +// the attestor is in a position to attest (e.g. k8s attestor attesting a non-k8s workload), the call will succeed but +// return no selectors. If the process is one of the attestor is in a position to attest, but the attestor fails to +// gather all selectors related to that workload, the call will fail. Otherwise, the attestor will return one or more +// workload selectors. func (p *Plugin) Attest(ctx context.Context, req *workloadattestorv1.AttestRequest) (*workloadattestorv1.AttestResponse, error) { config, err := p.getConfig() if err != nil { @@ -81,7 +70,7 @@ func (p *Plugin) Attest(ctx context.Context, req *workloadattestorv1.AttestReque } // Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// first loaded. In the future, it may be invoked to reconfigure the plugin. // As such, it should replace the previous configuration atomically. // TODO: Remove if no configuration is required func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { @@ -97,6 +86,21 @@ func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) return &configv1.ConfigureResponse{}, nil } +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + // setConfig replaces the configuration atomically under a write lock. // TODO: Remove if no configuration is required func (p *Plugin) setConfig(config *Config) { diff --git a/templates/agent/workloadattestor/workloadattestor_test.go b/templates/agent/workloadattestor/workloadattestor_test.go index 9537b4b..c895c00 100644 --- a/templates/agent/workloadattestor/workloadattestor_test.go +++ b/templates/agent/workloadattestor/workloadattestor_test.go @@ -1,6 +1,7 @@ package workloadattestor_test import ( + "context" "testing" "github.com/spiffe/spire-plugin-sdk/pluginsdk" @@ -8,6 +9,8 @@ import ( workloadattestorv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/agent/workloadattestor/v1" configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" "github.com/spiffe/spire-plugin-sdk/templates/agent/workloadattestor" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test(t *testing.T) { @@ -32,5 +35,18 @@ func Test(t *testing.T) { }, }) - // TODO: Invoke methods on the clients and assert the results + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // TODO: Remove if no configuration is required. + _, err := configClient.Configure(ctx, &configv1.ConfigureRequest{ + CoreConfiguration: &configv1.CoreConfiguration{TrustDomain: "example.org"}, + HclConfiguration: `{}`, + }) + assert.NoError(t, err) + + require.True(t, waClient.IsInitialized()) + // TODO: Make assertions using the desired plugin behavior. + _, err = waClient.Attest(ctx, &workloadattestorv1.AttestRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") } diff --git a/templates/server/credentialcomposer/credentialcomposer.go b/templates/server/credentialcomposer/credentialcomposer.go index 7519577..0d2cc00 100644 --- a/templates/server/credentialcomposer/credentialcomposer.go +++ b/templates/server/credentialcomposer/credentialcomposer.go @@ -15,12 +15,12 @@ import ( ) var ( - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsLogger interface. // TODO: Remove if the plugin does not need the logger. _ pluginsdk.NeedsLogger = (*Plugin)(nil) - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsHostServices interface. // TODO: Remove if the plugin does not need host services. _ pluginsdk.NeedsHostServices = (*Plugin)(nil) @@ -50,21 +50,10 @@ type Plugin struct { logger hclog.Logger } -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - +// ComposeServerX509CA implements the CredentialComposer ComposeServerX509CA RPC. Composes the SPIRE Server X509 CA. +// The server will supply the default attributes it will apply to the CA. If the plugin returns an empty response or +// NOT_IMPLEMENTED, the server will apply the default attributes. Otherwise, the returned attributes are used. +// If a CA is produced that does not conform to the SPIFFE X509-SVID specification for signing certificates, it will be rejected. func (p *Plugin) ComposeServerX509CA(ctx context.Context, req *credentialcomposerv1.ComposeServerX509CARequest) (*credentialcomposerv1.ComposeServerX509CAResponse, error) { config, err := p.getConfig() if err != nil { @@ -79,6 +68,11 @@ func (p *Plugin) ComposeServerX509CA(ctx context.Context, req *credentialcompose return nil, status.Error(codes.Unimplemented, "not implemented") } +// ComposeServerX509SVID implements the CredentialComposer ComposeServerX509SVID RPC. Composes the SPIRE Server X509-SVID. +// The server will supply the default attributes it will apply to the server X509-SVID. If the plugin returns an empty +// response or NOT_IMPLEMENTED, the server will apply the default attributes. Otherwise, the returned attributes are +// used. If an X509-SVID is produced that does not conform to the SPIFFE X509-SVID specification for leaf certificates, +// it will be rejected. This function cannot be used to modify the SPIFFE ID of the X509-SVID. func (p *Plugin) ComposeServerX509SVID(ctx context.Context, req *credentialcomposerv1.ComposeServerX509SVIDRequest) (*credentialcomposerv1.ComposeServerX509SVIDResponse, error) { config, err := p.getConfig() if err != nil { @@ -93,6 +87,11 @@ func (p *Plugin) ComposeServerX509SVID(ctx context.Context, req *credentialcompo return nil, status.Error(codes.Unimplemented, "not implemented") } +// ComposeAgentX509SVID implements the CredentialComposer ComposeAgentX509SVID RPC. Composes the SPIRE Agent X509-SVID. +// The server will supply the default attributes it will apply to the agent X509-SVID. If the plugin returns an empty +// response or NOT_IMPLEMENTED, the server will apply the default attributes. Otherwise, the returned attributes are used. +// If an X509-SVID is produced that does not conform to the SPIFFE X509-SVID specification for leaf certificates, it will +// be rejected. This function cannot be used to modify the SPIFFE ID of the X509-SVID. func (p *Plugin) ComposeAgentX509SVID(ctx context.Context, req *credentialcomposerv1.ComposeAgentX509SVIDRequest) (*credentialcomposerv1.ComposeAgentX509SVIDResponse, error) { config, err := p.getConfig() if err != nil { @@ -107,6 +106,11 @@ func (p *Plugin) ComposeAgentX509SVID(ctx context.Context, req *credentialcompos return nil, status.Error(codes.Unimplemented, "not implemented") } +// ComposeWorkloadX509SVID implements the CredentialComposer ComposeWorkloadX509SVID RPC. Composes workload X509-SVIDs. +// The server will supply the default attributes it will apply to the workload X509-SVID. If the plugin returns an empty +// response or NOT_IMPLEMENTED, the server will apply the default attributes. Otherwise, the returned attributes are used. +// If an X509-SVID is produced that does not conform to the SPIFFE X509-SVID specification for leaf certificates, it will +// be rejected. This function cannot be used to modify the SPIFFE ID of the X509-SVID. func (p *Plugin) ComposeWorkloadX509SVID(ctx context.Context, req *credentialcomposerv1.ComposeWorkloadX509SVIDRequest) (*credentialcomposerv1.ComposeWorkloadX509SVIDResponse, error) { config, err := p.getConfig() if err != nil { @@ -120,6 +124,12 @@ func (p *Plugin) ComposeWorkloadX509SVID(ctx context.Context, req *credentialcom return nil, status.Error(codes.Unimplemented, "not implemented") } + +// ComposeWorkloadJWTSVID implements the CredentialComposer ComposeWorkloadJWTSVID RPC. Composes workload JWT-SVIDs. +// The server will supply the default attributes it will apply to the workload JWT-SVID. If the plugin returns an empty +// response or NOT_IMPLEMENTED, the server will apply the default attributes. Otherwise, the returned attributes are used. +// If a JWT-SVID is produced that does not conform to the SPIFFE JWT-SVID specification, it will be rejected. +// This function cannot be used to modify the SPIFFE ID of the JWT-SVID. func (p *Plugin) ComposeWorkloadJWTSVID(ctx context.Context, req *credentialcomposerv1.ComposeWorkloadJWTSVIDRequest) (*credentialcomposerv1.ComposeWorkloadJWTSVIDResponse, error) { config, err := p.getConfig() if err != nil { @@ -135,7 +145,7 @@ func (p *Plugin) ComposeWorkloadJWTSVID(ctx context.Context, req *credentialcomp } // Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// first loaded. In the future, it may be invoked to reconfigure the plugin. // As such, it should replace the previous configuration atomically. // TODO: Remove if no configuration is required func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { @@ -151,6 +161,21 @@ func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) return &configv1.ConfigureResponse{}, nil } +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + // setConfig replaces the configuration atomically under a write lock. // TODO: Remove if no configuration is required func (p *Plugin) setConfig(config *Config) { diff --git a/templates/server/credentialcomposer/credentialcomposer_test.go b/templates/server/credentialcomposer/credentialcomposer_test.go index a10551b..edad0e9 100644 --- a/templates/server/credentialcomposer/credentialcomposer_test.go +++ b/templates/server/credentialcomposer/credentialcomposer_test.go @@ -1,6 +1,7 @@ package credentialcomposer_test import ( + "context" "testing" "github.com/spiffe/spire-plugin-sdk/pluginsdk" @@ -8,6 +9,8 @@ import ( credentialcomposerv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/credentialcomposer/v1" configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" "github.com/spiffe/spire-plugin-sdk/templates/server/credentialcomposer" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test(t *testing.T) { @@ -32,5 +35,25 @@ func Test(t *testing.T) { }, }) - // TODO: Invoke methods on the clients and assert the results + ctx := context.Background() + + // TODO: Remove if no configuration is required. + _, err := configClient.Configure(ctx, &configv1.ConfigureRequest{ + CoreConfiguration: &configv1.CoreConfiguration{TrustDomain: "example.org"}, + HclConfiguration: `{}`, + }) + assert.NoError(t, err) + + require.True(t, pluginClient.IsInitialized()) + // TODO: Make assertions using the desired plugin behavior. + _, err = pluginClient.ComposeServerX509CA(ctx, &credentialcomposerv1.ComposeServerX509CARequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = pluginClient.ComposeServerX509SVID(ctx, &credentialcomposerv1.ComposeServerX509SVIDRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = pluginClient.ComposeAgentX509SVID(ctx, &credentialcomposerv1.ComposeAgentX509SVIDRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = pluginClient.ComposeWorkloadX509SVID(ctx, &credentialcomposerv1.ComposeWorkloadX509SVIDRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = pluginClient.ComposeWorkloadJWTSVID(ctx, &credentialcomposerv1.ComposeWorkloadJWTSVIDRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") } diff --git a/templates/server/keymanager/keymanager.go b/templates/server/keymanager/keymanager.go index fd9fd28..6a03668 100644 --- a/templates/server/keymanager/keymanager.go +++ b/templates/server/keymanager/keymanager.go @@ -15,12 +15,12 @@ import ( ) var ( - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsLogger interface. // TODO: Remove if the plugin does not need the logger. _ pluginsdk.NeedsLogger = (*Plugin)(nil) - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsHostServices interface. // TODO: Remove if the plugin does not need host services. _ pluginsdk.NeedsHostServices = (*Plugin)(nil) @@ -50,22 +50,8 @@ type Plugin struct { logger hclog.Logger } -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - -// GenerateKey implements the KeyManager GenerateKey RPC +// GenerateKey implements the KeyManager GenerateKey RPC. Generates a new private key with the given ID. +// If a key already exists under that ID, it is overwritten and given a different fingerprint. func (p *Plugin) GenerateKey(ctx context.Context, req *keymanagerv1.GenerateKeyRequest) (*keymanagerv1.GenerateKeyResponse, error) { config, err := p.getConfig() if err != nil { @@ -80,7 +66,8 @@ func (p *Plugin) GenerateKey(ctx context.Context, req *keymanagerv1.GenerateKeyR return nil, status.Error(codes.Unimplemented, "not implemented") } -// GetPublicKey implements the KeyManager GetPublicKey RPC +// GetPublicKey implements the KeyManager GetPublicKey RPC. Gets the public key information for the private key managed +// by the plugin with the given ID. If a key with the given ID does not exist, NOT_FOUND is returned. func (p *Plugin) GetPublicKey(ctx context.Context, req *keymanagerv1.GetPublicKeyRequest) (*keymanagerv1.GetPublicKeyResponse, error) { config, err := p.getConfig() if err != nil { @@ -95,7 +82,8 @@ func (p *Plugin) GetPublicKey(ctx context.Context, req *keymanagerv1.GetPublicKe return nil, status.Error(codes.Unimplemented, "not implemented") } -// GetPublicKeys implements the KeyManager GetPublicKeys RPC +// GetPublicKeys implements the KeyManager GetPublicKeys RPC. Gets all public key information for the private keys +// managed by the plugin. func (p *Plugin) GetPublicKeys(ctx context.Context, req *keymanagerv1.GetPublicKeysRequest) (*keymanagerv1.GetPublicKeysResponse, error) { config, err := p.getConfig() if err != nil { @@ -110,7 +98,9 @@ func (p *Plugin) GetPublicKeys(ctx context.Context, req *keymanagerv1.GetPublicK return nil, status.Error(codes.Unimplemented, "not implemented") } -// SignData implements the KeyManager SignData RPC +// SignData implements the KeyManager SignData RPC. Signs data with the private key identified by the given ID. If a key +// with the given ID does not exist, NOT_FOUND is returned. The response contains the signed data and the fingerprint of +// the key used to sign the data. See the PublicKey message for more details on the role of the fingerprint. func (p *Plugin) SignData(ctx context.Context, req *keymanagerv1.SignDataRequest) (*keymanagerv1.SignDataResponse, error) { config, err := p.getConfig() if err != nil { @@ -126,7 +116,7 @@ func (p *Plugin) SignData(ctx context.Context, req *keymanagerv1.SignDataRequest } // Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// first loaded. In the future, it may be invoked to reconfigure the plugin. // As such, it should replace the previous configuration atomically. // TODO: Remove if no configuration is required func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { @@ -142,6 +132,21 @@ func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) return &configv1.ConfigureResponse{}, nil } +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + // setConfig replaces the configuration atomically under a write lock. // TODO: Remove if no configuration is required func (p *Plugin) setConfig(config *Config) { diff --git a/templates/server/keymanager/keymanager_test.go b/templates/server/keymanager/keymanager_test.go index 717b083..d5d0b6c 100644 --- a/templates/server/keymanager/keymanager_test.go +++ b/templates/server/keymanager/keymanager_test.go @@ -1,6 +1,7 @@ package keymanager_test import ( + "context" "testing" "github.com/spiffe/spire-plugin-sdk/pluginsdk" @@ -8,6 +9,8 @@ import ( keymanagerv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/keymanager/v1" configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" "github.com/spiffe/spire-plugin-sdk/templates/server/keymanager" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test(t *testing.T) { @@ -32,5 +35,23 @@ func Test(t *testing.T) { }, }) - // TODO: Invoke methods on the clients and assert the results + ctx := context.Background() + + // TODO: Remove if no configuration is required. + _, err := configClient.Configure(ctx, &configv1.ConfigureRequest{ + CoreConfiguration: &configv1.CoreConfiguration{TrustDomain: "example.org"}, + HclConfiguration: `{}`, + }) + assert.NoError(t, err) + + require.True(t, kmClient.IsInitialized()) + // TODO: Make assertions using the desired plugin behavior. + _, err = kmClient.GenerateKey(ctx, &keymanagerv1.GenerateKeyRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = kmClient.GetPublicKeys(ctx, &keymanagerv1.GetPublicKeysRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = kmClient.GetPublicKey(ctx, &keymanagerv1.GetPublicKeyRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = kmClient.SignData(ctx, &keymanagerv1.SignDataRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") } diff --git a/templates/server/nodeattestor/nodeattestor.go b/templates/server/nodeattestor/nodeattestor.go index 4e721bb..4ad8314 100644 --- a/templates/server/nodeattestor/nodeattestor.go +++ b/templates/server/nodeattestor/nodeattestor.go @@ -15,12 +15,12 @@ import ( ) var ( - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsLogger interface. // TODO: Remove if the plugin does not need the logger. _ pluginsdk.NeedsLogger = (*Plugin)(nil) - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsHostServices interface. // TODO: Remove if the plugin does not need host services. _ pluginsdk.NeedsHostServices = (*Plugin)(nil) @@ -50,22 +50,9 @@ type Plugin struct { logger hclog.Logger } -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - -// Attest implements the NodeAttestor Attest RPC +// Attest implements the NodeAttestor Attest RPC. Attest attests attestation payload received from the agent and +// optionally participates in challenge/response attestation mechanics. This RPC uses a bidirectional stream for +// communication. func (p *Plugin) Attest(stream nodeattestorv1.NodeAttestor_AttestServer) error { config, err := p.getConfig() if err != nil { @@ -81,7 +68,7 @@ func (p *Plugin) Attest(stream nodeattestorv1.NodeAttestor_AttestServer) error { } // Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// first loaded. In the future, it may be invoked to reconfigure the plugin. // As such, it should replace the previous configuration atomically. // TODO: Remove if no configuration is required func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { @@ -97,6 +84,21 @@ func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) return &configv1.ConfigureResponse{}, nil } +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + // setConfig replaces the configuration atomically under a write lock. // TODO: Remove if no configuration is required func (p *Plugin) setConfig(config *Config) { diff --git a/templates/server/nodeattestor/nodeattestor_test.go b/templates/server/nodeattestor/nodeattestor_test.go index 9eabe16..a484a2d 100644 --- a/templates/server/nodeattestor/nodeattestor_test.go +++ b/templates/server/nodeattestor/nodeattestor_test.go @@ -1,6 +1,7 @@ package nodeattestor_test import ( + "context" "testing" "github.com/spiffe/spire-plugin-sdk/pluginsdk" @@ -8,6 +9,8 @@ import ( nodeattestorv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/nodeattestor/v1" configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" "github.com/spiffe/spire-plugin-sdk/templates/server/nodeattestor" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test(t *testing.T) { @@ -32,5 +35,20 @@ func Test(t *testing.T) { }, }) - // TODO: Invoke methods on the clients and assert the results + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // TODO: Remove if no configuration is required. + _, err := configClient.Configure(ctx, &configv1.ConfigureRequest{ + CoreConfiguration: &configv1.CoreConfiguration{TrustDomain: "example.org"}, + HclConfiguration: `{}`, + }) + assert.NoError(t, err) + + require.True(t, naClient.IsInitialized()) + // TODO: Make assertions using the desired plugin behavior. + stream, err := naClient.Attest(ctx) + require.NoError(t, err) + _, err = stream.Recv() + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") } diff --git a/templates/server/notifier/notifier.go b/templates/server/notifier/notifier.go index d93c0b5..aa7096b 100644 --- a/templates/server/notifier/notifier.go +++ b/templates/server/notifier/notifier.go @@ -15,12 +15,12 @@ import ( ) var ( - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsLogger interface. // TODO: Remove if the plugin does not need the logger. _ pluginsdk.NeedsLogger = (*Plugin)(nil) - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsHostServices interface. // TODO: Remove if the plugin does not need host services. _ pluginsdk.NeedsHostServices = (*Plugin)(nil) @@ -50,21 +50,8 @@ type Plugin struct { logger hclog.Logger } -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - +// Notify implements the Notifier Notify RPC. Notify notifies the plugin that an event occurred. Errors returned by +// the plugin are logged but otherwise ignored. func (p *Plugin) Notify(ctx context.Context, req *notifierv1.NotifyRequest) (*notifierv1.NotifyResponse, error) { config, err := p.getConfig() if err != nil { @@ -79,6 +66,9 @@ func (p *Plugin) Notify(ctx context.Context, req *notifierv1.NotifyRequest) (*no return nil, status.Error(codes.Unimplemented, "not implemented") } +// NotifyAndAdvise implements the Notifier NotifyAndAdvise RPC. NotifyAndAdvise notifies the plugin that an event +// occurred and waits for a response. Errors returned by the plugin control SPIRE Server behavior. +// See NotifyAndAdviseRequest for per-event details. func (p *Plugin) NotifyAndAdvise(ctx context.Context, req *notifierv1.NotifyAndAdviseRequest) (*notifierv1.NotifyAndAdviseResponse, error) { config, err := p.getConfig() if err != nil { @@ -94,7 +84,7 @@ func (p *Plugin) NotifyAndAdvise(ctx context.Context, req *notifierv1.NotifyAndA } // Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// first loaded. In the future, it may be invoked to reconfigure the plugin. // As such, it should replace the previous configuration atomically. // TODO: Remove if no configuration is required func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { @@ -110,6 +100,21 @@ func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) return &configv1.ConfigureResponse{}, nil } +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + // setConfig replaces the configuration atomically under a write lock. // TODO: Remove if no configuration is required func (p *Plugin) setConfig(config *Config) { diff --git a/templates/server/notifier/notifier_test.go b/templates/server/notifier/notifier_test.go index c3e1408..aae00c5 100644 --- a/templates/server/notifier/notifier_test.go +++ b/templates/server/notifier/notifier_test.go @@ -1,6 +1,7 @@ package notifier_test import ( + "context" "testing" "github.com/spiffe/spire-plugin-sdk/pluginsdk" @@ -8,11 +9,13 @@ import ( notifierv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/notifier/v1" configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" "github.com/spiffe/spire-plugin-sdk/templates/server/notifier" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test(t *testing.T) { plugin := new(notifier.Plugin) - notClient := new(notifierv1.NotifierPluginClient) + ntClient := new(notifierv1.NotifierPluginClient) configClient := new(configv1.ConfigServiceClient) // Serve the plugin in the background with the configured plugin and @@ -23,7 +26,7 @@ func Test(t *testing.T) { // plugin. plugintest.ServeInBackground(t, plugintest.Config{ PluginServer: notifierv1.NotifierPluginServer(plugin), - PluginClient: notClient, + PluginClient: ntClient, ServiceServers: []pluginsdk.ServiceServer{ configv1.ConfigServiceServer(plugin), }, @@ -32,5 +35,19 @@ func Test(t *testing.T) { }, }) - // TODO: Invoke methods on the clients and assert the results + ctx := context.Background() + + // TODO: Remove if no configuration is required. + _, err := configClient.Configure(ctx, &configv1.ConfigureRequest{ + CoreConfiguration: &configv1.CoreConfiguration{TrustDomain: "example.org"}, + HclConfiguration: `{}`, + }) + assert.NoError(t, err) + + require.True(t, ntClient.IsInitialized()) + // TODO: Make assertions using the desired plugin behavior. + _, err = ntClient.Notify(ctx, ¬ifierv1.NotifyRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + _, err = ntClient.NotifyAndAdvise(ctx, ¬ifierv1.NotifyAndAdviseRequest{}) + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") } diff --git a/templates/server/upstreamauthority/upstreamauthority.go b/templates/server/upstreamauthority/upstreamauthority.go index 7b527fd..b8f0e6d 100644 --- a/templates/server/upstreamauthority/upstreamauthority.go +++ b/templates/server/upstreamauthority/upstreamauthority.go @@ -15,12 +15,12 @@ import ( ) var ( - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsLogger interface. // TODO: Remove if the plugin does not need the logger. _ pluginsdk.NeedsLogger = (*Plugin)(nil) - // This compile time assertion ensures the plugin conforms properly to the + // This compile-time assertion ensures the plugin conforms properly to the // pluginsdk.NeedsHostServices interface. // TODO: Remove if the plugin does not need host services. _ pluginsdk.NeedsHostServices = (*Plugin)(nil) @@ -50,21 +50,14 @@ type Plugin struct { logger hclog.Logger } -// SetLogger is called by the framework when the plugin is loaded and provides -// the plugin with a logger wired up to SPIRE's logging facilities. -// TODO: Remove if the plugin does not need the logger. -func (p *Plugin) SetLogger(logger hclog.Logger) { - p.logger = logger -} - -// BrokerHostServices is called by the framework when the plugin is loaded to -// give the plugin a chance to obtain clients to SPIRE host services. -// TODO: Remove if the plugin does not need host services. -func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { - // TODO: Use the broker to obtain host service clients - return nil -} - +// MintX509CAAndSubscribe implements the UpstreamAuthority MintX509CAAndSubscribe RPC. Mints an X.509 CA and responds +// with the signed X.509 CA certificate chain and upstream X.509 roots. If supported by the implementation, subsequent +// responses on the stream contain upstream X.509 root updates, otherwise the stream is closed after the initial response. +// +// Implementation note: +// The stream should be kept open in the face of transient errors +// encountered while tracking changes to the upstream X.509 roots as SPIRE +// Server will not reopen a closed stream until the next X.509 CA rotation. func (p *Plugin) MintX509CAAndSubscribe(req *upstreamauthorityv1.MintX509CARequest, stream upstreamauthorityv1.UpstreamAuthority_MintX509CAAndSubscribeServer) error { config, err := p.getConfig() if err != nil { @@ -79,6 +72,16 @@ func (p *Plugin) MintX509CAAndSubscribe(req *upstreamauthorityv1.MintX509CAReque return status.Error(codes.Unimplemented, "not implemented") } +// PublishJWTKeyAndSubscribe implements the UpstreamAuthority PublishJWTKeyAndSubscribe RPC. Publishes a JWT signing key +// upstream and responds with the upstream JWT keys. If supported by the implementation, subsequent responses on the +// stream contain upstream JWT key updates, otherwise the stream is closed after the initial response. +// +// This RPC is optional and will return NotImplemented if unsupported. +// +// Implementation note: +// The stream should be kept open in the face of transient errors +// encountered while tracking changes to the upstream JWT keys as SPIRE +// Server will not reopen a closed stream until the next JWT key rotation. func (p *Plugin) PublishJWTKeyAndSubscribe(req *upstreamauthorityv1.PublishJWTKeyRequest, stream upstreamauthorityv1.UpstreamAuthority_PublishJWTKeyAndSubscribeServer) error { config, err := p.getConfig() if err != nil { @@ -94,7 +97,7 @@ func (p *Plugin) PublishJWTKeyAndSubscribe(req *upstreamauthorityv1.PublishJWTKe } // Configure configures the plugin. This is invoked by SPIRE when the plugin is -// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// first loaded. In the future, it may be invoked to reconfigure the plugin. // As such, it should replace the previous configuration atomically. // TODO: Remove if no configuration is required func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { @@ -110,6 +113,21 @@ func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) return &configv1.ConfigureResponse{}, nil } +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + // setConfig replaces the configuration atomically under a write lock. // TODO: Remove if no configuration is required func (p *Plugin) setConfig(config *Config) { diff --git a/templates/server/upstreamauthority/upstreamauthority_test.go b/templates/server/upstreamauthority/upstreamauthority_test.go index 2102372..dbbf091 100644 --- a/templates/server/upstreamauthority/upstreamauthority_test.go +++ b/templates/server/upstreamauthority/upstreamauthority_test.go @@ -1,6 +1,7 @@ package upstreamauthority_test import ( + "context" "testing" "github.com/spiffe/spire-plugin-sdk/pluginsdk" @@ -8,6 +9,8 @@ import ( upstreamauthorityv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/upstreamauthority/v1" configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" "github.com/spiffe/spire-plugin-sdk/templates/server/upstreamauthority" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func Test(t *testing.T) { @@ -32,5 +35,24 @@ func Test(t *testing.T) { }, }) - // TODO: Invoke methods on the clients and assert the results + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // TODO: Remove if no configuration is required. + _, err := configClient.Configure(ctx, &configv1.ConfigureRequest{ + CoreConfiguration: &configv1.CoreConfiguration{TrustDomain: "example.org"}, + HclConfiguration: `{}`, + }) + assert.NoError(t, err) + + require.True(t, uaClient.IsInitialized()) + // TODO: Make assertions using the desired plugin behavior. + mintStream, err := uaClient.MintX509CAAndSubscribe(ctx, &upstreamauthorityv1.MintX509CARequest{}) + require.NoError(t, err) + _, err = mintStream.Recv() + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") + publishStream, err := uaClient.PublishJWTKeyAndSubscribe(ctx, &upstreamauthorityv1.PublishJWTKeyRequest{}) + require.NoError(t, err) + _, err = publishStream.Recv() + assert.EqualError(t, err, "rpc error: code = Unimplemented desc = not implemented") } From b59b964f004ecdba7fa4f8daa9787229fad8b3a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Fri, 24 Feb 2023 11:46:55 -0300 Subject: [PATCH 12/24] Introduce the BundlePublisher interface (#38) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Introduce the BundlePublisher interface Signed-off-by: Agustín Martínez Fayó --- Makefile | 1 + README.md | 1 + .../bundlepublisher/v1/bundlepublisher.pb.go | 225 ++++++++++++++++++ .../bundlepublisher/v1/bundlepublisher.proto | 20 ++ .../v1/bundlepublisher_grpc.pb.go | 105 ++++++++ .../v1/bundlepublisher_spire_plugin.pb.go | 50 ++++ .../server/bundlepublisher/bundlepublisher.go | 127 ++++++++++ .../bundlepublisher/bundlepublisher_test.go | 36 +++ 8 files changed, 565 insertions(+) create mode 100644 proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go create mode 100644 proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto create mode 100644 proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher_grpc.pb.go create mode 100644 proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher_spire_plugin.pb.go create mode 100644 templates/server/bundlepublisher/bundlepublisher.go create mode 100644 templates/server/bundlepublisher/bundlepublisher_test.go diff --git a/Makefile b/Makefile index 2ef0669..3bde62a 100644 --- a/Makefile +++ b/Makefile @@ -40,6 +40,7 @@ plugin-protos := \ proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.proto \ proto/spire/plugin/agent/svidstore/v1/svidstore.proto \ proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.proto \ + proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto \ proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto \ proto/spire/plugin/server/keymanager/v1/keymanager.proto \ proto/spire/plugin/server/nodeattestor/v1/nodeattestor.proto \ diff --git a/README.md b/README.md index a5a0a65..5cd766d 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ There are three types of interfaces: | Plugin | Versions | Description | Template | | ------ | -------- | ----------- | ----------- | +| BundlePublisher | [v1](proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto) | Publishes a trust bundle to a store. | [link](templates/server/bundlepublisher) | | CredentialComposer | [v1](proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto) | Allows customization of SVID and CA attributes. | [link](templates/server/credentialcomposer) | | KeyManager | [v1](proto/spire/plugin/server/keymanager/v1/keymanager.proto) | Manages private keys and performs signing operations. | [link](templates/server/keymanager) | | NodeAttestor | [v1](proto/spire/plugin/server/nodeattestor/v1/nodeattestor.proto) | Performs the server side of the node attestation flow. | [link](templates/server/nodeattestor) | diff --git a/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go new file mode 100644 index 0000000..e2072e7 --- /dev/null +++ b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go @@ -0,0 +1,225 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.0 +// protoc v3.20.1 +// source: spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto + +package bundlepublisherv1 + +import ( + types "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/types" + 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 PublishBundleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. The trust bundle to publish. + Bundle *types.Bundle `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` +} + +func (x *PublishBundleRequest) Reset() { + *x = PublishBundleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PublishBundleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PublishBundleRequest) ProtoMessage() {} + +func (x *PublishBundleRequest) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_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 PublishBundleRequest.ProtoReflect.Descriptor instead. +func (*PublishBundleRequest) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDescGZIP(), []int{0} +} + +func (x *PublishBundleRequest) GetBundle() *types.Bundle { + if x != nil { + return x.Bundle + } + return nil +} + +type PublishBundleResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *PublishBundleResponse) Reset() { + *x = PublishBundleResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PublishBundleResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PublishBundleResponse) ProtoMessage() {} + +func (x *PublishBundleResponse) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_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 PublishBundleResponse.ProtoReflect.Descriptor instead. +func (*PublishBundleResponse) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDescGZIP(), []int{1} +} + +var File_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto protoreflect.FileDescriptor + +var file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDesc = []byte{ + 0x0a, 0x3c, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x26, + 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x14, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x32, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x42, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa0, 0x01, 0x0a, + 0x0f, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, + 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x12, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x63, 0x5a, 0x61, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, + 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, + 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, + 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x2f, + 0x76, 0x31, 0x3b, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, + 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDescOnce sync.Once + file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDescData = file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDesc +) + +func file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDescGZIP() []byte { + file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDescOnce.Do(func() { + file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDescData) + }) + return file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDescData +} + +var file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_goTypes = []interface{}{ + (*PublishBundleRequest)(nil), // 0: spire.plugin.server.bundlepublisher.v1.PublishBundleRequest + (*PublishBundleResponse)(nil), // 1: spire.plugin.server.bundlepublisher.v1.PublishBundleResponse + (*types.Bundle)(nil), // 2: spire.plugin.types.Bundle +} +var file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_depIdxs = []int32{ + 2, // 0: spire.plugin.server.bundlepublisher.v1.PublishBundleRequest.bundle:type_name -> spire.plugin.types.Bundle + 0, // 1: spire.plugin.server.bundlepublisher.v1.BundlePublisher.PublishBundle:input_type -> spire.plugin.server.bundlepublisher.v1.PublishBundleRequest + 1, // 2: spire.plugin.server.bundlepublisher.v1.BundlePublisher.PublishBundle:output_type -> spire.plugin.server.bundlepublisher.v1.PublishBundleResponse + 2, // [2:3] is the sub-list for method output_type + 1, // [1:2] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_init() } +func file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_init() { + if File_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PublishBundleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PublishBundleResponse); 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_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_goTypes, + DependencyIndexes: file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_depIdxs, + MessageInfos: file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes, + }.Build() + File_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto = out.File + file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDesc = nil + file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_goTypes = nil + file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_depIdxs = nil +} diff --git a/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto new file mode 100644 index 0000000..507e06e --- /dev/null +++ b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; +package spire.plugin.server.bundlepublisher.v1; +option go_package = "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/bundlepublisher/v1;bundlepublisherv1"; + +import "spire/plugin/types/bundle.proto"; + +// The BundlePublisher plugin publishes a trust bundle to a store. +service BundlePublisher { + // PublishBundle publishes the trust bundle that is in the request + // to a store. + rpc PublishBundle(PublishBundleRequest) returns (PublishBundleResponse); +} + +message PublishBundleRequest { + // Required. The trust bundle to publish. + spire.plugin.types.Bundle bundle = 1; +} + +message PublishBundleResponse { +} diff --git a/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher_grpc.pb.go b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher_grpc.pb.go new file mode 100644 index 0000000..8e7bee3 --- /dev/null +++ b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher_grpc.pb.go @@ -0,0 +1,105 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package bundlepublisherv1 + +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 + +// BundlePublisherClient is the client API for BundlePublisher 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 BundlePublisherClient interface { + // PublishBundle publishes the trust bundle that is in the request + // to a store. + PublishBundle(ctx context.Context, in *PublishBundleRequest, opts ...grpc.CallOption) (*PublishBundleResponse, error) +} + +type bundlePublisherClient struct { + cc grpc.ClientConnInterface +} + +func NewBundlePublisherClient(cc grpc.ClientConnInterface) BundlePublisherClient { + return &bundlePublisherClient{cc} +} + +func (c *bundlePublisherClient) PublishBundle(ctx context.Context, in *PublishBundleRequest, opts ...grpc.CallOption) (*PublishBundleResponse, error) { + out := new(PublishBundleResponse) + err := c.cc.Invoke(ctx, "/spire.plugin.server.bundlepublisher.v1.BundlePublisher/PublishBundle", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// BundlePublisherServer is the server API for BundlePublisher service. +// All implementations must embed UnimplementedBundlePublisherServer +// for forward compatibility +type BundlePublisherServer interface { + // PublishBundle publishes the trust bundle that is in the request + // to a store. + PublishBundle(context.Context, *PublishBundleRequest) (*PublishBundleResponse, error) + mustEmbedUnimplementedBundlePublisherServer() +} + +// UnimplementedBundlePublisherServer must be embedded to have forward compatible implementations. +type UnimplementedBundlePublisherServer struct { +} + +func (UnimplementedBundlePublisherServer) PublishBundle(context.Context, *PublishBundleRequest) (*PublishBundleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PublishBundle not implemented") +} +func (UnimplementedBundlePublisherServer) mustEmbedUnimplementedBundlePublisherServer() {} + +// UnsafeBundlePublisherServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to BundlePublisherServer will +// result in compilation errors. +type UnsafeBundlePublisherServer interface { + mustEmbedUnimplementedBundlePublisherServer() +} + +func RegisterBundlePublisherServer(s grpc.ServiceRegistrar, srv BundlePublisherServer) { + s.RegisterService(&BundlePublisher_ServiceDesc, srv) +} + +func _BundlePublisher_PublishBundle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PublishBundleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BundlePublisherServer).PublishBundle(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/spire.plugin.server.bundlepublisher.v1.BundlePublisher/PublishBundle", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BundlePublisherServer).PublishBundle(ctx, req.(*PublishBundleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// BundlePublisher_ServiceDesc is the grpc.ServiceDesc for BundlePublisher service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var BundlePublisher_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "spire.plugin.server.bundlepublisher.v1.BundlePublisher", + HandlerType: (*BundlePublisherServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "PublishBundle", + Handler: _BundlePublisher_PublishBundle_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto", +} diff --git a/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher_spire_plugin.pb.go b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher_spire_plugin.pb.go new file mode 100644 index 0000000..a5a0d62 --- /dev/null +++ b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher_spire_plugin.pb.go @@ -0,0 +1,50 @@ +// Code generated by protoc-gen-go-spire. DO NOT EDIT. + +package bundlepublisherv1 + +import ( + pluginsdk "github.com/spiffe/spire-plugin-sdk/pluginsdk" + grpc "google.golang.org/grpc" +) + +func BundlePublisherPluginServer(server BundlePublisherServer) pluginsdk.PluginServer { + return bundlePublisherPluginServer{BundlePublisherServer: server} +} + +type bundlePublisherPluginServer struct { + BundlePublisherServer +} + +func (s bundlePublisherPluginServer) Type() string { + return "BundlePublisher" +} + +func (s bundlePublisherPluginServer) GRPCServiceName() string { + return "spire.plugin.server.bundlepublisher.v1.BundlePublisher" +} + +func (s bundlePublisherPluginServer) RegisterServer(server *grpc.Server) interface{} { + RegisterBundlePublisherServer(server, s.BundlePublisherServer) + return s.BundlePublisherServer +} + +type BundlePublisherPluginClient struct { + BundlePublisherClient +} + +func (s BundlePublisherPluginClient) Type() string { + return "BundlePublisher" +} + +func (c *BundlePublisherPluginClient) IsInitialized() bool { + return c.BundlePublisherClient != nil +} + +func (c *BundlePublisherPluginClient) GRPCServiceName() string { + return "spire.plugin.server.bundlepublisher.v1.BundlePublisher" +} + +func (c *BundlePublisherPluginClient) InitClient(conn grpc.ClientConnInterface) interface{} { + c.BundlePublisherClient = NewBundlePublisherClient(conn) + return c.BundlePublisherClient +} diff --git a/templates/server/bundlepublisher/bundlepublisher.go b/templates/server/bundlepublisher/bundlepublisher.go new file mode 100644 index 0000000..967a4ac --- /dev/null +++ b/templates/server/bundlepublisher/bundlepublisher.go @@ -0,0 +1,127 @@ +package bundlepublisher + +import ( + "context" + "sync" + + "github.com/hashicorp/go-hclog" + "github.com/hashicorp/hcl" + "github.com/spiffe/spire-plugin-sdk/pluginmain" + "github.com/spiffe/spire-plugin-sdk/pluginsdk" + bundlepublisherv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/bundlepublisher/v1" + configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +var ( + // This compile time assertion ensures the plugin conforms properly to the + // pluginsdk.NeedsLogger interface. + // TODO: Remove if the plugin does not need the logger. + _ pluginsdk.NeedsLogger = (*Plugin)(nil) + + // This compile time assertion ensures the plugin conforms properly to the + // pluginsdk.NeedsHostServices interface. + // TODO: Remove if the plugin does not need host services. + _ pluginsdk.NeedsHostServices = (*Plugin)(nil) +) + +// Config defines the configuration for the plugin. +// TODO: Add relevant configurables or remove if no configuration is required. +type Config struct { +} + +// Plugin implements the BundlePublisher plugin +type Plugin struct { + // UnimplementedBundlePublisherServer is embedded to satisfy gRPC + bundlepublisherv1.UnimplementedBundlePublisherServer + + // UnimplementedConfigServer is embedded to satisfy gRPC + // TODO: Remove if this plugin does not require configuration + configv1.UnimplementedConfigServer + + // Configuration should be set atomically + // TODO: Remove if this plugin does not require configuration + configMtx sync.RWMutex + config *Config + + // The logger received from the framework via the SetLogger method + // TODO: Remove if this plugin does not need the logger. + logger hclog.Logger +} + +// SetLogger is called by the framework when the plugin is loaded and provides +// the plugin with a logger wired up to SPIRE's logging facilities. +// TODO: Remove if the plugin does not need the logger. +func (p *Plugin) SetLogger(logger hclog.Logger) { + p.logger = logger +} + +// BrokerHostServices is called by the framework when the plugin is loaded to +// give the plugin a chance to obtain clients to SPIRE host services. +// TODO: Remove if the plugin does not need host services. +func (p *Plugin) BrokerHostServices(broker pluginsdk.ServiceBroker) error { + // TODO: Use the broker to obtain host service clients + return nil +} + +func (p *Plugin) PublishBundle(ctx context.Context, req *bundlepublisherv1.PublishBundleRequest) (*bundlepublisherv1.PublishBundleResponse, error) { + config, err := p.getConfig() + if err != nil { + return nil, err + } + + // TODO: Implement the RPC behavior. The following line silences compiler + // warnings and can be removed once the configuration is referenced by the + // implementation. + config = config + + return nil, status.Error(codes.Unimplemented, "not implemented") +} + +// Configure configures the plugin. This is invoked by SPIRE when the plugin is +// first loaded. In the future, tt may be invoked to reconfigure the plugin. +// As such, it should replace the previous configuration atomically. +// TODO: Remove if no configuration is required +func (p *Plugin) Configure(ctx context.Context, req *configv1.ConfigureRequest) (*configv1.ConfigureResponse, error) { + config := new(Config) + if err := hcl.Decode(config, req.HclConfiguration); err != nil { + return nil, status.Errorf(codes.InvalidArgument, "failed to decode configuration: %v", err) + } + + // TODO: Validate configuration before setting/replacing existing + // configuration + + p.setConfig(config) + return &configv1.ConfigureResponse{}, nil +} + +// setConfig replaces the configuration atomically under a write lock. +// TODO: Remove if no configuration is required +func (p *Plugin) setConfig(config *Config) { + p.configMtx.Lock() + p.config = config + p.configMtx.Unlock() +} + +// getConfig gets the configuration under a read lock. +// TODO: Remove if no configuration is required +func (p *Plugin) getConfig() (*Config, error) { + p.configMtx.RLock() + defer p.configMtx.RUnlock() + if p.config == nil { + return nil, status.Error(codes.FailedPrecondition, "not configured") + } + return p.config, nil +} + +func main() { + plugin := new(Plugin) + // Serve the plugin. This function call will not return. If there is a + // failure to serve, the process will exit with a non-zero exit code. + pluginmain.Serve( + bundlepublisherv1.BundlePublisherPluginServer(plugin), + // TODO: Remove if no configuration is required + configv1.ConfigServiceServer(plugin), + ) +} diff --git a/templates/server/bundlepublisher/bundlepublisher_test.go b/templates/server/bundlepublisher/bundlepublisher_test.go new file mode 100644 index 0000000..a924510 --- /dev/null +++ b/templates/server/bundlepublisher/bundlepublisher_test.go @@ -0,0 +1,36 @@ +package bundlepublisher_test + +import ( + "testing" + + "github.com/spiffe/spire-plugin-sdk/pluginsdk" + "github.com/spiffe/spire-plugin-sdk/plugintest" + bundlepublisherv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/bundlepublisher/v1" + configv1 "github.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1" + "github.com/spiffe/spire-plugin-sdk/templates/server/bundlepublisher" +) + +func Test(t *testing.T) { + plugin := new(bundlepublisher.Plugin) + pluginClient := new(bundlepublisherv1.BundlePublisherPluginClient) + configClient := new(configv1.ConfigServiceClient) + + // Serve the plugin in the background with the configured plugin and + // service servers. The servers will be cleaned up when the test finishes. + // TODO: Remove the config service server and client if no configuration + // is required. + // TODO: Provide host service server implementations if required by the + // plugin. + plugintest.ServeInBackground(t, plugintest.Config{ + PluginServer: bundlepublisherv1.BundlePublisherPluginServer(plugin), + PluginClient: pluginClient, + ServiceServers: []pluginsdk.ServiceServer{ + configv1.ConfigServiceServer(plugin), + }, + ServiceClients: []pluginsdk.ServiceClient{ + configClient, + }, + }) + + // TODO: Invoke methods on the clients and assert the results +} From bfb5872bc32a9c77d442918054792bd67b98ce8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Thu, 22 Jun 2023 20:21:39 -0300 Subject: [PATCH 13/24] Introduce a helper package for BundlePublisher plugins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Agustín Martínez Fayó --- go.mod | 8 +- go.sum | 1050 ++++++++++++++++- .../spire/service/private/init/v1/init.pb.go | 2 +- .../support/bundlepublisherutil/bputil.go | 307 +++++ .../bundlepublisherutil/bputil_test.go | 139 +++ private/proto/test/echo.pb.go | 2 +- private/proto/test/somehostservice.pb.go | 2 +- private/proto/test/someplugin.pb.go | 2 +- private/proto/test/someservice.pb.go | 2 +- .../common/metrics/v1/metrics.pb.go | 2 +- .../server/agentstore/v1/agentstore.pb.go | 2 +- .../v1/identityprovider.pb.go | 2 +- .../agent/keymanager/v1/keymanager.pb.go | 2 +- .../agent/nodeattestor/v1/nodeattestor.pb.go | 2 +- .../plugin/agent/svidstore/v1/svidstore.pb.go | 2 +- .../v1/workloadattestor.pb.go | 2 +- .../bundlepublisher/v1/bundlepublisher.pb.go | 2 +- .../v1/credentialcomposer.pb.go | 2 +- .../server/keymanager/v1/keymanager.pb.go | 2 +- .../server/nodeattestor/v1/nodeattestor.pb.go | 2 +- .../plugin/server/notifier/v1/notifier.pb.go | 2 +- .../v1/upstreamauthority.pb.go | 2 +- proto/spire/plugin/types/bundle.pb.go | 2 +- proto/spire/plugin/types/jwtkey.pb.go | 2 +- .../spire/plugin/types/x509certificate.pb.go | 2 +- .../service/common/config/v1/config.pb.go | 2 +- 26 files changed, 1512 insertions(+), 36 deletions(-) create mode 100644 pluginsdk/support/bundlepublisherutil/bputil.go create mode 100644 pluginsdk/support/bundlepublisherutil/bputil_test.go diff --git a/go.mod b/go.mod index a9ebb7b..e20743c 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,9 @@ require ( github.com/hashicorp/go-hclog v0.15.0 github.com/hashicorp/go-plugin v1.4.0 github.com/hashicorp/hcl v1.0.0 - github.com/stretchr/testify v1.7.0 - google.golang.org/grpc v1.48.0 - google.golang.org/protobuf v1.28.0 + github.com/spiffe/go-spiffe/v2 v2.1.6 + github.com/stretchr/testify v1.8.2 + google.golang.org/grpc v1.53.0 + google.golang.org/protobuf v1.28.1 + gopkg.in/square/go-jose.v2 v2.6.0 ) diff --git a/go.sum b/go.sum index d646992..6602a45 100644 --- a/go.sum +++ b/go.sum @@ -1,35 +1,467 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/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/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= +github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/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.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= 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= @@ -39,29 +471,97 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 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.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 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.4.1/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.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/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.4/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.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.15.0 h1:qMuK0wxsoW4D0ddCCYwPSTm4KQv1X1ke3WmPWZ0Mvsk= github.com/hashicorp/go-hclog v0.15.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-plugin v1.4.0 h1:b0O7rs5uiJ99Iu9HugEzsM67afboErkHUWddUSpUO3A= github.com/hashicorp/go-plugin v1.4.0/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -71,23 +571,107 @@ github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1: github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spiffe/go-spiffe/v2 v2.1.6 h1:4SdizuQieFyL9eNU+SPiCArH4kynzaKOOj0VvM8R7Xo= +github.com/spiffe/go-spiffe/v2 v2.1.6/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= github.com/stretchr/objx v0.1.0/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.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= +github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +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-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 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-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -95,53 +679,482 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r 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-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/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-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/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-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= 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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/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-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/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-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +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 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= 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.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 h1:znp6mq/drrY+6khTAlJUDNFFcDGV2ENLYKpMq8SyCds= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 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.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20/go.mod h1:Nr5H8+MlGWr5+xX/STzdoEqJrO+YteqFbMyCsrb6mH0= 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= @@ -150,17 +1163,32 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi 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.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= 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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +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.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/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-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/internal/proto/spire/service/private/init/v1/init.pb.go b/internal/proto/spire/service/private/init/v1/init.pb.go index ae2504c..1143897 100644 --- a/internal/proto/spire/service/private/init/v1/init.pb.go +++ b/internal/proto/spire/service/private/init/v1/init.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/service/private/init/v1/init.proto diff --git a/pluginsdk/support/bundlepublisherutil/bputil.go b/pluginsdk/support/bundlepublisherutil/bputil.go new file mode 100644 index 0000000..95ab418 --- /dev/null +++ b/pluginsdk/support/bundlepublisherutil/bputil.go @@ -0,0 +1,307 @@ +// Package bundlepublisherutil provides helper functions for plugins +// implementing the BundlePublisher interface. +// BundlePublisher plugins should use this package as a way to have a +// standarized name for bundle formats in their configuration, and avoid the +// re-implementation of bundle parsing logic of formats supported in this +// package. +package bundlepublisherutil + +import ( + "bytes" + "crypto" + "crypto/x509" + "encoding/json" + "encoding/pem" + "errors" + "fmt" + "strings" + "sync" + "time" + + "github.com/spiffe/go-spiffe/v2/bundle/spiffebundle" + "github.com/spiffe/go-spiffe/v2/spiffeid" + "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/types" + "gopkg.in/square/go-jose.v2" +) + +const ( + BundleFormatUnset BundleFormat = iota + SPIFFE + PEM + JWKS +) + +// Bundle represents a bundle that can be formatted in different formats. +type Bundle struct { + bundle *types.Bundle + + bytesMtx sync.RWMutex + jwksBytes []byte + pemBytes []byte + spiffeBytes []byte +} + +// KeyType represents the types of keys that are supported by the KeyManager. +type BundleFormat int + +// BundleFormatFromString returns the BundleFormat corresponding to the provided +// string. +func BundleFormatFromString(s string) (BundleFormat, error) { + switch strings.ToLower(s) { + case "spiffe": + return SPIFFE, nil + case "jwks": + return JWKS, nil + case "pem": + return PEM, nil + default: + return BundleFormatUnset, fmt.Errorf("unknown bundle format: %q", s) + } +} + +// NewBundle return a new *Bundle with the *types.Bundle provided. +// Use the Bytes() function to get a slice of bytes with the bundle formatted in +// the format specified. +func NewBundle(pluginBundle *types.Bundle) *Bundle { + return &Bundle{ + bundle: pluginBundle, + } +} + +// String returns the string name for the bundle format. +func (bundleFormat BundleFormat) String() string { + switch bundleFormat { + case BundleFormatUnset: + return "UNSET" + case SPIFFE: + return "spiffe" + case PEM: + return "pem" + case JWKS: + return "jwks" + default: + return fmt.Sprintf("UNKNOWN(%d)", int(bundleFormat)) + } +} + +// Bytes returns the bundle in the form of a slice of bytes in +// the chosen format. +func (b *Bundle) Bytes(format BundleFormat) ([]byte, error) { + if b.bundle == nil { + return nil, errors.New("missing bundle") + } + + switch format { + case BundleFormatUnset: + return nil, errors.New("no format specified") + + case JWKS: + if jwksBytes := b.getJWKSBytes(); jwksBytes != nil { + return jwksBytes, nil + } + jwksBytes, err := b.toJWKS() + if err != nil { + return nil, fmt.Errorf("could not convert bundle to jwks format: %w", err) + } + b.setJWKSBytes(jwksBytes) + return jwksBytes, nil + + case PEM: + if pemBytes := b.getPEMBytes(); pemBytes != nil { + return pemBytes, nil + } + + pemBytes, err := b.toPEM() + if err != nil { + return nil, fmt.Errorf("could not convert bundle to pem format: %w", err) + } + b.setPEMBytes(pemBytes) + return pemBytes, nil + + case SPIFFE: + if spiffeBytes := b.getSPIFFEBytes(); spiffeBytes != nil { + return spiffeBytes, nil + } + + spiffeBytes, err := b.toSPIFFEBundle() + if err != nil { + return nil, fmt.Errorf("could not convert bundle to spiffe format: %w", err) + } + b.setSPIFFEBytes(spiffeBytes) + return spiffeBytes, nil + + default: + return nil, fmt.Errorf("invalid format: %q", format) + } +} + +func (b *Bundle) getJWKSBytes() []byte { + b.bytesMtx.RLock() + defer b.bytesMtx.RUnlock() + + return b.jwksBytes +} + +func (b *Bundle) getPEMBytes() []byte { + b.bytesMtx.RLock() + defer b.bytesMtx.RUnlock() + + return b.pemBytes +} + +func (b *Bundle) getSPIFFEBytes() []byte { + b.bytesMtx.RLock() + defer b.bytesMtx.RUnlock() + + return b.spiffeBytes +} + +func (b *Bundle) setJWKSBytes(jwksBytes []byte) { + b.bytesMtx.Lock() + defer b.bytesMtx.Unlock() + + b.jwksBytes = jwksBytes +} + +func (b *Bundle) setPEMBytes(pemBytes []byte) { + b.bytesMtx.Lock() + defer b.bytesMtx.Unlock() + + b.pemBytes = pemBytes +} + +func (b *Bundle) setSPIFFEBytes(spiffeBytes []byte) { + b.bytesMtx.Lock() + defer b.bytesMtx.Unlock() + + b.spiffeBytes = spiffeBytes +} + +// toJWKS converts to JWKS the current bundle. +func (b *Bundle) toJWKS() ([]byte, error) { + var jwks jose.JSONWebKeySet + + x509Authorities, jwtAuthorities, err := getAuthorities(b.bundle) + if err != nil { + return nil, err + } + + for _, rootCA := range x509Authorities { + jwks.Keys = append(jwks.Keys, jose.JSONWebKey{ + Key: rootCA.PublicKey, + Certificates: []*x509.Certificate{rootCA}, + }) + } + + for keyID, jwtSigningKey := range jwtAuthorities { + jwks.Keys = append(jwks.Keys, jose.JSONWebKey{ + Key: jwtSigningKey, + KeyID: keyID, + }) + } + + var out interface{} = jwks + return json.MarshalIndent(out, "", " ") +} + +// toPEM converts to PEM the current bundle. +func (b *Bundle) toPEM() ([]byte, error) { + bundleData := new(bytes.Buffer) + for _, x509Authority := range b.bundle.X509Authorities { + if err := pem.Encode(bundleData, &pem.Block{ + Type: "CERTIFICATE", + Bytes: x509Authority.Asn1, + }); err != nil { + return nil, fmt.Errorf("could not perform PEM encoding: %w", err) + } + } + + return bundleData.Bytes(), nil +} + +// toSPIFFEBundle converts to a SPIFFE bundle the current bundle. +func (b *Bundle) toSPIFFEBundle() ([]byte, error) { + sb, err := spiffeBundleFromPluginProto(b.bundle) + if err != nil { + return nil, fmt.Errorf("failed to convert bundle: %w", err) + } + docBytes, err := sb.Marshal() + if err != nil { + return nil, fmt.Errorf("failed to marshal bundle: %w", err) + } + + var o bytes.Buffer + if err := json.Indent(&o, docBytes, "", " "); err != nil { + return nil, err + } + + return o.Bytes(), nil +} + +// getAuthorities gets the X.509 authorities and JWT authorities from the +// provided *types.Bundle. +func getAuthorities(bundleProto *types.Bundle) ([]*x509.Certificate, map[string]crypto.PublicKey, error) { + x509Authorities, err := x509CertificatesFromProto(bundleProto.X509Authorities) + if err != nil { + return nil, nil, err + } + jwtAuthorities, err := jwtKeysFromProto(bundleProto.JwtAuthorities) + if err != nil { + return nil, nil, err + } + + return x509Authorities, jwtAuthorities, nil +} + +// jwtKeysFromProto converts JWT keys from the given []*types.JWTKey to +// map[string]crypto.PublicKey. +// The key ID of the public key is used as the key in the returned map. +func jwtKeysFromProto(proto []*types.JWTKey) (map[string]crypto.PublicKey, error) { + keys := make(map[string]crypto.PublicKey) + for i, publicKey := range proto { + jwtSigningKey, err := x509.ParsePKIXPublicKey(publicKey.PublicKey) + if err != nil { + return nil, fmt.Errorf("unable to parse JWT signing key %d: %w", i, err) + } + keys[publicKey.KeyId] = jwtSigningKey + } + return keys, nil +} + +// spiffeBundleFromPluginProto converts a bundle from the given *types.Bundle to +// *spiffebundle.Bundle. +func spiffeBundleFromPluginProto(bundleProto *types.Bundle) (*spiffebundle.Bundle, error) { + td, err := spiffeid.TrustDomainFromString(bundleProto.TrustDomain) + if err != nil { + return nil, err + } + x509Authorities, jwtAuthorities, err := getAuthorities(bundleProto) + if err != nil { + return nil, err + } + + bundle := spiffebundle.New(td) + bundle.SetX509Authorities(x509Authorities) + bundle.SetJWTAuthorities(jwtAuthorities) + if bundleProto.RefreshHint > 0 { + bundle.SetRefreshHint(time.Duration(bundleProto.RefreshHint) * time.Second) + } + if bundleProto.SequenceNumber > 0 { + bundle.SetSequenceNumber(bundleProto.SequenceNumber) + } + return bundle, nil +} + +// x509CertificatesFromProto converts X.509 certificates from the given +// []*types.X509Certificate to []*x509.Certificate. +func x509CertificatesFromProto(proto []*types.X509Certificate) ([]*x509.Certificate, error) { + var certs []*x509.Certificate + for i, auth := range proto { + cert, err := x509.ParseCertificate(auth.Asn1) + if err != nil { + return nil, fmt.Errorf("unable to parse root CA %d: %w", i, err) + } + certs = append(certs, cert) + } + return certs, nil +} diff --git a/pluginsdk/support/bundlepublisherutil/bputil_test.go b/pluginsdk/support/bundlepublisherutil/bputil_test.go new file mode 100644 index 0000000..dfee5c1 --- /dev/null +++ b/pluginsdk/support/bundlepublisherutil/bputil_test.go @@ -0,0 +1,139 @@ +package bundlepublisherutil + +import ( + "crypto/x509" + "encoding/pem" + "fmt" + "math" + "testing" + + "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/types" + "github.com/stretchr/testify/require" + "google.golang.org/protobuf/proto" +) + +func TestBytes(t *testing.T) { + const ( + certPEM = `-----BEGIN CERTIFICATE----- +MIIBKjCB0aADAgECAgEBMAoGCCqGSM49BAMCMAAwIhgPMDAwMTAxMDEwMDAwMDBa +GA85OTk5MTIzMTIzNTk1OVowADBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHyv +sCk5yi+yhSzNu5aquQwvm8a1Wh+qw1fiHAkhDni+wq+g3TQWxYlV51TCPH030yXs +RxvujD4hUUaIQrXk4KKjODA2MA8GA1UdEwEB/wQFMAMBAf8wIwYDVR0RAQH/BBkw +F4YVc3BpZmZlOi8vZG9tYWluMS50ZXN0MAoGCCqGSM49BAMCA0gAMEUCIA2dO09X +makw2ekuHKWC4hBhCkpr5qY4bI8YUcXfxg/1AiEA67kMyH7bQnr7OVLUrL+b9ylA +dZglS5kKnYigmwDh+/U= +-----END CERTIFICATE----- +` + ) + block, _ := pem.Decode([]byte(certPEM)) + require.NotNil(t, block, "unable to unmarshal certificate response: malformed PEM block") + + cert, err := x509.ParseCertificate(block.Bytes) + require.NoError(t, err) + + keyPkix, err := x509.MarshalPKIXPublicKey(cert.PublicKey) + require.NoError(t, err) + + testBundle := &types.Bundle{ + TrustDomain: "example.org", + X509Authorities: []*types.X509Certificate{{Asn1: cert.Raw}}, + JwtAuthorities: []*types.JWTKey{ + { + KeyId: "KID", + PublicKey: keyPkix, + }, + }, + RefreshHint: 1440, + SequenceNumber: 100, + } + standardJWKS := `{ + "keys": [ + { + %s"kty": "EC", + "crv": "P-256", + "x": "fK-wKTnKL7KFLM27lqq5DC-bxrVaH6rDV-IcCSEOeL4", + "y": "wq-g3TQWxYlV51TCPH030yXsRxvujD4hUUaIQrXk4KI", + "x5c": [ + "MIIBKjCB0aADAgECAgEBMAoGCCqGSM49BAMCMAAwIhgPMDAwMTAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowADBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHyvsCk5yi+yhSzNu5aquQwvm8a1Wh+qw1fiHAkhDni+wq+g3TQWxYlV51TCPH030yXsRxvujD4hUUaIQrXk4KKjODA2MA8GA1UdEwEB/wQFMAMBAf8wIwYDVR0RAQH/BBkwF4YVc3BpZmZlOi8vZG9tYWluMS50ZXN0MAoGCCqGSM49BAMCA0gAMEUCIA2dO09Xmakw2ekuHKWC4hBhCkpr5qY4bI8YUcXfxg/1AiEA67kMyH7bQnr7OVLUrL+b9ylAdZglS5kKnYigmwDh+/U=" + ] + }, + { + %s"kty": "EC", + "kid": "KID", + "crv": "P-256", + "x": "fK-wKTnKL7KFLM27lqq5DC-bxrVaH6rDV-IcCSEOeL4", + "y": "wq-g3TQWxYlV51TCPH030yXsRxvujD4hUUaIQrXk4KI" + } + ]%s +}` + expectedJWKS := fmt.Sprintf(standardJWKS, "", "", "") + expectedSPIFFEBundle := fmt.Sprintf(standardJWKS, + `"use": "x509-svid", + `, + `"use": "jwt-svid", + `, + `, + "spiffe_sequence": 100, + "spiffe_refresh_hint": 1440`, + ) + + for _, tt := range []struct { + name string + format BundleFormat + bundle *types.Bundle + expectBytes []byte + expectError string + }{ + { + name: "format not set", + bundle: testBundle, + expectError: "no format specified", + }, + { + name: "invalid format", + format: math.MaxInt, + bundle: testBundle, + expectError: fmt.Sprintf("invalid format: \"UNKNOWN(%d)\"", math.MaxInt), + }, + { + name: "no bundle", + format: SPIFFE, + expectError: "missing bundle", + }, + { + name: "jwks format", + format: JWKS, + bundle: testBundle, + expectBytes: []byte(expectedJWKS), + }, + { + name: "pem format", + format: PEM, + bundle: testBundle, + expectBytes: []byte(certPEM), + }, + { + name: "spiffe format", + format: SPIFFE, + bundle: testBundle, + expectBytes: []byte(expectedSPIFFEBundle), + }, + } { + t.Run(tt.name, func(t *testing.T) { + b := NewBundle(tt.bundle) + + if !proto.Equal(tt.bundle, b.bundle) { + require.Equal(t, tt.bundle, b.bundle) + } + + bytes, err := b.Bytes(tt.format) + if tt.expectError != "" { + require.EqualError(t, err, tt.expectError) + require.Nil(t, bytes) + return + } + require.NoError(t, err) + require.Equal(t, string(tt.expectBytes), string(bytes)) + }) + } +} diff --git a/private/proto/test/echo.pb.go b/private/proto/test/echo.pb.go index 594eed3..1c5353c 100644 --- a/private/proto/test/echo.pb.go +++ b/private/proto/test/echo.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: test/echo.proto diff --git a/private/proto/test/somehostservice.pb.go b/private/proto/test/somehostservice.pb.go index 795163b..3aae367 100644 --- a/private/proto/test/somehostservice.pb.go +++ b/private/proto/test/somehostservice.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: test/somehostservice.proto diff --git a/private/proto/test/someplugin.pb.go b/private/proto/test/someplugin.pb.go index 469a3a1..e47d196 100644 --- a/private/proto/test/someplugin.pb.go +++ b/private/proto/test/someplugin.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: test/someplugin.proto diff --git a/private/proto/test/someservice.pb.go b/private/proto/test/someservice.pb.go index 930d139..c603eb3 100644 --- a/private/proto/test/someservice.pb.go +++ b/private/proto/test/someservice.pb.go @@ -3,7 +3,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: test/someservice.proto diff --git a/proto/spire/hostservice/common/metrics/v1/metrics.pb.go b/proto/spire/hostservice/common/metrics/v1/metrics.pb.go index 9205c0d..993d4b7 100644 --- a/proto/spire/hostservice/common/metrics/v1/metrics.pb.go +++ b/proto/spire/hostservice/common/metrics/v1/metrics.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/hostservice/common/metrics/v1/metrics.proto diff --git a/proto/spire/hostservice/server/agentstore/v1/agentstore.pb.go b/proto/spire/hostservice/server/agentstore/v1/agentstore.pb.go index a29ea98..f0b78ca 100644 --- a/proto/spire/hostservice/server/agentstore/v1/agentstore.pb.go +++ b/proto/spire/hostservice/server/agentstore/v1/agentstore.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/hostservice/server/agentstore/v1/agentstore.proto diff --git a/proto/spire/hostservice/server/identityprovider/v1/identityprovider.pb.go b/proto/spire/hostservice/server/identityprovider/v1/identityprovider.pb.go index 0730c40..64d837f 100644 --- a/proto/spire/hostservice/server/identityprovider/v1/identityprovider.pb.go +++ b/proto/spire/hostservice/server/identityprovider/v1/identityprovider.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/hostservice/server/identityprovider/v1/identityprovider.proto diff --git a/proto/spire/plugin/agent/keymanager/v1/keymanager.pb.go b/proto/spire/plugin/agent/keymanager/v1/keymanager.pb.go index ee03a0b..2af387d 100644 --- a/proto/spire/plugin/agent/keymanager/v1/keymanager.pb.go +++ b/proto/spire/plugin/agent/keymanager/v1/keymanager.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/agent/keymanager/v1/keymanager.proto diff --git a/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.pb.go b/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.pb.go index 184e91f..70f970b 100644 --- a/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.pb.go +++ b/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/agent/nodeattestor/v1/nodeattestor.proto diff --git a/proto/spire/plugin/agent/svidstore/v1/svidstore.pb.go b/proto/spire/plugin/agent/svidstore/v1/svidstore.pb.go index b829b41..5f7aef3 100644 --- a/proto/spire/plugin/agent/svidstore/v1/svidstore.pb.go +++ b/proto/spire/plugin/agent/svidstore/v1/svidstore.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/agent/svidstore/v1/svidstore.proto diff --git a/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.pb.go b/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.pb.go index 2b3d887..189c004 100644 --- a/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.pb.go +++ b/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/agent/workloadattestor/v1/workloadattestor.proto diff --git a/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go index e2072e7..55a418f 100644 --- a/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go +++ b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto diff --git a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go index 2a32744..4fa4645 100644 --- a/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go +++ b/proto/spire/plugin/server/credentialcomposer/v1/credentialcomposer.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/server/credentialcomposer/v1/credentialcomposer.proto diff --git a/proto/spire/plugin/server/keymanager/v1/keymanager.pb.go b/proto/spire/plugin/server/keymanager/v1/keymanager.pb.go index 9aca6a9..d0600c7 100644 --- a/proto/spire/plugin/server/keymanager/v1/keymanager.pb.go +++ b/proto/spire/plugin/server/keymanager/v1/keymanager.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/server/keymanager/v1/keymanager.proto diff --git a/proto/spire/plugin/server/nodeattestor/v1/nodeattestor.pb.go b/proto/spire/plugin/server/nodeattestor/v1/nodeattestor.pb.go index 98df193..50f066d 100644 --- a/proto/spire/plugin/server/nodeattestor/v1/nodeattestor.pb.go +++ b/proto/spire/plugin/server/nodeattestor/v1/nodeattestor.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/server/nodeattestor/v1/nodeattestor.proto diff --git a/proto/spire/plugin/server/notifier/v1/notifier.pb.go b/proto/spire/plugin/server/notifier/v1/notifier.pb.go index 7ad31f7..c54e0a6 100644 --- a/proto/spire/plugin/server/notifier/v1/notifier.pb.go +++ b/proto/spire/plugin/server/notifier/v1/notifier.pb.go @@ -2,7 +2,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/server/notifier/v1/notifier.proto diff --git a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go index 6ec68cf..9f0b89e 100644 --- a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go +++ b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto diff --git a/proto/spire/plugin/types/bundle.pb.go b/proto/spire/plugin/types/bundle.pb.go index e545027..bc893ff 100644 --- a/proto/spire/plugin/types/bundle.pb.go +++ b/proto/spire/plugin/types/bundle.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/types/bundle.proto diff --git a/proto/spire/plugin/types/jwtkey.pb.go b/proto/spire/plugin/types/jwtkey.pb.go index 1c5f2f1..f8fa055 100644 --- a/proto/spire/plugin/types/jwtkey.pb.go +++ b/proto/spire/plugin/types/jwtkey.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/types/jwtkey.proto diff --git a/proto/spire/plugin/types/x509certificate.pb.go b/proto/spire/plugin/types/x509certificate.pb.go index 43412b9..06701d5 100644 --- a/proto/spire/plugin/types/x509certificate.pb.go +++ b/proto/spire/plugin/types/x509certificate.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/plugin/types/x509certificate.proto diff --git a/proto/spire/service/common/config/v1/config.pb.go b/proto/spire/service/common/config/v1/config.pb.go index ec93e1e..1b9b585 100644 --- a/proto/spire/service/common/config/v1/config.pb.go +++ b/proto/spire/service/common/config/v1/config.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 +// protoc-gen-go v1.28.1 // protoc v3.20.1 // source: spire/service/common/config/v1/config.proto From a00e0ad300902cdc2092b10a24bbd96c039b0a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Fri, 23 Jun 2023 15:11:27 -0300 Subject: [PATCH 14/24] - Remove unneeded mutex - Add string convertion tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Agustín Martínez Fayó --- .../support/bundlepublisherutil/bputil.go | 68 +++---------------- .../bundlepublisherutil/bputil_test.go | 42 ++++++++++++ 2 files changed, 51 insertions(+), 59 deletions(-) diff --git a/pluginsdk/support/bundlepublisherutil/bputil.go b/pluginsdk/support/bundlepublisherutil/bputil.go index 95ab418..283fe5d 100644 --- a/pluginsdk/support/bundlepublisherutil/bputil.go +++ b/pluginsdk/support/bundlepublisherutil/bputil.go @@ -15,7 +15,6 @@ import ( "errors" "fmt" "strings" - "sync" "time" "github.com/spiffe/go-spiffe/v2/bundle/spiffebundle" @@ -35,7 +34,6 @@ const ( type Bundle struct { bundle *types.Bundle - bytesMtx sync.RWMutex jwksBytes []byte pemBytes []byte spiffeBytes []byte @@ -94,89 +92,41 @@ func (b *Bundle) Bytes(format BundleFormat) ([]byte, error) { switch format { case BundleFormatUnset: return nil, errors.New("no format specified") - case JWKS: - if jwksBytes := b.getJWKSBytes(); jwksBytes != nil { - return jwksBytes, nil + if b.jwksBytes != nil { + return b.jwksBytes, nil } jwksBytes, err := b.toJWKS() if err != nil { return nil, fmt.Errorf("could not convert bundle to jwks format: %w", err) } - b.setJWKSBytes(jwksBytes) + b.jwksBytes = jwksBytes return jwksBytes, nil - case PEM: - if pemBytes := b.getPEMBytes(); pemBytes != nil { - return pemBytes, nil + if b.pemBytes != nil { + return b.pemBytes, nil } - pemBytes, err := b.toPEM() if err != nil { return nil, fmt.Errorf("could not convert bundle to pem format: %w", err) } - b.setPEMBytes(pemBytes) + b.pemBytes = pemBytes return pemBytes, nil - case SPIFFE: - if spiffeBytes := b.getSPIFFEBytes(); spiffeBytes != nil { - return spiffeBytes, nil + if b.spiffeBytes != nil { + return b.spiffeBytes, nil } - spiffeBytes, err := b.toSPIFFEBundle() if err != nil { return nil, fmt.Errorf("could not convert bundle to spiffe format: %w", err) } - b.setSPIFFEBytes(spiffeBytes) + b.spiffeBytes = spiffeBytes return spiffeBytes, nil - default: return nil, fmt.Errorf("invalid format: %q", format) } } -func (b *Bundle) getJWKSBytes() []byte { - b.bytesMtx.RLock() - defer b.bytesMtx.RUnlock() - - return b.jwksBytes -} - -func (b *Bundle) getPEMBytes() []byte { - b.bytesMtx.RLock() - defer b.bytesMtx.RUnlock() - - return b.pemBytes -} - -func (b *Bundle) getSPIFFEBytes() []byte { - b.bytesMtx.RLock() - defer b.bytesMtx.RUnlock() - - return b.spiffeBytes -} - -func (b *Bundle) setJWKSBytes(jwksBytes []byte) { - b.bytesMtx.Lock() - defer b.bytesMtx.Unlock() - - b.jwksBytes = jwksBytes -} - -func (b *Bundle) setPEMBytes(pemBytes []byte) { - b.bytesMtx.Lock() - defer b.bytesMtx.Unlock() - - b.pemBytes = pemBytes -} - -func (b *Bundle) setSPIFFEBytes(spiffeBytes []byte) { - b.bytesMtx.Lock() - defer b.bytesMtx.Unlock() - - b.spiffeBytes = spiffeBytes -} - // toJWKS converts to JWKS the current bundle. func (b *Bundle) toJWKS() ([]byte, error) { var jwks jose.JSONWebKeySet diff --git a/pluginsdk/support/bundlepublisherutil/bputil_test.go b/pluginsdk/support/bundlepublisherutil/bputil_test.go index dfee5c1..b8ea4cd 100644 --- a/pluginsdk/support/bundlepublisherutil/bputil_test.go +++ b/pluginsdk/support/bundlepublisherutil/bputil_test.go @@ -137,3 +137,45 @@ dZglS5kKnYigmwDh+/U= }) } } + +func TestStringConversion(t *testing.T) { + for _, tt := range []struct { + name string + formatString string + expectError string + expectFormat BundleFormat + }{ + { + name: "invalid format", + formatString: "INVALID", + expectError: `unknown bundle format: "INVALID"`, + }, + { + name: "jwks format", + formatString: "jwks", + expectFormat: JWKS, + }, + { + name: "pem format", + formatString: "pem", + expectFormat: PEM, + }, + { + name: "spiffe format", + formatString: "spiffe", + expectFormat: SPIFFE, + }, + } { + t.Run(tt.name, func(t *testing.T) { + format, err := BundleFormatFromString(tt.formatString) + if tt.expectError != "" { + require.EqualError(t, err, tt.expectError) + require.Zero(t, format) + return + } + require.NoError(t, err) + require.Equal(t, tt.expectFormat, format) + require.Equal(t, tt.formatString, format.String()) + }) + } +} From ecd0d59803ac53b8455f9831bc1c1ac2c3243154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Fri, 23 Jun 2023 15:15:39 -0300 Subject: [PATCH 15/24] Update TestStringConversion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Agustín Martínez Fayó --- pluginsdk/support/bundlepublisherutil/bputil_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pluginsdk/support/bundlepublisherutil/bputil_test.go b/pluginsdk/support/bundlepublisherutil/bputil_test.go index b8ea4cd..c39c27a 100644 --- a/pluginsdk/support/bundlepublisherutil/bputil_test.go +++ b/pluginsdk/support/bundlepublisherutil/bputil_test.go @@ -170,7 +170,7 @@ func TestStringConversion(t *testing.T) { format, err := BundleFormatFromString(tt.formatString) if tt.expectError != "" { require.EqualError(t, err, tt.expectError) - require.Zero(t, format) + require.Equal(t, BundleFormatUnset, format) return } require.NoError(t, err) From 826fb3444ba5e99220fde8b6ebc732d6d5f9a18f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Mon, 3 Jul 2023 21:29:22 -0300 Subject: [PATCH 16/24] Address PR comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Agustín Martínez Fayó --- go.mod | 2 +- go.sum | 2 - .../bundleformat.go} | 71 +++++++++---------- .../bundleformat_test.go} | 61 ++++++---------- 4 files changed, 58 insertions(+), 78 deletions(-) rename pluginsdk/support/bundlepublisherutil/{bputil.go => bundleformat/bundleformat.go} (81%) rename pluginsdk/support/bundlepublisherutil/{bputil_test.go => bundleformat/bundleformat_test.go} (66%) diff --git a/go.mod b/go.mod index e20743c..b17eaa2 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/spiffe/spire-plugin-sdk go 1.14 require ( + github.com/go-jose/go-jose/v3 v3.0.0 github.com/hashicorp/go-hclog v0.15.0 github.com/hashicorp/go-plugin v1.4.0 github.com/hashicorp/hcl v1.0.0 @@ -10,5 +11,4 @@ require ( github.com/stretchr/testify v1.8.2 google.golang.org/grpc v1.53.0 google.golang.org/protobuf v1.28.1 - gopkg.in/square/go-jose.v2 v2.6.0 ) diff --git a/go.sum b/go.sum index 6602a45..0aa1642 100644 --- a/go.sum +++ b/go.sum @@ -1175,8 +1175,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -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.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/pluginsdk/support/bundlepublisherutil/bputil.go b/pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat.go similarity index 81% rename from pluginsdk/support/bundlepublisherutil/bputil.go rename to pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat.go index 283fe5d..abb4765 100644 --- a/pluginsdk/support/bundlepublisherutil/bputil.go +++ b/pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat.go @@ -1,10 +1,10 @@ -// Package bundlepublisherutil provides helper functions for plugins -// implementing the BundlePublisher interface. +// Package bundleformat provides helper functions related with bundle formatting +// for plugins implementing the BundlePublisher interface. // BundlePublisher plugins should use this package as a way to have a // standarized name for bundle formats in their configuration, and avoid the // re-implementation of bundle parsing logic of formats supported in this // package. -package bundlepublisherutil +package bundleformat import ( "bytes" @@ -17,21 +17,14 @@ import ( "strings" "time" + "github.com/go-jose/go-jose/v3" "github.com/spiffe/go-spiffe/v2/bundle/spiffebundle" "github.com/spiffe/go-spiffe/v2/spiffeid" "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/types" - "gopkg.in/square/go-jose.v2" ) -const ( - BundleFormatUnset BundleFormat = iota - SPIFFE - PEM - JWKS -) - -// Bundle represents a bundle that can be formatted in different formats. -type Bundle struct { +// Formatter formats a bundle in different formats. +type Formatter struct { bundle *types.Bundle jwksBytes []byte @@ -39,12 +32,18 @@ type Bundle struct { spiffeBytes []byte } -// KeyType represents the types of keys that are supported by the KeyManager. -type BundleFormat int +// Format represents the bundle formats that are supported by the Formatter. +type Format int + +const ( + FormatUnset Format = iota + SPIFFE + PEM + JWKS +) -// BundleFormatFromString returns the BundleFormat corresponding to the provided -// string. -func BundleFormatFromString(s string) (BundleFormat, error) { +// FromString returns the Format corresponding to the provided string. +func FromString(s string) (Format, error) { switch strings.ToLower(s) { case "spiffe": return SPIFFE, nil @@ -53,23 +52,23 @@ func BundleFormatFromString(s string) (BundleFormat, error) { case "pem": return PEM, nil default: - return BundleFormatUnset, fmt.Errorf("unknown bundle format: %q", s) + return FormatUnset, fmt.Errorf("unknown bundle format: %q", s) } } // NewBundle return a new *Bundle with the *types.Bundle provided. // Use the Bytes() function to get a slice of bytes with the bundle formatted in // the format specified. -func NewBundle(pluginBundle *types.Bundle) *Bundle { - return &Bundle{ +func NewBundle(pluginBundle *types.Bundle) *Formatter { + return &Formatter{ bundle: pluginBundle, } } // String returns the string name for the bundle format. -func (bundleFormat BundleFormat) String() string { +func (bundleFormat Format) String() string { switch bundleFormat { - case BundleFormatUnset: + case FormatUnset: return "UNSET" case SPIFFE: return "spiffe" @@ -82,15 +81,15 @@ func (bundleFormat BundleFormat) String() string { } } -// Bytes returns the bundle in the form of a slice of bytes in +// Format returns the bundle in the form of a slice of bytes in // the chosen format. -func (b *Bundle) Bytes(format BundleFormat) ([]byte, error) { +func (b *Formatter) Format(format Format) ([]byte, error) { if b.bundle == nil { return nil, errors.New("missing bundle") } switch format { - case BundleFormatUnset: + case FormatUnset: return nil, errors.New("no format specified") case JWKS: if b.jwksBytes != nil { @@ -128,7 +127,7 @@ func (b *Bundle) Bytes(format BundleFormat) ([]byte, error) { } // toJWKS converts to JWKS the current bundle. -func (b *Bundle) toJWKS() ([]byte, error) { +func (b *Formatter) toJWKS() ([]byte, error) { var jwks jose.JSONWebKeySet x509Authorities, jwtAuthorities, err := getAuthorities(b.bundle) @@ -150,12 +149,11 @@ func (b *Bundle) toJWKS() ([]byte, error) { }) } - var out interface{} = jwks - return json.MarshalIndent(out, "", " ") + return json.Marshal(jwks) } // toPEM converts to PEM the current bundle. -func (b *Bundle) toPEM() ([]byte, error) { +func (b *Formatter) toPEM() ([]byte, error) { bundleData := new(bytes.Buffer) for _, x509Authority := range b.bundle.X509Authorities { if err := pem.Encode(bundleData, &pem.Block{ @@ -170,7 +168,7 @@ func (b *Bundle) toPEM() ([]byte, error) { } // toSPIFFEBundle converts to a SPIFFE bundle the current bundle. -func (b *Bundle) toSPIFFEBundle() ([]byte, error) { +func (b *Formatter) toSPIFFEBundle() ([]byte, error) { sb, err := spiffeBundleFromPluginProto(b.bundle) if err != nil { return nil, fmt.Errorf("failed to convert bundle: %w", err) @@ -180,12 +178,13 @@ func (b *Bundle) toSPIFFEBundle() ([]byte, error) { return nil, fmt.Errorf("failed to marshal bundle: %w", err) } - var o bytes.Buffer - if err := json.Indent(&o, docBytes, "", " "); err != nil { - return nil, err - } + return docBytes, nil +} - return o.Bytes(), nil +// FormatBundle returns the bundle in the form of a slice of bytes in +// the chosen format. +func FormatBundle(bundle *types.Bundle, format Format) ([]byte, error) { + return NewBundle(bundle).Format(format) } // getAuthorities gets the X.509 authorities and JWT authorities from the diff --git a/pluginsdk/support/bundlepublisherutil/bputil_test.go b/pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat_test.go similarity index 66% rename from pluginsdk/support/bundlepublisherutil/bputil_test.go rename to pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat_test.go index c39c27a..772f1c0 100644 --- a/pluginsdk/support/bundlepublisherutil/bputil_test.go +++ b/pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat_test.go @@ -1,4 +1,4 @@ -package bundlepublisherutil +package bundleformat import ( "crypto/x509" @@ -46,40 +46,13 @@ dZglS5kKnYigmwDh+/U= RefreshHint: 1440, SequenceNumber: 100, } - standardJWKS := `{ - "keys": [ - { - %s"kty": "EC", - "crv": "P-256", - "x": "fK-wKTnKL7KFLM27lqq5DC-bxrVaH6rDV-IcCSEOeL4", - "y": "wq-g3TQWxYlV51TCPH030yXsRxvujD4hUUaIQrXk4KI", - "x5c": [ - "MIIBKjCB0aADAgECAgEBMAoGCCqGSM49BAMCMAAwIhgPMDAwMTAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowADBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHyvsCk5yi+yhSzNu5aquQwvm8a1Wh+qw1fiHAkhDni+wq+g3TQWxYlV51TCPH030yXsRxvujD4hUUaIQrXk4KKjODA2MA8GA1UdEwEB/wQFMAMBAf8wIwYDVR0RAQH/BBkwF4YVc3BpZmZlOi8vZG9tYWluMS50ZXN0MAoGCCqGSM49BAMCA0gAMEUCIA2dO09Xmakw2ekuHKWC4hBhCkpr5qY4bI8YUcXfxg/1AiEA67kMyH7bQnr7OVLUrL+b9ylAdZglS5kKnYigmwDh+/U=" - ] - }, - { - %s"kty": "EC", - "kid": "KID", - "crv": "P-256", - "x": "fK-wKTnKL7KFLM27lqq5DC-bxrVaH6rDV-IcCSEOeL4", - "y": "wq-g3TQWxYlV51TCPH030yXsRxvujD4hUUaIQrXk4KI" - } - ]%s -}` + standardJWKS := `{"keys":[{%s"kty":"EC","crv":"P-256","x":"fK-wKTnKL7KFLM27lqq5DC-bxrVaH6rDV-IcCSEOeL4","y":"wq-g3TQWxYlV51TCPH030yXsRxvujD4hUUaIQrXk4KI","x5c":["MIIBKjCB0aADAgECAgEBMAoGCCqGSM49BAMCMAAwIhgPMDAwMTAxMDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowADBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHyvsCk5yi+yhSzNu5aquQwvm8a1Wh+qw1fiHAkhDni+wq+g3TQWxYlV51TCPH030yXsRxvujD4hUUaIQrXk4KKjODA2MA8GA1UdEwEB/wQFMAMBAf8wIwYDVR0RAQH/BBkwF4YVc3BpZmZlOi8vZG9tYWluMS50ZXN0MAoGCCqGSM49BAMCA0gAMEUCIA2dO09Xmakw2ekuHKWC4hBhCkpr5qY4bI8YUcXfxg/1AiEA67kMyH7bQnr7OVLUrL+b9ylAdZglS5kKnYigmwDh+/U="]},{%s"kty":"EC","kid":"KID","crv":"P-256","x":"fK-wKTnKL7KFLM27lqq5DC-bxrVaH6rDV-IcCSEOeL4","y":"wq-g3TQWxYlV51TCPH030yXsRxvujD4hUUaIQrXk4KI"}]%s}` expectedJWKS := fmt.Sprintf(standardJWKS, "", "", "") - expectedSPIFFEBundle := fmt.Sprintf(standardJWKS, - `"use": "x509-svid", - `, - `"use": "jwt-svid", - `, - `, - "spiffe_sequence": 100, - "spiffe_refresh_hint": 1440`, - ) + expectedSPIFFEBundle := fmt.Sprintf(standardJWKS, `"use":"x509-svid",`, `"use":"jwt-svid",`, `,"spiffe_sequence":100,"spiffe_refresh_hint":1440`) for _, tt := range []struct { name string - format BundleFormat + format Format bundle *types.Bundle expectBytes []byte expectError string @@ -126,14 +99,24 @@ dZglS5kKnYigmwDh+/U= require.Equal(t, tt.bundle, b.bundle) } - bytes, err := b.Bytes(tt.format) + // Test the Format function that's provided by the formatter and + // also test the FormatBundle function that should have the same + // result. + formatResult, formatErr := b.Format(tt.format) + formatBundleResult, formatBundleErr := FormatBundle(tt.bundle, tt.format) if tt.expectError != "" { - require.EqualError(t, err, tt.expectError) - require.Nil(t, bytes) + require.EqualError(t, formatErr, tt.expectError) + require.Nil(t, formatResult) + + require.EqualError(t, formatBundleErr, tt.expectError) + require.Nil(t, formatBundleResult) return } - require.NoError(t, err) - require.Equal(t, string(tt.expectBytes), string(bytes)) + require.NoError(t, formatErr) + require.NoError(t, formatBundleErr) + + require.Equal(t, string(tt.expectBytes), string(formatResult)) + require.Equal(t, string(tt.expectBytes), string(formatBundleResult)) }) } } @@ -143,7 +126,7 @@ func TestStringConversion(t *testing.T) { name string formatString string expectError string - expectFormat BundleFormat + expectFormat Format }{ { name: "invalid format", @@ -167,10 +150,10 @@ func TestStringConversion(t *testing.T) { }, } { t.Run(tt.name, func(t *testing.T) { - format, err := BundleFormatFromString(tt.formatString) + format, err := FromString(tt.formatString) if tt.expectError != "" { require.EqualError(t, err, tt.expectError) - require.Equal(t, BundleFormatUnset, format) + require.Equal(t, FormatUnset, format) return } require.NoError(t, err) From b8229713c096ae1543cbd01ca2f20fd86dbe3737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Fri, 21 Jul 2023 12:04:40 -0300 Subject: [PATCH 17/24] Have bundleformat package directly under pluginsdk/support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Agustín Martínez Fayó --- .../bundleformat/bundleformat.go | 50 +++++++++---------- .../bundleformat/bundleformat_test.go | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) rename pluginsdk/support/{bundlepublisherutil => }/bundleformat/bundleformat.go (97%) rename pluginsdk/support/{bundlepublisherutil => }/bundleformat/bundleformat_test.go (99%) diff --git a/pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat.go b/pluginsdk/support/bundleformat/bundleformat.go similarity index 97% rename from pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat.go rename to pluginsdk/support/bundleformat/bundleformat.go index abb4765..f23ecd5 100644 --- a/pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat.go +++ b/pluginsdk/support/bundleformat/bundleformat.go @@ -23,6 +23,13 @@ import ( "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/types" ) +const ( + FormatUnset Format = iota + SPIFFE + PEM + JWKS +) + // Formatter formats a bundle in different formats. type Formatter struct { bundle *types.Bundle @@ -35,12 +42,21 @@ type Formatter struct { // Format represents the bundle formats that are supported by the Formatter. type Format int -const ( - FormatUnset Format = iota - SPIFFE - PEM - JWKS -) +// String returns the string name for the bundle format. +func (bundleFormat Format) String() string { + switch bundleFormat { + case FormatUnset: + return "UNSET" + case SPIFFE: + return "spiffe" + case PEM: + return "pem" + case JWKS: + return "jwks" + default: + return fmt.Sprintf("UNKNOWN(%d)", int(bundleFormat)) + } +} // FromString returns the Format corresponding to the provided string. func FromString(s string) (Format, error) { @@ -56,31 +72,15 @@ func FromString(s string) (Format, error) { } } -// NewBundle return a new *Bundle with the *types.Bundle provided. +// NewFormatter return a new *Bundle with the *types.Bundle provided. // Use the Bytes() function to get a slice of bytes with the bundle formatted in // the format specified. -func NewBundle(pluginBundle *types.Bundle) *Formatter { +func NewFormatter(pluginBundle *types.Bundle) *Formatter { return &Formatter{ bundle: pluginBundle, } } -// String returns the string name for the bundle format. -func (bundleFormat Format) String() string { - switch bundleFormat { - case FormatUnset: - return "UNSET" - case SPIFFE: - return "spiffe" - case PEM: - return "pem" - case JWKS: - return "jwks" - default: - return fmt.Sprintf("UNKNOWN(%d)", int(bundleFormat)) - } -} - // Format returns the bundle in the form of a slice of bytes in // the chosen format. func (b *Formatter) Format(format Format) ([]byte, error) { @@ -184,7 +184,7 @@ func (b *Formatter) toSPIFFEBundle() ([]byte, error) { // FormatBundle returns the bundle in the form of a slice of bytes in // the chosen format. func FormatBundle(bundle *types.Bundle, format Format) ([]byte, error) { - return NewBundle(bundle).Format(format) + return NewFormatter(bundle).Format(format) } // getAuthorities gets the X.509 authorities and JWT authorities from the diff --git a/pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat_test.go b/pluginsdk/support/bundleformat/bundleformat_test.go similarity index 99% rename from pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat_test.go rename to pluginsdk/support/bundleformat/bundleformat_test.go index 772f1c0..2c956fd 100644 --- a/pluginsdk/support/bundlepublisherutil/bundleformat/bundleformat_test.go +++ b/pluginsdk/support/bundleformat/bundleformat_test.go @@ -93,7 +93,7 @@ dZglS5kKnYigmwDh+/U= }, } { t.Run(tt.name, func(t *testing.T) { - b := NewBundle(tt.bundle) + b := NewFormatter(tt.bundle) if !proto.Equal(tt.bundle, b.bundle) { require.Equal(t, tt.bundle, b.bundle) From a2e5ba68e76045c0ca332264af935ea8c3a59f99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Fri, 21 Jul 2023 12:07:48 -0300 Subject: [PATCH 18/24] Update NewFormatter function comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Agustín Martínez Fayó --- pluginsdk/support/bundleformat/bundleformat.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pluginsdk/support/bundleformat/bundleformat.go b/pluginsdk/support/bundleformat/bundleformat.go index f23ecd5..57acf95 100644 --- a/pluginsdk/support/bundleformat/bundleformat.go +++ b/pluginsdk/support/bundleformat/bundleformat.go @@ -72,7 +72,7 @@ func FromString(s string) (Format, error) { } } -// NewFormatter return a new *Bundle with the *types.Bundle provided. +// NewFormatter return a new *Formatter with the *types.Bundle provided. // Use the Bytes() function to get a slice of bytes with the bundle formatted in // the format specified. func NewFormatter(pluginBundle *types.Bundle) *Formatter { From 3f1b22c78d9b46d9f69e8cfa15d3a1c5d3aac1fd Mon Sep 17 00:00:00 2001 From: Marcos Yacob Date: Tue, 2 May 2023 14:40:47 -0300 Subject: [PATCH 19/24] Add tainted field to upstream authority messages (#39) * Add tainted propagation to upstream authorities. Signed-off-by: Marcos Yacob --- proto/spire/plugin/types/jwtkey.pb.go | 23 ++++++++++++++----- proto/spire/plugin/types/jwtkey.proto | 3 +++ .../spire/plugin/types/x509certificate.pb.go | 23 ++++++++++++++----- .../spire/plugin/types/x509certificate.proto | 3 +++ 4 files changed, 40 insertions(+), 12 deletions(-) diff --git a/proto/spire/plugin/types/jwtkey.pb.go b/proto/spire/plugin/types/jwtkey.pb.go index f8fa055..c1eee93 100644 --- a/proto/spire/plugin/types/jwtkey.pb.go +++ b/proto/spire/plugin/types/jwtkey.pb.go @@ -32,6 +32,8 @@ type JWTKey struct { // When the key expires (seconds since Unix epoch). If zero, the key does // not expire. ExpiresAt int64 `protobuf:"varint,3,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` + // Indicates if the key has been tainted. A tainted key is not safe to be used anymore. + Tainted bool `protobuf:"varint,4,opt,name=tainted,proto3" json:"tainted,omitempty"` } func (x *JWTKey) Reset() { @@ -87,23 +89,32 @@ func (x *JWTKey) GetExpiresAt() int64 { return 0 } +func (x *JWTKey) GetTainted() bool { + if x != nil { + return x.Tainted + } + return false +} + var File_spire_plugin_types_jwtkey_proto protoreflect.FileDescriptor var file_spire_plugin_types_jwtkey_proto_rawDesc = []byte{ 0x0a, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6a, 0x77, 0x74, 0x6b, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x5d, 0x0a, 0x06, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x12, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x77, 0x0a, 0x06, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x65, 0x73, 0x41, 0x74, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x42, 0x3d, + 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, + 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, + 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/spire/plugin/types/jwtkey.proto b/proto/spire/plugin/types/jwtkey.proto index 414760f..74683dd 100644 --- a/proto/spire/plugin/types/jwtkey.proto +++ b/proto/spire/plugin/types/jwtkey.proto @@ -12,4 +12,7 @@ message JWTKey { // When the key expires (seconds since Unix epoch). If zero, the key does // not expire. int64 expires_at = 3; + + // Indicates if the key has been tainted. A tainted key is not safe to be used anymore. + bool tainted = 4; } diff --git a/proto/spire/plugin/types/x509certificate.pb.go b/proto/spire/plugin/types/x509certificate.pb.go index 06701d5..db33409 100644 --- a/proto/spire/plugin/types/x509certificate.pb.go +++ b/proto/spire/plugin/types/x509certificate.pb.go @@ -27,6 +27,8 @@ type X509Certificate struct { // The ASN.1 DER encoded bytes of the X.509 certificate. Asn1 []byte `protobuf:"bytes,1,opt,name=asn1,proto3" json:"asn1,omitempty"` + // Indicates if the authority has been tainted. A tainted authority is not safe to be used anymore. + Tainted bool `protobuf:"varint,2,opt,name=tainted,proto3" json:"tainted,omitempty"` } func (x *X509Certificate) Reset() { @@ -68,20 +70,29 @@ func (x *X509Certificate) GetAsn1() []byte { return nil } +func (x *X509Certificate) GetTainted() bool { + if x != nil { + return x.Tainted + } + return false +} + var File_spire_plugin_types_x509certificate_proto protoreflect.FileDescriptor var file_spire_plugin_types_x509certificate_proto_rawDesc = []byte{ 0x0a, 0x28, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x78, 0x35, 0x30, 0x39, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x25, + 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3f, 0x0a, 0x0f, 0x58, 0x35, 0x30, 0x39, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x73, 0x6e, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x61, 0x73, 0x6e, 0x31, 0x42, 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x04, 0x61, 0x73, 0x6e, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x42, + 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, + 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, + 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, + 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/spire/plugin/types/x509certificate.proto b/proto/spire/plugin/types/x509certificate.proto index 20396f8..c639ba5 100644 --- a/proto/spire/plugin/types/x509certificate.proto +++ b/proto/spire/plugin/types/x509certificate.proto @@ -5,4 +5,7 @@ option go_package = "github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/types message X509Certificate { // The ASN.1 DER encoded bytes of the X.509 certificate. bytes asn1 = 1; + + // Indicates if the authority has been tainted. A tainted authority is not safe to be used anymore. + bool tainted = 2; } From 8f411ead94ad0195dc6e896c2c22a91320a0e7a4 Mon Sep 17 00:00:00 2001 From: Edwin Buck Date: Mon, 1 Jul 2024 13:08:28 -0500 Subject: [PATCH 20/24] Add Validate RPC to Config service SDK. (#55) Signed-off-by: Edwin Buck --- .../service/common/config/v1/config.pb.go | 232 +++++++++++++++--- .../service/common/config/v1/config.proto | 32 +++ .../common/config/v1/config_grpc.pb.go | 40 +++ 3 files changed, 272 insertions(+), 32 deletions(-) diff --git a/proto/spire/service/common/config/v1/config.pb.go b/proto/spire/service/common/config/v1/config.pb.go index 1b9b585..e664b23 100644 --- a/proto/spire/service/common/config/v1/config.pb.go +++ b/proto/spire/service/common/config/v1/config.pb.go @@ -115,6 +115,124 @@ func (*ConfigureResponse) Descriptor() ([]byte, []int) { return file_spire_service_common_config_v1_config_proto_rawDescGZIP(), []int{1} } +type ValidateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. Core SPIRE configuration. + CoreConfiguration *CoreConfiguration `protobuf:"bytes,1,opt,name=core_configuration,json=coreConfiguration,proto3" json:"core_configuration,omitempty"` + // Required. HCL encoded plugin configuration. + HclConfiguration string `protobuf:"bytes,2,opt,name=hcl_configuration,json=hclConfiguration,proto3" json:"hcl_configuration,omitempty"` +} + +func (x *ValidateRequest) Reset() { + *x = ValidateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_service_common_config_v1_config_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateRequest) ProtoMessage() {} + +func (x *ValidateRequest) ProtoReflect() protoreflect.Message { + mi := &file_spire_service_common_config_v1_config_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 ValidateRequest.ProtoReflect.Descriptor instead. +func (*ValidateRequest) Descriptor() ([]byte, []int) { + return file_spire_service_common_config_v1_config_proto_rawDescGZIP(), []int{2} +} + +func (x *ValidateRequest) GetCoreConfiguration() *CoreConfiguration { + if x != nil { + return x.CoreConfiguration + } + return nil +} + +func (x *ValidateRequest) GetHclConfiguration() string { + if x != nil { + return x.HclConfiguration + } + return "" +} + +type ValidateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. True when the plugin deems the configuration usable. + Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` + // Examples of invalid configuration notes include: + // - value for "plugin.port" is not a number. + // - missing field "plugin.user" + // - specified SPIFFE ID in "plugin.spiffe_id" is not within system trust domain. + // - etc. + Notes []string `protobuf:"bytes,2,rep,name=notes,proto3" json:"notes,omitempty"` +} + +func (x *ValidateResponse) Reset() { + *x = ValidateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_service_common_config_v1_config_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateResponse) ProtoMessage() {} + +func (x *ValidateResponse) ProtoReflect() protoreflect.Message { + mi := &file_spire_service_common_config_v1_config_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 ValidateResponse.ProtoReflect.Descriptor instead. +func (*ValidateResponse) Descriptor() ([]byte, []int) { + return file_spire_service_common_config_v1_config_proto_rawDescGZIP(), []int{3} +} + +func (x *ValidateResponse) GetValid() bool { + if x != nil { + return x.Valid + } + return false +} + +func (x *ValidateResponse) GetNotes() []string { + if x != nil { + return x.Notes + } + return nil +} + type CoreConfiguration struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -128,7 +246,7 @@ type CoreConfiguration struct { func (x *CoreConfiguration) Reset() { *x = CoreConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_spire_service_common_config_v1_config_proto_msgTypes[2] + mi := &file_spire_service_common_config_v1_config_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -141,7 +259,7 @@ func (x *CoreConfiguration) String() string { func (*CoreConfiguration) ProtoMessage() {} func (x *CoreConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_spire_service_common_config_v1_config_proto_msgTypes[2] + mi := &file_spire_service_common_config_v1_config_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -154,7 +272,7 @@ func (x *CoreConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use CoreConfiguration.ProtoReflect.Descriptor instead. func (*CoreConfiguration) Descriptor() ([]byte, []int) { - return file_spire_service_common_config_v1_config_proto_rawDescGZIP(), []int{2} + return file_spire_service_common_config_v1_config_proto_rawDescGZIP(), []int{4} } func (x *CoreConfiguration) GetTrustDomain() string { @@ -183,24 +301,45 @@ var file_spire_service_common_config_v1_config_proto_rawDesc = []byte{ 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x63, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x13, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x0a, 0x11, 0x43, 0x6f, 0x72, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x74, 0x72, 0x75, 0x73, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x32, 0x7a, - 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x70, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, 0x30, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x52, 0x5a, 0x50, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x12, 0x63, 0x6f, + 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x6f, 0x72, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, + 0x68, 0x63, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x63, 0x6c, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x0a, 0x10, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x11, 0x43, 0x6f, 0x72, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, + 0x0a, 0x0c, 0x74, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x72, 0x75, 0x73, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x32, 0xe9, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x70, 0x0a, 0x09, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, 0x30, 0x2e, 0x73, 0x70, 0x69, 0x72, + 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x73, 0x70, + 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, + 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x73, 0x70, 0x69, + 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x73, 0x70, + 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x52, 0x5a, + 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, + 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, + 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x76, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -215,21 +354,26 @@ func file_spire_service_common_config_v1_config_proto_rawDescGZIP() []byte { return file_spire_service_common_config_v1_config_proto_rawDescData } -var file_spire_service_common_config_v1_config_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_spire_service_common_config_v1_config_proto_msgTypes = make([]protoimpl.MessageInfo, 5) var file_spire_service_common_config_v1_config_proto_goTypes = []interface{}{ (*ConfigureRequest)(nil), // 0: spire.service.common.config.v1.ConfigureRequest (*ConfigureResponse)(nil), // 1: spire.service.common.config.v1.ConfigureResponse - (*CoreConfiguration)(nil), // 2: spire.service.common.config.v1.CoreConfiguration + (*ValidateRequest)(nil), // 2: spire.service.common.config.v1.ValidateRequest + (*ValidateResponse)(nil), // 3: spire.service.common.config.v1.ValidateResponse + (*CoreConfiguration)(nil), // 4: spire.service.common.config.v1.CoreConfiguration } var file_spire_service_common_config_v1_config_proto_depIdxs = []int32{ - 2, // 0: spire.service.common.config.v1.ConfigureRequest.core_configuration:type_name -> spire.service.common.config.v1.CoreConfiguration - 0, // 1: spire.service.common.config.v1.Config.Configure:input_type -> spire.service.common.config.v1.ConfigureRequest - 1, // 2: spire.service.common.config.v1.Config.Configure:output_type -> spire.service.common.config.v1.ConfigureResponse - 2, // [2:3] is the sub-list for method output_type - 1, // [1:2] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 4, // 0: spire.service.common.config.v1.ConfigureRequest.core_configuration:type_name -> spire.service.common.config.v1.CoreConfiguration + 4, // 1: spire.service.common.config.v1.ValidateRequest.core_configuration:type_name -> spire.service.common.config.v1.CoreConfiguration + 0, // 2: spire.service.common.config.v1.Config.Configure:input_type -> spire.service.common.config.v1.ConfigureRequest + 2, // 3: spire.service.common.config.v1.Config.Validate:input_type -> spire.service.common.config.v1.ValidateRequest + 1, // 4: spire.service.common.config.v1.Config.Configure:output_type -> spire.service.common.config.v1.ConfigureResponse + 3, // 5: spire.service.common.config.v1.Config.Validate:output_type -> spire.service.common.config.v1.ValidateResponse + 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_spire_service_common_config_v1_config_proto_init() } @@ -263,6 +407,30 @@ func file_spire_service_common_config_v1_config_proto_init() { } } file_spire_service_common_config_v1_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_service_common_config_v1_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_service_common_config_v1_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CoreConfiguration); i { case 0: return &v.state @@ -281,7 +449,7 @@ func file_spire_service_common_config_v1_config_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_spire_service_common_config_v1_config_proto_rawDesc, NumEnums: 0, - NumMessages: 3, + NumMessages: 5, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/spire/service/common/config/v1/config.proto b/proto/spire/service/common/config/v1/config.proto index 878524f..3a0a6e5 100644 --- a/proto/spire/service/common/config/v1/config.proto +++ b/proto/spire/service/common/config/v1/config.proto @@ -12,6 +12,10 @@ service Config { // calls to Configure can happen concurrently with other RPCs against the // plugin. rpc Configure(ConfigureRequest) returns (ConfigureResponse); + + // Validate is called by SPIRE with a potential specific configuration for + // the plugin to determine if it is usable. + rpc Validate(ValidateRequest) returns (ValidateResponse); } message ConfigureRequest { @@ -25,6 +29,34 @@ message ConfigureRequest { message ConfigureResponse { } +message ValidateRequest { + // Required. Core SPIRE configuration. + CoreConfiguration core_configuration = 1; + + // Required. HCL encoded plugin configuration. + string hcl_configuration = 2; +} + +message ValidateResponse { + // Required. True when the plugin deems the configuration usable. + bool valid = 1; + + // Optional. Zero or more notes providing feedback to an end user. + + // Examples of valid configuration notes include: + // - "configuration valid" + // - "please ensure port 23423 is open" + // - "check access to (whatever) from the deployment environment" + // etc. + + // Examples of invalid configuration notes include: + // - value for "plugin.port" is not a number. + // - missing field "plugin.user" + // - specified SPIFFE ID in "plugin.spiffe_id" is not within system trust domain. + // - etc. + repeated string notes = 2; +} + message CoreConfiguration { // Required. The trust domain name SPIRE is configured with (e.g. // "example.org"). diff --git a/proto/spire/service/common/config/v1/config_grpc.pb.go b/proto/spire/service/common/config/v1/config_grpc.pb.go index c51079f..47a0101 100644 --- a/proto/spire/service/common/config/v1/config_grpc.pb.go +++ b/proto/spire/service/common/config/v1/config_grpc.pb.go @@ -26,6 +26,9 @@ type ConfigClient interface { // calls to Configure can happen concurrently with other RPCs against the // plugin. Configure(ctx context.Context, in *ConfigureRequest, opts ...grpc.CallOption) (*ConfigureResponse, error) + // Validate is called by SPIRE with a potential specific configuration for + // the plugin to determine if it is usable. + Validate(ctx context.Context, in *ValidateRequest, opts ...grpc.CallOption) (*ValidateResponse, error) } type configClient struct { @@ -45,6 +48,15 @@ func (c *configClient) Configure(ctx context.Context, in *ConfigureRequest, opts return out, nil } +func (c *configClient) Validate(ctx context.Context, in *ValidateRequest, opts ...grpc.CallOption) (*ValidateResponse, error) { + out := new(ValidateResponse) + err := c.cc.Invoke(ctx, "/spire.service.common.config.v1.Config/Validate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ConfigServer is the server API for Config service. // All implementations must embed UnimplementedConfigServer // for forward compatibility @@ -57,6 +69,9 @@ type ConfigServer interface { // calls to Configure can happen concurrently with other RPCs against the // plugin. Configure(context.Context, *ConfigureRequest) (*ConfigureResponse, error) + // Validate is called by SPIRE with a potential specific configuration for + // the plugin to determine if it is usable. + Validate(context.Context, *ValidateRequest) (*ValidateResponse, error) mustEmbedUnimplementedConfigServer() } @@ -67,6 +82,9 @@ type UnimplementedConfigServer struct { func (UnimplementedConfigServer) Configure(context.Context, *ConfigureRequest) (*ConfigureResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Configure not implemented") } +func (UnimplementedConfigServer) Validate(context.Context, *ValidateRequest) (*ValidateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Validate not implemented") +} func (UnimplementedConfigServer) mustEmbedUnimplementedConfigServer() {} // UnsafeConfigServer may be embedded to opt out of forward compatibility for this service. @@ -98,6 +116,24 @@ func _Config_Configure_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Config_Validate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ValidateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ConfigServer).Validate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/spire.service.common.config.v1.Config/Validate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ConfigServer).Validate(ctx, req.(*ValidateRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Config_ServiceDesc is the grpc.ServiceDesc for Config service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -109,6 +145,10 @@ var Config_ServiceDesc = grpc.ServiceDesc{ MethodName: "Configure", Handler: _Config_Configure_Handler, }, + { + MethodName: "Validate", + Handler: _Config_Validate_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "spire/service/common/config/v1/config.proto", From 26e3b314fcb53537f0e2c2cccb75dd4e1cb6f8a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Tue, 1 Jul 2025 15:47:58 -0300 Subject: [PATCH 21/24] Update to reflect current SPIRE CODEOWNERS (#62) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Agustín Martínez Fayó --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index 9913872..f27dfc6 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @evan2645 @amartinezfayo @azdagron @MarcosDY @rturner3 +* @evan2645 @amartinezfayo @sorindumitru @MarcosDY @rturner3 From f9336f114e01151b84fd5a246bb435e0b1b2b816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Tue, 1 Jul 2025 15:49:31 -0300 Subject: [PATCH 22/24] Add method to stream local bundle updates (#59) (#61) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sorin Dumitru Signed-off-by: Agustín Martínez Fayó Co-authored-by: Sorin Dumitru --- .../v1/upstreamauthority.pb.go | 250 ++++++++++++++---- .../v1/upstreamauthority.proto | 19 ++ .../v1/upstreamauthority_grpc.pb.go | 77 ++++++ 3 files changed, 296 insertions(+), 50 deletions(-) diff --git a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go index 9f0b89e..1509e9d 100644 --- a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go +++ b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go @@ -236,6 +236,101 @@ func (x *PublishJWTKeyResponse) GetUpstreamJwtKeys() []*types.JWTKey { return nil } +type SubscribeToLocalBundleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SubscribeToLocalBundleRequest) Reset() { + *x = SubscribeToLocalBundleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeToLocalBundleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeToLocalBundleRequest) ProtoMessage() {} + +func (x *SubscribeToLocalBundleRequest) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_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 SubscribeToLocalBundleRequest.ProtoReflect.Descriptor instead. +func (*SubscribeToLocalBundleRequest) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescGZIP(), []int{4} +} + +type SubscribeToLocalBundleResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Required. The trusted X.509 root authorities for the upstream authority. + UpstreamX509Roots []*types.X509Certificate `protobuf:"bytes,1,rep,name=upstream_x509_roots,json=upstreamX509Roots,proto3" json:"upstream_x509_roots,omitempty"` + // Required. The upstream JWT signing keys. + UpstreamJwtKeys []*types.JWTKey `protobuf:"bytes,2,rep,name=upstream_jwt_keys,json=upstreamJwtKeys,proto3" json:"upstream_jwt_keys,omitempty"` +} + +func (x *SubscribeToLocalBundleResponse) Reset() { + *x = SubscribeToLocalBundleResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscribeToLocalBundleResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeToLocalBundleResponse) ProtoMessage() {} + +func (x *SubscribeToLocalBundleResponse) ProtoReflect() protoreflect.Message { + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_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 SubscribeToLocalBundleResponse.ProtoReflect.Descriptor instead. +func (*SubscribeToLocalBundleResponse) Descriptor() ([]byte, []int) { + return file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescGZIP(), []int{5} +} + +func (x *SubscribeToLocalBundleResponse) GetUpstreamX509Roots() []*types.X509Certificate { + if x != nil { + return x.UpstreamX509Roots + } + return nil +} + +func (x *SubscribeToLocalBundleResponse) GetUpstreamJwtKeys() []*types.JWTKey { + if x != nil { + return x.UpstreamJwtKeys + } + return nil +} + var File_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto protoreflect.FileDescriptor var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc = []byte{ @@ -277,35 +372,60 @@ var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDes 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x0f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4a, - 0x77, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x32, 0xcc, 0x02, 0x0a, 0x11, 0x55, 0x70, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x95, 0x01, 0x0a, - 0x16, 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x41, 0x6e, 0x64, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x3b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x12, 0x9e, 0x01, 0x0a, 0x19, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x41, 0x6e, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x12, 0x3e, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x67, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x70, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x77, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xbd, 0x01, 0x0a, 0x1e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, 0x64, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x13, 0x75, 0x70, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x78, 0x35, 0x30, 0x39, 0x5f, 0x72, 0x6f, 0x6f, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x58, 0x35, 0x30, + 0x39, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x11, 0x75, 0x70, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x58, 0x35, 0x30, 0x39, 0x52, 0x6f, 0x6f, 0x74, 0x73, 0x12, + 0x46, 0x0a, 0x11, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6a, 0x77, 0x74, 0x5f, + 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x69, + 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, + 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x0f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x4a, 0x77, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x32, 0xfc, 0x03, 0x0a, 0x11, 0x55, 0x70, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x95, 0x01, + 0x0a, 0x16, 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x41, 0x6e, 0x64, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x3b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, + 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, + 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, + 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x9e, 0x01, 0x0a, 0x19, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x41, 0x6e, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x12, 0x3e, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xad, 0x01, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x12, 0x47, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x73, 0x70, 0x69, + 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, + 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x67, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, + 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x70, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x76, 0x31, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -320,29 +440,35 @@ func file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDe return file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescData } -var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_goTypes = []interface{}{ - (*MintX509CARequest)(nil), // 0: spire.plugin.server.upstreamauthority.v1.MintX509CARequest - (*MintX509CAResponse)(nil), // 1: spire.plugin.server.upstreamauthority.v1.MintX509CAResponse - (*PublishJWTKeyRequest)(nil), // 2: spire.plugin.server.upstreamauthority.v1.PublishJWTKeyRequest - (*PublishJWTKeyResponse)(nil), // 3: spire.plugin.server.upstreamauthority.v1.PublishJWTKeyResponse - (*types.X509Certificate)(nil), // 4: spire.plugin.types.X509Certificate - (*types.JWTKey)(nil), // 5: spire.plugin.types.JWTKey + (*MintX509CARequest)(nil), // 0: spire.plugin.server.upstreamauthority.v1.MintX509CARequest + (*MintX509CAResponse)(nil), // 1: spire.plugin.server.upstreamauthority.v1.MintX509CAResponse + (*PublishJWTKeyRequest)(nil), // 2: spire.plugin.server.upstreamauthority.v1.PublishJWTKeyRequest + (*PublishJWTKeyResponse)(nil), // 3: spire.plugin.server.upstreamauthority.v1.PublishJWTKeyResponse + (*SubscribeToLocalBundleRequest)(nil), // 4: spire.plugin.server.upstreamauthority.v1.SubscribeToLocalBundleRequest + (*SubscribeToLocalBundleResponse)(nil), // 5: spire.plugin.server.upstreamauthority.v1.SubscribeToLocalBundleResponse + (*types.X509Certificate)(nil), // 6: spire.plugin.types.X509Certificate + (*types.JWTKey)(nil), // 7: spire.plugin.types.JWTKey } var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_depIdxs = []int32{ - 4, // 0: spire.plugin.server.upstreamauthority.v1.MintX509CAResponse.x509_ca_chain:type_name -> spire.plugin.types.X509Certificate - 4, // 1: spire.plugin.server.upstreamauthority.v1.MintX509CAResponse.upstream_x509_roots:type_name -> spire.plugin.types.X509Certificate - 5, // 2: spire.plugin.server.upstreamauthority.v1.PublishJWTKeyRequest.jwt_key:type_name -> spire.plugin.types.JWTKey - 5, // 3: spire.plugin.server.upstreamauthority.v1.PublishJWTKeyResponse.upstream_jwt_keys:type_name -> spire.plugin.types.JWTKey - 0, // 4: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.MintX509CAAndSubscribe:input_type -> spire.plugin.server.upstreamauthority.v1.MintX509CARequest - 2, // 5: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.PublishJWTKeyAndSubscribe:input_type -> spire.plugin.server.upstreamauthority.v1.PublishJWTKeyRequest - 1, // 6: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.MintX509CAAndSubscribe:output_type -> spire.plugin.server.upstreamauthority.v1.MintX509CAResponse - 3, // 7: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.PublishJWTKeyAndSubscribe:output_type -> spire.plugin.server.upstreamauthority.v1.PublishJWTKeyResponse - 6, // [6:8] is the sub-list for method output_type - 4, // [4:6] 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 + 6, // 0: spire.plugin.server.upstreamauthority.v1.MintX509CAResponse.x509_ca_chain:type_name -> spire.plugin.types.X509Certificate + 6, // 1: spire.plugin.server.upstreamauthority.v1.MintX509CAResponse.upstream_x509_roots:type_name -> spire.plugin.types.X509Certificate + 7, // 2: spire.plugin.server.upstreamauthority.v1.PublishJWTKeyRequest.jwt_key:type_name -> spire.plugin.types.JWTKey + 7, // 3: spire.plugin.server.upstreamauthority.v1.PublishJWTKeyResponse.upstream_jwt_keys:type_name -> spire.plugin.types.JWTKey + 6, // 4: spire.plugin.server.upstreamauthority.v1.SubscribeToLocalBundleResponse.upstream_x509_roots:type_name -> spire.plugin.types.X509Certificate + 7, // 5: spire.plugin.server.upstreamauthority.v1.SubscribeToLocalBundleResponse.upstream_jwt_keys:type_name -> spire.plugin.types.JWTKey + 0, // 6: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.MintX509CAAndSubscribe:input_type -> spire.plugin.server.upstreamauthority.v1.MintX509CARequest + 2, // 7: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.PublishJWTKeyAndSubscribe:input_type -> spire.plugin.server.upstreamauthority.v1.PublishJWTKeyRequest + 4, // 8: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.SubscribeToLocalBundle:input_type -> spire.plugin.server.upstreamauthority.v1.SubscribeToLocalBundleRequest + 1, // 9: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.MintX509CAAndSubscribe:output_type -> spire.plugin.server.upstreamauthority.v1.MintX509CAResponse + 3, // 10: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.PublishJWTKeyAndSubscribe:output_type -> spire.plugin.server.upstreamauthority.v1.PublishJWTKeyResponse + 5, // 11: spire.plugin.server.upstreamauthority.v1.UpstreamAuthority.SubscribeToLocalBundle:output_type -> spire.plugin.server.upstreamauthority.v1.SubscribeToLocalBundleResponse + 9, // [9:12] is the sub-list for method output_type + 6, // [6:9] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_init() } @@ -399,6 +525,30 @@ func file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_init( return nil } } + file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscribeToLocalBundleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscribeToLocalBundleResponse); 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{ @@ -406,7 +556,7 @@ func file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_init( GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc, NumEnums: 0, - NumMessages: 4, + NumMessages: 6, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto index a039e52..a094532 100644 --- a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto +++ b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto @@ -29,6 +29,15 @@ service UpstreamAuthority { // encountered while tracking changes to the upstream JWT keys as SPIRE // Server will not reopen a closed stream until the next JWT key rotation. rpc PublishJWTKeyAndSubscribe(PublishJWTKeyRequest) returns (stream PublishJWTKeyResponse); + + // Returns the trust bundle of the local trust domain as seen by the upstream + // authority. Returns the current set of X.509 roots and JWT public keys + // that make up the trust bundle of the trust domain. If supported by the + // implementation, subsequent responses on the stream contain trust bundle + // updates, otherwise the stream is closed after the initial response. + // + // This RPC is optional and will return NotImplemented if unsupported. + rpc SubscribeToLocalBundle(SubscribeToLocalBundleRequest) returns (stream SubscribeToLocalBundleResponse); } message MintX509CARequest { @@ -61,3 +70,13 @@ message PublishJWTKeyResponse { // Required. The upstream JWT signing keys. repeated spire.plugin.types.JWTKey upstream_jwt_keys = 1; } + +message SubscribeToLocalBundleRequest { +} + +message SubscribeToLocalBundleResponse { + // Required. The trusted X.509 root authorities for the upstream authority. + repeated spire.plugin.types.X509Certificate upstream_x509_roots = 1; + // Required. The upstream JWT signing keys. + repeated spire.plugin.types.JWTKey upstream_jwt_keys = 2; +} diff --git a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority_grpc.pb.go b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority_grpc.pb.go index 05b98b2..3e74f26 100644 --- a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority_grpc.pb.go +++ b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority_grpc.pb.go @@ -40,6 +40,14 @@ type UpstreamAuthorityClient interface { // encountered while tracking changes to the upstream JWT keys as SPIRE // Server will not reopen a closed stream until the next JWT key rotation. PublishJWTKeyAndSubscribe(ctx context.Context, in *PublishJWTKeyRequest, opts ...grpc.CallOption) (UpstreamAuthority_PublishJWTKeyAndSubscribeClient, error) + // Returns the trust bundle of the local trust domain as seen by the upstream + // authority. Returns the current set of X.509 roots and JWT public keys + // that make up the trust bundle of the trust domain. If supported by the + // implementation, subsequent responses on the stream contain trust bundle + // updates, otherwise the stream is closed after the initial response. + // + // This RPC is optional and will return NotImplemented if unsupported. + SubscribeToLocalBundle(ctx context.Context, in *SubscribeToLocalBundleRequest, opts ...grpc.CallOption) (UpstreamAuthority_SubscribeToLocalBundleClient, error) } type upstreamAuthorityClient struct { @@ -114,6 +122,38 @@ func (x *upstreamAuthorityPublishJWTKeyAndSubscribeClient) Recv() (*PublishJWTKe return m, nil } +func (c *upstreamAuthorityClient) SubscribeToLocalBundle(ctx context.Context, in *SubscribeToLocalBundleRequest, opts ...grpc.CallOption) (UpstreamAuthority_SubscribeToLocalBundleClient, error) { + stream, err := c.cc.NewStream(ctx, &UpstreamAuthority_ServiceDesc.Streams[2], "/spire.plugin.server.upstreamauthority.v1.UpstreamAuthority/SubscribeToLocalBundle", opts...) + if err != nil { + return nil, err + } + x := &upstreamAuthoritySubscribeToLocalBundleClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type UpstreamAuthority_SubscribeToLocalBundleClient interface { + Recv() (*SubscribeToLocalBundleResponse, error) + grpc.ClientStream +} + +type upstreamAuthoritySubscribeToLocalBundleClient struct { + grpc.ClientStream +} + +func (x *upstreamAuthoritySubscribeToLocalBundleClient) Recv() (*SubscribeToLocalBundleResponse, error) { + m := new(SubscribeToLocalBundleResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + // UpstreamAuthorityServer is the server API for UpstreamAuthority service. // All implementations must embed UnimplementedUpstreamAuthorityServer // for forward compatibility @@ -140,6 +180,14 @@ type UpstreamAuthorityServer interface { // encountered while tracking changes to the upstream JWT keys as SPIRE // Server will not reopen a closed stream until the next JWT key rotation. PublishJWTKeyAndSubscribe(*PublishJWTKeyRequest, UpstreamAuthority_PublishJWTKeyAndSubscribeServer) error + // Returns the trust bundle of the local trust domain as seen by the upstream + // authority. Returns the current set of X.509 roots and JWT public keys + // that make up the trust bundle of the trust domain. If supported by the + // implementation, subsequent responses on the stream contain trust bundle + // updates, otherwise the stream is closed after the initial response. + // + // This RPC is optional and will return NotImplemented if unsupported. + SubscribeToLocalBundle(*SubscribeToLocalBundleRequest, UpstreamAuthority_SubscribeToLocalBundleServer) error mustEmbedUnimplementedUpstreamAuthorityServer() } @@ -153,6 +201,9 @@ func (UnimplementedUpstreamAuthorityServer) MintX509CAAndSubscribe(*MintX509CARe func (UnimplementedUpstreamAuthorityServer) PublishJWTKeyAndSubscribe(*PublishJWTKeyRequest, UpstreamAuthority_PublishJWTKeyAndSubscribeServer) error { return status.Errorf(codes.Unimplemented, "method PublishJWTKeyAndSubscribe not implemented") } +func (UnimplementedUpstreamAuthorityServer) SubscribeToLocalBundle(*SubscribeToLocalBundleRequest, UpstreamAuthority_SubscribeToLocalBundleServer) error { + return status.Errorf(codes.Unimplemented, "method SubscribeToLocalBundle not implemented") +} func (UnimplementedUpstreamAuthorityServer) mustEmbedUnimplementedUpstreamAuthorityServer() {} // UnsafeUpstreamAuthorityServer may be embedded to opt out of forward compatibility for this service. @@ -208,6 +259,27 @@ func (x *upstreamAuthorityPublishJWTKeyAndSubscribeServer) Send(m *PublishJWTKey return x.ServerStream.SendMsg(m) } +func _UpstreamAuthority_SubscribeToLocalBundle_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SubscribeToLocalBundleRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(UpstreamAuthorityServer).SubscribeToLocalBundle(m, &upstreamAuthoritySubscribeToLocalBundleServer{stream}) +} + +type UpstreamAuthority_SubscribeToLocalBundleServer interface { + Send(*SubscribeToLocalBundleResponse) error + grpc.ServerStream +} + +type upstreamAuthoritySubscribeToLocalBundleServer struct { + grpc.ServerStream +} + +func (x *upstreamAuthoritySubscribeToLocalBundleServer) Send(m *SubscribeToLocalBundleResponse) error { + return x.ServerStream.SendMsg(m) +} + // UpstreamAuthority_ServiceDesc is the grpc.ServiceDesc for UpstreamAuthority service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -226,6 +298,11 @@ var UpstreamAuthority_ServiceDesc = grpc.ServiceDesc{ Handler: _UpstreamAuthority_PublishJWTKeyAndSubscribe_Handler, ServerStreams: true, }, + { + StreamName: "SubscribeToLocalBundle", + Handler: _UpstreamAuthority_SubscribeToLocalBundle_Handler, + ServerStreams: true, + }, }, Metadata: "spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto", } From c3f9235816df93845f1ad7a806ceaadb708cce07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Thu, 7 Aug 2025 17:09:01 -0300 Subject: [PATCH 23/24] - Update google.golang.org/grpc to v1.74.2 - Update protoc_version to v30.2 - Update protoc_gen_go_grpc_version to v1.5.1 - Fix build for arm arch MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Agustín Martínez Fayó --- .go-version | 2 +- Makefile | 18 +- go.mod | 33 +- go.sum | 1168 +---------------- .../spire/service/private/init/v1/init.pb.go | 174 +-- .../service/private/init/v1/init_grpc.pb.go | 56 +- private/proto/test/echo.pb.go | 93 +- private/proto/test/somehostservice.pb.go | 30 +- private/proto/test/somehostservice_grpc.pb.go | 39 +- private/proto/test/someplugin.pb.go | 31 +- private/proto/test/someplugin_grpc.pb.go | 39 +- private/proto/test/someservice.pb.go | 29 +- private/proto/test/someservice_grpc.pb.go | 39 +- .../common/metrics/v1/metrics.pb.go | 317 ++--- .../common/metrics/v1/metrics_grpc.pb.go | 60 +- .../server/agentstore/v1/agentstore.pb.go | 157 +-- .../agentstore/v1/agentstore_grpc.pb.go | 36 +- .../v1/identityprovider.pb.go | 166 +-- .../v1/identityprovider_grpc.pb.go | 36 +- .../agent/keymanager/v1/keymanager.pb.go | 543 +++----- .../agent/keymanager/v1/keymanager_grpc.pb.go | 54 +- .../agent/nodeattestor/v1/nodeattestor.pb.go | 146 +-- .../nodeattestor/v1/nodeattestor_grpc.pb.go | 132 +- .../plugin/agent/svidstore/v1/svidstore.pb.go | 253 +--- .../agent/svidstore/v1/svidstore_grpc.pb.go | 42 +- .../v1/workloadattestor.pb.go | 114 +- .../v1/workloadattestor_grpc.pb.go | 36 +- .../bundlepublisher/v1/bundlepublisher.pb.go | 115 +- .../v1/bundlepublisher_grpc.pb.go | 40 +- .../v1/credentialcomposer.pb.go | 831 ++++-------- .../v1/credentialcomposer_grpc.pb.go | 66 +- .../server/keymanager/v1/keymanager.pb.go | 544 +++----- .../keymanager/v1/keymanager_grpc.pb.go | 54 +- .../server/nodeattestor/v1/nodeattestor.pb.go | 221 ++-- .../nodeattestor/v1/nodeattestor_grpc.pb.go | 136 +- .../plugin/server/notifier/v1/notifier.pb.go | 302 ++--- .../server/notifier/v1/notifier_grpc.pb.go | 44 +- .../v1/upstreamauthority.pb.go | 306 +---- .../v1/upstreamauthority_grpc.pb.go | 174 +-- proto/spire/plugin/types/bundle.pb.go | 86 +- proto/spire/plugin/types/jwtkey.pb.go | 75 +- .../spire/plugin/types/x509certificate.pb.go | 68 +- .../service/common/config/v1/config.pb.go | 237 +--- .../common/config/v1/config_grpc.pb.go | 42 +- 44 files changed, 2185 insertions(+), 4999 deletions(-) diff --git a/.go-version b/.go-version index 622f042..7bdcec5 100644 --- a/.go-version +++ b/.go-version @@ -1 +1 @@ -1.17.6 +1.23.12 diff --git a/Makefile b/Makefile index 3bde62a..eb2c8b2 100644 --- a/Makefile +++ b/Makefile @@ -104,8 +104,12 @@ go_bin_dir := $(go_dir)/bin go_url = https://storage.googleapis.com/golang/go$(go_version).$(os1)-$(arch2).tar.gz go_path := PATH="$(go_bin_dir):$(PATH)" -protoc_version = 3.20.1 -ifeq ($(arch2),arm64) +protoc_version = 30.2 +ifeq ($(os1),windows) +protoc_url = https://github.com/protocolbuffers/protobuf/releases/download/v$(protoc_version)/protoc-$(protoc_version)-win64.zip +else ifeq ($(arch1),arm64) +protoc_url = https://github.com/protocolbuffers/protobuf/releases/download/v$(protoc_version)/protoc-$(protoc_version)-$(os2)-aarch_64.zip +else ifeq ($(arch1),aarch64) protoc_url = https://github.com/protocolbuffers/protobuf/releases/download/v$(protoc_version)/protoc-$(protoc_version)-$(os2)-aarch_64.zip else protoc_url = https://github.com/protocolbuffers/protobuf/releases/download/v$(protoc_version)/protoc-$(protoc_version)-$(os2)-$(arch1).zip @@ -118,7 +122,7 @@ protoc_gen_go_base_dir := $(build_dir)/protoc-gen-go protoc_gen_go_dir := $(protoc_gen_go_base_dir)/$(protoc_gen_go_version)-go$(go_version) protoc_gen_go_bin := $(protoc_gen_go_dir)/protoc-gen-go -protoc_gen_go_grpc_version := v1.1.0 +protoc_gen_go_grpc_version := v1.5.1 protoc_gen_go_grpc_base_dir := $(build_dir)/protoc-gen-go-grpc protoc_gen_go_grpc_dir := $(protoc_gen_go_grpc_base_dir)/$(protoc_gen_go_grpc_version)-go$(go_version) protoc_gen_go_grpc_bin := $(protoc_gen_go_grpc_dir)/protoc-gen-go-grpc @@ -267,6 +271,7 @@ endif # correct go binary. go-check: ifneq (go$(go_version), $(shell $(go_path) go version 2>/dev/null | cut -f3 -d' ')) + @echo "go_url:" $(go_url) @echo "Installing go$(go_version)..." $(E)rm -rf $(dir $(go_dir)) $(E)mkdir -p $(go_dir) @@ -290,10 +295,9 @@ $(protoc_gen_go_bin): | go-check $(protoc_gen_go_grpc_bin): | go-check @echo "Installing protoc-gen-go-grpc $(protoc_gen_go_grpc_version)..." - $(E)rm -rf $(protoc_gen_go_grpc_base_dir) - $(E)mkdir -p $(protoc_gen_go_grpc_dir) - $(E)echo "module tools" > $(protoc_gen_go_grpc_dir)/go.mod - $(E)cd $(protoc_gen_go_grpc_dir) && GOBIN=$(protoc_gen_go_grpc_dir) $(go_path) go get google.golang.org/grpc/cmd/protoc-gen-go-grpc@$(protoc_gen_go_grpc_version) + @rm -rf $(protoc_gen_go_grpc_base_dir) + @mkdir -p $(protoc_gen_go_grpc_dir) + @GOBIN=$(protoc_gen_go_grpc_dir) $(go_path) go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@$(protoc_gen_go_grpc_version) $(protoc_gen_go_spire_bin): $(wildcard ./cmd/protoc-gen-go-spire/*) | go-check @echo "Installing protoc-gen-go-spire..." diff --git a/go.mod b/go.mod index b17eaa2..1f807a4 100644 --- a/go.mod +++ b/go.mod @@ -1,14 +1,37 @@ module github.com/spiffe/spire-plugin-sdk -go 1.14 +go 1.23.12 require ( github.com/go-jose/go-jose/v3 v3.0.0 github.com/hashicorp/go-hclog v0.15.0 github.com/hashicorp/go-plugin v1.4.0 github.com/hashicorp/hcl v1.0.0 - github.com/spiffe/go-spiffe/v2 v2.1.6 - github.com/stretchr/testify v1.8.2 - google.golang.org/grpc v1.53.0 - google.golang.org/protobuf v1.28.1 + github.com/spiffe/go-spiffe/v2 v2.5.0 + github.com/stretchr/testify v1.10.0 + google.golang.org/grpc v1.74.2 + google.golang.org/protobuf v1.36.6 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/go-jose/go-jose/v4 v4.0.5 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 // indirect + github.com/oklog/run v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/zeebo/errs v1.4.0 // indirect + golang.org/x/crypto v0.38.0 // indirect + golang.org/x/net v0.40.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.25.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a // indirect + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 0aa1642..603b3cb 100644 --- a/go.sum +++ b/go.sum @@ -1,1192 +1,154 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= -cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= -cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= -cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= -cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= -cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= -cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= -cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= -cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= -cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= -cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= -cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= -cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= -cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= -cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= -cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= -cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= -cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= -cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= -cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= -cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= -cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= -cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= -cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= -cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= -cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= -cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= -cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= -cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= -cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= -cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= -cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= -cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= -cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= -cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= -cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= -cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= -cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= -cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= -cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= -cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= -cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= -cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= -cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= -cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= -cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= -cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= -cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= -cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= -cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= -cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= -cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= -cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= -cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= -cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= -cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= -cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= -cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= -cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= -cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= -cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= -cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= -cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= -cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= -cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= -cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= -cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= -cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= -cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= -cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= -cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= -cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= -cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= -cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= -cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= -cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= -cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= -cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= -cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= -cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= -cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= -cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= -cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= -cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= -cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= -cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= -cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= -cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= -cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= -cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= -cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= -cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= -cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= -cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= -cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= -cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= -cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= -cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= -cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= -cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= -cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= -cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= -cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= -cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= -cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= -cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= -cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= -cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= -cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= -cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= -cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= -cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= -cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= -cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= -cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= -cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= -cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= -cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= -cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= -cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= -cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= -cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= -cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= -cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= -cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= -cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= -cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= -cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= -cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= -cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= -cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= -cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= -cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= -cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= -cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= -cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= -cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= -cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/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/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= -github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/go-jose/go-jose/v3 v3.0.0 h1:s6rrhirfEP/CGIoc6p+PZAeogN2SxKav6Wp7+dyMWVo= github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/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/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/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.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -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.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -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.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +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.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.4.1/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.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/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.4/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.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +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/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.15.0 h1:qMuK0wxsoW4D0ddCCYwPSTm4KQv1X1ke3WmPWZ0Mvsk= github.com/hashicorp/go-hclog v0.15.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-plugin v1.4.0 h1:b0O7rs5uiJ99Iu9HugEzsM67afboErkHUWddUSpUO3A= github.com/hashicorp/go-plugin v1.4.0/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +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 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +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.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1:7GoSOOW2jpsfkntVKaS2rAr1TJqfcxotyaUcuxoZSzg= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spiffe/go-spiffe/v2 v2.1.6 h1:4SdizuQieFyL9eNU+SPiCArH4kynzaKOOj0VvM8R7Xo= -github.com/spiffe/go-spiffe/v2 v2.1.6/go.mod h1:eVDqm9xFvyqao6C+eQensb9ZPkyNEeaUbqbBpOhBnNk= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.0/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.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= 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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zeebo/errs v1.3.0 h1:hmiaKqgYZzcVgRL1Vkc1Mn2914BbzB0IBxs+ebeutGs= -github.com/zeebo/errs v1.3.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg= +go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= +go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE= +go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= +go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs= +go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= +go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis= +go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4= +go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w= +go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 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-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 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-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -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.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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-20190108225652-1e06a53dbb7e/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-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/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-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/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-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= 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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/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-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/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-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= 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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/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-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -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= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= 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.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230223222841-637eb2293923 h1:znp6mq/drrY+6khTAlJUDNFFcDGV2ENLYKpMq8SyCds= -google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a h1:v2PbRU4K3llS09c7zodFpNePeamkAwG3mPrAery9VeE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250528174236-200df99c418a/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 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.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20/go.mod h1:Nr5H8+MlGWr5+xX/STzdoEqJrO+YteqFbMyCsrb6mH0= -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.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= +google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +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/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/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-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/internal/proto/spire/service/private/init/v1/init.pb.go b/internal/proto/spire/service/private/init/v1/init.pb.go index 1143897..938d49a 100644 --- a/internal/proto/spire/service/private/init/v1/init.pb.go +++ b/internal/proto/spire/service/private/init/v1/init.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/service/private/init/v1/init.proto package initv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,23 +23,20 @@ const ( // Init request parameters type InitRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // List of all the names of gRPC services implemented by the host (i.e. // SPIRE). These names are the fully qualified gRPC service name (e.g. // spire.hostservice.v1.Foo). HostServiceNames []string `protobuf:"bytes,1,rep,name=host_service_names,json=hostServiceNames,proto3" json:"host_service_names,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InitRequest) Reset() { *x = InitRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_service_private_init_v1_init_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_service_private_init_v1_init_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *InitRequest) String() string { @@ -49,7 +47,7 @@ func (*InitRequest) ProtoMessage() {} func (x *InitRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_service_private_init_v1_init_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -73,23 +71,20 @@ func (x *InitRequest) GetHostServiceNames() []string { // Init response parameters type InitResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // List of all the names of gRPC services implemented by the service. These // names are the fully qualified gRPC service name (e.g. // spire.plugin.server.keymanager.v1.Keymanager). PluginServiceNames []string `protobuf:"bytes,1,rep,name=plugin_service_names,json=pluginServiceNames,proto3" json:"plugin_service_names,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InitResponse) Reset() { *x = InitResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_service_private_init_v1_init_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_service_private_init_v1_init_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *InitResponse) String() string { @@ -100,7 +95,7 @@ func (*InitResponse) ProtoMessage() {} func (x *InitResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_service_private_init_v1_init_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -124,18 +119,16 @@ func (x *InitResponse) GetPluginServiceNames() []string { // Deinit request parameters type DeinitRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeinitRequest) Reset() { *x = DeinitRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_service_private_init_v1_init_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_service_private_init_v1_init_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeinitRequest) String() string { @@ -146,7 +139,7 @@ func (*DeinitRequest) ProtoMessage() {} func (x *DeinitRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_service_private_init_v1_init_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -163,18 +156,16 @@ func (*DeinitRequest) Descriptor() ([]byte, []int) { // Deinit response parameters type DeinitResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeinitResponse) Reset() { *x = DeinitResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_service_private_init_v1_init_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_service_private_init_v1_init_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeinitResponse) String() string { @@ -185,7 +176,7 @@ func (*DeinitResponse) ProtoMessage() {} func (x *DeinitResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_service_private_init_v1_init_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -202,57 +193,33 @@ func (*DeinitResponse) Descriptor() ([]byte, []int) { var File_spire_service_private_init_v1_init_proto protoreflect.FileDescriptor -var file_spire_service_private_init_v1_init_proto_rawDesc = []byte{ - 0x0a, 0x28, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x2f, - 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1d, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x22, 0x3b, 0x0a, 0x0b, 0x49, 0x6e, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x6f, 0x73, 0x74, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x68, 0x6f, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x40, 0x0a, 0x0c, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x0f, 0x0a, 0x0d, 0x44, 0x65, 0x69, 0x6e, - 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x69, - 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xce, 0x01, 0x0a, 0x04, - 0x49, 0x6e, 0x69, 0x74, 0x12, 0x5f, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x2a, 0x2e, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x06, 0x44, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x12, - 0x2c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x69, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x58, 0x5a, 0x56, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, - 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, - 0x64, 0x6b, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x2f, 0x76, 0x31, 0x3b, - 0x69, 0x6e, 0x69, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_service_private_init_v1_init_proto_rawDesc = "" + + "\n" + + "(spire/service/private/init/v1/init.proto\x12\x1dspire.service.private.init.v1\";\n" + + "\vInitRequest\x12,\n" + + "\x12host_service_names\x18\x01 \x03(\tR\x10hostServiceNames\"@\n" + + "\fInitResponse\x120\n" + + "\x14plugin_service_names\x18\x01 \x03(\tR\x12pluginServiceNames\"\x0f\n" + + "\rDeinitRequest\"\x10\n" + + "\x0eDeinitResponse2\xce\x01\n" + + "\x04Init\x12_\n" + + "\x04Init\x12*.spire.service.private.init.v1.InitRequest\x1a+.spire.service.private.init.v1.InitResponse\x12e\n" + + "\x06Deinit\x12,.spire.service.private.init.v1.DeinitRequest\x1a-.spire.service.private.init.v1.DeinitResponseBXZVgithub.com/spiffe/spire-plugin-sdk/internal/proto/spire/service/private/init/v1;initv1b\x06proto3" var ( file_spire_service_private_init_v1_init_proto_rawDescOnce sync.Once - file_spire_service_private_init_v1_init_proto_rawDescData = file_spire_service_private_init_v1_init_proto_rawDesc + file_spire_service_private_init_v1_init_proto_rawDescData []byte ) func file_spire_service_private_init_v1_init_proto_rawDescGZIP() []byte { file_spire_service_private_init_v1_init_proto_rawDescOnce.Do(func() { - file_spire_service_private_init_v1_init_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_service_private_init_v1_init_proto_rawDescData) + file_spire_service_private_init_v1_init_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_service_private_init_v1_init_proto_rawDesc), len(file_spire_service_private_init_v1_init_proto_rawDesc))) }) return file_spire_service_private_init_v1_init_proto_rawDescData } var file_spire_service_private_init_v1_init_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_spire_service_private_init_v1_init_proto_goTypes = []interface{}{ +var file_spire_service_private_init_v1_init_proto_goTypes = []any{ (*InitRequest)(nil), // 0: spire.service.private.init.v1.InitRequest (*InitResponse)(nil), // 1: spire.service.private.init.v1.InitResponse (*DeinitRequest)(nil), // 2: spire.service.private.init.v1.DeinitRequest @@ -275,61 +242,11 @@ func file_spire_service_private_init_v1_init_proto_init() { if File_spire_service_private_init_v1_init_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_service_private_init_v1_init_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_service_private_init_v1_init_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_service_private_init_v1_init_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeinitRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_service_private_init_v1_init_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeinitResponse); 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_spire_service_private_init_v1_init_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_service_private_init_v1_init_proto_rawDesc), len(file_spire_service_private_init_v1_init_proto_rawDesc)), NumEnums: 0, NumMessages: 4, NumExtensions: 0, @@ -340,7 +257,6 @@ func file_spire_service_private_init_v1_init_proto_init() { MessageInfos: file_spire_service_private_init_v1_init_proto_msgTypes, }.Build() File_spire_service_private_init_v1_init_proto = out.File - file_spire_service_private_init_v1_init_proto_rawDesc = nil file_spire_service_private_init_v1_init_proto_goTypes = nil file_spire_service_private_init_v1_init_proto_depIdxs = nil } diff --git a/internal/proto/spire/service/private/init/v1/init_grpc.pb.go b/internal/proto/spire/service/private/init/v1/init_grpc.pb.go index f1234c3..bafdc33 100644 --- a/internal/proto/spire/service/private/init/v1/init_grpc.pb.go +++ b/internal/proto/spire/service/private/init/v1/init_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/service/private/init/v1/init.proto package initv1 @@ -11,12 +15,24 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Init_Init_FullMethodName = "/spire.service.private.init.v1.Init/Init" + Init_Deinit_FullMethodName = "/spire.service.private.init.v1.Init/Deinit" +) // InitClient is the client API for Init 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. +// +// Init is an internal service that the plugin framework uses to initialize +// a plugin after it has been loaded. Initialization takes place when the +// plugin client connects, since the client is responsible for hosting the +// broker that is used to provide host services. If we initialize before that, +// there would be no broker available to connect to host services with. +// The service is also used for graceful cleanup when the plugin is unloaded. type InitClient interface { Init(ctx context.Context, in *InitRequest, opts ...grpc.CallOption) (*InitResponse, error) Deinit(ctx context.Context, in *DeinitRequest, opts ...grpc.CallOption) (*DeinitResponse, error) @@ -31,8 +47,9 @@ func NewInitClient(cc grpc.ClientConnInterface) InitClient { } func (c *initClient) Init(ctx context.Context, in *InitRequest, opts ...grpc.CallOption) (*InitResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(InitResponse) - err := c.cc.Invoke(ctx, "/spire.service.private.init.v1.Init/Init", in, out, opts...) + err := c.cc.Invoke(ctx, Init_Init_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -40,8 +57,9 @@ func (c *initClient) Init(ctx context.Context, in *InitRequest, opts ...grpc.Cal } func (c *initClient) Deinit(ctx context.Context, in *DeinitRequest, opts ...grpc.CallOption) (*DeinitResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(DeinitResponse) - err := c.cc.Invoke(ctx, "/spire.service.private.init.v1.Init/Deinit", in, out, opts...) + err := c.cc.Invoke(ctx, Init_Deinit_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -50,16 +68,26 @@ func (c *initClient) Deinit(ctx context.Context, in *DeinitRequest, opts ...grpc // InitServer is the server API for Init service. // All implementations must embed UnimplementedInitServer -// for forward compatibility +// for forward compatibility. +// +// Init is an internal service that the plugin framework uses to initialize +// a plugin after it has been loaded. Initialization takes place when the +// plugin client connects, since the client is responsible for hosting the +// broker that is used to provide host services. If we initialize before that, +// there would be no broker available to connect to host services with. +// The service is also used for graceful cleanup when the plugin is unloaded. type InitServer interface { Init(context.Context, *InitRequest) (*InitResponse, error) Deinit(context.Context, *DeinitRequest) (*DeinitResponse, error) mustEmbedUnimplementedInitServer() } -// UnimplementedInitServer must be embedded to have forward compatible implementations. -type UnimplementedInitServer struct { -} +// UnimplementedInitServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedInitServer struct{} func (UnimplementedInitServer) Init(context.Context, *InitRequest) (*InitResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Init not implemented") @@ -68,6 +96,7 @@ func (UnimplementedInitServer) Deinit(context.Context, *DeinitRequest) (*DeinitR return nil, status.Errorf(codes.Unimplemented, "method Deinit not implemented") } func (UnimplementedInitServer) mustEmbedUnimplementedInitServer() {} +func (UnimplementedInitServer) testEmbeddedByValue() {} // UnsafeInitServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to InitServer will @@ -77,6 +106,13 @@ type UnsafeInitServer interface { } func RegisterInitServer(s grpc.ServiceRegistrar, srv InitServer) { + // If the following call pancis, it indicates UnimplementedInitServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&Init_ServiceDesc, srv) } @@ -90,7 +126,7 @@ func _Init_Init_Handler(srv interface{}, ctx context.Context, dec func(interface } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.service.private.init.v1.Init/Init", + FullMethod: Init_Init_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(InitServer).Init(ctx, req.(*InitRequest)) @@ -108,7 +144,7 @@ func _Init_Deinit_Handler(srv interface{}, ctx context.Context, dec func(interfa } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.service.private.init.v1.Init/Deinit", + FullMethod: Init_Deinit_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(InitServer).Deinit(ctx, req.(*DeinitRequest)) diff --git a/private/proto/test/echo.pb.go b/private/proto/test/echo.pb.go index 1c5353c..961e17f 100644 --- a/private/proto/test/echo.pb.go +++ b/private/proto/test/echo.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: test/echo.proto package test @@ -14,6 +14,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -24,20 +25,17 @@ const ( ) type EchoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + In string `protobuf:"bytes,1,opt,name=in,proto3" json:"in,omitempty"` unknownFields protoimpl.UnknownFields - - In string `protobuf:"bytes,1,opt,name=in,proto3" json:"in,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EchoRequest) Reset() { *x = EchoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_test_echo_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_test_echo_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EchoRequest) String() string { @@ -48,7 +46,7 @@ func (*EchoRequest) ProtoMessage() {} func (x *EchoRequest) ProtoReflect() protoreflect.Message { mi := &file_test_echo_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -71,20 +69,17 @@ func (x *EchoRequest) GetIn() string { } type EchoResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Out string `protobuf:"bytes,1,opt,name=out,proto3" json:"out,omitempty"` unknownFields protoimpl.UnknownFields - - Out string `protobuf:"bytes,1,opt,name=out,proto3" json:"out,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EchoResponse) Reset() { *x = EchoResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_test_echo_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_test_echo_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EchoResponse) String() string { @@ -95,7 +90,7 @@ func (*EchoResponse) ProtoMessage() {} func (x *EchoResponse) ProtoReflect() protoreflect.Message { mi := &file_test_echo_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -119,33 +114,28 @@ func (x *EchoResponse) GetOut() string { var File_test_echo_proto protoreflect.FileDescriptor -var file_test_echo_proto_rawDesc = []byte{ - 0x0a, 0x0f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x04, 0x74, 0x65, 0x73, 0x74, 0x22, 0x1d, 0x0a, 0x0b, 0x45, 0x63, 0x68, 0x6f, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x6e, 0x22, 0x20, 0x0a, 0x0c, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6f, 0x75, 0x74, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x65, 0x73, - 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_test_echo_proto_rawDesc = "" + + "\n" + + "\x0ftest/echo.proto\x12\x04test\"\x1d\n" + + "\vEchoRequest\x12\x0e\n" + + "\x02in\x18\x01 \x01(\tR\x02in\" \n" + + "\fEchoResponse\x12\x10\n" + + "\x03out\x18\x01 \x01(\tR\x03outB7Z5github.com/spiffe/spire-plugin-sdk/private/proto/testb\x06proto3" var ( file_test_echo_proto_rawDescOnce sync.Once - file_test_echo_proto_rawDescData = file_test_echo_proto_rawDesc + file_test_echo_proto_rawDescData []byte ) func file_test_echo_proto_rawDescGZIP() []byte { file_test_echo_proto_rawDescOnce.Do(func() { - file_test_echo_proto_rawDescData = protoimpl.X.CompressGZIP(file_test_echo_proto_rawDescData) + file_test_echo_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_test_echo_proto_rawDesc), len(file_test_echo_proto_rawDesc))) }) return file_test_echo_proto_rawDescData } var file_test_echo_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_test_echo_proto_goTypes = []interface{}{ +var file_test_echo_proto_goTypes = []any{ (*EchoRequest)(nil), // 0: test.EchoRequest (*EchoResponse)(nil), // 1: test.EchoResponse } @@ -162,37 +152,11 @@ func file_test_echo_proto_init() { if File_test_echo_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_test_echo_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EchoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_test_echo_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EchoResponse); 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_test_echo_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_test_echo_proto_rawDesc), len(file_test_echo_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -203,7 +167,6 @@ func file_test_echo_proto_init() { MessageInfos: file_test_echo_proto_msgTypes, }.Build() File_test_echo_proto = out.File - file_test_echo_proto_rawDesc = nil file_test_echo_proto_goTypes = nil file_test_echo_proto_depIdxs = nil } diff --git a/private/proto/test/somehostservice.pb.go b/private/proto/test/somehostservice.pb.go index 3aae367..e40e70c 100644 --- a/private/proto/test/somehostservice.pb.go +++ b/private/proto/test/somehostservice.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: test/somehostservice.proto package test @@ -13,6 +13,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" + unsafe "unsafe" ) const ( @@ -24,23 +25,13 @@ const ( var File_test_somehostservice_proto protoreflect.FileDescriptor -var file_test_somehostservice_proto_rawDesc = []byte{ - 0x0a, 0x1a, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x73, 0x6f, 0x6d, 0x65, 0x68, 0x6f, 0x73, 0x74, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x74, 0x65, - 0x73, 0x74, 0x1a, 0x0f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x32, 0x4b, 0x0a, 0x0f, 0x53, 0x6f, 0x6d, 0x65, 0x48, 0x6f, 0x73, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x0f, 0x48, 0x6f, 0x73, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x11, 0x2e, 0x74, 0x65, 0x73, 0x74, - 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x74, - 0x65, 0x73, 0x74, 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, - 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} +const file_test_somehostservice_proto_rawDesc = "" + + "\n" + + "\x1atest/somehostservice.proto\x12\x04test\x1a\x0ftest/echo.proto2K\n" + + "\x0fSomeHostService\x128\n" + + "\x0fHostServiceEcho\x12\x11.test.EchoRequest\x1a\x12.test.EchoResponseB7Z5github.com/spiffe/spire-plugin-sdk/private/proto/testb\x06proto3" -var file_test_somehostservice_proto_goTypes = []interface{}{ +var file_test_somehostservice_proto_goTypes = []any{ (*EchoRequest)(nil), // 0: test.EchoRequest (*EchoResponse)(nil), // 1: test.EchoResponse } @@ -64,7 +55,7 @@ func file_test_somehostservice_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_test_somehostservice_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_test_somehostservice_proto_rawDesc), len(file_test_somehostservice_proto_rawDesc)), NumEnums: 0, NumMessages: 0, NumExtensions: 0, @@ -74,7 +65,6 @@ func file_test_somehostservice_proto_init() { DependencyIndexes: file_test_somehostservice_proto_depIdxs, }.Build() File_test_somehostservice_proto = out.File - file_test_somehostservice_proto_rawDesc = nil file_test_somehostservice_proto_goTypes = nil file_test_somehostservice_proto_depIdxs = nil } diff --git a/private/proto/test/somehostservice_grpc.pb.go b/private/proto/test/somehostservice_grpc.pb.go index 4b5ffa3..73242b2 100644 --- a/private/proto/test/somehostservice_grpc.pb.go +++ b/private/proto/test/somehostservice_grpc.pb.go @@ -1,4 +1,11 @@ +// This file defines simple interfaces used for testing. These interfaces are +// only intended to be used internally and by SPIRE. See /private/README.md. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: test/somehostservice.proto package test @@ -11,8 +18,12 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + SomeHostService_HostServiceEcho_FullMethodName = "/test.SomeHostService/HostServiceEcho" +) // SomeHostServiceClient is the client API for SomeHostService service. // @@ -30,8 +41,9 @@ func NewSomeHostServiceClient(cc grpc.ClientConnInterface) SomeHostServiceClient } func (c *someHostServiceClient) HostServiceEcho(ctx context.Context, in *EchoRequest, opts ...grpc.CallOption) (*EchoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(EchoResponse) - err := c.cc.Invoke(ctx, "/test.SomeHostService/HostServiceEcho", in, out, opts...) + err := c.cc.Invoke(ctx, SomeHostService_HostServiceEcho_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -40,20 +52,24 @@ func (c *someHostServiceClient) HostServiceEcho(ctx context.Context, in *EchoReq // SomeHostServiceServer is the server API for SomeHostService service. // All implementations must embed UnimplementedSomeHostServiceServer -// for forward compatibility +// for forward compatibility. type SomeHostServiceServer interface { HostServiceEcho(context.Context, *EchoRequest) (*EchoResponse, error) mustEmbedUnimplementedSomeHostServiceServer() } -// UnimplementedSomeHostServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSomeHostServiceServer struct { -} +// UnimplementedSomeHostServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSomeHostServiceServer struct{} func (UnimplementedSomeHostServiceServer) HostServiceEcho(context.Context, *EchoRequest) (*EchoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method HostServiceEcho not implemented") } func (UnimplementedSomeHostServiceServer) mustEmbedUnimplementedSomeHostServiceServer() {} +func (UnimplementedSomeHostServiceServer) testEmbeddedByValue() {} // UnsafeSomeHostServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to SomeHostServiceServer will @@ -63,6 +79,13 @@ type UnsafeSomeHostServiceServer interface { } func RegisterSomeHostServiceServer(s grpc.ServiceRegistrar, srv SomeHostServiceServer) { + // If the following call pancis, it indicates UnimplementedSomeHostServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&SomeHostService_ServiceDesc, srv) } @@ -76,7 +99,7 @@ func _SomeHostService_HostServiceEcho_Handler(srv interface{}, ctx context.Conte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/test.SomeHostService/HostServiceEcho", + FullMethod: SomeHostService_HostServiceEcho_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SomeHostServiceServer).HostServiceEcho(ctx, req.(*EchoRequest)) diff --git a/private/proto/test/someplugin.pb.go b/private/proto/test/someplugin.pb.go index e47d196..9acb747 100644 --- a/private/proto/test/someplugin.pb.go +++ b/private/proto/test/someplugin.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: test/someplugin.proto package test @@ -13,6 +13,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" + unsafe "unsafe" ) const ( @@ -24,22 +25,15 @@ const ( var File_test_someplugin_proto protoreflect.FileDescriptor -var file_test_someplugin_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x73, 0x6f, 0x6d, 0x65, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x74, - 0x65, 0x73, 0x74, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x41, - 0x0a, 0x0a, 0x53, 0x6f, 0x6d, 0x65, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, - 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x11, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} +const file_test_someplugin_proto_rawDesc = "" + + "\n" + + "\x15test/someplugin.proto\x12\x04test\x1a\x0ftest/echo.proto2A\n" + + "\n" + + "SomePlugin\x123\n" + + "\n" + + "PluginEcho\x12\x11.test.EchoRequest\x1a\x12.test.EchoResponseB7Z5github.com/spiffe/spire-plugin-sdk/private/proto/testb\x06proto3" -var file_test_someplugin_proto_goTypes = []interface{}{ +var file_test_someplugin_proto_goTypes = []any{ (*EchoRequest)(nil), // 0: test.EchoRequest (*EchoResponse)(nil), // 1: test.EchoResponse } @@ -63,7 +57,7 @@ func file_test_someplugin_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_test_someplugin_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_test_someplugin_proto_rawDesc), len(file_test_someplugin_proto_rawDesc)), NumEnums: 0, NumMessages: 0, NumExtensions: 0, @@ -73,7 +67,6 @@ func file_test_someplugin_proto_init() { DependencyIndexes: file_test_someplugin_proto_depIdxs, }.Build() File_test_someplugin_proto = out.File - file_test_someplugin_proto_rawDesc = nil file_test_someplugin_proto_goTypes = nil file_test_someplugin_proto_depIdxs = nil } diff --git a/private/proto/test/someplugin_grpc.pb.go b/private/proto/test/someplugin_grpc.pb.go index b624bf0..d3e851a 100644 --- a/private/proto/test/someplugin_grpc.pb.go +++ b/private/proto/test/someplugin_grpc.pb.go @@ -1,4 +1,11 @@ +// This file defines simple interfaces used for testing. These interfaces are +// only intended to be used internally and by SPIRE. See /private/README.md. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: test/someplugin.proto package test @@ -11,8 +18,12 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + SomePlugin_PluginEcho_FullMethodName = "/test.SomePlugin/PluginEcho" +) // SomePluginClient is the client API for SomePlugin service. // @@ -30,8 +41,9 @@ func NewSomePluginClient(cc grpc.ClientConnInterface) SomePluginClient { } func (c *somePluginClient) PluginEcho(ctx context.Context, in *EchoRequest, opts ...grpc.CallOption) (*EchoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(EchoResponse) - err := c.cc.Invoke(ctx, "/test.SomePlugin/PluginEcho", in, out, opts...) + err := c.cc.Invoke(ctx, SomePlugin_PluginEcho_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -40,20 +52,24 @@ func (c *somePluginClient) PluginEcho(ctx context.Context, in *EchoRequest, opts // SomePluginServer is the server API for SomePlugin service. // All implementations must embed UnimplementedSomePluginServer -// for forward compatibility +// for forward compatibility. type SomePluginServer interface { PluginEcho(context.Context, *EchoRequest) (*EchoResponse, error) mustEmbedUnimplementedSomePluginServer() } -// UnimplementedSomePluginServer must be embedded to have forward compatible implementations. -type UnimplementedSomePluginServer struct { -} +// UnimplementedSomePluginServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSomePluginServer struct{} func (UnimplementedSomePluginServer) PluginEcho(context.Context, *EchoRequest) (*EchoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PluginEcho not implemented") } func (UnimplementedSomePluginServer) mustEmbedUnimplementedSomePluginServer() {} +func (UnimplementedSomePluginServer) testEmbeddedByValue() {} // UnsafeSomePluginServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to SomePluginServer will @@ -63,6 +79,13 @@ type UnsafeSomePluginServer interface { } func RegisterSomePluginServer(s grpc.ServiceRegistrar, srv SomePluginServer) { + // If the following call pancis, it indicates UnimplementedSomePluginServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&SomePlugin_ServiceDesc, srv) } @@ -76,7 +99,7 @@ func _SomePlugin_PluginEcho_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/test.SomePlugin/PluginEcho", + FullMethod: SomePlugin_PluginEcho_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SomePluginServer).PluginEcho(ctx, req.(*EchoRequest)) diff --git a/private/proto/test/someservice.pb.go b/private/proto/test/someservice.pb.go index c603eb3..295aebd 100644 --- a/private/proto/test/someservice.pb.go +++ b/private/proto/test/someservice.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: test/someservice.proto package test @@ -13,6 +13,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" + unsafe "unsafe" ) const ( @@ -24,22 +25,13 @@ const ( var File_test_someservice_proto protoreflect.FileDescriptor -var file_test_someservice_proto_rawDesc = []byte{ - 0x0a, 0x16, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x73, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x74, 0x65, 0x73, 0x74, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, - 0x43, 0x0a, 0x0b, 0x53, 0x6f, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x34, - 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x11, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x12, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_test_someservice_proto_rawDesc = "" + + "\n" + + "\x16test/someservice.proto\x12\x04test\x1a\x0ftest/echo.proto2C\n" + + "\vSomeService\x124\n" + + "\vServiceEcho\x12\x11.test.EchoRequest\x1a\x12.test.EchoResponseB7Z5github.com/spiffe/spire-plugin-sdk/private/proto/testb\x06proto3" -var file_test_someservice_proto_goTypes = []interface{}{ +var file_test_someservice_proto_goTypes = []any{ (*EchoRequest)(nil), // 0: test.EchoRequest (*EchoResponse)(nil), // 1: test.EchoResponse } @@ -63,7 +55,7 @@ func file_test_someservice_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_test_someservice_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_test_someservice_proto_rawDesc), len(file_test_someservice_proto_rawDesc)), NumEnums: 0, NumMessages: 0, NumExtensions: 0, @@ -73,7 +65,6 @@ func file_test_someservice_proto_init() { DependencyIndexes: file_test_someservice_proto_depIdxs, }.Build() File_test_someservice_proto = out.File - file_test_someservice_proto_rawDesc = nil file_test_someservice_proto_goTypes = nil file_test_someservice_proto_depIdxs = nil } diff --git a/private/proto/test/someservice_grpc.pb.go b/private/proto/test/someservice_grpc.pb.go index a7ae34c..2f63d7d 100644 --- a/private/proto/test/someservice_grpc.pb.go +++ b/private/proto/test/someservice_grpc.pb.go @@ -1,4 +1,11 @@ +// This file defines simple interfaces used for testing. These interfaces are +// only intended to be used internally and by SPIRE. See /private/README.md. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: test/someservice.proto package test @@ -11,8 +18,12 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + SomeService_ServiceEcho_FullMethodName = "/test.SomeService/ServiceEcho" +) // SomeServiceClient is the client API for SomeService service. // @@ -30,8 +41,9 @@ func NewSomeServiceClient(cc grpc.ClientConnInterface) SomeServiceClient { } func (c *someServiceClient) ServiceEcho(ctx context.Context, in *EchoRequest, opts ...grpc.CallOption) (*EchoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(EchoResponse) - err := c.cc.Invoke(ctx, "/test.SomeService/ServiceEcho", in, out, opts...) + err := c.cc.Invoke(ctx, SomeService_ServiceEcho_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -40,20 +52,24 @@ func (c *someServiceClient) ServiceEcho(ctx context.Context, in *EchoRequest, op // SomeServiceServer is the server API for SomeService service. // All implementations must embed UnimplementedSomeServiceServer -// for forward compatibility +// for forward compatibility. type SomeServiceServer interface { ServiceEcho(context.Context, *EchoRequest) (*EchoResponse, error) mustEmbedUnimplementedSomeServiceServer() } -// UnimplementedSomeServiceServer must be embedded to have forward compatible implementations. -type UnimplementedSomeServiceServer struct { -} +// UnimplementedSomeServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSomeServiceServer struct{} func (UnimplementedSomeServiceServer) ServiceEcho(context.Context, *EchoRequest) (*EchoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ServiceEcho not implemented") } func (UnimplementedSomeServiceServer) mustEmbedUnimplementedSomeServiceServer() {} +func (UnimplementedSomeServiceServer) testEmbeddedByValue() {} // UnsafeSomeServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to SomeServiceServer will @@ -63,6 +79,13 @@ type UnsafeSomeServiceServer interface { } func RegisterSomeServiceServer(s grpc.ServiceRegistrar, srv SomeServiceServer) { + // If the following call pancis, it indicates UnimplementedSomeServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&SomeService_ServiceDesc, srv) } @@ -76,7 +99,7 @@ func _SomeService_ServiceEcho_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/test.SomeService/ServiceEcho", + FullMethod: SomeService_ServiceEcho_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SomeServiceServer).ServiceEcho(ctx, req.(*EchoRequest)) diff --git a/proto/spire/hostservice/common/metrics/v1/metrics.pb.go b/proto/spire/hostservice/common/metrics/v1/metrics.pb.go index 993d4b7..daf5d7f 100644 --- a/proto/spire/hostservice/common/metrics/v1/metrics.pb.go +++ b/proto/spire/hostservice/common/metrics/v1/metrics.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/hostservice/common/metrics/v1/metrics.proto package metricsv1 @@ -12,6 +12,7 @@ import ( emptypb "google.golang.org/protobuf/types/known/emptypb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,25 +23,22 @@ const ( ) type SetGaugeRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The gauge key. Key []string `protobuf:"bytes,1,rep,name=key,proto3" json:"key,omitempty"` // Required. The gauge value. Val float32 `protobuf:"fixed32,2,opt,name=val,proto3" json:"val,omitempty"` // Optional. One or more labels for the gauge. - Labels []*Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` + Labels []*Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SetGaugeRequest) Reset() { *x = SetGaugeRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SetGaugeRequest) String() string { @@ -51,7 +49,7 @@ func (*SetGaugeRequest) ProtoMessage() {} func (x *SetGaugeRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -88,23 +86,20 @@ func (x *SetGaugeRequest) GetLabels() []*Label { } type EmitKeyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The key key. Key []string `protobuf:"bytes,1,rep,name=key,proto3" json:"key,omitempty"` // Required. The key value. - Val float32 `protobuf:"fixed32,2,opt,name=val,proto3" json:"val,omitempty"` + Val float32 `protobuf:"fixed32,2,opt,name=val,proto3" json:"val,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EmitKeyRequest) Reset() { *x = EmitKeyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EmitKeyRequest) String() string { @@ -115,7 +110,7 @@ func (*EmitKeyRequest) ProtoMessage() {} func (x *EmitKeyRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -145,25 +140,22 @@ func (x *EmitKeyRequest) GetVal() float32 { } type IncrCounterRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The counter key. Key []string `protobuf:"bytes,1,rep,name=key,proto3" json:"key,omitempty"` // Required. The counter value. Val float32 `protobuf:"fixed32,2,opt,name=val,proto3" json:"val,omitempty"` // Optional. One or more labels for the counter. - Labels []*Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` + Labels []*Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *IncrCounterRequest) Reset() { *x = IncrCounterRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *IncrCounterRequest) String() string { @@ -174,7 +166,7 @@ func (*IncrCounterRequest) ProtoMessage() {} func (x *IncrCounterRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -211,25 +203,22 @@ func (x *IncrCounterRequest) GetLabels() []*Label { } type AddSampleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The sample key. Key []string `protobuf:"bytes,1,rep,name=key,proto3" json:"key,omitempty"` // Required. The sample value. Val float32 `protobuf:"fixed32,2,opt,name=val,proto3" json:"val,omitempty"` // Optional. One or more labels for the sample. - Labels []*Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` + Labels []*Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddSampleRequest) Reset() { *x = AddSampleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AddSampleRequest) String() string { @@ -240,7 +229,7 @@ func (*AddSampleRequest) ProtoMessage() {} func (x *AddSampleRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -277,25 +266,22 @@ func (x *AddSampleRequest) GetLabels() []*Label { } type MeasureSinceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The sample key for the time measurement. Key []string `protobuf:"bytes,1,rep,name=key,proto3" json:"key,omitempty"` // Required. Unix time in nanoseconds. Time int64 `protobuf:"varint,2,opt,name=time,proto3" json:"time,omitempty"` // Optional. One or more labels for the sample. - Labels []*Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` + Labels []*Label `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MeasureSinceRequest) Reset() { *x = MeasureSinceRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MeasureSinceRequest) String() string { @@ -306,7 +292,7 @@ func (*MeasureSinceRequest) ProtoMessage() {} func (x *MeasureSinceRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -343,23 +329,20 @@ func (x *MeasureSinceRequest) GetLabels() []*Label { } type Label struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The name of the label. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Required. The value of the label. - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Label) Reset() { *x = Label{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Label) String() string { @@ -370,7 +353,7 @@ func (*Label) ProtoMessage() {} func (x *Label) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -401,105 +384,52 @@ func (x *Label) GetValue() string { var File_spire_hostservice_common_metrics_v1_metrics_proto protoreflect.FileDescriptor -var file_spire_hostservice_common_metrics_v1_metrics_proto_rawDesc = []byte{ - 0x0a, 0x31, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 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, 0x22, 0x79, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x47, 0x61, 0x75, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x42, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x22, 0x34, 0x0a, 0x0e, 0x45, 0x6d, 0x69, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x22, 0x7c, 0x0a, 0x12, 0x49, 0x6e, 0x63, 0x72, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x76, 0x61, 0x6c, - 0x12, 0x42, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x22, 0x7a, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x53, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x42, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x22, 0x7f, 0x0a, 0x13, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x42, 0x0a, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x22, 0x31, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x32, 0xd9, 0x03, 0x0a, 0x07, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x12, 0x58, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x47, 0x61, 0x75, 0x67, 0x65, 0x12, 0x34, 0x2e, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x61, 0x75, 0x67, 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, 0x12, 0x56, 0x0a, 0x07, 0x45, 0x6d, - 0x69, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x33, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, - 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x69, 0x74, - 0x4b, 0x65, 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, 0x12, 0x5e, 0x0a, 0x0b, 0x49, 0x6e, 0x63, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x12, 0x37, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x43, 0x6f, 0x75, 0x6e, - 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, 0x12, 0x5a, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, - 0x35, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x53, 0x61, 0x6d, 0x70, 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, 0x12, 0x60, - 0x0a, 0x0c, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x38, - 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x53, 0x69, 0x6e, 0x63, - 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, - 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, - 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, - 0x72, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2f, 0x76, 0x31, - 0x3b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} +const file_spire_hostservice_common_metrics_v1_metrics_proto_rawDesc = "" + + "\n" + + "1spire/hostservice/common/metrics/v1/metrics.proto\x12#spire.hostservice.common.metrics.v1\x1a\x1bgoogle/protobuf/empty.proto\"y\n" + + "\x0fSetGaugeRequest\x12\x10\n" + + "\x03key\x18\x01 \x03(\tR\x03key\x12\x10\n" + + "\x03val\x18\x02 \x01(\x02R\x03val\x12B\n" + + "\x06labels\x18\x03 \x03(\v2*.spire.hostservice.common.metrics.v1.LabelR\x06labels\"4\n" + + "\x0eEmitKeyRequest\x12\x10\n" + + "\x03key\x18\x01 \x03(\tR\x03key\x12\x10\n" + + "\x03val\x18\x02 \x01(\x02R\x03val\"|\n" + + "\x12IncrCounterRequest\x12\x10\n" + + "\x03key\x18\x01 \x03(\tR\x03key\x12\x10\n" + + "\x03val\x18\x02 \x01(\x02R\x03val\x12B\n" + + "\x06labels\x18\x03 \x03(\v2*.spire.hostservice.common.metrics.v1.LabelR\x06labels\"z\n" + + "\x10AddSampleRequest\x12\x10\n" + + "\x03key\x18\x01 \x03(\tR\x03key\x12\x10\n" + + "\x03val\x18\x02 \x01(\x02R\x03val\x12B\n" + + "\x06labels\x18\x03 \x03(\v2*.spire.hostservice.common.metrics.v1.LabelR\x06labels\"\x7f\n" + + "\x13MeasureSinceRequest\x12\x10\n" + + "\x03key\x18\x01 \x03(\tR\x03key\x12\x12\n" + + "\x04time\x18\x02 \x01(\x03R\x04time\x12B\n" + + "\x06labels\x18\x03 \x03(\v2*.spire.hostservice.common.metrics.v1.LabelR\x06labels\"1\n" + + "\x05Label\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value2\xd9\x03\n" + + "\aMetrics\x12X\n" + + "\bSetGauge\x124.spire.hostservice.common.metrics.v1.SetGaugeRequest\x1a\x16.google.protobuf.Empty\x12V\n" + + "\aEmitKey\x123.spire.hostservice.common.metrics.v1.EmitKeyRequest\x1a\x16.google.protobuf.Empty\x12^\n" + + "\vIncrCounter\x127.spire.hostservice.common.metrics.v1.IncrCounterRequest\x1a\x16.google.protobuf.Empty\x12Z\n" + + "\tAddSample\x125.spire.hostservice.common.metrics.v1.AddSampleRequest\x1a\x16.google.protobuf.Empty\x12`\n" + + "\fMeasureSince\x128.spire.hostservice.common.metrics.v1.MeasureSinceRequest\x1a\x16.google.protobuf.EmptyBXZVgithub.com/spiffe/spire-plugin-sdk/proto/spire/hostservice/common/metrics/v1;metricsv1b\x06proto3" var ( file_spire_hostservice_common_metrics_v1_metrics_proto_rawDescOnce sync.Once - file_spire_hostservice_common_metrics_v1_metrics_proto_rawDescData = file_spire_hostservice_common_metrics_v1_metrics_proto_rawDesc + file_spire_hostservice_common_metrics_v1_metrics_proto_rawDescData []byte ) func file_spire_hostservice_common_metrics_v1_metrics_proto_rawDescGZIP() []byte { file_spire_hostservice_common_metrics_v1_metrics_proto_rawDescOnce.Do(func() { - file_spire_hostservice_common_metrics_v1_metrics_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_hostservice_common_metrics_v1_metrics_proto_rawDescData) + file_spire_hostservice_common_metrics_v1_metrics_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_hostservice_common_metrics_v1_metrics_proto_rawDesc), len(file_spire_hostservice_common_metrics_v1_metrics_proto_rawDesc))) }) return file_spire_hostservice_common_metrics_v1_metrics_proto_rawDescData } var file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_spire_hostservice_common_metrics_v1_metrics_proto_goTypes = []interface{}{ +var file_spire_hostservice_common_metrics_v1_metrics_proto_goTypes = []any{ (*SetGaugeRequest)(nil), // 0: spire.hostservice.common.metrics.v1.SetGaugeRequest (*EmitKeyRequest)(nil), // 1: spire.hostservice.common.metrics.v1.EmitKeyRequest (*IncrCounterRequest)(nil), // 2: spire.hostservice.common.metrics.v1.IncrCounterRequest @@ -535,85 +465,11 @@ func file_spire_hostservice_common_metrics_v1_metrics_proto_init() { if File_spire_hostservice_common_metrics_v1_metrics_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetGaugeRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EmitKeyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IncrCounterRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddSampleRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeasureSinceRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Label); 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_spire_hostservice_common_metrics_v1_metrics_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_hostservice_common_metrics_v1_metrics_proto_rawDesc), len(file_spire_hostservice_common_metrics_v1_metrics_proto_rawDesc)), NumEnums: 0, NumMessages: 6, NumExtensions: 0, @@ -624,7 +480,6 @@ func file_spire_hostservice_common_metrics_v1_metrics_proto_init() { MessageInfos: file_spire_hostservice_common_metrics_v1_metrics_proto_msgTypes, }.Build() File_spire_hostservice_common_metrics_v1_metrics_proto = out.File - file_spire_hostservice_common_metrics_v1_metrics_proto_rawDesc = nil file_spire_hostservice_common_metrics_v1_metrics_proto_goTypes = nil file_spire_hostservice_common_metrics_v1_metrics_proto_depIdxs = nil } diff --git a/proto/spire/hostservice/common/metrics/v1/metrics_grpc.pb.go b/proto/spire/hostservice/common/metrics/v1/metrics_grpc.pb.go index c66261a..6f32cbc 100644 --- a/proto/spire/hostservice/common/metrics/v1/metrics_grpc.pb.go +++ b/proto/spire/hostservice/common/metrics/v1/metrics_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/hostservice/common/metrics/v1/metrics.proto package metricsv1 @@ -12,8 +16,16 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Metrics_SetGauge_FullMethodName = "/spire.hostservice.common.metrics.v1.Metrics/SetGauge" + Metrics_EmitKey_FullMethodName = "/spire.hostservice.common.metrics.v1.Metrics/EmitKey" + Metrics_IncrCounter_FullMethodName = "/spire.hostservice.common.metrics.v1.Metrics/IncrCounter" + Metrics_AddSample_FullMethodName = "/spire.hostservice.common.metrics.v1.Metrics/AddSample" + Metrics_MeasureSince_FullMethodName = "/spire.hostservice.common.metrics.v1.Metrics/MeasureSince" +) // MetricsClient is the client API for Metrics service. // @@ -42,8 +54,9 @@ func NewMetricsClient(cc grpc.ClientConnInterface) MetricsClient { } func (c *metricsClient) SetGauge(ctx context.Context, in *SetGaugeRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/spire.hostservice.common.metrics.v1.Metrics/SetGauge", in, out, opts...) + err := c.cc.Invoke(ctx, Metrics_SetGauge_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -51,8 +64,9 @@ func (c *metricsClient) SetGauge(ctx context.Context, in *SetGaugeRequest, opts } func (c *metricsClient) EmitKey(ctx context.Context, in *EmitKeyRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/spire.hostservice.common.metrics.v1.Metrics/EmitKey", in, out, opts...) + err := c.cc.Invoke(ctx, Metrics_EmitKey_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -60,8 +74,9 @@ func (c *metricsClient) EmitKey(ctx context.Context, in *EmitKeyRequest, opts .. } func (c *metricsClient) IncrCounter(ctx context.Context, in *IncrCounterRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/spire.hostservice.common.metrics.v1.Metrics/IncrCounter", in, out, opts...) + err := c.cc.Invoke(ctx, Metrics_IncrCounter_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -69,8 +84,9 @@ func (c *metricsClient) IncrCounter(ctx context.Context, in *IncrCounterRequest, } func (c *metricsClient) AddSample(ctx context.Context, in *AddSampleRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/spire.hostservice.common.metrics.v1.Metrics/AddSample", in, out, opts...) + err := c.cc.Invoke(ctx, Metrics_AddSample_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -78,8 +94,9 @@ func (c *metricsClient) AddSample(ctx context.Context, in *AddSampleRequest, opt } func (c *metricsClient) MeasureSince(ctx context.Context, in *MeasureSinceRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/spire.hostservice.common.metrics.v1.Metrics/MeasureSince", in, out, opts...) + err := c.cc.Invoke(ctx, Metrics_MeasureSince_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -88,7 +105,7 @@ func (c *metricsClient) MeasureSince(ctx context.Context, in *MeasureSinceReques // MetricsServer is the server API for Metrics service. // All implementations must embed UnimplementedMetricsServer -// for forward compatibility +// for forward compatibility. type MetricsServer interface { // Sets a gauge to the specified value with zero or more labels. SetGauge(context.Context, *SetGaugeRequest) (*emptypb.Empty, error) @@ -105,9 +122,12 @@ type MetricsServer interface { mustEmbedUnimplementedMetricsServer() } -// UnimplementedMetricsServer must be embedded to have forward compatible implementations. -type UnimplementedMetricsServer struct { -} +// UnimplementedMetricsServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedMetricsServer struct{} func (UnimplementedMetricsServer) SetGauge(context.Context, *SetGaugeRequest) (*emptypb.Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method SetGauge not implemented") @@ -125,6 +145,7 @@ func (UnimplementedMetricsServer) MeasureSince(context.Context, *MeasureSinceReq return nil, status.Errorf(codes.Unimplemented, "method MeasureSince not implemented") } func (UnimplementedMetricsServer) mustEmbedUnimplementedMetricsServer() {} +func (UnimplementedMetricsServer) testEmbeddedByValue() {} // UnsafeMetricsServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to MetricsServer will @@ -134,6 +155,13 @@ type UnsafeMetricsServer interface { } func RegisterMetricsServer(s grpc.ServiceRegistrar, srv MetricsServer) { + // If the following call pancis, it indicates UnimplementedMetricsServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&Metrics_ServiceDesc, srv) } @@ -147,7 +175,7 @@ func _Metrics_SetGauge_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.hostservice.common.metrics.v1.Metrics/SetGauge", + FullMethod: Metrics_SetGauge_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MetricsServer).SetGauge(ctx, req.(*SetGaugeRequest)) @@ -165,7 +193,7 @@ func _Metrics_EmitKey_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.hostservice.common.metrics.v1.Metrics/EmitKey", + FullMethod: Metrics_EmitKey_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MetricsServer).EmitKey(ctx, req.(*EmitKeyRequest)) @@ -183,7 +211,7 @@ func _Metrics_IncrCounter_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.hostservice.common.metrics.v1.Metrics/IncrCounter", + FullMethod: Metrics_IncrCounter_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MetricsServer).IncrCounter(ctx, req.(*IncrCounterRequest)) @@ -201,7 +229,7 @@ func _Metrics_AddSample_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.hostservice.common.metrics.v1.Metrics/AddSample", + FullMethod: Metrics_AddSample_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MetricsServer).AddSample(ctx, req.(*AddSampleRequest)) @@ -219,7 +247,7 @@ func _Metrics_MeasureSince_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.hostservice.common.metrics.v1.Metrics/MeasureSince", + FullMethod: Metrics_MeasureSince_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MetricsServer).MeasureSince(ctx, req.(*MeasureSinceRequest)) diff --git a/proto/spire/hostservice/server/agentstore/v1/agentstore.pb.go b/proto/spire/hostservice/server/agentstore/v1/agentstore.pb.go index f0b78ca..476b993 100644 --- a/proto/spire/hostservice/server/agentstore/v1/agentstore.pb.go +++ b/proto/spire/hostservice/server/agentstore/v1/agentstore.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/hostservice/server/agentstore/v1/agentstore.proto package agentstorev1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -21,21 +22,18 @@ const ( ) type GetAgentInfoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The ID of the agent to get information for. - AgentId string `protobuf:"bytes,1,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"` + AgentId string `protobuf:"bytes,1,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetAgentInfoRequest) Reset() { *x = GetAgentInfoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAgentInfoRequest) String() string { @@ -46,7 +44,7 @@ func (*GetAgentInfoRequest) ProtoMessage() {} func (x *GetAgentInfoRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -69,21 +67,18 @@ func (x *GetAgentInfoRequest) GetAgentId() string { } type GetAgentInfoResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The agent information. - Info *AgentInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` + Info *AgentInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetAgentInfoResponse) Reset() { *x = GetAgentInfoResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetAgentInfoResponse) String() string { @@ -94,7 +89,7 @@ func (*GetAgentInfoResponse) ProtoMessage() {} func (x *GetAgentInfoResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -117,21 +112,18 @@ func (x *GetAgentInfoResponse) GetInfo() *AgentInfo { } type AgentInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The ID of the agent. - AgentId string `protobuf:"bytes,1,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"` + AgentId string `protobuf:"bytes,1,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgentInfo) Reset() { *x = AgentInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AgentInfo) String() string { @@ -142,7 +134,7 @@ func (*AgentInfo) ProtoMessage() {} func (x *AgentInfo) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -166,57 +158,33 @@ func (x *AgentInfo) GetAgentId() string { var File_spire_hostservice_server_agentstore_v1_agentstore_proto protoreflect.FileDescriptor -var file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDesc = []byte{ - 0x0a, 0x37, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x26, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, - 0x31, 0x22, 0x30, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x04, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, - 0x66, 0x6f, 0x22, 0x26, 0x0a, 0x09, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x32, 0x98, 0x01, 0x0a, 0x0a, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x0c, 0x47, 0x65, - 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x2e, 0x73, 0x70, 0x69, - 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x5e, 0x5a, 0x5c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDesc = "" + + "\n" + + "7spire/hostservice/server/agentstore/v1/agentstore.proto\x12&spire.hostservice.server.agentstore.v1\"0\n" + + "\x13GetAgentInfoRequest\x12\x19\n" + + "\bagent_id\x18\x01 \x01(\tR\aagentId\"]\n" + + "\x14GetAgentInfoResponse\x12E\n" + + "\x04info\x18\x01 \x01(\v21.spire.hostservice.server.agentstore.v1.AgentInfoR\x04info\"&\n" + + "\tAgentInfo\x12\x19\n" + + "\bagent_id\x18\x01 \x01(\tR\aagentId2\x98\x01\n" + + "\n" + + "AgentStore\x12\x89\x01\n" + + "\fGetAgentInfo\x12;.spire.hostservice.server.agentstore.v1.GetAgentInfoRequest\x1a<.spire.hostservice.server.agentstore.v1.GetAgentInfoResponseB^Z\\github.com/spiffe/spire-plugin-sdk/proto/spire/hostservice/server/agentstore/v1;agentstorev1b\x06proto3" var ( file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDescOnce sync.Once - file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDescData = file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDesc + file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDescData []byte ) func file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDescGZIP() []byte { file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDescOnce.Do(func() { - file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDescData) + file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDesc), len(file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDesc))) }) return file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDescData } var file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_spire_hostservice_server_agentstore_v1_agentstore_proto_goTypes = []interface{}{ +var file_spire_hostservice_server_agentstore_v1_agentstore_proto_goTypes = []any{ (*GetAgentInfoRequest)(nil), // 0: spire.hostservice.server.agentstore.v1.GetAgentInfoRequest (*GetAgentInfoResponse)(nil), // 1: spire.hostservice.server.agentstore.v1.GetAgentInfoResponse (*AgentInfo)(nil), // 2: spire.hostservice.server.agentstore.v1.AgentInfo @@ -237,49 +205,11 @@ func file_spire_hostservice_server_agentstore_v1_agentstore_proto_init() { if File_spire_hostservice_server_agentstore_v1_agentstore_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAgentInfoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAgentInfoResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AgentInfo); 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_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDesc), len(file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDesc)), NumEnums: 0, NumMessages: 3, NumExtensions: 0, @@ -290,7 +220,6 @@ func file_spire_hostservice_server_agentstore_v1_agentstore_proto_init() { MessageInfos: file_spire_hostservice_server_agentstore_v1_agentstore_proto_msgTypes, }.Build() File_spire_hostservice_server_agentstore_v1_agentstore_proto = out.File - file_spire_hostservice_server_agentstore_v1_agentstore_proto_rawDesc = nil file_spire_hostservice_server_agentstore_v1_agentstore_proto_goTypes = nil file_spire_hostservice_server_agentstore_v1_agentstore_proto_depIdxs = nil } diff --git a/proto/spire/hostservice/server/agentstore/v1/agentstore_grpc.pb.go b/proto/spire/hostservice/server/agentstore/v1/agentstore_grpc.pb.go index 9ff9148..01e3208 100644 --- a/proto/spire/hostservice/server/agentstore/v1/agentstore_grpc.pb.go +++ b/proto/spire/hostservice/server/agentstore/v1/agentstore_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/hostservice/server/agentstore/v1/agentstore.proto package agentstorev1 @@ -11,8 +15,12 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + AgentStore_GetAgentInfo_FullMethodName = "/spire.hostservice.server.agentstore.v1.AgentStore/GetAgentInfo" +) // AgentStoreClient is the client API for AgentStore service. // @@ -34,8 +42,9 @@ func NewAgentStoreClient(cc grpc.ClientConnInterface) AgentStoreClient { } func (c *agentStoreClient) GetAgentInfo(ctx context.Context, in *GetAgentInfoRequest, opts ...grpc.CallOption) (*GetAgentInfoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetAgentInfoResponse) - err := c.cc.Invoke(ctx, "/spire.hostservice.server.agentstore.v1.AgentStore/GetAgentInfo", in, out, opts...) + err := c.cc.Invoke(ctx, AgentStore_GetAgentInfo_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -44,7 +53,7 @@ func (c *agentStoreClient) GetAgentInfo(ctx context.Context, in *GetAgentInfoReq // AgentStoreServer is the server API for AgentStore service. // All implementations must embed UnimplementedAgentStoreServer -// for forward compatibility +// for forward compatibility. type AgentStoreServer interface { // Gets the information associated with the given agent ID. If the given // agent is not attested, NOT_FOUND is returned. This RPC is currently @@ -54,14 +63,18 @@ type AgentStoreServer interface { mustEmbedUnimplementedAgentStoreServer() } -// UnimplementedAgentStoreServer must be embedded to have forward compatible implementations. -type UnimplementedAgentStoreServer struct { -} +// UnimplementedAgentStoreServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAgentStoreServer struct{} func (UnimplementedAgentStoreServer) GetAgentInfo(context.Context, *GetAgentInfoRequest) (*GetAgentInfoResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetAgentInfo not implemented") } func (UnimplementedAgentStoreServer) mustEmbedUnimplementedAgentStoreServer() {} +func (UnimplementedAgentStoreServer) testEmbeddedByValue() {} // UnsafeAgentStoreServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to AgentStoreServer will @@ -71,6 +84,13 @@ type UnsafeAgentStoreServer interface { } func RegisterAgentStoreServer(s grpc.ServiceRegistrar, srv AgentStoreServer) { + // If the following call pancis, it indicates UnimplementedAgentStoreServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&AgentStore_ServiceDesc, srv) } @@ -84,7 +104,7 @@ func _AgentStore_GetAgentInfo_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.hostservice.server.agentstore.v1.AgentStore/GetAgentInfo", + FullMethod: AgentStore_GetAgentInfo_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(AgentStoreServer).GetAgentInfo(ctx, req.(*GetAgentInfoRequest)) diff --git a/proto/spire/hostservice/server/identityprovider/v1/identityprovider.pb.go b/proto/spire/hostservice/server/identityprovider/v1/identityprovider.pb.go index 64d837f..59b8c62 100644 --- a/proto/spire/hostservice/server/identityprovider/v1/identityprovider.pb.go +++ b/proto/spire/hostservice/server/identityprovider/v1/identityprovider.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/hostservice/server/identityprovider/v1/identityprovider.proto package identityproviderv1 @@ -12,6 +12,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,18 +23,16 @@ const ( ) type FetchX509IdentityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FetchX509IdentityRequest) Reset() { *x = FetchX509IdentityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FetchX509IdentityRequest) String() string { @@ -44,7 +43,7 @@ func (*FetchX509IdentityRequest) ProtoMessage() {} func (x *FetchX509IdentityRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -60,23 +59,20 @@ func (*FetchX509IdentityRequest) Descriptor() ([]byte, []int) { } type FetchX509IdentityResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The X.509 identity. Identity *X509Identity `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` // Required. The bundle of the trust domain. - Bundle *types.Bundle `protobuf:"bytes,2,opt,name=bundle,proto3" json:"bundle,omitempty"` + Bundle *types.Bundle `protobuf:"bytes,2,opt,name=bundle,proto3" json:"bundle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FetchX509IdentityResponse) Reset() { *x = FetchX509IdentityResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FetchX509IdentityResponse) String() string { @@ -87,7 +83,7 @@ func (*FetchX509IdentityResponse) ProtoMessage() {} func (x *FetchX509IdentityResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -117,24 +113,21 @@ func (x *FetchX509IdentityResponse) GetBundle() *types.Bundle { } type X509Identity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The certificate chain (ASN.1 encoded). The first certificate // in the chain is the leaf (e.g. the X509-SVID). CertChain [][]byte `protobuf:"bytes,1,rep,name=cert_chain,json=certChain,proto3" json:"cert_chain,omitempty"` // Required. The private key for the identity (PKCS #8 encoded). - PrivateKey []byte `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` + PrivateKey []byte `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *X509Identity) Reset() { *x = X509Identity{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *X509Identity) String() string { @@ -145,7 +138,7 @@ func (*X509Identity) ProtoMessage() {} func (x *X509Identity) ProtoReflect() protoreflect.Message { mi := &file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -176,69 +169,35 @@ func (x *X509Identity) GetPrivateKey() []byte { var File_spire_hostservice_server_identityprovider_v1_identityprovider_proto protoreflect.FileDescriptor -var file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDesc = []byte{ - 0x0a, 0x43, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x2c, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, - 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1a, 0x0a, 0x18, 0x46, 0x65, 0x74, 0x63, 0x68, 0x58, 0x35, 0x30, - 0x39, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0xa7, 0x01, 0x0a, 0x19, 0x46, 0x65, 0x74, 0x63, 0x68, 0x58, 0x35, 0x30, 0x39, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, - 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x3a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x58, 0x35, 0x30, 0x39, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x4e, 0x0a, 0x0c, 0x58, 0x35, - 0x30, 0x39, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x65, - 0x72, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09, - 0x63, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x32, 0xb9, 0x01, 0x0a, 0x10, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, - 0xa4, 0x01, 0x0a, 0x11, 0x46, 0x65, 0x74, 0x63, 0x68, 0x58, 0x35, 0x30, 0x39, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x46, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, - 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x58, 0x35, 0x30, 0x39, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x47, 0x2e, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x58, 0x35, 0x30, 0x39, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6a, 0x5a, 0x68, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDesc = "" + + "\n" + + "Cspire/hostservice/server/identityprovider/v1/identityprovider.proto\x12,spire.hostservice.server.identityprovider.v1\x1a\x1fspire/plugin/types/bundle.proto\"\x1a\n" + + "\x18FetchX509IdentityRequest\"\xa7\x01\n" + + "\x19FetchX509IdentityResponse\x12V\n" + + "\bidentity\x18\x01 \x01(\v2:.spire.hostservice.server.identityprovider.v1.X509IdentityR\bidentity\x122\n" + + "\x06bundle\x18\x02 \x01(\v2\x1a.spire.plugin.types.BundleR\x06bundle\"N\n" + + "\fX509Identity\x12\x1d\n" + + "\n" + + "cert_chain\x18\x01 \x03(\fR\tcertChain\x12\x1f\n" + + "\vprivate_key\x18\x02 \x01(\fR\n" + + "privateKey2\xb9\x01\n" + + "\x10IdentityProvider\x12\xa4\x01\n" + + "\x11FetchX509Identity\x12F.spire.hostservice.server.identityprovider.v1.FetchX509IdentityRequest\x1aG.spire.hostservice.server.identityprovider.v1.FetchX509IdentityResponseBjZhgithub.com/spiffe/spire-plugin-sdk/proto/spire/hostservice/server/identityprovider/v1;identityproviderv1b\x06proto3" var ( file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDescOnce sync.Once - file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDescData = file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDesc + file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDescData []byte ) func file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDescGZIP() []byte { file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDescOnce.Do(func() { - file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDescData) + file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDesc), len(file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDesc))) }) return file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDescData } var file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_goTypes = []interface{}{ +var file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_goTypes = []any{ (*FetchX509IdentityRequest)(nil), // 0: spire.hostservice.server.identityprovider.v1.FetchX509IdentityRequest (*FetchX509IdentityResponse)(nil), // 1: spire.hostservice.server.identityprovider.v1.FetchX509IdentityResponse (*X509Identity)(nil), // 2: spire.hostservice.server.identityprovider.v1.X509Identity @@ -261,49 +220,11 @@ func file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_in if File_spire_hostservice_server_identityprovider_v1_identityprovider_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchX509IdentityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchX509IdentityResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*X509Identity); 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_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDesc), len(file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDesc)), NumEnums: 0, NumMessages: 3, NumExtensions: 0, @@ -314,7 +235,6 @@ func file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_in MessageInfos: file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_msgTypes, }.Build() File_spire_hostservice_server_identityprovider_v1_identityprovider_proto = out.File - file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_rawDesc = nil file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_goTypes = nil file_spire_hostservice_server_identityprovider_v1_identityprovider_proto_depIdxs = nil } diff --git a/proto/spire/hostservice/server/identityprovider/v1/identityprovider_grpc.pb.go b/proto/spire/hostservice/server/identityprovider/v1/identityprovider_grpc.pb.go index d11f3a6..4d2daf6 100644 --- a/proto/spire/hostservice/server/identityprovider/v1/identityprovider_grpc.pb.go +++ b/proto/spire/hostservice/server/identityprovider/v1/identityprovider_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/hostservice/server/identityprovider/v1/identityprovider.proto package identityproviderv1 @@ -11,8 +15,12 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + IdentityProvider_FetchX509Identity_FullMethodName = "/spire.hostservice.server.identityprovider.v1.IdentityProvider/FetchX509Identity" +) // IdentityProviderClient is the client API for IdentityProvider service. // @@ -33,8 +41,9 @@ func NewIdentityProviderClient(cc grpc.ClientConnInterface) IdentityProviderClie } func (c *identityProviderClient) FetchX509Identity(ctx context.Context, in *FetchX509IdentityRequest, opts ...grpc.CallOption) (*FetchX509IdentityResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(FetchX509IdentityResponse) - err := c.cc.Invoke(ctx, "/spire.hostservice.server.identityprovider.v1.IdentityProvider/FetchX509Identity", in, out, opts...) + err := c.cc.Invoke(ctx, IdentityProvider_FetchX509Identity_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -43,7 +52,7 @@ func (c *identityProviderClient) FetchX509Identity(ctx context.Context, in *Fetc // IdentityProviderServer is the server API for IdentityProvider service. // All implementations must embed UnimplementedIdentityProviderServer -// for forward compatibility +// for forward compatibility. type IdentityProviderServer interface { // Fetches an X.509 identity (i.e. X509-SVID) that the caller can use to // authenticate with other members of the trust domain. Also returns the @@ -52,14 +61,18 @@ type IdentityProviderServer interface { mustEmbedUnimplementedIdentityProviderServer() } -// UnimplementedIdentityProviderServer must be embedded to have forward compatible implementations. -type UnimplementedIdentityProviderServer struct { -} +// UnimplementedIdentityProviderServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedIdentityProviderServer struct{} func (UnimplementedIdentityProviderServer) FetchX509Identity(context.Context, *FetchX509IdentityRequest) (*FetchX509IdentityResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method FetchX509Identity not implemented") } func (UnimplementedIdentityProviderServer) mustEmbedUnimplementedIdentityProviderServer() {} +func (UnimplementedIdentityProviderServer) testEmbeddedByValue() {} // UnsafeIdentityProviderServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to IdentityProviderServer will @@ -69,6 +82,13 @@ type UnsafeIdentityProviderServer interface { } func RegisterIdentityProviderServer(s grpc.ServiceRegistrar, srv IdentityProviderServer) { + // If the following call pancis, it indicates UnimplementedIdentityProviderServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&IdentityProvider_ServiceDesc, srv) } @@ -82,7 +102,7 @@ func _IdentityProvider_FetchX509Identity_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.hostservice.server.identityprovider.v1.IdentityProvider/FetchX509Identity", + FullMethod: IdentityProvider_FetchX509Identity_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(IdentityProviderServer).FetchX509Identity(ctx, req.(*FetchX509IdentityRequest)) diff --git a/proto/spire/plugin/agent/keymanager/v1/keymanager.pb.go b/proto/spire/plugin/agent/keymanager/v1/keymanager.pb.go index 2af387d..815ae3b 100644 --- a/proto/spire/plugin/agent/keymanager/v1/keymanager.pb.go +++ b/proto/spire/plugin/agent/keymanager/v1/keymanager.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/agent/keymanager/v1/keymanager.proto package keymanagerv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -151,10 +152,7 @@ func (HashAlgorithm) EnumDescriptor() ([]byte, []int) { } type PublicKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The ID of the key, as provided when the key was created. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Required. The type of the key. @@ -180,16 +178,16 @@ type PublicKey struct { // // The fingerprinting algorithm is also left to plugin implementations. A // native implementation is a non-cryptographic hash over the PKIX data. - Fingerprint string `protobuf:"bytes,4,opt,name=fingerprint,proto3" json:"fingerprint,omitempty"` + Fingerprint string `protobuf:"bytes,4,opt,name=fingerprint,proto3" json:"fingerprint,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PublicKey) Reset() { *x = PublicKey{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PublicKey) String() string { @@ -200,7 +198,7 @@ func (*PublicKey) ProtoMessage() {} func (x *PublicKey) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -244,24 +242,21 @@ func (x *PublicKey) GetFingerprint() string { } type GenerateKeyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The ID to give the generated key (or to identify the existing // key to overwrite (see GenerateKey). KeyId string `protobuf:"bytes,1,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` // Required. The type of the key to generate. - KeyType KeyType `protobuf:"varint,2,opt,name=key_type,json=keyType,proto3,enum=spire.plugin.agent.keymanager.v1.KeyType" json:"key_type,omitempty"` + KeyType KeyType `protobuf:"varint,2,opt,name=key_type,json=keyType,proto3,enum=spire.plugin.agent.keymanager.v1.KeyType" json:"key_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GenerateKeyRequest) Reset() { *x = GenerateKeyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GenerateKeyRequest) String() string { @@ -272,7 +267,7 @@ func (*GenerateKeyRequest) ProtoMessage() {} func (x *GenerateKeyRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -302,21 +297,18 @@ func (x *GenerateKeyRequest) GetKeyType() KeyType { } type GenerateKeyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The generated key. - PublicKey *PublicKey `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` + PublicKey *PublicKey `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GenerateKeyResponse) Reset() { *x = GenerateKeyResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GenerateKeyResponse) String() string { @@ -327,7 +319,7 @@ func (*GenerateKeyResponse) ProtoMessage() {} func (x *GenerateKeyResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -350,21 +342,18 @@ func (x *GenerateKeyResponse) GetPublicKey() *PublicKey { } type GetPublicKeyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The ID of the key to retrieve. - KeyId string `protobuf:"bytes,1,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` + KeyId string `protobuf:"bytes,1,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetPublicKeyRequest) Reset() { *x = GetPublicKeyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPublicKeyRequest) String() string { @@ -375,7 +364,7 @@ func (*GetPublicKeyRequest) ProtoMessage() {} func (x *GetPublicKeyRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -398,21 +387,18 @@ func (x *GetPublicKeyRequest) GetKeyId() string { } type GetPublicKeyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The public key to return. - PublicKey *PublicKey `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` + PublicKey *PublicKey `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetPublicKeyResponse) Reset() { *x = GetPublicKeyResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPublicKeyResponse) String() string { @@ -423,7 +409,7 @@ func (*GetPublicKeyResponse) ProtoMessage() {} func (x *GetPublicKeyResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -446,18 +432,16 @@ func (x *GetPublicKeyResponse) GetPublicKey() *PublicKey { } type GetPublicKeysRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetPublicKeysRequest) Reset() { *x = GetPublicKeysRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPublicKeysRequest) String() string { @@ -468,7 +452,7 @@ func (*GetPublicKeysRequest) ProtoMessage() {} func (x *GetPublicKeysRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -484,21 +468,18 @@ func (*GetPublicKeysRequest) Descriptor() ([]byte, []int) { } type GetPublicKeysResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The public keys managed by the KeyManager. May be empty. - PublicKeys []*PublicKey `protobuf:"bytes,1,rep,name=public_keys,json=publicKeys,proto3" json:"public_keys,omitempty"` + PublicKeys []*PublicKey `protobuf:"bytes,1,rep,name=public_keys,json=publicKeys,proto3" json:"public_keys,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetPublicKeysResponse) Reset() { *x = GetPublicKeysResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetPublicKeysResponse) String() string { @@ -509,7 +490,7 @@ func (*GetPublicKeysResponse) ProtoMessage() {} func (x *GetPublicKeysResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -532,10 +513,7 @@ func (x *GetPublicKeysResponse) GetPublicKeys() []*PublicKey { } type SignDataRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The ID of the key to use to sign the data. KeyId string `protobuf:"bytes,1,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` // Required. The data to sign. @@ -543,19 +521,20 @@ type SignDataRequest struct { // Required. The signature options. The PSS options are only valid // for RSA keys. // - // Types that are assignable to SignerOpts: + // Types that are valid to be assigned to SignerOpts: + // // *SignDataRequest_HashAlgorithm // *SignDataRequest_PssOptions - SignerOpts isSignDataRequest_SignerOpts `protobuf_oneof:"signer_opts"` + SignerOpts isSignDataRequest_SignerOpts `protobuf_oneof:"signer_opts"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SignDataRequest) Reset() { *x = SignDataRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SignDataRequest) String() string { @@ -566,7 +545,7 @@ func (*SignDataRequest) ProtoMessage() {} func (x *SignDataRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -595,23 +574,27 @@ func (x *SignDataRequest) GetData() []byte { return nil } -func (m *SignDataRequest) GetSignerOpts() isSignDataRequest_SignerOpts { - if m != nil { - return m.SignerOpts +func (x *SignDataRequest) GetSignerOpts() isSignDataRequest_SignerOpts { + if x != nil { + return x.SignerOpts } return nil } func (x *SignDataRequest) GetHashAlgorithm() HashAlgorithm { - if x, ok := x.GetSignerOpts().(*SignDataRequest_HashAlgorithm); ok { - return x.HashAlgorithm + if x != nil { + if x, ok := x.SignerOpts.(*SignDataRequest_HashAlgorithm); ok { + return x.HashAlgorithm + } } return HashAlgorithm_UNSPECIFIED_HASH_ALGORITHM } func (x *SignDataRequest) GetPssOptions() *SignDataRequest_PSSOptions { - if x, ok := x.GetSignerOpts().(*SignDataRequest_PssOptions); ok { - return x.PssOptions + if x != nil { + if x, ok := x.SignerOpts.(*SignDataRequest_PssOptions); ok { + return x.PssOptions + } } return nil } @@ -633,23 +616,20 @@ func (*SignDataRequest_HashAlgorithm) isSignDataRequest_SignerOpts() {} func (*SignDataRequest_PssOptions) isSignDataRequest_SignerOpts() {} type SignDataResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The signature of the data. Signature []byte `protobuf:"bytes,1,opt,name=signature,proto3" json:"signature,omitempty"` // Required. The fingerprint of the key used to sign the data. KeyFingerprint string `protobuf:"bytes,2,opt,name=key_fingerprint,json=keyFingerprint,proto3" json:"key_fingerprint,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SignDataResponse) Reset() { *x = SignDataResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SignDataResponse) String() string { @@ -660,7 +640,7 @@ func (*SignDataResponse) ProtoMessage() {} func (x *SignDataResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -690,23 +670,20 @@ func (x *SignDataResponse) GetKeyFingerprint() string { } type SignDataRequest_PSSOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The salt length. SaltLength int32 `protobuf:"varint,1,opt,name=salt_length,json=saltLength,proto3" json:"salt_length,omitempty"` // Required. The hash algorithm. HashAlgorithm HashAlgorithm `protobuf:"varint,2,opt,name=hash_algorithm,json=hashAlgorithm,proto3,enum=spire.plugin.agent.keymanager.v1.HashAlgorithm" json:"hash_algorithm,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SignDataRequest_PSSOptions) Reset() { *x = SignDataRequest_PSSOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SignDataRequest_PSSOptions) String() string { @@ -717,7 +694,7 @@ func (*SignDataRequest_PSSOptions) ProtoMessage() {} func (x *SignDataRequest_PSSOptions) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -748,156 +725,91 @@ func (x *SignDataRequest_PSSOptions) GetHashAlgorithm() HashAlgorithm { var File_spire_plugin_agent_keymanager_v1_keymanager_proto protoreflect.FileDescriptor -var file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDesc = []byte{ - 0x0a, 0x31, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, - 0x76, 0x31, 0x2f, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x22, 0x99, 0x01, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x3d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6b, 0x69, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x6b, 0x69, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x20, 0x0a, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, - 0x74, 0x22, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x44, - 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x29, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6b, 0x65, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x22, 0x61, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0a, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x2c, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, - 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6b, 0x65, 0x79, 0x49, 0x64, 0x22, 0x62, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, - 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x74, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x65, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0b, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x8e, 0x03, 0x0a, 0x0f, 0x53, 0x69, 0x67, - 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, - 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, - 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x58, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2f, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, - 0x48, 0x00, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, - 0x6d, 0x12, 0x5f, 0x0a, 0x0b, 0x70, 0x73, 0x73, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x53, 0x53, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x73, 0x73, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x1a, 0x85, 0x01, 0x0a, 0x0a, 0x50, 0x53, 0x53, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x61, 0x6c, 0x74, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x61, 0x6c, 0x74, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x12, 0x56, 0x0a, 0x0e, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, - 0x69, 0x74, 0x68, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x73, 0x70, 0x69, - 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, - 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x61, - 0x73, 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x0d, 0x68, 0x61, 0x73, - 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x42, 0x0d, 0x0a, 0x0b, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x74, 0x73, 0x22, 0x59, 0x0a, 0x10, 0x53, 0x69, 0x67, - 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6b, - 0x65, 0x79, 0x5f, 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, - 0x72, 0x69, 0x6e, 0x74, 0x2a, 0x59, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x4b, - 0x45, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x43, 0x5f, - 0x50, 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x43, 0x5f, 0x50, 0x33, 0x38, - 0x34, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, - 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x04, 0x2a, - 0xb7, 0x01, 0x0a, 0x0d, 0x48, 0x61, 0x73, 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, - 0x6d, 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x5f, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, 0x32, 0x32, 0x34, 0x10, 0x04, 0x12, 0x0a, 0x0a, - 0x06, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, - 0x33, 0x38, 0x34, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x10, - 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x41, 0x33, 0x5f, 0x32, 0x32, 0x34, 0x10, 0x0a, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x41, 0x33, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x0b, 0x12, 0x0c, 0x0a, - 0x08, 0x53, 0x48, 0x41, 0x33, 0x5f, 0x33, 0x38, 0x34, 0x10, 0x0c, 0x12, 0x0c, 0x0a, 0x08, 0x53, - 0x48, 0x41, 0x33, 0x5f, 0x35, 0x31, 0x32, 0x10, 0x0d, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x48, 0x41, - 0x35, 0x31, 0x32, 0x5f, 0x32, 0x32, 0x34, 0x10, 0x0e, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x48, 0x41, - 0x35, 0x31, 0x32, 0x5f, 0x32, 0x35, 0x36, 0x10, 0x0f, 0x32, 0xfd, 0x03, 0x0a, 0x0a, 0x4b, 0x65, - 0x79, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x7a, 0x0a, 0x0b, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x34, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x35, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x36, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x31, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6b, 0x65, 0x79, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDesc = "" + + "\n" + + "1spire/plugin/agent/keymanager/v1/keymanager.proto\x12 spire.plugin.agent.keymanager.v1\"\x99\x01\n" + + "\tPublicKey\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12=\n" + + "\x04type\x18\x02 \x01(\x0e2).spire.plugin.agent.keymanager.v1.KeyTypeR\x04type\x12\x1b\n" + + "\tpkix_data\x18\x03 \x01(\fR\bpkixData\x12 \n" + + "\vfingerprint\x18\x04 \x01(\tR\vfingerprint\"q\n" + + "\x12GenerateKeyRequest\x12\x15\n" + + "\x06key_id\x18\x01 \x01(\tR\x05keyId\x12D\n" + + "\bkey_type\x18\x02 \x01(\x0e2).spire.plugin.agent.keymanager.v1.KeyTypeR\akeyType\"a\n" + + "\x13GenerateKeyResponse\x12J\n" + + "\n" + + "public_key\x18\x01 \x01(\v2+.spire.plugin.agent.keymanager.v1.PublicKeyR\tpublicKey\",\n" + + "\x13GetPublicKeyRequest\x12\x15\n" + + "\x06key_id\x18\x01 \x01(\tR\x05keyId\"b\n" + + "\x14GetPublicKeyResponse\x12J\n" + + "\n" + + "public_key\x18\x01 \x01(\v2+.spire.plugin.agent.keymanager.v1.PublicKeyR\tpublicKey\"\x16\n" + + "\x14GetPublicKeysRequest\"e\n" + + "\x15GetPublicKeysResponse\x12L\n" + + "\vpublic_keys\x18\x01 \x03(\v2+.spire.plugin.agent.keymanager.v1.PublicKeyR\n" + + "publicKeys\"\x8e\x03\n" + + "\x0fSignDataRequest\x12\x15\n" + + "\x06key_id\x18\x01 \x01(\tR\x05keyId\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data\x12X\n" + + "\x0ehash_algorithm\x18\x03 \x01(\x0e2/.spire.plugin.agent.keymanager.v1.HashAlgorithmH\x00R\rhashAlgorithm\x12_\n" + + "\vpss_options\x18\x04 \x01(\v2<.spire.plugin.agent.keymanager.v1.SignDataRequest.PSSOptionsH\x00R\n" + + "pssOptions\x1a\x85\x01\n" + + "\n" + + "PSSOptions\x12\x1f\n" + + "\vsalt_length\x18\x01 \x01(\x05R\n" + + "saltLength\x12V\n" + + "\x0ehash_algorithm\x18\x02 \x01(\x0e2/.spire.plugin.agent.keymanager.v1.HashAlgorithmR\rhashAlgorithmB\r\n" + + "\vsigner_opts\"Y\n" + + "\x10SignDataResponse\x12\x1c\n" + + "\tsignature\x18\x01 \x01(\fR\tsignature\x12'\n" + + "\x0fkey_fingerprint\x18\x02 \x01(\tR\x0ekeyFingerprint*Y\n" + + "\aKeyType\x12\x18\n" + + "\x14UNSPECIFIED_KEY_TYPE\x10\x00\x12\v\n" + + "\aEC_P256\x10\x01\x12\v\n" + + "\aEC_P384\x10\x02\x12\f\n" + + "\bRSA_2048\x10\x03\x12\f\n" + + "\bRSA_4096\x10\x04*\xb7\x01\n" + + "\rHashAlgorithm\x12\x1e\n" + + "\x1aUNSPECIFIED_HASH_ALGORITHM\x10\x00\x12\n" + + "\n" + + "\x06SHA224\x10\x04\x12\n" + + "\n" + + "\x06SHA256\x10\x05\x12\n" + + "\n" + + "\x06SHA384\x10\x06\x12\n" + + "\n" + + "\x06SHA512\x10\a\x12\f\n" + + "\bSHA3_224\x10\n" + + "\x12\f\n" + + "\bSHA3_256\x10\v\x12\f\n" + + "\bSHA3_384\x10\f\x12\f\n" + + "\bSHA3_512\x10\r\x12\x0e\n" + + "\n" + + "SHA512_224\x10\x0e\x12\x0e\n" + + "\n" + + "SHA512_256\x10\x0f2\xfd\x03\n" + + "\n" + + "KeyManager\x12z\n" + + "\vGenerateKey\x124.spire.plugin.agent.keymanager.v1.GenerateKeyRequest\x1a5.spire.plugin.agent.keymanager.v1.GenerateKeyResponse\x12}\n" + + "\fGetPublicKey\x125.spire.plugin.agent.keymanager.v1.GetPublicKeyRequest\x1a6.spire.plugin.agent.keymanager.v1.GetPublicKeyResponse\x12\x80\x01\n" + + "\rGetPublicKeys\x126.spire.plugin.agent.keymanager.v1.GetPublicKeysRequest\x1a7.spire.plugin.agent.keymanager.v1.GetPublicKeysResponse\x12q\n" + + "\bSignData\x121.spire.plugin.agent.keymanager.v1.SignDataRequest\x1a2.spire.plugin.agent.keymanager.v1.SignDataResponseBXZVgithub.com/spiffe/spire-plugin-sdk/proto/spire/plugin/agent/keymanager/v1;keymanagerv1b\x06proto3" var ( file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDescOnce sync.Once - file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDescData = file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDesc + file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDescData []byte ) func file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDescGZIP() []byte { file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDescOnce.Do(func() { - file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDescData) + file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDesc), len(file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDesc))) }) return file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDescData } var file_spire_plugin_agent_keymanager_v1_keymanager_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_spire_plugin_agent_keymanager_v1_keymanager_proto_goTypes = []interface{}{ +var file_spire_plugin_agent_keymanager_v1_keymanager_proto_goTypes = []any{ (KeyType)(0), // 0: spire.plugin.agent.keymanager.v1.KeyType (HashAlgorithm)(0), // 1: spire.plugin.agent.keymanager.v1.HashAlgorithm (*PublicKey)(nil), // 2: spire.plugin.agent.keymanager.v1.PublicKey @@ -940,129 +852,7 @@ func file_spire_plugin_agent_keymanager_v1_keymanager_proto_init() { if File_spire_plugin_agent_keymanager_v1_keymanager_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateKeyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateKeyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeysRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeysResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignDataRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignDataResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignDataRequest_PSSOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes[7].OneofWrappers = []any{ (*SignDataRequest_HashAlgorithm)(nil), (*SignDataRequest_PssOptions)(nil), } @@ -1070,7 +860,7 @@ func file_spire_plugin_agent_keymanager_v1_keymanager_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDesc), len(file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDesc)), NumEnums: 2, NumMessages: 10, NumExtensions: 0, @@ -1082,7 +872,6 @@ func file_spire_plugin_agent_keymanager_v1_keymanager_proto_init() { MessageInfos: file_spire_plugin_agent_keymanager_v1_keymanager_proto_msgTypes, }.Build() File_spire_plugin_agent_keymanager_v1_keymanager_proto = out.File - file_spire_plugin_agent_keymanager_v1_keymanager_proto_rawDesc = nil file_spire_plugin_agent_keymanager_v1_keymanager_proto_goTypes = nil file_spire_plugin_agent_keymanager_v1_keymanager_proto_depIdxs = nil } diff --git a/proto/spire/plugin/agent/keymanager/v1/keymanager_grpc.pb.go b/proto/spire/plugin/agent/keymanager/v1/keymanager_grpc.pb.go index 79e19a9..a7fa03d 100644 --- a/proto/spire/plugin/agent/keymanager/v1/keymanager_grpc.pb.go +++ b/proto/spire/plugin/agent/keymanager/v1/keymanager_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/plugin/agent/keymanager/v1/keymanager.proto package keymanagerv1 @@ -11,8 +15,15 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + KeyManager_GenerateKey_FullMethodName = "/spire.plugin.agent.keymanager.v1.KeyManager/GenerateKey" + KeyManager_GetPublicKey_FullMethodName = "/spire.plugin.agent.keymanager.v1.KeyManager/GetPublicKey" + KeyManager_GetPublicKeys_FullMethodName = "/spire.plugin.agent.keymanager.v1.KeyManager/GetPublicKeys" + KeyManager_SignData_FullMethodName = "/spire.plugin.agent.keymanager.v1.KeyManager/SignData" +) // KeyManagerClient is the client API for KeyManager service. // @@ -46,8 +57,9 @@ func NewKeyManagerClient(cc grpc.ClientConnInterface) KeyManagerClient { } func (c *keyManagerClient) GenerateKey(ctx context.Context, in *GenerateKeyRequest, opts ...grpc.CallOption) (*GenerateKeyResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GenerateKeyResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.agent.keymanager.v1.KeyManager/GenerateKey", in, out, opts...) + err := c.cc.Invoke(ctx, KeyManager_GenerateKey_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -55,8 +67,9 @@ func (c *keyManagerClient) GenerateKey(ctx context.Context, in *GenerateKeyReque } func (c *keyManagerClient) GetPublicKey(ctx context.Context, in *GetPublicKeyRequest, opts ...grpc.CallOption) (*GetPublicKeyResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetPublicKeyResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.agent.keymanager.v1.KeyManager/GetPublicKey", in, out, opts...) + err := c.cc.Invoke(ctx, KeyManager_GetPublicKey_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -64,8 +77,9 @@ func (c *keyManagerClient) GetPublicKey(ctx context.Context, in *GetPublicKeyReq } func (c *keyManagerClient) GetPublicKeys(ctx context.Context, in *GetPublicKeysRequest, opts ...grpc.CallOption) (*GetPublicKeysResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetPublicKeysResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.agent.keymanager.v1.KeyManager/GetPublicKeys", in, out, opts...) + err := c.cc.Invoke(ctx, KeyManager_GetPublicKeys_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -73,8 +87,9 @@ func (c *keyManagerClient) GetPublicKeys(ctx context.Context, in *GetPublicKeysR } func (c *keyManagerClient) SignData(ctx context.Context, in *SignDataRequest, opts ...grpc.CallOption) (*SignDataResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SignDataResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.agent.keymanager.v1.KeyManager/SignData", in, out, opts...) + err := c.cc.Invoke(ctx, KeyManager_SignData_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -83,7 +98,7 @@ func (c *keyManagerClient) SignData(ctx context.Context, in *SignDataRequest, op // KeyManagerServer is the server API for KeyManager service. // All implementations must embed UnimplementedKeyManagerServer -// for forward compatibility +// for forward compatibility. type KeyManagerServer interface { // Generates a new private key with the given ID. If a key already exists // under that ID, it is overwritten and given a different fingerprint. See @@ -105,9 +120,12 @@ type KeyManagerServer interface { mustEmbedUnimplementedKeyManagerServer() } -// UnimplementedKeyManagerServer must be embedded to have forward compatible implementations. -type UnimplementedKeyManagerServer struct { -} +// UnimplementedKeyManagerServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedKeyManagerServer struct{} func (UnimplementedKeyManagerServer) GenerateKey(context.Context, *GenerateKeyRequest) (*GenerateKeyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GenerateKey not implemented") @@ -122,6 +140,7 @@ func (UnimplementedKeyManagerServer) SignData(context.Context, *SignDataRequest) return nil, status.Errorf(codes.Unimplemented, "method SignData not implemented") } func (UnimplementedKeyManagerServer) mustEmbedUnimplementedKeyManagerServer() {} +func (UnimplementedKeyManagerServer) testEmbeddedByValue() {} // UnsafeKeyManagerServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to KeyManagerServer will @@ -131,6 +150,13 @@ type UnsafeKeyManagerServer interface { } func RegisterKeyManagerServer(s grpc.ServiceRegistrar, srv KeyManagerServer) { + // If the following call pancis, it indicates UnimplementedKeyManagerServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&KeyManager_ServiceDesc, srv) } @@ -144,7 +170,7 @@ func _KeyManager_GenerateKey_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.agent.keymanager.v1.KeyManager/GenerateKey", + FullMethod: KeyManager_GenerateKey_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(KeyManagerServer).GenerateKey(ctx, req.(*GenerateKeyRequest)) @@ -162,7 +188,7 @@ func _KeyManager_GetPublicKey_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.agent.keymanager.v1.KeyManager/GetPublicKey", + FullMethod: KeyManager_GetPublicKey_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(KeyManagerServer).GetPublicKey(ctx, req.(*GetPublicKeyRequest)) @@ -180,7 +206,7 @@ func _KeyManager_GetPublicKeys_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.agent.keymanager.v1.KeyManager/GetPublicKeys", + FullMethod: KeyManager_GetPublicKeys_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(KeyManagerServer).GetPublicKeys(ctx, req.(*GetPublicKeysRequest)) @@ -198,7 +224,7 @@ func _KeyManager_SignData_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.agent.keymanager.v1.KeyManager/SignData", + FullMethod: KeyManager_SignData_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(KeyManagerServer).SignData(ctx, req.(*SignDataRequest)) diff --git a/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.pb.go b/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.pb.go index 70f970b..454544c 100644 --- a/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.pb.go +++ b/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/agent/nodeattestor/v1/nodeattestor.proto package nodeattestorv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -21,22 +22,19 @@ const ( ) type Challenge struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The challenge issued by SPIRE Server. See the AidAttestation // RPC for details. - Challenge []byte `protobuf:"bytes,1,opt,name=challenge,proto3" json:"challenge,omitempty"` + Challenge []byte `protobuf:"bytes,1,opt,name=challenge,proto3" json:"challenge,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Challenge) Reset() { *x = Challenge{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Challenge) String() string { @@ -47,7 +45,7 @@ func (*Challenge) ProtoMessage() {} func (x *Challenge) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -70,23 +68,21 @@ func (x *Challenge) GetChallenge() []byte { } type PayloadOrChallengeResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Data: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Data: + // // *PayloadOrChallengeResponse_Payload // *PayloadOrChallengeResponse_ChallengeResponse - Data isPayloadOrChallengeResponse_Data `protobuf_oneof:"data"` + Data isPayloadOrChallengeResponse_Data `protobuf_oneof:"data"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PayloadOrChallengeResponse) Reset() { *x = PayloadOrChallengeResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PayloadOrChallengeResponse) String() string { @@ -97,7 +93,7 @@ func (*PayloadOrChallengeResponse) ProtoMessage() {} func (x *PayloadOrChallengeResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -112,23 +108,27 @@ func (*PayloadOrChallengeResponse) Descriptor() ([]byte, []int) { return file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescGZIP(), []int{1} } -func (m *PayloadOrChallengeResponse) GetData() isPayloadOrChallengeResponse_Data { - if m != nil { - return m.Data +func (x *PayloadOrChallengeResponse) GetData() isPayloadOrChallengeResponse_Data { + if x != nil { + return x.Data } return nil } func (x *PayloadOrChallengeResponse) GetPayload() []byte { - if x, ok := x.GetData().(*PayloadOrChallengeResponse_Payload); ok { - return x.Payload + if x != nil { + if x, ok := x.Data.(*PayloadOrChallengeResponse_Payload); ok { + return x.Payload + } } return nil } func (x *PayloadOrChallengeResponse) GetChallengeResponse() []byte { - if x, ok := x.GetData().(*PayloadOrChallengeResponse_ChallengeResponse); ok { - return x.ChallengeResponse + if x != nil { + if x, ok := x.Data.(*PayloadOrChallengeResponse_ChallengeResponse); ok { + return x.ChallengeResponse + } } return nil } @@ -157,55 +157,32 @@ func (*PayloadOrChallengeResponse_ChallengeResponse) isPayloadOrChallengeRespons var File_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto protoreflect.FileDescriptor -var file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDesc = []byte{ - 0x0a, 0x35, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x22, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x64, 0x65, - 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x22, 0x29, 0x0a, 0x09, 0x43, - 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6c, - 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68, 0x61, - 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x22, 0x71, 0x0a, 0x1a, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x4f, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x2f, 0x0a, 0x12, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x11, - 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0x94, 0x01, 0x0a, 0x0c, 0x4e, 0x6f, - 0x64, 0x65, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x12, 0x83, 0x01, 0x0a, 0x0e, 0x41, - 0x69, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x2e, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x1a, 0x3e, 0x2e, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x4f, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, - 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, - 0x42, 0x5c, 0x5a, 0x5a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, - 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, - 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, - 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x3b, - 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDesc = "" + + "\n" + + "5spire/plugin/agent/nodeattestor/v1/nodeattestor.proto\x12\"spire.plugin.agent.nodeattestor.v1\")\n" + + "\tChallenge\x12\x1c\n" + + "\tchallenge\x18\x01 \x01(\fR\tchallenge\"q\n" + + "\x1aPayloadOrChallengeResponse\x12\x1a\n" + + "\apayload\x18\x01 \x01(\fH\x00R\apayload\x12/\n" + + "\x12challenge_response\x18\x02 \x01(\fH\x00R\x11challengeResponseB\x06\n" + + "\x04data2\x94\x01\n" + + "\fNodeAttestor\x12\x83\x01\n" + + "\x0eAidAttestation\x12-.spire.plugin.agent.nodeattestor.v1.Challenge\x1a>.spire.plugin.agent.nodeattestor.v1.PayloadOrChallengeResponse(\x010\x01B\\ZZgithub.com/spiffe/spire-plugin-sdk/proto/spire/plugin/agent/nodeattestor/v1;nodeattestorv1b\x06proto3" var ( file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescOnce sync.Once - file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescData = file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDesc + file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescData []byte ) func file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescGZIP() []byte { file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescOnce.Do(func() { - file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescData) + file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDesc), len(file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDesc))) }) return file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDescData } var file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_goTypes = []interface{}{ +var file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_goTypes = []any{ (*Challenge)(nil), // 0: spire.plugin.agent.nodeattestor.v1.Challenge (*PayloadOrChallengeResponse)(nil), // 1: spire.plugin.agent.nodeattestor.v1.PayloadOrChallengeResponse } @@ -224,33 +201,7 @@ func file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_init() { if File_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Challenge); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PayloadOrChallengeResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes[1].OneofWrappers = []any{ (*PayloadOrChallengeResponse_Payload)(nil), (*PayloadOrChallengeResponse_ChallengeResponse)(nil), } @@ -258,7 +209,7 @@ func file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDesc), len(file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -269,7 +220,6 @@ func file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_init() { MessageInfos: file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_msgTypes, }.Build() File_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto = out.File - file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_rawDesc = nil file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_goTypes = nil file_spire_plugin_agent_nodeattestor_v1_nodeattestor_proto_depIdxs = nil } diff --git a/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor_grpc.pb.go b/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor_grpc.pb.go index f96c331..69887ae 100644 --- a/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor_grpc.pb.go +++ b/proto/spire/plugin/agent/nodeattestor/v1/nodeattestor_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/plugin/agent/nodeattestor/v1/nodeattestor.proto package nodeattestorv1 @@ -11,8 +15,12 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + NodeAttestor_AidAttestation_FullMethodName = "/spire.plugin.agent.nodeattestor.v1.NodeAttestor/AidAttestation" +) // NodeAttestorClient is the client API for NodeAttestor service. // @@ -22,16 +30,16 @@ type NodeAttestorClient interface { // payload and participating in attestation challenge/response. // // The attestation flow is as follows: - // 1. SPIRE Agent opens up a stream to the plugin via FetchAttestationData. - // 2. The plugin returns a response with the payload. - // 3. SPIRE Agent sends the payload to SPIRE Server. - // 4. Optionally, SPIRE Server responds with a challenge: - // 4a. SPIRE Agent sends the challenge to the plugin. - // 4b. The plugin responds with the challenge response. - // 4c. SPIRE Agent sends the challenge response to SPIRE Server. - // 4d. Step 4 is repeated until SPIRE Server is satisfied and does not - // respond with an additional challenge. - // 5. SPIRE Agent closes the stream. + // 1. SPIRE Agent opens up a stream to the plugin via FetchAttestationData. + // 2. The plugin returns a response with the payload. + // 3. SPIRE Agent sends the payload to SPIRE Server. + // 4. Optionally, SPIRE Server responds with a challenge: + // 4a. SPIRE Agent sends the challenge to the plugin. + // 4b. The plugin responds with the challenge response. + // 4c. SPIRE Agent sends the challenge response to SPIRE Server. + // 4d. Step 4 is repeated until SPIRE Server is satisfied and does not + // respond with an additional challenge. + // 5. SPIRE Agent closes the stream. // // Note that SPIRE Agent does NOT send a request down the stream unless it // needs to issue the challenge returned by SPIRE Server (step 4a). @@ -39,7 +47,7 @@ type NodeAttestorClient interface { // Plugins that do not need challenge/response as part of the attestation // process may close the stream as soon as they send the attestation // payload (step 2). - AidAttestation(ctx context.Context, opts ...grpc.CallOption) (NodeAttestor_AidAttestationClient, error) + AidAttestation(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[Challenge, PayloadOrChallengeResponse], error) } type nodeAttestorClient struct { @@ -50,55 +58,37 @@ func NewNodeAttestorClient(cc grpc.ClientConnInterface) NodeAttestorClient { return &nodeAttestorClient{cc} } -func (c *nodeAttestorClient) AidAttestation(ctx context.Context, opts ...grpc.CallOption) (NodeAttestor_AidAttestationClient, error) { - stream, err := c.cc.NewStream(ctx, &NodeAttestor_ServiceDesc.Streams[0], "/spire.plugin.agent.nodeattestor.v1.NodeAttestor/AidAttestation", opts...) +func (c *nodeAttestorClient) AidAttestation(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[Challenge, PayloadOrChallengeResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &NodeAttestor_ServiceDesc.Streams[0], NodeAttestor_AidAttestation_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &nodeAttestorAidAttestationClient{stream} + x := &grpc.GenericClientStream[Challenge, PayloadOrChallengeResponse]{ClientStream: stream} return x, nil } -type NodeAttestor_AidAttestationClient interface { - Send(*Challenge) error - Recv() (*PayloadOrChallengeResponse, error) - grpc.ClientStream -} - -type nodeAttestorAidAttestationClient struct { - grpc.ClientStream -} - -func (x *nodeAttestorAidAttestationClient) Send(m *Challenge) error { - return x.ClientStream.SendMsg(m) -} - -func (x *nodeAttestorAidAttestationClient) Recv() (*PayloadOrChallengeResponse, error) { - m := new(PayloadOrChallengeResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type NodeAttestor_AidAttestationClient = grpc.BidiStreamingClient[Challenge, PayloadOrChallengeResponse] // NodeAttestorServer is the server API for NodeAttestor service. // All implementations must embed UnimplementedNodeAttestorServer -// for forward compatibility +// for forward compatibility. type NodeAttestorServer interface { // AidAttestation facilitates attestation by returning the attestation // payload and participating in attestation challenge/response. // // The attestation flow is as follows: - // 1. SPIRE Agent opens up a stream to the plugin via FetchAttestationData. - // 2. The plugin returns a response with the payload. - // 3. SPIRE Agent sends the payload to SPIRE Server. - // 4. Optionally, SPIRE Server responds with a challenge: - // 4a. SPIRE Agent sends the challenge to the plugin. - // 4b. The plugin responds with the challenge response. - // 4c. SPIRE Agent sends the challenge response to SPIRE Server. - // 4d. Step 4 is repeated until SPIRE Server is satisfied and does not - // respond with an additional challenge. - // 5. SPIRE Agent closes the stream. + // 1. SPIRE Agent opens up a stream to the plugin via FetchAttestationData. + // 2. The plugin returns a response with the payload. + // 3. SPIRE Agent sends the payload to SPIRE Server. + // 4. Optionally, SPIRE Server responds with a challenge: + // 4a. SPIRE Agent sends the challenge to the plugin. + // 4b. The plugin responds with the challenge response. + // 4c. SPIRE Agent sends the challenge response to SPIRE Server. + // 4d. Step 4 is repeated until SPIRE Server is satisfied and does not + // respond with an additional challenge. + // 5. SPIRE Agent closes the stream. // // Note that SPIRE Agent does NOT send a request down the stream unless it // needs to issue the challenge returned by SPIRE Server (step 4a). @@ -106,18 +96,22 @@ type NodeAttestorServer interface { // Plugins that do not need challenge/response as part of the attestation // process may close the stream as soon as they send the attestation // payload (step 2). - AidAttestation(NodeAttestor_AidAttestationServer) error + AidAttestation(grpc.BidiStreamingServer[Challenge, PayloadOrChallengeResponse]) error mustEmbedUnimplementedNodeAttestorServer() } -// UnimplementedNodeAttestorServer must be embedded to have forward compatible implementations. -type UnimplementedNodeAttestorServer struct { -} +// UnimplementedNodeAttestorServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedNodeAttestorServer struct{} -func (UnimplementedNodeAttestorServer) AidAttestation(NodeAttestor_AidAttestationServer) error { +func (UnimplementedNodeAttestorServer) AidAttestation(grpc.BidiStreamingServer[Challenge, PayloadOrChallengeResponse]) error { return status.Errorf(codes.Unimplemented, "method AidAttestation not implemented") } func (UnimplementedNodeAttestorServer) mustEmbedUnimplementedNodeAttestorServer() {} +func (UnimplementedNodeAttestorServer) testEmbeddedByValue() {} // UnsafeNodeAttestorServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to NodeAttestorServer will @@ -127,34 +121,22 @@ type UnsafeNodeAttestorServer interface { } func RegisterNodeAttestorServer(s grpc.ServiceRegistrar, srv NodeAttestorServer) { + // If the following call pancis, it indicates UnimplementedNodeAttestorServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&NodeAttestor_ServiceDesc, srv) } func _NodeAttestor_AidAttestation_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(NodeAttestorServer).AidAttestation(&nodeAttestorAidAttestationServer{stream}) -} - -type NodeAttestor_AidAttestationServer interface { - Send(*PayloadOrChallengeResponse) error - Recv() (*Challenge, error) - grpc.ServerStream -} - -type nodeAttestorAidAttestationServer struct { - grpc.ServerStream + return srv.(NodeAttestorServer).AidAttestation(&grpc.GenericServerStream[Challenge, PayloadOrChallengeResponse]{ServerStream: stream}) } -func (x *nodeAttestorAidAttestationServer) Send(m *PayloadOrChallengeResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *nodeAttestorAidAttestationServer) Recv() (*Challenge, error) { - m := new(Challenge) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type NodeAttestor_AidAttestationServer = grpc.BidiStreamingServer[Challenge, PayloadOrChallengeResponse] // NodeAttestor_ServiceDesc is the grpc.ServiceDesc for NodeAttestor service. // It's only intended for direct use with grpc.RegisterService, diff --git a/proto/spire/plugin/agent/svidstore/v1/svidstore.pb.go b/proto/spire/plugin/agent/svidstore/v1/svidstore.pb.go index 5f7aef3..212ee28 100644 --- a/proto/spire/plugin/agent/svidstore/v1/svidstore.pb.go +++ b/proto/spire/plugin/agent/svidstore/v1/svidstore.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/agent/svidstore/v1/svidstore.proto package svidstorev1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -21,25 +22,22 @@ const ( ) type PutX509SVIDRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // X509-SVID to be stored Svid *X509SVID `protobuf:"bytes,1,opt,name=svid,proto3" json:"svid,omitempty"` // Relevant information to store on specific platform Metadata []string `protobuf:"bytes,2,rep,name=metadata,proto3" json:"metadata,omitempty"` // Federated bundles to store - FederatedBundles map[string][]byte `protobuf:"bytes,3,rep,name=federated_bundles,json=federatedBundles,proto3" json:"federated_bundles,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + FederatedBundles map[string][]byte `protobuf:"bytes,3,rep,name=federated_bundles,json=federatedBundles,proto3" json:"federated_bundles,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PutX509SVIDRequest) Reset() { *x = PutX509SVIDRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PutX509SVIDRequest) String() string { @@ -50,7 +48,7 @@ func (*PutX509SVIDRequest) ProtoMessage() {} func (x *PutX509SVIDRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -87,18 +85,16 @@ func (x *PutX509SVIDRequest) GetFederatedBundles() map[string][]byte { } type PutX509SVIDResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PutX509SVIDResponse) Reset() { *x = PutX509SVIDResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PutX509SVIDResponse) String() string { @@ -109,7 +105,7 @@ func (*PutX509SVIDResponse) ProtoMessage() {} func (x *PutX509SVIDResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -125,21 +121,18 @@ func (*PutX509SVIDResponse) Descriptor() ([]byte, []int) { } type DeleteX509SVIDRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Relevant information to delete on specific platform - Metadata []string `protobuf:"bytes,1,rep,name=metadata,proto3" json:"metadata,omitempty"` + Metadata []string `protobuf:"bytes,1,rep,name=metadata,proto3" json:"metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteX509SVIDRequest) Reset() { *x = DeleteX509SVIDRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteX509SVIDRequest) String() string { @@ -150,7 +143,7 @@ func (*DeleteX509SVIDRequest) ProtoMessage() {} func (x *DeleteX509SVIDRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -173,18 +166,16 @@ func (x *DeleteX509SVIDRequest) GetMetadata() []string { } type DeleteX509SVIDResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeleteX509SVIDResponse) Reset() { *x = DeleteX509SVIDResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeleteX509SVIDResponse) String() string { @@ -195,7 +186,7 @@ func (*DeleteX509SVIDResponse) ProtoMessage() {} func (x *DeleteX509SVIDResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -211,10 +202,7 @@ func (*DeleteX509SVIDResponse) Descriptor() ([]byte, []int) { } type X509SVID struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // SPIFFE ID of the SVID. SpiffeID string `protobuf:"bytes,1,opt,name=spiffeID,proto3" json:"spiffeID,omitempty"` // Certificate and intermediates (ASN.1 DER encoded) @@ -224,16 +212,16 @@ type X509SVID struct { // Bundle certificates (ASN.1 DER encoded) Bundle [][]byte `protobuf:"bytes,4,rep,name=bundle,proto3" json:"bundle,omitempty"` // Expiration timestamp (seconds since Unix epoch). - ExpiresAt int64 `protobuf:"varint,5,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` + ExpiresAt int64 `protobuf:"varint,5,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *X509SVID) Reset() { *x = X509SVID{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *X509SVID) String() string { @@ -244,7 +232,7 @@ func (*X509SVID) ProtoMessage() {} func (x *X509SVID) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -296,87 +284,47 @@ func (x *X509SVID) GetExpiresAt() int64 { var File_spire_plugin_agent_svidstore_v1_svidstore_proto protoreflect.FileDescriptor -var file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDesc = []byte{ - 0x0a, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x76, 0x69, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x76, 0x69, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x76, 0x69, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, - 0x76, 0x31, 0x22, 0xac, 0x02, 0x0a, 0x12, 0x50, 0x75, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, - 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x04, 0x73, 0x76, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x76, 0x69, - 0x64, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, - 0x49, 0x44, 0x52, 0x04, 0x73, 0x76, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x76, 0x0a, 0x11, 0x66, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x49, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x76, 0x69, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x75, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x66, 0x65, 0x64, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x15, - 0x46, 0x65, 0x64, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x42, 0x75, 0x6e, 0x64, 0x6c, 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, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0x15, 0x0a, 0x13, 0x50, 0x75, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x18, 0x0a, - 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x9d, 0x01, 0x0a, 0x08, 0x58, 0x35, 0x30, 0x39, - 0x53, 0x56, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x44, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x44, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, - 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, - 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0c, - 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x32, 0x89, 0x02, 0x0a, 0x09, 0x53, 0x56, 0x49, 0x44, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x78, 0x0a, 0x0b, 0x50, 0x75, 0x74, 0x58, 0x35, 0x30, 0x39, - 0x53, 0x56, 0x49, 0x44, 0x12, 0x33, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x76, 0x69, 0x64, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, - 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x73, - 0x76, 0x69, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x58, - 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x81, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, - 0x49, 0x44, 0x12, 0x36, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x76, 0x69, 0x64, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x58, 0x35, 0x30, 0x39, 0x53, - 0x56, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x73, 0x70, 0x69, - 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, - 0x73, 0x76, 0x69, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x58, 0x35, 0x30, 0x39, 0x53, 0x56, 0x49, 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x56, 0x5a, 0x54, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x2f, 0x73, 0x76, 0x69, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x31, 0x3b, - 0x73, 0x76, 0x69, 0x64, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} +const file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDesc = "" + + "\n" + + "/spire/plugin/agent/svidstore/v1/svidstore.proto\x12\x1fspire.plugin.agent.svidstore.v1\"\xac\x02\n" + + "\x12PutX509SVIDRequest\x12=\n" + + "\x04svid\x18\x01 \x01(\v2).spire.plugin.agent.svidstore.v1.X509SVIDR\x04svid\x12\x1a\n" + + "\bmetadata\x18\x02 \x03(\tR\bmetadata\x12v\n" + + "\x11federated_bundles\x18\x03 \x03(\v2I.spire.plugin.agent.svidstore.v1.PutX509SVIDRequest.FederatedBundlesEntryR\x10federatedBundles\x1aC\n" + + "\x15FederatedBundlesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\fR\x05value:\x028\x01\"\x15\n" + + "\x13PutX509SVIDResponse\"3\n" + + "\x15DeleteX509SVIDRequest\x12\x1a\n" + + "\bmetadata\x18\x01 \x03(\tR\bmetadata\"\x18\n" + + "\x16DeleteX509SVIDResponse\"\x9d\x01\n" + + "\bX509SVID\x12\x1a\n" + + "\bspiffeID\x18\x01 \x01(\tR\bspiffeID\x12\x1d\n" + + "\n" + + "cert_chain\x18\x02 \x03(\fR\tcertChain\x12\x1f\n" + + "\vprivate_key\x18\x03 \x01(\fR\n" + + "privateKey\x12\x16\n" + + "\x06bundle\x18\x04 \x03(\fR\x06bundle\x12\x1d\n" + + "\n" + + "expires_at\x18\x05 \x01(\x03R\texpiresAt2\x89\x02\n" + + "\tSVIDStore\x12x\n" + + "\vPutX509SVID\x123.spire.plugin.agent.svidstore.v1.PutX509SVIDRequest\x1a4.spire.plugin.agent.svidstore.v1.PutX509SVIDResponse\x12\x81\x01\n" + + "\x0eDeleteX509SVID\x126.spire.plugin.agent.svidstore.v1.DeleteX509SVIDRequest\x1a7.spire.plugin.agent.svidstore.v1.DeleteX509SVIDResponseBVZTgithub.com/spiffe/spire-plugin-sdk/proto/spire/plugin/agent/svidstore/v1;svidstorev1b\x06proto3" var ( file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDescOnce sync.Once - file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDescData = file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDesc + file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDescData []byte ) func file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDescGZIP() []byte { file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDescOnce.Do(func() { - file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDescData) + file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDesc), len(file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDesc))) }) return file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDescData } var file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_spire_plugin_agent_svidstore_v1_svidstore_proto_goTypes = []interface{}{ +var file_spire_plugin_agent_svidstore_v1_svidstore_proto_goTypes = []any{ (*PutX509SVIDRequest)(nil), // 0: spire.plugin.agent.svidstore.v1.PutX509SVIDRequest (*PutX509SVIDResponse)(nil), // 1: spire.plugin.agent.svidstore.v1.PutX509SVIDResponse (*DeleteX509SVIDRequest)(nil), // 2: spire.plugin.agent.svidstore.v1.DeleteX509SVIDRequest @@ -403,73 +351,11 @@ func file_spire_plugin_agent_svidstore_v1_svidstore_proto_init() { if File_spire_plugin_agent_svidstore_v1_svidstore_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutX509SVIDRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PutX509SVIDResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteX509SVIDRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteX509SVIDResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*X509SVID); 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_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDesc), len(file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDesc)), NumEnums: 0, NumMessages: 6, NumExtensions: 0, @@ -480,7 +366,6 @@ func file_spire_plugin_agent_svidstore_v1_svidstore_proto_init() { MessageInfos: file_spire_plugin_agent_svidstore_v1_svidstore_proto_msgTypes, }.Build() File_spire_plugin_agent_svidstore_v1_svidstore_proto = out.File - file_spire_plugin_agent_svidstore_v1_svidstore_proto_rawDesc = nil file_spire_plugin_agent_svidstore_v1_svidstore_proto_goTypes = nil file_spire_plugin_agent_svidstore_v1_svidstore_proto_depIdxs = nil } diff --git a/proto/spire/plugin/agent/svidstore/v1/svidstore_grpc.pb.go b/proto/spire/plugin/agent/svidstore/v1/svidstore_grpc.pb.go index c5a4aa2..0b4d649 100644 --- a/proto/spire/plugin/agent/svidstore/v1/svidstore_grpc.pb.go +++ b/proto/spire/plugin/agent/svidstore/v1/svidstore_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/plugin/agent/svidstore/v1/svidstore.proto package svidstorev1 @@ -11,8 +15,13 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + SVIDStore_PutX509SVID_FullMethodName = "/spire.plugin.agent.svidstore.v1.SVIDStore/PutX509SVID" + SVIDStore_DeleteX509SVID_FullMethodName = "/spire.plugin.agent.svidstore.v1.SVIDStore/DeleteX509SVID" +) // SVIDStoreClient is the client API for SVIDStore service. // @@ -33,8 +42,9 @@ func NewSVIDStoreClient(cc grpc.ClientConnInterface) SVIDStoreClient { } func (c *sVIDStoreClient) PutX509SVID(ctx context.Context, in *PutX509SVIDRequest, opts ...grpc.CallOption) (*PutX509SVIDResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(PutX509SVIDResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.agent.svidstore.v1.SVIDStore/PutX509SVID", in, out, opts...) + err := c.cc.Invoke(ctx, SVIDStore_PutX509SVID_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -42,8 +52,9 @@ func (c *sVIDStoreClient) PutX509SVID(ctx context.Context, in *PutX509SVIDReques } func (c *sVIDStoreClient) DeleteX509SVID(ctx context.Context, in *DeleteX509SVIDRequest, opts ...grpc.CallOption) (*DeleteX509SVIDResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(DeleteX509SVIDResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.agent.svidstore.v1.SVIDStore/DeleteX509SVID", in, out, opts...) + err := c.cc.Invoke(ctx, SVIDStore_DeleteX509SVID_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -52,7 +63,7 @@ func (c *sVIDStoreClient) DeleteX509SVID(ctx context.Context, in *DeleteX509SVID // SVIDStoreServer is the server API for SVIDStore service. // All implementations must embed UnimplementedSVIDStoreServer -// for forward compatibility +// for forward compatibility. type SVIDStoreServer interface { // Puts an X509-SVID in a configured secrets store PutX509SVID(context.Context, *PutX509SVIDRequest) (*PutX509SVIDResponse, error) @@ -61,9 +72,12 @@ type SVIDStoreServer interface { mustEmbedUnimplementedSVIDStoreServer() } -// UnimplementedSVIDStoreServer must be embedded to have forward compatible implementations. -type UnimplementedSVIDStoreServer struct { -} +// UnimplementedSVIDStoreServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedSVIDStoreServer struct{} func (UnimplementedSVIDStoreServer) PutX509SVID(context.Context, *PutX509SVIDRequest) (*PutX509SVIDResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method PutX509SVID not implemented") @@ -72,6 +86,7 @@ func (UnimplementedSVIDStoreServer) DeleteX509SVID(context.Context, *DeleteX509S return nil, status.Errorf(codes.Unimplemented, "method DeleteX509SVID not implemented") } func (UnimplementedSVIDStoreServer) mustEmbedUnimplementedSVIDStoreServer() {} +func (UnimplementedSVIDStoreServer) testEmbeddedByValue() {} // UnsafeSVIDStoreServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to SVIDStoreServer will @@ -81,6 +96,13 @@ type UnsafeSVIDStoreServer interface { } func RegisterSVIDStoreServer(s grpc.ServiceRegistrar, srv SVIDStoreServer) { + // If the following call pancis, it indicates UnimplementedSVIDStoreServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&SVIDStore_ServiceDesc, srv) } @@ -94,7 +116,7 @@ func _SVIDStore_PutX509SVID_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.agent.svidstore.v1.SVIDStore/PutX509SVID", + FullMethod: SVIDStore_PutX509SVID_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SVIDStoreServer).PutX509SVID(ctx, req.(*PutX509SVIDRequest)) @@ -112,7 +134,7 @@ func _SVIDStore_DeleteX509SVID_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.agent.svidstore.v1.SVIDStore/DeleteX509SVID", + FullMethod: SVIDStore_DeleteX509SVID_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(SVIDStoreServer).DeleteX509SVID(ctx, req.(*DeleteX509SVIDRequest)) diff --git a/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.pb.go b/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.pb.go index 189c004..a890d55 100644 --- a/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.pb.go +++ b/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/agent/workloadattestor/v1/workloadattestor.proto package v1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -21,21 +22,18 @@ const ( ) type AttestRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The process ID of the workload to attest. - Pid int32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` + Pid int32 `protobuf:"varint,1,opt,name=pid,proto3" json:"pid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AttestRequest) Reset() { *x = AttestRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AttestRequest) String() string { @@ -46,7 +44,7 @@ func (*AttestRequest) ProtoMessage() {} func (x *AttestRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -69,22 +67,19 @@ func (x *AttestRequest) GetPid() int32 { } type AttestResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Optional. Selector values related to the attested workload. The type // of the selector is inferred from the plugin name. SelectorValues []string `protobuf:"bytes,1,rep,name=selector_values,json=selectorValues,proto3" json:"selector_values,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AttestResponse) Reset() { *x = AttestResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AttestResponse) String() string { @@ -95,7 +90,7 @@ func (*AttestResponse) ProtoMessage() {} func (x *AttestResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -119,50 +114,30 @@ func (x *AttestResponse) GetSelectorValues() []string { var File_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto protoreflect.FileDescriptor -var file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDesc = []byte{ - 0x0a, 0x3d, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x61, - 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x26, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x74, 0x74, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x22, 0x21, 0x0a, 0x0d, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x39, 0x0a, 0x0e, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x32, 0x8b, 0x01, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x12, 0x77, 0x0a, 0x06, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x12, 0x35, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x51, 0x5a, 0x4f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x61, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDesc = "" + + "\n" + + "=spire/plugin/agent/workloadattestor/v1/workloadattestor.proto\x12&spire.plugin.agent.workloadattestor.v1\"!\n" + + "\rAttestRequest\x12\x10\n" + + "\x03pid\x18\x01 \x01(\x05R\x03pid\"9\n" + + "\x0eAttestResponse\x12'\n" + + "\x0fselector_values\x18\x01 \x03(\tR\x0eselectorValues2\x8b\x01\n" + + "\x10WorkloadAttestor\x12w\n" + + "\x06Attest\x125.spire.plugin.agent.workloadattestor.v1.AttestRequest\x1a6.spire.plugin.agent.workloadattestor.v1.AttestResponseBQZOgithub.com/spiffe/spire-plugin-sdk/proto/spire/plugin/agent/workloadattestor/v1b\x06proto3" var ( file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDescOnce sync.Once - file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDescData = file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDesc + file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDescData []byte ) func file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDescGZIP() []byte { file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDescOnce.Do(func() { - file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDescData) + file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDesc), len(file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDesc))) }) return file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDescData } var file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_goTypes = []interface{}{ +var file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_goTypes = []any{ (*AttestRequest)(nil), // 0: spire.plugin.agent.workloadattestor.v1.AttestRequest (*AttestResponse)(nil), // 1: spire.plugin.agent.workloadattestor.v1.AttestResponse } @@ -181,37 +156,11 @@ func file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_init() { if File_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestResponse); 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_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDesc), len(file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -222,7 +171,6 @@ func file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_init() { MessageInfos: file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_msgTypes, }.Build() File_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto = out.File - file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_rawDesc = nil file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_goTypes = nil file_spire_plugin_agent_workloadattestor_v1_workloadattestor_proto_depIdxs = nil } diff --git a/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor_grpc.pb.go b/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor_grpc.pb.go index 44406e1..fa194ad 100644 --- a/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor_grpc.pb.go +++ b/proto/spire/plugin/agent/workloadattestor/v1/workloadattestor_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/plugin/agent/workloadattestor/v1/workloadattestor.proto package v1 @@ -11,8 +15,12 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + WorkloadAttestor_Attest_FullMethodName = "/spire.plugin.agent.workloadattestor.v1.WorkloadAttestor/Attest" +) // WorkloadAttestorClient is the client API for WorkloadAttestor service. // @@ -36,8 +44,9 @@ func NewWorkloadAttestorClient(cc grpc.ClientConnInterface) WorkloadAttestorClie } func (c *workloadAttestorClient) Attest(ctx context.Context, in *AttestRequest, opts ...grpc.CallOption) (*AttestResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(AttestResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.agent.workloadattestor.v1.WorkloadAttestor/Attest", in, out, opts...) + err := c.cc.Invoke(ctx, WorkloadAttestor_Attest_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -46,7 +55,7 @@ func (c *workloadAttestorClient) Attest(ctx context.Context, in *AttestRequest, // WorkloadAttestorServer is the server API for WorkloadAttestor service. // All implementations must embed UnimplementedWorkloadAttestorServer -// for forward compatibility +// for forward compatibility. type WorkloadAttestorServer interface { // Attests the specified workload process. If the process is not one the // attestor is in a position to attest (e.g. k8s attestor attesting a @@ -58,14 +67,18 @@ type WorkloadAttestorServer interface { mustEmbedUnimplementedWorkloadAttestorServer() } -// UnimplementedWorkloadAttestorServer must be embedded to have forward compatible implementations. -type UnimplementedWorkloadAttestorServer struct { -} +// UnimplementedWorkloadAttestorServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedWorkloadAttestorServer struct{} func (UnimplementedWorkloadAttestorServer) Attest(context.Context, *AttestRequest) (*AttestResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Attest not implemented") } func (UnimplementedWorkloadAttestorServer) mustEmbedUnimplementedWorkloadAttestorServer() {} +func (UnimplementedWorkloadAttestorServer) testEmbeddedByValue() {} // UnsafeWorkloadAttestorServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to WorkloadAttestorServer will @@ -75,6 +88,13 @@ type UnsafeWorkloadAttestorServer interface { } func RegisterWorkloadAttestorServer(s grpc.ServiceRegistrar, srv WorkloadAttestorServer) { + // If the following call pancis, it indicates UnimplementedWorkloadAttestorServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&WorkloadAttestor_ServiceDesc, srv) } @@ -88,7 +108,7 @@ func _WorkloadAttestor_Attest_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.agent.workloadattestor.v1.WorkloadAttestor/Attest", + FullMethod: WorkloadAttestor_Attest_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(WorkloadAttestorServer).Attest(ctx, req.(*AttestRequest)) diff --git a/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go index 55a418f..1d08791 100644 --- a/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go +++ b/proto/spire/plugin/server/bundlepublisher/v1/bundlepublisher.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/server/bundlepublisher/v1/bundlepublisher.proto package bundlepublisherv1 @@ -12,6 +12,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,21 +23,18 @@ const ( ) type PublishBundleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The trust bundle to publish. - Bundle *types.Bundle `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` + Bundle *types.Bundle `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PublishBundleRequest) Reset() { *x = PublishBundleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PublishBundleRequest) String() string { @@ -47,7 +45,7 @@ func (*PublishBundleRequest) ProtoMessage() {} func (x *PublishBundleRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -70,18 +68,16 @@ func (x *PublishBundleRequest) GetBundle() *types.Bundle { } type PublishBundleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PublishBundleResponse) Reset() { *x = PublishBundleResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PublishBundleResponse) String() string { @@ -92,7 +88,7 @@ func (*PublishBundleResponse) ProtoMessage() {} func (x *PublishBundleResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -109,55 +105,29 @@ func (*PublishBundleResponse) Descriptor() ([]byte, []int) { var File_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto protoreflect.FileDescriptor -var file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDesc = []byte{ - 0x0a, 0x3c, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x26, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x14, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x32, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa0, 0x01, 0x0a, - 0x0f, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, - 0x12, 0x8c, 0x01, 0x0a, 0x0d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x12, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3d, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x63, 0x5a, 0x61, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, - 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, - 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x2f, - 0x76, 0x31, 0x3b, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_plugin_server_bundlepublisher_v1_bundlepublisher_proto_rawDesc = "" + + "\n" + + "\n" + + "\x04type\x18\x02 \x01(\x0e2*.spire.plugin.server.keymanager.v1.KeyTypeR\x04type\x12\x1b\n" + + "\tpkix_data\x18\x03 \x01(\fR\bpkixData\x12 \n" + + "\vfingerprint\x18\x04 \x01(\tR\vfingerprint\"r\n" + + "\x12GenerateKeyRequest\x12\x15\n" + + "\x06key_id\x18\x01 \x01(\tR\x05keyId\x12E\n" + + "\bkey_type\x18\x02 \x01(\x0e2*.spire.plugin.server.keymanager.v1.KeyTypeR\akeyType\"b\n" + + "\x13GenerateKeyResponse\x12K\n" + + "\n" + + "public_key\x18\x01 \x01(\v2,.spire.plugin.server.keymanager.v1.PublicKeyR\tpublicKey\",\n" + + "\x13GetPublicKeyRequest\x12\x15\n" + + "\x06key_id\x18\x01 \x01(\tR\x05keyId\"c\n" + + "\x14GetPublicKeyResponse\x12K\n" + + "\n" + + "public_key\x18\x01 \x01(\v2,.spire.plugin.server.keymanager.v1.PublicKeyR\tpublicKey\"\x16\n" + + "\x14GetPublicKeysRequest\"f\n" + + "\x15GetPublicKeysResponse\x12M\n" + + "\vpublic_keys\x18\x01 \x03(\v2,.spire.plugin.server.keymanager.v1.PublicKeyR\n" + + "publicKeys\"\x91\x03\n" + + "\x0fSignDataRequest\x12\x15\n" + + "\x06key_id\x18\x01 \x01(\tR\x05keyId\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data\x12Y\n" + + "\x0ehash_algorithm\x18\x03 \x01(\x0e20.spire.plugin.server.keymanager.v1.HashAlgorithmH\x00R\rhashAlgorithm\x12`\n" + + "\vpss_options\x18\x04 \x01(\v2=.spire.plugin.server.keymanager.v1.SignDataRequest.PSSOptionsH\x00R\n" + + "pssOptions\x1a\x86\x01\n" + + "\n" + + "PSSOptions\x12\x1f\n" + + "\vsalt_length\x18\x01 \x01(\x05R\n" + + "saltLength\x12W\n" + + "\x0ehash_algorithm\x18\x02 \x01(\x0e20.spire.plugin.server.keymanager.v1.HashAlgorithmR\rhashAlgorithmB\r\n" + + "\vsigner_opts\"Y\n" + + "\x10SignDataResponse\x12\x1c\n" + + "\tsignature\x18\x01 \x01(\fR\tsignature\x12'\n" + + "\x0fkey_fingerprint\x18\x02 \x01(\tR\x0ekeyFingerprint*Y\n" + + "\aKeyType\x12\x18\n" + + "\x14UNSPECIFIED_KEY_TYPE\x10\x00\x12\v\n" + + "\aEC_P256\x10\x01\x12\v\n" + + "\aEC_P384\x10\x02\x12\f\n" + + "\bRSA_2048\x10\x03\x12\f\n" + + "\bRSA_4096\x10\x04*\xb7\x01\n" + + "\rHashAlgorithm\x12\x1e\n" + + "\x1aUNSPECIFIED_HASH_ALGORITHM\x10\x00\x12\n" + + "\n" + + "\x06SHA224\x10\x04\x12\n" + + "\n" + + "\x06SHA256\x10\x05\x12\n" + + "\n" + + "\x06SHA384\x10\x06\x12\n" + + "\n" + + "\x06SHA512\x10\a\x12\f\n" + + "\bSHA3_224\x10\n" + + "\x12\f\n" + + "\bSHA3_256\x10\v\x12\f\n" + + "\bSHA3_384\x10\f\x12\f\n" + + "\bSHA3_512\x10\r\x12\x0e\n" + + "\n" + + "SHA512_224\x10\x0e\x12\x0e\n" + + "\n" + + "SHA512_256\x10\x0f2\x85\x04\n" + + "\n" + + "KeyManager\x12|\n" + + "\vGenerateKey\x125.spire.plugin.server.keymanager.v1.GenerateKeyRequest\x1a6.spire.plugin.server.keymanager.v1.GenerateKeyResponse\x12\x7f\n" + + "\fGetPublicKey\x126.spire.plugin.server.keymanager.v1.GetPublicKeyRequest\x1a7.spire.plugin.server.keymanager.v1.GetPublicKeyResponse\x12\x82\x01\n" + + "\rGetPublicKeys\x127.spire.plugin.server.keymanager.v1.GetPublicKeysRequest\x1a8.spire.plugin.server.keymanager.v1.GetPublicKeysResponse\x12s\n" + + "\bSignData\x122.spire.plugin.server.keymanager.v1.SignDataRequest\x1a3.spire.plugin.server.keymanager.v1.SignDataResponseBYZWgithub.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/keymanager/v1;keymanagerv1b\x06proto3" var ( file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDescOnce sync.Once - file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDescData = file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDesc + file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDescData []byte ) func file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDescGZIP() []byte { file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDescOnce.Do(func() { - file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDescData) + file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDesc), len(file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDesc))) }) return file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDescData } var file_spire_plugin_server_keymanager_v1_keymanager_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_spire_plugin_server_keymanager_v1_keymanager_proto_goTypes = []interface{}{ +var file_spire_plugin_server_keymanager_v1_keymanager_proto_goTypes = []any{ (KeyType)(0), // 0: spire.plugin.server.keymanager.v1.KeyType (HashAlgorithm)(0), // 1: spire.plugin.server.keymanager.v1.HashAlgorithm (*PublicKey)(nil), // 2: spire.plugin.server.keymanager.v1.PublicKey @@ -941,129 +852,7 @@ func file_spire_plugin_server_keymanager_v1_keymanager_proto_init() { if File_spire_plugin_server_keymanager_v1_keymanager_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateKeyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GenerateKeyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeysRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPublicKeysResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignDataRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignDataResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignDataRequest_PSSOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes[7].OneofWrappers = []any{ (*SignDataRequest_HashAlgorithm)(nil), (*SignDataRequest_PssOptions)(nil), } @@ -1071,7 +860,7 @@ func file_spire_plugin_server_keymanager_v1_keymanager_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDesc), len(file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDesc)), NumEnums: 2, NumMessages: 10, NumExtensions: 0, @@ -1083,7 +872,6 @@ func file_spire_plugin_server_keymanager_v1_keymanager_proto_init() { MessageInfos: file_spire_plugin_server_keymanager_v1_keymanager_proto_msgTypes, }.Build() File_spire_plugin_server_keymanager_v1_keymanager_proto = out.File - file_spire_plugin_server_keymanager_v1_keymanager_proto_rawDesc = nil file_spire_plugin_server_keymanager_v1_keymanager_proto_goTypes = nil file_spire_plugin_server_keymanager_v1_keymanager_proto_depIdxs = nil } diff --git a/proto/spire/plugin/server/keymanager/v1/keymanager_grpc.pb.go b/proto/spire/plugin/server/keymanager/v1/keymanager_grpc.pb.go index 1658e7d..8960395 100644 --- a/proto/spire/plugin/server/keymanager/v1/keymanager_grpc.pb.go +++ b/proto/spire/plugin/server/keymanager/v1/keymanager_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/plugin/server/keymanager/v1/keymanager.proto package keymanagerv1 @@ -11,8 +15,15 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + KeyManager_GenerateKey_FullMethodName = "/spire.plugin.server.keymanager.v1.KeyManager/GenerateKey" + KeyManager_GetPublicKey_FullMethodName = "/spire.plugin.server.keymanager.v1.KeyManager/GetPublicKey" + KeyManager_GetPublicKeys_FullMethodName = "/spire.plugin.server.keymanager.v1.KeyManager/GetPublicKeys" + KeyManager_SignData_FullMethodName = "/spire.plugin.server.keymanager.v1.KeyManager/SignData" +) // KeyManagerClient is the client API for KeyManager service. // @@ -46,8 +57,9 @@ func NewKeyManagerClient(cc grpc.ClientConnInterface) KeyManagerClient { } func (c *keyManagerClient) GenerateKey(ctx context.Context, in *GenerateKeyRequest, opts ...grpc.CallOption) (*GenerateKeyResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GenerateKeyResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.server.keymanager.v1.KeyManager/GenerateKey", in, out, opts...) + err := c.cc.Invoke(ctx, KeyManager_GenerateKey_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -55,8 +67,9 @@ func (c *keyManagerClient) GenerateKey(ctx context.Context, in *GenerateKeyReque } func (c *keyManagerClient) GetPublicKey(ctx context.Context, in *GetPublicKeyRequest, opts ...grpc.CallOption) (*GetPublicKeyResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetPublicKeyResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.server.keymanager.v1.KeyManager/GetPublicKey", in, out, opts...) + err := c.cc.Invoke(ctx, KeyManager_GetPublicKey_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -64,8 +77,9 @@ func (c *keyManagerClient) GetPublicKey(ctx context.Context, in *GetPublicKeyReq } func (c *keyManagerClient) GetPublicKeys(ctx context.Context, in *GetPublicKeysRequest, opts ...grpc.CallOption) (*GetPublicKeysResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetPublicKeysResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.server.keymanager.v1.KeyManager/GetPublicKeys", in, out, opts...) + err := c.cc.Invoke(ctx, KeyManager_GetPublicKeys_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -73,8 +87,9 @@ func (c *keyManagerClient) GetPublicKeys(ctx context.Context, in *GetPublicKeysR } func (c *keyManagerClient) SignData(ctx context.Context, in *SignDataRequest, opts ...grpc.CallOption) (*SignDataResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(SignDataResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.server.keymanager.v1.KeyManager/SignData", in, out, opts...) + err := c.cc.Invoke(ctx, KeyManager_SignData_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -83,7 +98,7 @@ func (c *keyManagerClient) SignData(ctx context.Context, in *SignDataRequest, op // KeyManagerServer is the server API for KeyManager service. // All implementations must embed UnimplementedKeyManagerServer -// for forward compatibility +// for forward compatibility. type KeyManagerServer interface { // Generates a new private key with the given ID. If a key already exists // under that ID, it is overwritten and given a different fingerprint. See @@ -105,9 +120,12 @@ type KeyManagerServer interface { mustEmbedUnimplementedKeyManagerServer() } -// UnimplementedKeyManagerServer must be embedded to have forward compatible implementations. -type UnimplementedKeyManagerServer struct { -} +// UnimplementedKeyManagerServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedKeyManagerServer struct{} func (UnimplementedKeyManagerServer) GenerateKey(context.Context, *GenerateKeyRequest) (*GenerateKeyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GenerateKey not implemented") @@ -122,6 +140,7 @@ func (UnimplementedKeyManagerServer) SignData(context.Context, *SignDataRequest) return nil, status.Errorf(codes.Unimplemented, "method SignData not implemented") } func (UnimplementedKeyManagerServer) mustEmbedUnimplementedKeyManagerServer() {} +func (UnimplementedKeyManagerServer) testEmbeddedByValue() {} // UnsafeKeyManagerServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to KeyManagerServer will @@ -131,6 +150,13 @@ type UnsafeKeyManagerServer interface { } func RegisterKeyManagerServer(s grpc.ServiceRegistrar, srv KeyManagerServer) { + // If the following call pancis, it indicates UnimplementedKeyManagerServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&KeyManager_ServiceDesc, srv) } @@ -144,7 +170,7 @@ func _KeyManager_GenerateKey_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.server.keymanager.v1.KeyManager/GenerateKey", + FullMethod: KeyManager_GenerateKey_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(KeyManagerServer).GenerateKey(ctx, req.(*GenerateKeyRequest)) @@ -162,7 +188,7 @@ func _KeyManager_GetPublicKey_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.server.keymanager.v1.KeyManager/GetPublicKey", + FullMethod: KeyManager_GetPublicKey_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(KeyManagerServer).GetPublicKey(ctx, req.(*GetPublicKeyRequest)) @@ -180,7 +206,7 @@ func _KeyManager_GetPublicKeys_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.server.keymanager.v1.KeyManager/GetPublicKeys", + FullMethod: KeyManager_GetPublicKeys_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(KeyManagerServer).GetPublicKeys(ctx, req.(*GetPublicKeysRequest)) @@ -198,7 +224,7 @@ func _KeyManager_SignData_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.server.keymanager.v1.KeyManager/SignData", + FullMethod: KeyManager_SignData_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(KeyManagerServer).SignData(ctx, req.(*SignDataRequest)) diff --git a/proto/spire/plugin/server/nodeattestor/v1/nodeattestor.pb.go b/proto/spire/plugin/server/nodeattestor/v1/nodeattestor.pb.go index 50f066d..ea63a38 100644 --- a/proto/spire/plugin/server/nodeattestor/v1/nodeattestor.pb.go +++ b/proto/spire/plugin/server/nodeattestor/v1/nodeattestor.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/server/nodeattestor/v1/nodeattestor.proto package nodeattestorv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -21,23 +22,21 @@ const ( ) type AttestRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Request: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Request: + // // *AttestRequest_Payload // *AttestRequest_ChallengeResponse - Request isAttestRequest_Request `protobuf_oneof:"request"` + Request isAttestRequest_Request `protobuf_oneof:"request"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AttestRequest) Reset() { *x = AttestRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AttestRequest) String() string { @@ -48,7 +47,7 @@ func (*AttestRequest) ProtoMessage() {} func (x *AttestRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -63,23 +62,27 @@ func (*AttestRequest) Descriptor() ([]byte, []int) { return file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescGZIP(), []int{0} } -func (m *AttestRequest) GetRequest() isAttestRequest_Request { - if m != nil { - return m.Request +func (x *AttestRequest) GetRequest() isAttestRequest_Request { + if x != nil { + return x.Request } return nil } func (x *AttestRequest) GetPayload() []byte { - if x, ok := x.GetRequest().(*AttestRequest_Payload); ok { - return x.Payload + if x != nil { + if x, ok := x.Request.(*AttestRequest_Payload); ok { + return x.Payload + } } return nil } func (x *AttestRequest) GetChallengeResponse() []byte { - if x, ok := x.GetRequest().(*AttestRequest_ChallengeResponse); ok { - return x.ChallengeResponse + if x != nil { + if x, ok := x.Request.(*AttestRequest_ChallengeResponse); ok { + return x.ChallengeResponse + } } return nil } @@ -105,23 +108,21 @@ func (*AttestRequest_Payload) isAttestRequest_Request() {} func (*AttestRequest_ChallengeResponse) isAttestRequest_Request() {} type AttestResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Response: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Response: + // // *AttestResponse_Challenge // *AttestResponse_AgentAttributes - Response isAttestResponse_Response `protobuf_oneof:"response"` + Response isAttestResponse_Response `protobuf_oneof:"response"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AttestResponse) Reset() { *x = AttestResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AttestResponse) String() string { @@ -132,7 +133,7 @@ func (*AttestResponse) ProtoMessage() {} func (x *AttestResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -147,23 +148,27 @@ func (*AttestResponse) Descriptor() ([]byte, []int) { return file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescGZIP(), []int{1} } -func (m *AttestResponse) GetResponse() isAttestResponse_Response { - if m != nil { - return m.Response +func (x *AttestResponse) GetResponse() isAttestResponse_Response { + if x != nil { + return x.Response } return nil } func (x *AttestResponse) GetChallenge() []byte { - if x, ok := x.GetResponse().(*AttestResponse_Challenge); ok { - return x.Challenge + if x != nil { + if x, ok := x.Response.(*AttestResponse_Challenge); ok { + return x.Challenge + } } return nil } func (x *AttestResponse) GetAgentAttributes() *AgentAttributes { - if x, ok := x.GetResponse().(*AttestResponse_AgentAttributes); ok { - return x.AgentAttributes + if x != nil { + if x, ok := x.Response.(*AttestResponse_AgentAttributes); ok { + return x.AgentAttributes + } } return nil } @@ -189,10 +194,7 @@ func (*AttestResponse_Challenge) isAttestResponse_Response() {} func (*AttestResponse_AgentAttributes) isAttestResponse_Response() {} type AgentAttributes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The ID to assign to the agent. Each agent in SPIRE must have a unique ID. // The convention for agent IDs is as follows: // @@ -215,16 +217,16 @@ type AgentAttributes struct { // attestation payload without operator intervention. // This also allows the server to clear out old entries automatically // since they can be easily recreated. - CanReattest bool `protobuf:"varint,3,opt,name=can_reattest,json=canReattest,proto3" json:"can_reattest,omitempty"` + CanReattest bool `protobuf:"varint,3,opt,name=can_reattest,json=canReattest,proto3" json:"can_reattest,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AgentAttributes) Reset() { *x = AgentAttributes{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AgentAttributes) String() string { @@ -235,7 +237,7 @@ func (*AgentAttributes) ProtoMessage() {} func (x *AgentAttributes) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -273,69 +275,39 @@ func (x *AgentAttributes) GetCanReattest() bool { var File_spire_plugin_server_nodeattestor_v1_nodeattestor_proto protoreflect.FileDescriptor -var file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDesc = []byte{ - 0x0a, 0x36, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6e, 0x6f, - 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x22, 0x67, 0x0a, - 0x0d, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, - 0x00, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2f, 0x0a, 0x12, 0x63, 0x68, - 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, - 0x6e, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9f, 0x01, 0x0a, 0x0e, 0x41, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x09, 0x63, 0x68, 0x61, - 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x09, - 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x61, 0x0a, 0x10, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, 0x0a, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7a, 0x0a, 0x0f, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x73, - 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x61, 0x6e, 0x52, 0x65, 0x61, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x32, 0x85, 0x01, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x41, 0x74, 0x74, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x12, 0x75, 0x0a, 0x06, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x12, - 0x32, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x64, 0x65, 0x61, 0x74, - 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x5d, 0x5a, 0x5b, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, - 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, - 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x6e, 0x6f, 0x64, - 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x2f, 0x76, 0x31, 0x3b, 0x6e, 0x6f, 0x64, - 0x65, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} +const file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDesc = "" + + "\n" + + "6spire/plugin/server/nodeattestor/v1/nodeattestor.proto\x12#spire.plugin.server.nodeattestor.v1\"g\n" + + "\rAttestRequest\x12\x1a\n" + + "\apayload\x18\x01 \x01(\fH\x00R\apayload\x12/\n" + + "\x12challenge_response\x18\x02 \x01(\fH\x00R\x11challengeResponseB\t\n" + + "\arequest\"\x9f\x01\n" + + "\x0eAttestResponse\x12\x1e\n" + + "\tchallenge\x18\x01 \x01(\fH\x00R\tchallenge\x12a\n" + + "\x10agent_attributes\x18\x02 \x01(\v24.spire.plugin.server.nodeattestor.v1.AgentAttributesH\x00R\x0fagentAttributesB\n" + + "\n" + + "\bresponse\"z\n" + + "\x0fAgentAttributes\x12\x1b\n" + + "\tspiffe_id\x18\x01 \x01(\tR\bspiffeId\x12'\n" + + "\x0fselector_values\x18\x02 \x03(\tR\x0eselectorValues\x12!\n" + + "\fcan_reattest\x18\x03 \x01(\bR\vcanReattest2\x85\x01\n" + + "\fNodeAttestor\x12u\n" + + "\x06Attest\x122.spire.plugin.server.nodeattestor.v1.AttestRequest\x1a3.spire.plugin.server.nodeattestor.v1.AttestResponse(\x010\x01B]Z[github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/nodeattestor/v1;nodeattestorv1b\x06proto3" var ( file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescOnce sync.Once - file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescData = file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDesc + file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescData []byte ) func file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescGZIP() []byte { file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescOnce.Do(func() { - file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescData) + file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDesc), len(file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDesc))) }) return file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDescData } var file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_goTypes = []interface{}{ +var file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_goTypes = []any{ (*AttestRequest)(nil), // 0: spire.plugin.server.nodeattestor.v1.AttestRequest (*AttestResponse)(nil), // 1: spire.plugin.server.nodeattestor.v1.AttestResponse (*AgentAttributes)(nil), // 2: spire.plugin.server.nodeattestor.v1.AgentAttributes @@ -356,49 +328,11 @@ func file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_init() { if File_spire_plugin_server_nodeattestor_v1_nodeattestor_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AttestResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AgentAttributes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[0].OneofWrappers = []any{ (*AttestRequest_Payload)(nil), (*AttestRequest_ChallengeResponse)(nil), } - file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes[1].OneofWrappers = []any{ (*AttestResponse_Challenge)(nil), (*AttestResponse_AgentAttributes)(nil), } @@ -406,7 +340,7 @@ func file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDesc), len(file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDesc)), NumEnums: 0, NumMessages: 3, NumExtensions: 0, @@ -417,7 +351,6 @@ func file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_init() { MessageInfos: file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_msgTypes, }.Build() File_spire_plugin_server_nodeattestor_v1_nodeattestor_proto = out.File - file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_rawDesc = nil file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_goTypes = nil file_spire_plugin_server_nodeattestor_v1_nodeattestor_proto_depIdxs = nil } diff --git a/proto/spire/plugin/server/nodeattestor/v1/nodeattestor_grpc.pb.go b/proto/spire/plugin/server/nodeattestor/v1/nodeattestor_grpc.pb.go index 663eefa..5851f20 100644 --- a/proto/spire/plugin/server/nodeattestor/v1/nodeattestor_grpc.pb.go +++ b/proto/spire/plugin/server/nodeattestor/v1/nodeattestor_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/plugin/server/nodeattestor/v1/nodeattestor.proto package nodeattestorv1 @@ -11,8 +15,12 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + NodeAttestor_Attest_FullMethodName = "/spire.plugin.server.nodeattestor.v1.NodeAttestor/Attest" +) // NodeAttestorClient is the client API for NodeAttestor service. // @@ -22,18 +30,18 @@ type NodeAttestorClient interface { // optionally participates in challenge/response attestation mechanics. // // The attestation flow is as follows: - // 1. SPIRE Server opens up a stream to the plugin via Attest. - // 2. SPIRE Server sends a request containing the attestation payload - // received from the agent. - // 3. Optionally, the plugin responds with a challenge: - // 3a. SPIRE Server sends the challenge to the agent. - // 3b. SPIRE Agent responds with the challenge response. - // 3c. SPIRE Server sends the challenge response to the plugin. - // 3d. Step 3 is repeated until the plugin is satisfied and does - // not respond with an additional challenge. - // 4. The plugin returns the attestation results to SPIRE Server and closes - // the stream. - Attest(ctx context.Context, opts ...grpc.CallOption) (NodeAttestor_AttestClient, error) + // 1. SPIRE Server opens up a stream to the plugin via Attest. + // 2. SPIRE Server sends a request containing the attestation payload + // received from the agent. + // 3. Optionally, the plugin responds with a challenge: + // 3a. SPIRE Server sends the challenge to the agent. + // 3b. SPIRE Agent responds with the challenge response. + // 3c. SPIRE Server sends the challenge response to the plugin. + // 3d. Step 3 is repeated until the plugin is satisfied and does + // not respond with an additional challenge. + // 4. The plugin returns the attestation results to SPIRE Server and closes + // the stream. + Attest(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[AttestRequest, AttestResponse], error) } type nodeAttestorClient struct { @@ -44,68 +52,54 @@ func NewNodeAttestorClient(cc grpc.ClientConnInterface) NodeAttestorClient { return &nodeAttestorClient{cc} } -func (c *nodeAttestorClient) Attest(ctx context.Context, opts ...grpc.CallOption) (NodeAttestor_AttestClient, error) { - stream, err := c.cc.NewStream(ctx, &NodeAttestor_ServiceDesc.Streams[0], "/spire.plugin.server.nodeattestor.v1.NodeAttestor/Attest", opts...) +func (c *nodeAttestorClient) Attest(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[AttestRequest, AttestResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &NodeAttestor_ServiceDesc.Streams[0], NodeAttestor_Attest_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &nodeAttestorAttestClient{stream} + x := &grpc.GenericClientStream[AttestRequest, AttestResponse]{ClientStream: stream} return x, nil } -type NodeAttestor_AttestClient interface { - Send(*AttestRequest) error - Recv() (*AttestResponse, error) - grpc.ClientStream -} - -type nodeAttestorAttestClient struct { - grpc.ClientStream -} - -func (x *nodeAttestorAttestClient) Send(m *AttestRequest) error { - return x.ClientStream.SendMsg(m) -} - -func (x *nodeAttestorAttestClient) Recv() (*AttestResponse, error) { - m := new(AttestResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type NodeAttestor_AttestClient = grpc.BidiStreamingClient[AttestRequest, AttestResponse] // NodeAttestorServer is the server API for NodeAttestor service. // All implementations must embed UnimplementedNodeAttestorServer -// for forward compatibility +// for forward compatibility. type NodeAttestorServer interface { // Attest attests attestation payload received from the agent and // optionally participates in challenge/response attestation mechanics. // // The attestation flow is as follows: - // 1. SPIRE Server opens up a stream to the plugin via Attest. - // 2. SPIRE Server sends a request containing the attestation payload - // received from the agent. - // 3. Optionally, the plugin responds with a challenge: - // 3a. SPIRE Server sends the challenge to the agent. - // 3b. SPIRE Agent responds with the challenge response. - // 3c. SPIRE Server sends the challenge response to the plugin. - // 3d. Step 3 is repeated until the plugin is satisfied and does - // not respond with an additional challenge. - // 4. The plugin returns the attestation results to SPIRE Server and closes - // the stream. - Attest(NodeAttestor_AttestServer) error + // 1. SPIRE Server opens up a stream to the plugin via Attest. + // 2. SPIRE Server sends a request containing the attestation payload + // received from the agent. + // 3. Optionally, the plugin responds with a challenge: + // 3a. SPIRE Server sends the challenge to the agent. + // 3b. SPIRE Agent responds with the challenge response. + // 3c. SPIRE Server sends the challenge response to the plugin. + // 3d. Step 3 is repeated until the plugin is satisfied and does + // not respond with an additional challenge. + // 4. The plugin returns the attestation results to SPIRE Server and closes + // the stream. + Attest(grpc.BidiStreamingServer[AttestRequest, AttestResponse]) error mustEmbedUnimplementedNodeAttestorServer() } -// UnimplementedNodeAttestorServer must be embedded to have forward compatible implementations. -type UnimplementedNodeAttestorServer struct { -} +// UnimplementedNodeAttestorServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedNodeAttestorServer struct{} -func (UnimplementedNodeAttestorServer) Attest(NodeAttestor_AttestServer) error { +func (UnimplementedNodeAttestorServer) Attest(grpc.BidiStreamingServer[AttestRequest, AttestResponse]) error { return status.Errorf(codes.Unimplemented, "method Attest not implemented") } func (UnimplementedNodeAttestorServer) mustEmbedUnimplementedNodeAttestorServer() {} +func (UnimplementedNodeAttestorServer) testEmbeddedByValue() {} // UnsafeNodeAttestorServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to NodeAttestorServer will @@ -115,34 +109,22 @@ type UnsafeNodeAttestorServer interface { } func RegisterNodeAttestorServer(s grpc.ServiceRegistrar, srv NodeAttestorServer) { + // If the following call pancis, it indicates UnimplementedNodeAttestorServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&NodeAttestor_ServiceDesc, srv) } func _NodeAttestor_Attest_Handler(srv interface{}, stream grpc.ServerStream) error { - return srv.(NodeAttestorServer).Attest(&nodeAttestorAttestServer{stream}) -} - -type NodeAttestor_AttestServer interface { - Send(*AttestResponse) error - Recv() (*AttestRequest, error) - grpc.ServerStream -} - -type nodeAttestorAttestServer struct { - grpc.ServerStream + return srv.(NodeAttestorServer).Attest(&grpc.GenericServerStream[AttestRequest, AttestResponse]{ServerStream: stream}) } -func (x *nodeAttestorAttestServer) Send(m *AttestResponse) error { - return x.ServerStream.SendMsg(m) -} - -func (x *nodeAttestorAttestServer) Recv() (*AttestRequest, error) { - m := new(AttestRequest) - if err := x.ServerStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type NodeAttestor_AttestServer = grpc.BidiStreamingServer[AttestRequest, AttestResponse] // NodeAttestor_ServiceDesc is the grpc.ServiceDesc for NodeAttestor service. // It's only intended for direct use with grpc.RegisterService, diff --git a/proto/spire/plugin/server/notifier/v1/notifier.pb.go b/proto/spire/plugin/server/notifier/v1/notifier.pb.go index c54e0a6..4ebc2bf 100644 --- a/proto/spire/plugin/server/notifier/v1/notifier.pb.go +++ b/proto/spire/plugin/server/notifier/v1/notifier.pb.go @@ -2,8 +2,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/server/notifier/v1/notifier.proto package notifierv1 @@ -14,6 +14,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -24,24 +25,22 @@ const ( ) type NotifyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The event the plugin is being notified for. // - // Types that are assignable to Event: + // Types that are valid to be assigned to Event: + // // *NotifyRequest_BundleUpdated - Event isNotifyRequest_Event `protobuf_oneof:"event"` + Event isNotifyRequest_Event `protobuf_oneof:"event"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *NotifyRequest) Reset() { *x = NotifyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *NotifyRequest) String() string { @@ -52,7 +51,7 @@ func (*NotifyRequest) ProtoMessage() {} func (x *NotifyRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -67,16 +66,18 @@ func (*NotifyRequest) Descriptor() ([]byte, []int) { return file_spire_plugin_server_notifier_v1_notifier_proto_rawDescGZIP(), []int{0} } -func (m *NotifyRequest) GetEvent() isNotifyRequest_Event { - if m != nil { - return m.Event +func (x *NotifyRequest) GetEvent() isNotifyRequest_Event { + if x != nil { + return x.Event } return nil } func (x *NotifyRequest) GetBundleUpdated() *BundleUpdated { - if x, ok := x.GetEvent().(*NotifyRequest_BundleUpdated); ok { - return x.BundleUpdated + if x != nil { + if x, ok := x.Event.(*NotifyRequest_BundleUpdated); ok { + return x.BundleUpdated + } } return nil } @@ -94,18 +95,16 @@ type NotifyRequest_BundleUpdated struct { func (*NotifyRequest_BundleUpdated) isNotifyRequest_Event() {} type NotifyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *NotifyResponse) Reset() { *x = NotifyResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *NotifyResponse) String() string { @@ -116,7 +115,7 @@ func (*NotifyResponse) ProtoMessage() {} func (x *NotifyResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -132,21 +131,18 @@ func (*NotifyResponse) Descriptor() ([]byte, []int) { } type BundleLoaded struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The bundle that was loaded. - Bundle *types.Bundle `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` + Bundle *types.Bundle `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BundleLoaded) Reset() { *x = BundleLoaded{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BundleLoaded) String() string { @@ -157,7 +153,7 @@ func (*BundleLoaded) ProtoMessage() {} func (x *BundleLoaded) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -180,24 +176,22 @@ func (x *BundleLoaded) GetBundle() *types.Bundle { } type NotifyAndAdviseRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The event the plugin is being notified for. // - // Types that are assignable to Event: + // Types that are valid to be assigned to Event: + // // *NotifyAndAdviseRequest_BundleLoaded - Event isNotifyAndAdviseRequest_Event `protobuf_oneof:"event"` + Event isNotifyAndAdviseRequest_Event `protobuf_oneof:"event"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *NotifyAndAdviseRequest) Reset() { *x = NotifyAndAdviseRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *NotifyAndAdviseRequest) String() string { @@ -208,7 +202,7 @@ func (*NotifyAndAdviseRequest) ProtoMessage() {} func (x *NotifyAndAdviseRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -223,16 +217,18 @@ func (*NotifyAndAdviseRequest) Descriptor() ([]byte, []int) { return file_spire_plugin_server_notifier_v1_notifier_proto_rawDescGZIP(), []int{3} } -func (m *NotifyAndAdviseRequest) GetEvent() isNotifyAndAdviseRequest_Event { - if m != nil { - return m.Event +func (x *NotifyAndAdviseRequest) GetEvent() isNotifyAndAdviseRequest_Event { + if x != nil { + return x.Event } return nil } func (x *NotifyAndAdviseRequest) GetBundleLoaded() *BundleLoaded { - if x, ok := x.GetEvent().(*NotifyAndAdviseRequest_BundleLoaded); ok { - return x.BundleLoaded + if x != nil { + if x, ok := x.Event.(*NotifyAndAdviseRequest_BundleLoaded); ok { + return x.BundleLoaded + } } return nil } @@ -250,18 +246,16 @@ type NotifyAndAdviseRequest_BundleLoaded struct { func (*NotifyAndAdviseRequest_BundleLoaded) isNotifyAndAdviseRequest_Event() {} type NotifyAndAdviseResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *NotifyAndAdviseResponse) Reset() { *x = NotifyAndAdviseResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *NotifyAndAdviseResponse) String() string { @@ -272,7 +266,7 @@ func (*NotifyAndAdviseResponse) ProtoMessage() {} func (x *NotifyAndAdviseResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -288,21 +282,18 @@ func (*NotifyAndAdviseResponse) Descriptor() ([]byte, []int) { } type BundleUpdated struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The bundle that was updated. - Bundle *types.Bundle `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` + Bundle *types.Bundle `protobuf:"bytes,1,opt,name=bundle,proto3" json:"bundle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BundleUpdated) Reset() { *x = BundleUpdated{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BundleUpdated) String() string { @@ -313,7 +304,7 @@ func (*BundleUpdated) ProtoMessage() {} func (x *BundleUpdated) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -337,79 +328,39 @@ func (x *BundleUpdated) GetBundle() *types.Bundle { var File_spire_plugin_server_notifier_v1_notifier_proto protoreflect.FileDescriptor -var file_spire_plugin_server_notifier_v1_notifier_proto_rawDesc = []byte{ - 0x0a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2f, 0x76, - 0x31, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x76, - 0x31, 0x1a, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x71, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x0e, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x62, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x0c, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x77, 0x0a, 0x16, 0x4e, - 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x69, 0x73, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x0d, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, - 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x62, - 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x22, 0x19, 0x0a, 0x17, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x6e, - 0x64, 0x41, 0x64, 0x76, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x43, 0x0a, 0x0d, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x12, 0x32, 0x0a, 0x06, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x06, 0x62, 0x75, - 0x6e, 0x64, 0x6c, 0x65, 0x32, 0xfc, 0x01, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x12, 0x69, 0x0a, 0x06, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x2e, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, - 0x0f, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x69, 0x73, 0x65, - 0x12, 0x37, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, - 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x41, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x69, - 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x69, - 0x66, 0x79, 0x41, 0x6e, 0x64, 0x41, 0x64, 0x76, 0x69, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x55, 0x5a, 0x53, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, - 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x3b, - 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} +const file_spire_plugin_server_notifier_v1_notifier_proto_rawDesc = "" + + "\n" + + ".spire/plugin/server/notifier/v1/notifier.proto\x12\x1fspire.plugin.server.notifier.v1\x1a\x1fspire/plugin/types/bundle.proto\"q\n" + + "\rNotifyRequest\x12W\n" + + "\x0ebundle_updated\x18\x01 \x01(\v2..spire.plugin.server.notifier.v1.BundleUpdatedH\x00R\rbundleUpdatedB\a\n" + + "\x05event\"\x10\n" + + "\x0eNotifyResponse\"B\n" + + "\fBundleLoaded\x122\n" + + "\x06bundle\x18\x01 \x01(\v2\x1a.spire.plugin.types.BundleR\x06bundle\"w\n" + + "\x16NotifyAndAdviseRequest\x12T\n" + + "\rbundle_loaded\x18\x01 \x01(\v2-.spire.plugin.server.notifier.v1.BundleLoadedH\x00R\fbundleLoadedB\a\n" + + "\x05event\"\x19\n" + + "\x17NotifyAndAdviseResponse\"C\n" + + "\rBundleUpdated\x122\n" + + "\x06bundle\x18\x01 \x01(\v2\x1a.spire.plugin.types.BundleR\x06bundle2\xfc\x01\n" + + "\bNotifier\x12i\n" + + "\x06Notify\x12..spire.plugin.server.notifier.v1.NotifyRequest\x1a/.spire.plugin.server.notifier.v1.NotifyResponse\x12\x84\x01\n" + + "\x0fNotifyAndAdvise\x127.spire.plugin.server.notifier.v1.NotifyAndAdviseRequest\x1a8.spire.plugin.server.notifier.v1.NotifyAndAdviseResponseBUZSgithub.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/notifier/v1;notifierv1b\x06proto3" var ( file_spire_plugin_server_notifier_v1_notifier_proto_rawDescOnce sync.Once - file_spire_plugin_server_notifier_v1_notifier_proto_rawDescData = file_spire_plugin_server_notifier_v1_notifier_proto_rawDesc + file_spire_plugin_server_notifier_v1_notifier_proto_rawDescData []byte ) func file_spire_plugin_server_notifier_v1_notifier_proto_rawDescGZIP() []byte { file_spire_plugin_server_notifier_v1_notifier_proto_rawDescOnce.Do(func() { - file_spire_plugin_server_notifier_v1_notifier_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_server_notifier_v1_notifier_proto_rawDescData) + file_spire_plugin_server_notifier_v1_notifier_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_server_notifier_v1_notifier_proto_rawDesc), len(file_spire_plugin_server_notifier_v1_notifier_proto_rawDesc))) }) return file_spire_plugin_server_notifier_v1_notifier_proto_rawDescData } var file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_spire_plugin_server_notifier_v1_notifier_proto_goTypes = []interface{}{ +var file_spire_plugin_server_notifier_v1_notifier_proto_goTypes = []any{ (*NotifyRequest)(nil), // 0: spire.plugin.server.notifier.v1.NotifyRequest (*NotifyResponse)(nil), // 1: spire.plugin.server.notifier.v1.NotifyResponse (*BundleLoaded)(nil), // 2: spire.plugin.server.notifier.v1.BundleLoaded @@ -439,91 +390,17 @@ func file_spire_plugin_server_notifier_v1_notifier_proto_init() { if File_spire_plugin_server_notifier_v1_notifier_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BundleLoaded); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyAndAdviseRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyAndAdviseResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BundleUpdated); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[0].OneofWrappers = []any{ (*NotifyRequest_BundleUpdated)(nil), } - file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[3].OneofWrappers = []interface{}{ + file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes[3].OneofWrappers = []any{ (*NotifyAndAdviseRequest_BundleLoaded)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_spire_plugin_server_notifier_v1_notifier_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_server_notifier_v1_notifier_proto_rawDesc), len(file_spire_plugin_server_notifier_v1_notifier_proto_rawDesc)), NumEnums: 0, NumMessages: 6, NumExtensions: 0, @@ -534,7 +411,6 @@ func file_spire_plugin_server_notifier_v1_notifier_proto_init() { MessageInfos: file_spire_plugin_server_notifier_v1_notifier_proto_msgTypes, }.Build() File_spire_plugin_server_notifier_v1_notifier_proto = out.File - file_spire_plugin_server_notifier_v1_notifier_proto_rawDesc = nil file_spire_plugin_server_notifier_v1_notifier_proto_goTypes = nil file_spire_plugin_server_notifier_v1_notifier_proto_depIdxs = nil } diff --git a/proto/spire/plugin/server/notifier/v1/notifier_grpc.pb.go b/proto/spire/plugin/server/notifier/v1/notifier_grpc.pb.go index 4c89aab..68058c9 100644 --- a/proto/spire/plugin/server/notifier/v1/notifier_grpc.pb.go +++ b/proto/spire/plugin/server/notifier/v1/notifier_grpc.pb.go @@ -1,4 +1,10 @@ +// A Notifier plugin reacts to various server related events + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/plugin/server/notifier/v1/notifier.proto package notifierv1 @@ -11,8 +17,13 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Notifier_Notify_FullMethodName = "/spire.plugin.server.notifier.v1.Notifier/Notify" + Notifier_NotifyAndAdvise_FullMethodName = "/spire.plugin.server.notifier.v1.Notifier/NotifyAndAdvise" +) // NotifierClient is the client API for Notifier service. // @@ -36,8 +47,9 @@ func NewNotifierClient(cc grpc.ClientConnInterface) NotifierClient { } func (c *notifierClient) Notify(ctx context.Context, in *NotifyRequest, opts ...grpc.CallOption) (*NotifyResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(NotifyResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.server.notifier.v1.Notifier/Notify", in, out, opts...) + err := c.cc.Invoke(ctx, Notifier_Notify_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -45,8 +57,9 @@ func (c *notifierClient) Notify(ctx context.Context, in *NotifyRequest, opts ... } func (c *notifierClient) NotifyAndAdvise(ctx context.Context, in *NotifyAndAdviseRequest, opts ...grpc.CallOption) (*NotifyAndAdviseResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(NotifyAndAdviseResponse) - err := c.cc.Invoke(ctx, "/spire.plugin.server.notifier.v1.Notifier/NotifyAndAdvise", in, out, opts...) + err := c.cc.Invoke(ctx, Notifier_NotifyAndAdvise_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -55,7 +68,7 @@ func (c *notifierClient) NotifyAndAdvise(ctx context.Context, in *NotifyAndAdvis // NotifierServer is the server API for Notifier service. // All implementations must embed UnimplementedNotifierServer -// for forward compatibility +// for forward compatibility. type NotifierServer interface { // Notify notifies the plugin that an event occurred. Errors returned by // the plugin are logged but otherwise ignored. @@ -67,9 +80,12 @@ type NotifierServer interface { mustEmbedUnimplementedNotifierServer() } -// UnimplementedNotifierServer must be embedded to have forward compatible implementations. -type UnimplementedNotifierServer struct { -} +// UnimplementedNotifierServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedNotifierServer struct{} func (UnimplementedNotifierServer) Notify(context.Context, *NotifyRequest) (*NotifyResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Notify not implemented") @@ -78,6 +94,7 @@ func (UnimplementedNotifierServer) NotifyAndAdvise(context.Context, *NotifyAndAd return nil, status.Errorf(codes.Unimplemented, "method NotifyAndAdvise not implemented") } func (UnimplementedNotifierServer) mustEmbedUnimplementedNotifierServer() {} +func (UnimplementedNotifierServer) testEmbeddedByValue() {} // UnsafeNotifierServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to NotifierServer will @@ -87,6 +104,13 @@ type UnsafeNotifierServer interface { } func RegisterNotifierServer(s grpc.ServiceRegistrar, srv NotifierServer) { + // If the following call pancis, it indicates UnimplementedNotifierServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&Notifier_ServiceDesc, srv) } @@ -100,7 +124,7 @@ func _Notifier_Notify_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.server.notifier.v1.Notifier/Notify", + FullMethod: Notifier_Notify_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NotifierServer).Notify(ctx, req.(*NotifyRequest)) @@ -118,7 +142,7 @@ func _Notifier_NotifyAndAdvise_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.plugin.server.notifier.v1.Notifier/NotifyAndAdvise", + FullMethod: Notifier_NotifyAndAdvise_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(NotifierServer).NotifyAndAdvise(ctx, req.(*NotifyAndAdviseRequest)) diff --git a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go index 1509e9d..8969ad7 100644 --- a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go +++ b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto package upstreamauthorityv1 @@ -12,6 +12,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -22,25 +23,22 @@ const ( ) type MintX509CARequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. Certificate signing request (PKCS#10) Csr []byte `protobuf:"bytes,1,opt,name=csr,proto3" json:"csr,omitempty"` // Optional. Preferred TTL is the TTL preferred by SPIRE Server for signed CA. If // zero, the plugin should determine its own TTL value. Plugins are free to // ignore this and use their own policies around TTLs. - PreferredTtl int32 `protobuf:"varint,2,opt,name=preferred_ttl,json=preferredTtl,proto3" json:"preferred_ttl,omitempty"` + PreferredTtl int32 `protobuf:"varint,2,opt,name=preferred_ttl,json=preferredTtl,proto3" json:"preferred_ttl,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MintX509CARequest) Reset() { *x = MintX509CARequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MintX509CARequest) String() string { @@ -51,7 +49,7 @@ func (*MintX509CARequest) ProtoMessage() {} func (x *MintX509CARequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -81,10 +79,7 @@ func (x *MintX509CARequest) GetPreferredTtl() int32 { } type MintX509CAResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required on the first response. Contains ASN.1 encoded certificates // representing the X.509 CA along with any intermediates necessary to // chain back to a certificate present in the upstream_x509_roots. The @@ -92,15 +87,15 @@ type MintX509CAResponse struct { X509CaChain []*types.X509Certificate `protobuf:"bytes,1,rep,name=x509_ca_chain,json=x509CaChain,proto3" json:"x509_ca_chain,omitempty"` // Required. The trusted X.509 root authorities for the upstream authority. UpstreamX509Roots []*types.X509Certificate `protobuf:"bytes,2,rep,name=upstream_x509_roots,json=upstreamX509Roots,proto3" json:"upstream_x509_roots,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MintX509CAResponse) Reset() { *x = MintX509CAResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MintX509CAResponse) String() string { @@ -111,7 +106,7 @@ func (*MintX509CAResponse) ProtoMessage() {} func (x *MintX509CAResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -141,21 +136,18 @@ func (x *MintX509CAResponse) GetUpstreamX509Roots() []*types.X509Certificate { } type PublishJWTKeyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The JWT signing key to publish upstream. - JwtKey *types.JWTKey `protobuf:"bytes,1,opt,name=jwt_key,json=jwtKey,proto3" json:"jwt_key,omitempty"` + JwtKey *types.JWTKey `protobuf:"bytes,1,opt,name=jwt_key,json=jwtKey,proto3" json:"jwt_key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PublishJWTKeyRequest) Reset() { *x = PublishJWTKeyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PublishJWTKeyRequest) String() string { @@ -166,7 +158,7 @@ func (*PublishJWTKeyRequest) ProtoMessage() {} func (x *PublishJWTKeyRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -189,21 +181,18 @@ func (x *PublishJWTKeyRequest) GetJwtKey() *types.JWTKey { } type PublishJWTKeyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The upstream JWT signing keys. UpstreamJwtKeys []*types.JWTKey `protobuf:"bytes,1,rep,name=upstream_jwt_keys,json=upstreamJwtKeys,proto3" json:"upstream_jwt_keys,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PublishJWTKeyResponse) Reset() { *x = PublishJWTKeyResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PublishJWTKeyResponse) String() string { @@ -214,7 +203,7 @@ func (*PublishJWTKeyResponse) ProtoMessage() {} func (x *PublishJWTKeyResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -237,18 +226,16 @@ func (x *PublishJWTKeyResponse) GetUpstreamJwtKeys() []*types.JWTKey { } type SubscribeToLocalBundleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribeToLocalBundleRequest) Reset() { *x = SubscribeToLocalBundleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeToLocalBundleRequest) String() string { @@ -259,7 +246,7 @@ func (*SubscribeToLocalBundleRequest) ProtoMessage() {} func (x *SubscribeToLocalBundleRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -275,23 +262,20 @@ func (*SubscribeToLocalBundleRequest) Descriptor() ([]byte, []int) { } type SubscribeToLocalBundleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The trusted X.509 root authorities for the upstream authority. UpstreamX509Roots []*types.X509Certificate `protobuf:"bytes,1,rep,name=upstream_x509_roots,json=upstreamX509Roots,proto3" json:"upstream_x509_roots,omitempty"` // Required. The upstream JWT signing keys. UpstreamJwtKeys []*types.JWTKey `protobuf:"bytes,2,rep,name=upstream_jwt_keys,json=upstreamJwtKeys,proto3" json:"upstream_jwt_keys,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SubscribeToLocalBundleResponse) Reset() { *x = SubscribeToLocalBundleResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubscribeToLocalBundleResponse) String() string { @@ -302,7 +286,7 @@ func (*SubscribeToLocalBundleResponse) ProtoMessage() {} func (x *SubscribeToLocalBundleResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -333,115 +317,42 @@ func (x *SubscribeToLocalBundleResponse) GetUpstreamJwtKeys() []*types.JWTKey { var File_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto protoreflect.FileDescriptor -var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc = []byte{ - 0x0a, 0x40, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x70, 0x73, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x28, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2f, 0x6a, 0x77, 0x74, 0x6b, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, - 0x73, 0x2f, 0x78, 0x35, 0x30, 0x39, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x11, 0x4d, 0x69, 0x6e, 0x74, 0x58, - 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x63, 0x73, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x63, 0x73, 0x72, 0x12, 0x23, - 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x74, 0x74, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, - 0x54, 0x74, 0x6c, 0x22, 0xb2, 0x01, 0x0a, 0x12, 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, - 0x43, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0d, 0x78, 0x35, - 0x30, 0x39, 0x5f, 0x63, 0x61, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x78, 0x35, 0x30, 0x39, 0x43, 0x61, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x12, 0x53, 0x0a, 0x13, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, - 0x78, 0x35, 0x30, 0x39, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x11, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x58, - 0x35, 0x30, 0x39, 0x52, 0x6f, 0x6f, 0x74, 0x73, 0x22, 0x4b, 0x0a, 0x14, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x33, 0x0a, 0x07, 0x6a, 0x77, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6a, - 0x77, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x5f, 0x0a, 0x15, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, - 0x0a, 0x11, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6a, 0x77, 0x74, 0x5f, 0x6b, - 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4a, - 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x0f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4a, - 0x77, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xbd, 0x01, 0x0a, 0x1e, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, 0x64, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x13, 0x75, 0x70, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x78, 0x35, 0x30, 0x39, 0x5f, 0x72, 0x6f, 0x6f, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x58, 0x35, 0x30, - 0x39, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x11, 0x75, 0x70, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x58, 0x35, 0x30, 0x39, 0x52, 0x6f, 0x6f, 0x74, 0x73, 0x12, - 0x46, 0x0a, 0x11, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x6a, 0x77, 0x74, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x69, - 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x0f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x4a, 0x77, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x32, 0xfc, 0x03, 0x0a, 0x11, 0x55, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x95, 0x01, - 0x0a, 0x16, 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x41, 0x6e, 0x64, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x3b, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, - 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x69, 0x6e, 0x74, 0x58, 0x35, 0x30, 0x39, 0x43, 0x41, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x9e, 0x01, 0x0a, 0x19, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x41, 0x6e, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x12, 0x3e, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, - 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0xad, 0x01, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x12, 0x47, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, - 0x64, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x48, 0x2e, 0x73, 0x70, 0x69, - 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x2e, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, - 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x67, 0x5a, 0x65, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x76, 0x31, 0x3b, 0x75, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x76, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc = "" + + "\n" + + "@spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto\x12(spire.plugin.server.upstreamauthority.v1\x1a\x1fspire/plugin/types/jwtkey.proto\x1a(spire/plugin/types/x509certificate.proto\"J\n" + + "\x11MintX509CARequest\x12\x10\n" + + "\x03csr\x18\x01 \x01(\fR\x03csr\x12#\n" + + "\rpreferred_ttl\x18\x02 \x01(\x05R\fpreferredTtl\"\xb2\x01\n" + + "\x12MintX509CAResponse\x12G\n" + + "\rx509_ca_chain\x18\x01 \x03(\v2#.spire.plugin.types.X509CertificateR\vx509CaChain\x12S\n" + + "\x13upstream_x509_roots\x18\x02 \x03(\v2#.spire.plugin.types.X509CertificateR\x11upstreamX509Roots\"K\n" + + "\x14PublishJWTKeyRequest\x123\n" + + "\ajwt_key\x18\x01 \x01(\v2\x1a.spire.plugin.types.JWTKeyR\x06jwtKey\"_\n" + + "\x15PublishJWTKeyResponse\x12F\n" + + "\x11upstream_jwt_keys\x18\x01 \x03(\v2\x1a.spire.plugin.types.JWTKeyR\x0fupstreamJwtKeys\"\x1f\n" + + "\x1dSubscribeToLocalBundleRequest\"\xbd\x01\n" + + "\x1eSubscribeToLocalBundleResponse\x12S\n" + + "\x13upstream_x509_roots\x18\x01 \x03(\v2#.spire.plugin.types.X509CertificateR\x11upstreamX509Roots\x12F\n" + + "\x11upstream_jwt_keys\x18\x02 \x03(\v2\x1a.spire.plugin.types.JWTKeyR\x0fupstreamJwtKeys2\xfc\x03\n" + + "\x11UpstreamAuthority\x12\x95\x01\n" + + "\x16MintX509CAAndSubscribe\x12;.spire.plugin.server.upstreamauthority.v1.MintX509CARequest\x1a<.spire.plugin.server.upstreamauthority.v1.MintX509CAResponse0\x01\x12\x9e\x01\n" + + "\x19PublishJWTKeyAndSubscribe\x12>.spire.plugin.server.upstreamauthority.v1.PublishJWTKeyRequest\x1a?.spire.plugin.server.upstreamauthority.v1.PublishJWTKeyResponse0\x01\x12\xad\x01\n" + + "\x16SubscribeToLocalBundle\x12G.spire.plugin.server.upstreamauthority.v1.SubscribeToLocalBundleRequest\x1aH.spire.plugin.server.upstreamauthority.v1.SubscribeToLocalBundleResponse0\x01BgZegithub.com/spiffe/spire-plugin-sdk/proto/spire/plugin/server/upstreamauthority/v1;upstreamauthorityv1b\x06proto3" var ( file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescOnce sync.Once - file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescData = file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc + file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescData []byte ) func file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescGZIP() []byte { file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescOnce.Do(func() { - file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescData) + file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc), len(file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc))) }) return file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDescData } var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_goTypes = []interface{}{ +var file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_goTypes = []any{ (*MintX509CARequest)(nil), // 0: spire.plugin.server.upstreamauthority.v1.MintX509CARequest (*MintX509CAResponse)(nil), // 1: spire.plugin.server.upstreamauthority.v1.MintX509CAResponse (*PublishJWTKeyRequest)(nil), // 2: spire.plugin.server.upstreamauthority.v1.PublishJWTKeyRequest @@ -476,85 +387,11 @@ func file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_init( if File_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MintX509CARequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MintX509CAResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublishJWTKeyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublishJWTKeyResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeToLocalBundleRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscribeToLocalBundleResponse); 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_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc), len(file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc)), NumEnums: 0, NumMessages: 6, NumExtensions: 0, @@ -565,7 +402,6 @@ func file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_init( MessageInfos: file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_msgTypes, }.Build() File_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto = out.File - file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_rawDesc = nil file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_goTypes = nil file_spire_plugin_server_upstreamauthority_v1_upstreamauthority_proto_depIdxs = nil } diff --git a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority_grpc.pb.go b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority_grpc.pb.go index 3e74f26..936a121 100644 --- a/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority_grpc.pb.go +++ b/proto/spire/plugin/server/upstreamauthority/v1/upstreamauthority_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/plugin/server/upstreamauthority/v1/upstreamauthority.proto package upstreamauthorityv1 @@ -11,8 +15,14 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + UpstreamAuthority_MintX509CAAndSubscribe_FullMethodName = "/spire.plugin.server.upstreamauthority.v1.UpstreamAuthority/MintX509CAAndSubscribe" + UpstreamAuthority_PublishJWTKeyAndSubscribe_FullMethodName = "/spire.plugin.server.upstreamauthority.v1.UpstreamAuthority/PublishJWTKeyAndSubscribe" + UpstreamAuthority_SubscribeToLocalBundle_FullMethodName = "/spire.plugin.server.upstreamauthority.v1.UpstreamAuthority/SubscribeToLocalBundle" +) // UpstreamAuthorityClient is the client API for UpstreamAuthority service. // @@ -27,7 +37,7 @@ type UpstreamAuthorityClient interface { // The stream should be kept open in the face of transient errors // encountered while tracking changes to the upstream X.509 roots as SPIRE // Server will not reopen a closed stream until the next X.509 CA rotation. - MintX509CAAndSubscribe(ctx context.Context, in *MintX509CARequest, opts ...grpc.CallOption) (UpstreamAuthority_MintX509CAAndSubscribeClient, error) + MintX509CAAndSubscribe(ctx context.Context, in *MintX509CARequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[MintX509CAResponse], error) // Publishes a JWT signing key upstream and responds with the upstream JWT // keys. If supported by the implementation, subsequent responses on the // stream contain upstream JWT key updates, otherwise the stream is closed @@ -39,7 +49,7 @@ type UpstreamAuthorityClient interface { // The stream should be kept open in the face of transient errors // encountered while tracking changes to the upstream JWT keys as SPIRE // Server will not reopen a closed stream until the next JWT key rotation. - PublishJWTKeyAndSubscribe(ctx context.Context, in *PublishJWTKeyRequest, opts ...grpc.CallOption) (UpstreamAuthority_PublishJWTKeyAndSubscribeClient, error) + PublishJWTKeyAndSubscribe(ctx context.Context, in *PublishJWTKeyRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PublishJWTKeyResponse], error) // Returns the trust bundle of the local trust domain as seen by the upstream // authority. Returns the current set of X.509 roots and JWT public keys // that make up the trust bundle of the trust domain. If supported by the @@ -47,7 +57,7 @@ type UpstreamAuthorityClient interface { // updates, otherwise the stream is closed after the initial response. // // This RPC is optional and will return NotImplemented if unsupported. - SubscribeToLocalBundle(ctx context.Context, in *SubscribeToLocalBundleRequest, opts ...grpc.CallOption) (UpstreamAuthority_SubscribeToLocalBundleClient, error) + SubscribeToLocalBundle(ctx context.Context, in *SubscribeToLocalBundleRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SubscribeToLocalBundleResponse], error) } type upstreamAuthorityClient struct { @@ -58,12 +68,13 @@ func NewUpstreamAuthorityClient(cc grpc.ClientConnInterface) UpstreamAuthorityCl return &upstreamAuthorityClient{cc} } -func (c *upstreamAuthorityClient) MintX509CAAndSubscribe(ctx context.Context, in *MintX509CARequest, opts ...grpc.CallOption) (UpstreamAuthority_MintX509CAAndSubscribeClient, error) { - stream, err := c.cc.NewStream(ctx, &UpstreamAuthority_ServiceDesc.Streams[0], "/spire.plugin.server.upstreamauthority.v1.UpstreamAuthority/MintX509CAAndSubscribe", opts...) +func (c *upstreamAuthorityClient) MintX509CAAndSubscribe(ctx context.Context, in *MintX509CARequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[MintX509CAResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &UpstreamAuthority_ServiceDesc.Streams[0], UpstreamAuthority_MintX509CAAndSubscribe_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &upstreamAuthorityMintX509CAAndSubscribeClient{stream} + x := &grpc.GenericClientStream[MintX509CARequest, MintX509CAResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -73,29 +84,16 @@ func (c *upstreamAuthorityClient) MintX509CAAndSubscribe(ctx context.Context, in return x, nil } -type UpstreamAuthority_MintX509CAAndSubscribeClient interface { - Recv() (*MintX509CAResponse, error) - grpc.ClientStream -} - -type upstreamAuthorityMintX509CAAndSubscribeClient struct { - grpc.ClientStream -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type UpstreamAuthority_MintX509CAAndSubscribeClient = grpc.ServerStreamingClient[MintX509CAResponse] -func (x *upstreamAuthorityMintX509CAAndSubscribeClient) Recv() (*MintX509CAResponse, error) { - m := new(MintX509CAResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *upstreamAuthorityClient) PublishJWTKeyAndSubscribe(ctx context.Context, in *PublishJWTKeyRequest, opts ...grpc.CallOption) (UpstreamAuthority_PublishJWTKeyAndSubscribeClient, error) { - stream, err := c.cc.NewStream(ctx, &UpstreamAuthority_ServiceDesc.Streams[1], "/spire.plugin.server.upstreamauthority.v1.UpstreamAuthority/PublishJWTKeyAndSubscribe", opts...) +func (c *upstreamAuthorityClient) PublishJWTKeyAndSubscribe(ctx context.Context, in *PublishJWTKeyRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[PublishJWTKeyResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &UpstreamAuthority_ServiceDesc.Streams[1], UpstreamAuthority_PublishJWTKeyAndSubscribe_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &upstreamAuthorityPublishJWTKeyAndSubscribeClient{stream} + x := &grpc.GenericClientStream[PublishJWTKeyRequest, PublishJWTKeyResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -105,29 +103,16 @@ func (c *upstreamAuthorityClient) PublishJWTKeyAndSubscribe(ctx context.Context, return x, nil } -type UpstreamAuthority_PublishJWTKeyAndSubscribeClient interface { - Recv() (*PublishJWTKeyResponse, error) - grpc.ClientStream -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type UpstreamAuthority_PublishJWTKeyAndSubscribeClient = grpc.ServerStreamingClient[PublishJWTKeyResponse] -type upstreamAuthorityPublishJWTKeyAndSubscribeClient struct { - grpc.ClientStream -} - -func (x *upstreamAuthorityPublishJWTKeyAndSubscribeClient) Recv() (*PublishJWTKeyResponse, error) { - m := new(PublishJWTKeyResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} - -func (c *upstreamAuthorityClient) SubscribeToLocalBundle(ctx context.Context, in *SubscribeToLocalBundleRequest, opts ...grpc.CallOption) (UpstreamAuthority_SubscribeToLocalBundleClient, error) { - stream, err := c.cc.NewStream(ctx, &UpstreamAuthority_ServiceDesc.Streams[2], "/spire.plugin.server.upstreamauthority.v1.UpstreamAuthority/SubscribeToLocalBundle", opts...) +func (c *upstreamAuthorityClient) SubscribeToLocalBundle(ctx context.Context, in *SubscribeToLocalBundleRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[SubscribeToLocalBundleResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &UpstreamAuthority_ServiceDesc.Streams[2], UpstreamAuthority_SubscribeToLocalBundle_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &upstreamAuthoritySubscribeToLocalBundleClient{stream} + x := &grpc.GenericClientStream[SubscribeToLocalBundleRequest, SubscribeToLocalBundleResponse]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -137,26 +122,12 @@ func (c *upstreamAuthorityClient) SubscribeToLocalBundle(ctx context.Context, in return x, nil } -type UpstreamAuthority_SubscribeToLocalBundleClient interface { - Recv() (*SubscribeToLocalBundleResponse, error) - grpc.ClientStream -} - -type upstreamAuthoritySubscribeToLocalBundleClient struct { - grpc.ClientStream -} - -func (x *upstreamAuthoritySubscribeToLocalBundleClient) Recv() (*SubscribeToLocalBundleResponse, error) { - m := new(SubscribeToLocalBundleResponse) - if err := x.ClientStream.RecvMsg(m); err != nil { - return nil, err - } - return m, nil -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type UpstreamAuthority_SubscribeToLocalBundleClient = grpc.ServerStreamingClient[SubscribeToLocalBundleResponse] // UpstreamAuthorityServer is the server API for UpstreamAuthority service. // All implementations must embed UnimplementedUpstreamAuthorityServer -// for forward compatibility +// for forward compatibility. type UpstreamAuthorityServer interface { // Mints an X.509 CA and responds with the signed X.509 CA certificate // chain and upstream X.509 roots. If supported by the implementation, @@ -167,7 +138,7 @@ type UpstreamAuthorityServer interface { // The stream should be kept open in the face of transient errors // encountered while tracking changes to the upstream X.509 roots as SPIRE // Server will not reopen a closed stream until the next X.509 CA rotation. - MintX509CAAndSubscribe(*MintX509CARequest, UpstreamAuthority_MintX509CAAndSubscribeServer) error + MintX509CAAndSubscribe(*MintX509CARequest, grpc.ServerStreamingServer[MintX509CAResponse]) error // Publishes a JWT signing key upstream and responds with the upstream JWT // keys. If supported by the implementation, subsequent responses on the // stream contain upstream JWT key updates, otherwise the stream is closed @@ -179,7 +150,7 @@ type UpstreamAuthorityServer interface { // The stream should be kept open in the face of transient errors // encountered while tracking changes to the upstream JWT keys as SPIRE // Server will not reopen a closed stream until the next JWT key rotation. - PublishJWTKeyAndSubscribe(*PublishJWTKeyRequest, UpstreamAuthority_PublishJWTKeyAndSubscribeServer) error + PublishJWTKeyAndSubscribe(*PublishJWTKeyRequest, grpc.ServerStreamingServer[PublishJWTKeyResponse]) error // Returns the trust bundle of the local trust domain as seen by the upstream // authority. Returns the current set of X.509 roots and JWT public keys // that make up the trust bundle of the trust domain. If supported by the @@ -187,24 +158,28 @@ type UpstreamAuthorityServer interface { // updates, otherwise the stream is closed after the initial response. // // This RPC is optional and will return NotImplemented if unsupported. - SubscribeToLocalBundle(*SubscribeToLocalBundleRequest, UpstreamAuthority_SubscribeToLocalBundleServer) error + SubscribeToLocalBundle(*SubscribeToLocalBundleRequest, grpc.ServerStreamingServer[SubscribeToLocalBundleResponse]) error mustEmbedUnimplementedUpstreamAuthorityServer() } -// UnimplementedUpstreamAuthorityServer must be embedded to have forward compatible implementations. -type UnimplementedUpstreamAuthorityServer struct { -} +// UnimplementedUpstreamAuthorityServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedUpstreamAuthorityServer struct{} -func (UnimplementedUpstreamAuthorityServer) MintX509CAAndSubscribe(*MintX509CARequest, UpstreamAuthority_MintX509CAAndSubscribeServer) error { +func (UnimplementedUpstreamAuthorityServer) MintX509CAAndSubscribe(*MintX509CARequest, grpc.ServerStreamingServer[MintX509CAResponse]) error { return status.Errorf(codes.Unimplemented, "method MintX509CAAndSubscribe not implemented") } -func (UnimplementedUpstreamAuthorityServer) PublishJWTKeyAndSubscribe(*PublishJWTKeyRequest, UpstreamAuthority_PublishJWTKeyAndSubscribeServer) error { +func (UnimplementedUpstreamAuthorityServer) PublishJWTKeyAndSubscribe(*PublishJWTKeyRequest, grpc.ServerStreamingServer[PublishJWTKeyResponse]) error { return status.Errorf(codes.Unimplemented, "method PublishJWTKeyAndSubscribe not implemented") } -func (UnimplementedUpstreamAuthorityServer) SubscribeToLocalBundle(*SubscribeToLocalBundleRequest, UpstreamAuthority_SubscribeToLocalBundleServer) error { +func (UnimplementedUpstreamAuthorityServer) SubscribeToLocalBundle(*SubscribeToLocalBundleRequest, grpc.ServerStreamingServer[SubscribeToLocalBundleResponse]) error { return status.Errorf(codes.Unimplemented, "method SubscribeToLocalBundle not implemented") } func (UnimplementedUpstreamAuthorityServer) mustEmbedUnimplementedUpstreamAuthorityServer() {} +func (UnimplementedUpstreamAuthorityServer) testEmbeddedByValue() {} // UnsafeUpstreamAuthorityServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to UpstreamAuthorityServer will @@ -214,6 +189,13 @@ type UnsafeUpstreamAuthorityServer interface { } func RegisterUpstreamAuthorityServer(s grpc.ServiceRegistrar, srv UpstreamAuthorityServer) { + // If the following call pancis, it indicates UnimplementedUpstreamAuthorityServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&UpstreamAuthority_ServiceDesc, srv) } @@ -222,63 +204,33 @@ func _UpstreamAuthority_MintX509CAAndSubscribe_Handler(srv interface{}, stream g if err := stream.RecvMsg(m); err != nil { return err } - return srv.(UpstreamAuthorityServer).MintX509CAAndSubscribe(m, &upstreamAuthorityMintX509CAAndSubscribeServer{stream}) + return srv.(UpstreamAuthorityServer).MintX509CAAndSubscribe(m, &grpc.GenericServerStream[MintX509CARequest, MintX509CAResponse]{ServerStream: stream}) } -type UpstreamAuthority_MintX509CAAndSubscribeServer interface { - Send(*MintX509CAResponse) error - grpc.ServerStream -} - -type upstreamAuthorityMintX509CAAndSubscribeServer struct { - grpc.ServerStream -} - -func (x *upstreamAuthorityMintX509CAAndSubscribeServer) Send(m *MintX509CAResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type UpstreamAuthority_MintX509CAAndSubscribeServer = grpc.ServerStreamingServer[MintX509CAResponse] func _UpstreamAuthority_PublishJWTKeyAndSubscribe_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(PublishJWTKeyRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(UpstreamAuthorityServer).PublishJWTKeyAndSubscribe(m, &upstreamAuthorityPublishJWTKeyAndSubscribeServer{stream}) + return srv.(UpstreamAuthorityServer).PublishJWTKeyAndSubscribe(m, &grpc.GenericServerStream[PublishJWTKeyRequest, PublishJWTKeyResponse]{ServerStream: stream}) } -type UpstreamAuthority_PublishJWTKeyAndSubscribeServer interface { - Send(*PublishJWTKeyResponse) error - grpc.ServerStream -} - -type upstreamAuthorityPublishJWTKeyAndSubscribeServer struct { - grpc.ServerStream -} - -func (x *upstreamAuthorityPublishJWTKeyAndSubscribeServer) Send(m *PublishJWTKeyResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type UpstreamAuthority_PublishJWTKeyAndSubscribeServer = grpc.ServerStreamingServer[PublishJWTKeyResponse] func _UpstreamAuthority_SubscribeToLocalBundle_Handler(srv interface{}, stream grpc.ServerStream) error { m := new(SubscribeToLocalBundleRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(UpstreamAuthorityServer).SubscribeToLocalBundle(m, &upstreamAuthoritySubscribeToLocalBundleServer{stream}) + return srv.(UpstreamAuthorityServer).SubscribeToLocalBundle(m, &grpc.GenericServerStream[SubscribeToLocalBundleRequest, SubscribeToLocalBundleResponse]{ServerStream: stream}) } -type UpstreamAuthority_SubscribeToLocalBundleServer interface { - Send(*SubscribeToLocalBundleResponse) error - grpc.ServerStream -} - -type upstreamAuthoritySubscribeToLocalBundleServer struct { - grpc.ServerStream -} - -func (x *upstreamAuthoritySubscribeToLocalBundleServer) Send(m *SubscribeToLocalBundleResponse) error { - return x.ServerStream.SendMsg(m) -} +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type UpstreamAuthority_SubscribeToLocalBundleServer = grpc.ServerStreamingServer[SubscribeToLocalBundleResponse] // UpstreamAuthority_ServiceDesc is the grpc.ServiceDesc for UpstreamAuthority service. // It's only intended for direct use with grpc.RegisterService, diff --git a/proto/spire/plugin/types/bundle.pb.go b/proto/spire/plugin/types/bundle.pb.go index bc893ff..184f247 100644 --- a/proto/spire/plugin/types/bundle.pb.go +++ b/proto/spire/plugin/types/bundle.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/types/bundle.proto package types @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -21,10 +22,7 @@ const ( ) type Bundle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The name of the trust domain the bundle belongs to (e.g., "example.org"). TrustDomain string `protobuf:"bytes,1,opt,name=trust_domain,json=trustDomain,proto3" json:"trust_domain,omitempty"` // X.509 authorities for authenticating X509-SVIDs. @@ -36,15 +34,15 @@ type Bundle struct { RefreshHint int64 `protobuf:"varint,4,opt,name=refresh_hint,json=refreshHint,proto3" json:"refresh_hint,omitempty"` // The sequence number of the bundle. SequenceNumber uint64 `protobuf:"varint,5,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Bundle) Reset() { *x = Bundle{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_types_bundle_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_types_bundle_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Bundle) String() string { @@ -55,7 +53,7 @@ func (*Bundle) ProtoMessage() {} func (x *Bundle) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_types_bundle_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -107,53 +105,30 @@ func (x *Bundle) GetSequenceNumber() uint64 { var File_spire_plugin_types_bundle_proto protoreflect.FileDescriptor -var file_spire_plugin_types_bundle_proto_rawDesc = []byte{ - 0x0a, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x12, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6a, 0x77, 0x74, 0x6b, 0x65, 0x79, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, - 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x78, 0x35, 0x30, 0x39, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x8c, 0x02, 0x0a, 0x06, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x74, 0x72, 0x75, 0x73, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x4e, - 0x0a, 0x10, 0x78, 0x35, 0x30, 0x39, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x58, 0x35, - 0x30, 0x39, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x78, - 0x35, 0x30, 0x39, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x43, - 0x0a, 0x0f, 0x6a, 0x77, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, - 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4a, 0x57, 0x54, - 0x4b, 0x65, 0x79, 0x52, 0x0e, 0x6a, 0x77, 0x74, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x68, - 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x48, 0x69, 0x6e, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0e, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, - 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, - 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_plugin_types_bundle_proto_rawDesc = "" + + "\n" + + "\x1fspire/plugin/types/bundle.proto\x12\x12spire.plugin.types\x1a\x1fspire/plugin/types/jwtkey.proto\x1a(spire/plugin/types/x509certificate.proto\"\x8c\x02\n" + + "\x06Bundle\x12!\n" + + "\ftrust_domain\x18\x01 \x01(\tR\vtrustDomain\x12N\n" + + "\x10x509_authorities\x18\x02 \x03(\v2#.spire.plugin.types.X509CertificateR\x0fx509Authorities\x12C\n" + + "\x0fjwt_authorities\x18\x03 \x03(\v2\x1a.spire.plugin.types.JWTKeyR\x0ejwtAuthorities\x12!\n" + + "\frefresh_hint\x18\x04 \x01(\x03R\vrefreshHint\x12'\n" + + "\x0fsequence_number\x18\x05 \x01(\x04R\x0esequenceNumberB=Z;github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/typesb\x06proto3" var ( file_spire_plugin_types_bundle_proto_rawDescOnce sync.Once - file_spire_plugin_types_bundle_proto_rawDescData = file_spire_plugin_types_bundle_proto_rawDesc + file_spire_plugin_types_bundle_proto_rawDescData []byte ) func file_spire_plugin_types_bundle_proto_rawDescGZIP() []byte { file_spire_plugin_types_bundle_proto_rawDescOnce.Do(func() { - file_spire_plugin_types_bundle_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_types_bundle_proto_rawDescData) + file_spire_plugin_types_bundle_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_types_bundle_proto_rawDesc), len(file_spire_plugin_types_bundle_proto_rawDesc))) }) return file_spire_plugin_types_bundle_proto_rawDescData } var file_spire_plugin_types_bundle_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_spire_plugin_types_bundle_proto_goTypes = []interface{}{ +var file_spire_plugin_types_bundle_proto_goTypes = []any{ (*Bundle)(nil), // 0: spire.plugin.types.Bundle (*X509Certificate)(nil), // 1: spire.plugin.types.X509Certificate (*JWTKey)(nil), // 2: spire.plugin.types.JWTKey @@ -175,25 +150,11 @@ func file_spire_plugin_types_bundle_proto_init() { } file_spire_plugin_types_jwtkey_proto_init() file_spire_plugin_types_x509certificate_proto_init() - if !protoimpl.UnsafeEnabled { - file_spire_plugin_types_bundle_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Bundle); 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_spire_plugin_types_bundle_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_types_bundle_proto_rawDesc), len(file_spire_plugin_types_bundle_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -204,7 +165,6 @@ func file_spire_plugin_types_bundle_proto_init() { MessageInfos: file_spire_plugin_types_bundle_proto_msgTypes, }.Build() File_spire_plugin_types_bundle_proto = out.File - file_spire_plugin_types_bundle_proto_rawDesc = nil file_spire_plugin_types_bundle_proto_goTypes = nil file_spire_plugin_types_bundle_proto_depIdxs = nil } diff --git a/proto/spire/plugin/types/jwtkey.pb.go b/proto/spire/plugin/types/jwtkey.pb.go index c1eee93..d5df8bb 100644 --- a/proto/spire/plugin/types/jwtkey.pb.go +++ b/proto/spire/plugin/types/jwtkey.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/types/jwtkey.proto package types @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -21,10 +22,7 @@ const ( ) type JWTKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The PKIX encoded public key. PublicKey []byte `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // The key identifier. @@ -33,16 +31,16 @@ type JWTKey struct { // not expire. ExpiresAt int64 `protobuf:"varint,3,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` // Indicates if the key has been tainted. A tainted key is not safe to be used anymore. - Tainted bool `protobuf:"varint,4,opt,name=tainted,proto3" json:"tainted,omitempty"` + Tainted bool `protobuf:"varint,4,opt,name=tainted,proto3" json:"tainted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *JWTKey) Reset() { *x = JWTKey{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_types_jwtkey_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_types_jwtkey_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *JWTKey) String() string { @@ -53,7 +51,7 @@ func (*JWTKey) ProtoMessage() {} func (x *JWTKey) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_types_jwtkey_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -98,39 +96,31 @@ func (x *JWTKey) GetTainted() bool { var File_spire_plugin_types_jwtkey_proto protoreflect.FileDescriptor -var file_spire_plugin_types_jwtkey_proto_rawDesc = []byte{ - 0x0a, 0x1f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6a, 0x77, 0x74, 0x6b, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x12, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x77, 0x0a, 0x06, 0x4a, 0x57, 0x54, 0x4b, 0x65, 0x79, 0x12, - 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x15, - 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, - 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, - 0x65, 0x73, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x42, 0x3d, - 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, - 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, - 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, - 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_plugin_types_jwtkey_proto_rawDesc = "" + + "\n" + + "\x1fspire/plugin/types/jwtkey.proto\x12\x12spire.plugin.types\"w\n" + + "\x06JWTKey\x12\x1d\n" + + "\n" + + "public_key\x18\x01 \x01(\fR\tpublicKey\x12\x15\n" + + "\x06key_id\x18\x02 \x01(\tR\x05keyId\x12\x1d\n" + + "\n" + + "expires_at\x18\x03 \x01(\x03R\texpiresAt\x12\x18\n" + + "\atainted\x18\x04 \x01(\bR\ataintedB=Z;github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/typesb\x06proto3" var ( file_spire_plugin_types_jwtkey_proto_rawDescOnce sync.Once - file_spire_plugin_types_jwtkey_proto_rawDescData = file_spire_plugin_types_jwtkey_proto_rawDesc + file_spire_plugin_types_jwtkey_proto_rawDescData []byte ) func file_spire_plugin_types_jwtkey_proto_rawDescGZIP() []byte { file_spire_plugin_types_jwtkey_proto_rawDescOnce.Do(func() { - file_spire_plugin_types_jwtkey_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_types_jwtkey_proto_rawDescData) + file_spire_plugin_types_jwtkey_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_types_jwtkey_proto_rawDesc), len(file_spire_plugin_types_jwtkey_proto_rawDesc))) }) return file_spire_plugin_types_jwtkey_proto_rawDescData } var file_spire_plugin_types_jwtkey_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_spire_plugin_types_jwtkey_proto_goTypes = []interface{}{ +var file_spire_plugin_types_jwtkey_proto_goTypes = []any{ (*JWTKey)(nil), // 0: spire.plugin.types.JWTKey } var file_spire_plugin_types_jwtkey_proto_depIdxs = []int32{ @@ -146,25 +136,11 @@ func file_spire_plugin_types_jwtkey_proto_init() { if File_spire_plugin_types_jwtkey_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_types_jwtkey_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JWTKey); 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_spire_plugin_types_jwtkey_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_types_jwtkey_proto_rawDesc), len(file_spire_plugin_types_jwtkey_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -175,7 +151,6 @@ func file_spire_plugin_types_jwtkey_proto_init() { MessageInfos: file_spire_plugin_types_jwtkey_proto_msgTypes, }.Build() File_spire_plugin_types_jwtkey_proto = out.File - file_spire_plugin_types_jwtkey_proto_rawDesc = nil file_spire_plugin_types_jwtkey_proto_goTypes = nil file_spire_plugin_types_jwtkey_proto_depIdxs = nil } diff --git a/proto/spire/plugin/types/x509certificate.pb.go b/proto/spire/plugin/types/x509certificate.pb.go index db33409..d8d5912 100644 --- a/proto/spire/plugin/types/x509certificate.pb.go +++ b/proto/spire/plugin/types/x509certificate.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/plugin/types/x509certificate.proto package types @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -21,23 +22,20 @@ const ( ) type X509Certificate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The ASN.1 DER encoded bytes of the X.509 certificate. Asn1 []byte `protobuf:"bytes,1,opt,name=asn1,proto3" json:"asn1,omitempty"` // Indicates if the authority has been tainted. A tainted authority is not safe to be used anymore. - Tainted bool `protobuf:"varint,2,opt,name=tainted,proto3" json:"tainted,omitempty"` + Tainted bool `protobuf:"varint,2,opt,name=tainted,proto3" json:"tainted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *X509Certificate) Reset() { *x = X509Certificate{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_plugin_types_x509certificate_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_plugin_types_x509certificate_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *X509Certificate) String() string { @@ -48,7 +46,7 @@ func (*X509Certificate) ProtoMessage() {} func (x *X509Certificate) ProtoReflect() protoreflect.Message { mi := &file_spire_plugin_types_x509certificate_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -79,36 +77,27 @@ func (x *X509Certificate) GetTainted() bool { var File_spire_plugin_types_x509certificate_proto protoreflect.FileDescriptor -var file_spire_plugin_types_x509certificate_proto_rawDesc = []byte{ - 0x0a, 0x28, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2f, 0x78, 0x35, 0x30, 0x39, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3f, - 0x0a, 0x0f, 0x58, 0x35, 0x30, 0x39, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x73, 0x6e, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x04, 0x61, 0x73, 0x6e, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x64, 0x42, - 0x3d, 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, - 0x69, 0x66, 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, - 0x6e, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_plugin_types_x509certificate_proto_rawDesc = "" + + "\n" + + "(spire/plugin/types/x509certificate.proto\x12\x12spire.plugin.types\"?\n" + + "\x0fX509Certificate\x12\x12\n" + + "\x04asn1\x18\x01 \x01(\fR\x04asn1\x12\x18\n" + + "\atainted\x18\x02 \x01(\bR\ataintedB=Z;github.com/spiffe/spire-plugin-sdk/proto/spire/plugin/typesb\x06proto3" var ( file_spire_plugin_types_x509certificate_proto_rawDescOnce sync.Once - file_spire_plugin_types_x509certificate_proto_rawDescData = file_spire_plugin_types_x509certificate_proto_rawDesc + file_spire_plugin_types_x509certificate_proto_rawDescData []byte ) func file_spire_plugin_types_x509certificate_proto_rawDescGZIP() []byte { file_spire_plugin_types_x509certificate_proto_rawDescOnce.Do(func() { - file_spire_plugin_types_x509certificate_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_plugin_types_x509certificate_proto_rawDescData) + file_spire_plugin_types_x509certificate_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_plugin_types_x509certificate_proto_rawDesc), len(file_spire_plugin_types_x509certificate_proto_rawDesc))) }) return file_spire_plugin_types_x509certificate_proto_rawDescData } var file_spire_plugin_types_x509certificate_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_spire_plugin_types_x509certificate_proto_goTypes = []interface{}{ +var file_spire_plugin_types_x509certificate_proto_goTypes = []any{ (*X509Certificate)(nil), // 0: spire.plugin.types.X509Certificate } var file_spire_plugin_types_x509certificate_proto_depIdxs = []int32{ @@ -124,25 +113,11 @@ func file_spire_plugin_types_x509certificate_proto_init() { if File_spire_plugin_types_x509certificate_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_plugin_types_x509certificate_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*X509Certificate); 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_spire_plugin_types_x509certificate_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_plugin_types_x509certificate_proto_rawDesc), len(file_spire_plugin_types_x509certificate_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -153,7 +128,6 @@ func file_spire_plugin_types_x509certificate_proto_init() { MessageInfos: file_spire_plugin_types_x509certificate_proto_msgTypes, }.Build() File_spire_plugin_types_x509certificate_proto = out.File - file_spire_plugin_types_x509certificate_proto_rawDesc = nil file_spire_plugin_types_x509certificate_proto_goTypes = nil file_spire_plugin_types_x509certificate_proto_depIdxs = nil } diff --git a/proto/spire/service/common/config/v1/config.pb.go b/proto/spire/service/common/config/v1/config.pb.go index e664b23..205d241 100644 --- a/proto/spire/service/common/config/v1/config.pb.go +++ b/proto/spire/service/common/config/v1/config.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.1 +// protoc-gen-go v1.36.6 +// protoc v6.30.2 // source: spire/service/common/config/v1/config.proto package configv1 @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -21,23 +22,20 @@ const ( ) type ConfigureRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. Core SPIRE configuration. CoreConfiguration *CoreConfiguration `protobuf:"bytes,1,opt,name=core_configuration,json=coreConfiguration,proto3" json:"core_configuration,omitempty"` // Required. HCL encoded plugin configuration. HclConfiguration string `protobuf:"bytes,2,opt,name=hcl_configuration,json=hclConfiguration,proto3" json:"hcl_configuration,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConfigureRequest) Reset() { *x = ConfigureRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_service_common_config_v1_config_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_service_common_config_v1_config_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConfigureRequest) String() string { @@ -48,7 +46,7 @@ func (*ConfigureRequest) ProtoMessage() {} func (x *ConfigureRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_service_common_config_v1_config_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -78,18 +76,16 @@ func (x *ConfigureRequest) GetHclConfiguration() string { } type ConfigureResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConfigureResponse) Reset() { *x = ConfigureResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_service_common_config_v1_config_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_service_common_config_v1_config_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConfigureResponse) String() string { @@ -100,7 +96,7 @@ func (*ConfigureResponse) ProtoMessage() {} func (x *ConfigureResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_service_common_config_v1_config_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -116,23 +112,20 @@ func (*ConfigureResponse) Descriptor() ([]byte, []int) { } type ValidateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. Core SPIRE configuration. CoreConfiguration *CoreConfiguration `protobuf:"bytes,1,opt,name=core_configuration,json=coreConfiguration,proto3" json:"core_configuration,omitempty"` // Required. HCL encoded plugin configuration. HclConfiguration string `protobuf:"bytes,2,opt,name=hcl_configuration,json=hclConfiguration,proto3" json:"hcl_configuration,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ValidateRequest) Reset() { *x = ValidateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_service_common_config_v1_config_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_service_common_config_v1_config_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValidateRequest) String() string { @@ -143,7 +136,7 @@ func (*ValidateRequest) ProtoMessage() {} func (x *ValidateRequest) ProtoReflect() protoreflect.Message { mi := &file_spire_service_common_config_v1_config_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -173,10 +166,7 @@ func (x *ValidateRequest) GetHclConfiguration() string { } type ValidateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. True when the plugin deems the configuration usable. Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"` // Examples of invalid configuration notes include: @@ -184,16 +174,16 @@ type ValidateResponse struct { // - missing field "plugin.user" // - specified SPIFFE ID in "plugin.spiffe_id" is not within system trust domain. // - etc. - Notes []string `protobuf:"bytes,2,rep,name=notes,proto3" json:"notes,omitempty"` + Notes []string `protobuf:"bytes,2,rep,name=notes,proto3" json:"notes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ValidateResponse) Reset() { *x = ValidateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_service_common_config_v1_config_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_service_common_config_v1_config_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ValidateResponse) String() string { @@ -204,7 +194,7 @@ func (*ValidateResponse) ProtoMessage() {} func (x *ValidateResponse) ProtoReflect() protoreflect.Message { mi := &file_spire_service_common_config_v1_config_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -234,22 +224,19 @@ func (x *ValidateResponse) GetNotes() []string { } type CoreConfiguration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Required. The trust domain name SPIRE is configured with (e.g. // "example.org"). - TrustDomain string `protobuf:"bytes,1,opt,name=trust_domain,json=trustDomain,proto3" json:"trust_domain,omitempty"` + TrustDomain string `protobuf:"bytes,1,opt,name=trust_domain,json=trustDomain,proto3" json:"trust_domain,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CoreConfiguration) Reset() { *x = CoreConfiguration{} - if protoimpl.UnsafeEnabled { - mi := &file_spire_service_common_config_v1_config_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_spire_service_common_config_v1_config_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CoreConfiguration) String() string { @@ -260,7 +247,7 @@ func (*CoreConfiguration) ProtoMessage() {} func (x *CoreConfiguration) ProtoReflect() protoreflect.Message { mi := &file_spire_service_common_config_v1_config_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -284,78 +271,39 @@ func (x *CoreConfiguration) GetTrustDomain() string { var File_spire_service_common_config_v1_config_proto protoreflect.FileDescriptor -var file_spire_service_common_config_v1_config_proto_rawDesc = []byte{ - 0x0a, 0x2b, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x73, - 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x22, 0xa1, 0x01, - 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x60, 0x0a, 0x12, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x11, 0x63, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x68, 0x63, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x10, 0x68, 0x63, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x13, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x0f, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x60, 0x0a, 0x12, 0x63, 0x6f, - 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x63, 0x6f, 0x72, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x11, - 0x68, 0x63, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x68, 0x63, 0x6c, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x0a, 0x10, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x11, 0x43, 0x6f, 0x72, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, - 0x0a, 0x0c, 0x74, 0x72, 0x75, 0x73, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x72, 0x75, 0x73, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x32, 0xe9, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x70, 0x0a, 0x09, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, 0x30, 0x2e, 0x73, 0x70, 0x69, 0x72, - 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, - 0x0a, 0x08, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x2e, 0x73, 0x70, 0x69, - 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x73, 0x70, - 0x69, 0x72, 0x65, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x52, 0x5a, - 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x70, 0x69, 0x66, - 0x66, 0x65, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2d, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2d, - 0x73, 0x64, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x69, 0x72, 0x65, 0x2f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x76, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_spire_service_common_config_v1_config_proto_rawDesc = "" + + "\n" + + "+spire/service/common/config/v1/config.proto\x12\x1espire.service.common.config.v1\"\xa1\x01\n" + + "\x10ConfigureRequest\x12`\n" + + "\x12core_configuration\x18\x01 \x01(\v21.spire.service.common.config.v1.CoreConfigurationR\x11coreConfiguration\x12+\n" + + "\x11hcl_configuration\x18\x02 \x01(\tR\x10hclConfiguration\"\x13\n" + + "\x11ConfigureResponse\"\xa0\x01\n" + + "\x0fValidateRequest\x12`\n" + + "\x12core_configuration\x18\x01 \x01(\v21.spire.service.common.config.v1.CoreConfigurationR\x11coreConfiguration\x12+\n" + + "\x11hcl_configuration\x18\x02 \x01(\tR\x10hclConfiguration\">\n" + + "\x10ValidateResponse\x12\x14\n" + + "\x05valid\x18\x01 \x01(\bR\x05valid\x12\x14\n" + + "\x05notes\x18\x02 \x03(\tR\x05notes\"6\n" + + "\x11CoreConfiguration\x12!\n" + + "\ftrust_domain\x18\x01 \x01(\tR\vtrustDomain2\xe9\x01\n" + + "\x06Config\x12p\n" + + "\tConfigure\x120.spire.service.common.config.v1.ConfigureRequest\x1a1.spire.service.common.config.v1.ConfigureResponse\x12m\n" + + "\bValidate\x12/.spire.service.common.config.v1.ValidateRequest\x1a0.spire.service.common.config.v1.ValidateResponseBRZPgithub.com/spiffe/spire-plugin-sdk/proto/spire/service/common/config/v1;configv1b\x06proto3" var ( file_spire_service_common_config_v1_config_proto_rawDescOnce sync.Once - file_spire_service_common_config_v1_config_proto_rawDescData = file_spire_service_common_config_v1_config_proto_rawDesc + file_spire_service_common_config_v1_config_proto_rawDescData []byte ) func file_spire_service_common_config_v1_config_proto_rawDescGZIP() []byte { file_spire_service_common_config_v1_config_proto_rawDescOnce.Do(func() { - file_spire_service_common_config_v1_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_spire_service_common_config_v1_config_proto_rawDescData) + file_spire_service_common_config_v1_config_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_spire_service_common_config_v1_config_proto_rawDesc), len(file_spire_service_common_config_v1_config_proto_rawDesc))) }) return file_spire_service_common_config_v1_config_proto_rawDescData } var file_spire_service_common_config_v1_config_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_spire_service_common_config_v1_config_proto_goTypes = []interface{}{ +var file_spire_service_common_config_v1_config_proto_goTypes = []any{ (*ConfigureRequest)(nil), // 0: spire.service.common.config.v1.ConfigureRequest (*ConfigureResponse)(nil), // 1: spire.service.common.config.v1.ConfigureResponse (*ValidateRequest)(nil), // 2: spire.service.common.config.v1.ValidateRequest @@ -381,73 +329,11 @@ func file_spire_service_common_config_v1_config_proto_init() { if File_spire_service_common_config_v1_config_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_spire_service_common_config_v1_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConfigureRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_service_common_config_v1_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConfigureResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_service_common_config_v1_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_service_common_config_v1_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValidateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_spire_service_common_config_v1_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CoreConfiguration); 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_spire_service_common_config_v1_config_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_spire_service_common_config_v1_config_proto_rawDesc), len(file_spire_service_common_config_v1_config_proto_rawDesc)), NumEnums: 0, NumMessages: 5, NumExtensions: 0, @@ -458,7 +344,6 @@ func file_spire_service_common_config_v1_config_proto_init() { MessageInfos: file_spire_service_common_config_v1_config_proto_msgTypes, }.Build() File_spire_service_common_config_v1_config_proto = out.File - file_spire_service_common_config_v1_config_proto_rawDesc = nil file_spire_service_common_config_v1_config_proto_goTypes = nil file_spire_service_common_config_v1_config_proto_depIdxs = nil } diff --git a/proto/spire/service/common/config/v1/config_grpc.pb.go b/proto/spire/service/common/config/v1/config_grpc.pb.go index 47a0101..90ac3ee 100644 --- a/proto/spire/service/common/config/v1/config_grpc.pb.go +++ b/proto/spire/service/common/config/v1/config_grpc.pb.go @@ -1,4 +1,8 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v6.30.2 +// source: spire/service/common/config/v1/config.proto package configv1 @@ -11,8 +15,13 @@ import ( // 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 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Config_Configure_FullMethodName = "/spire.service.common.config.v1.Config/Configure" + Config_Validate_FullMethodName = "/spire.service.common.config.v1.Config/Validate" +) // ConfigClient is the client API for Config service. // @@ -40,8 +49,9 @@ func NewConfigClient(cc grpc.ClientConnInterface) ConfigClient { } func (c *configClient) Configure(ctx context.Context, in *ConfigureRequest, opts ...grpc.CallOption) (*ConfigureResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ConfigureResponse) - err := c.cc.Invoke(ctx, "/spire.service.common.config.v1.Config/Configure", in, out, opts...) + err := c.cc.Invoke(ctx, Config_Configure_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -49,8 +59,9 @@ func (c *configClient) Configure(ctx context.Context, in *ConfigureRequest, opts } func (c *configClient) Validate(ctx context.Context, in *ValidateRequest, opts ...grpc.CallOption) (*ValidateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ValidateResponse) - err := c.cc.Invoke(ctx, "/spire.service.common.config.v1.Config/Validate", in, out, opts...) + err := c.cc.Invoke(ctx, Config_Validate_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -59,7 +70,7 @@ func (c *configClient) Validate(ctx context.Context, in *ValidateRequest, opts . // ConfigServer is the server API for Config service. // All implementations must embed UnimplementedConfigServer -// for forward compatibility +// for forward compatibility. type ConfigServer interface { // Configure is called by SPIRE to configure the plugin with the plugin // specific configuration data and a set of SPIRE core configuration. It is @@ -75,9 +86,12 @@ type ConfigServer interface { mustEmbedUnimplementedConfigServer() } -// UnimplementedConfigServer must be embedded to have forward compatible implementations. -type UnimplementedConfigServer struct { -} +// UnimplementedConfigServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedConfigServer struct{} func (UnimplementedConfigServer) Configure(context.Context, *ConfigureRequest) (*ConfigureResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Configure not implemented") @@ -86,6 +100,7 @@ func (UnimplementedConfigServer) Validate(context.Context, *ValidateRequest) (*V return nil, status.Errorf(codes.Unimplemented, "method Validate not implemented") } func (UnimplementedConfigServer) mustEmbedUnimplementedConfigServer() {} +func (UnimplementedConfigServer) testEmbeddedByValue() {} // UnsafeConfigServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to ConfigServer will @@ -95,6 +110,13 @@ type UnsafeConfigServer interface { } func RegisterConfigServer(s grpc.ServiceRegistrar, srv ConfigServer) { + // If the following call pancis, it indicates UnimplementedConfigServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&Config_ServiceDesc, srv) } @@ -108,7 +130,7 @@ func _Config_Configure_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.service.common.config.v1.Config/Configure", + FullMethod: Config_Configure_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ConfigServer).Configure(ctx, req.(*ConfigureRequest)) @@ -126,7 +148,7 @@ func _Config_Validate_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/spire.service.common.config.v1.Config/Validate", + FullMethod: Config_Validate_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(ConfigServer).Validate(ctx, req.(*ValidateRequest)) From 3aea7dce48a0f011577a62584adb8366a5adb97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Mart=C3=ADnez=20Fay=C3=B3?= Date: Thu, 7 Aug 2025 17:16:42 -0300 Subject: [PATCH 24/24] Fix go.mod MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Agustín Martínez Fayó --- go.mod | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 1f807a4..5405e99 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,8 @@ module github.com/spiffe/spire-plugin-sdk -go 1.23.12 +go 1.23.0 + +toolchain go1.24.2 require ( github.com/go-jose/go-jose/v3 v3.0.0