From ba758192ee362d9cf73142df59f35c41d8f5d6dc Mon Sep 17 00:00:00 2001 From: Danylo Shevchenko Date: Wed, 4 Feb 2026 09:30:08 +0100 Subject: [PATCH] feat(session-manager): GetOIDCProvider method --- .../sessionmanager/session/v1/session.pb.go | 132 ++++++++-- .../session/v1/session.pb.validate.go | 235 ++++++++++++++++++ .../sessionmanager/session/v1/session.proto | 11 + .../session/v1/session_grpc.pb.go | 40 ++- proto/kms/api/cmk/types/v1/oidc.pb.go | 142 +++++++++++ .../kms/api/cmk/types/v1/oidc.pb.validate.go | 139 +++++++++++ proto/kms/api/cmk/types/v1/oidc.proto | 9 + 7 files changed, 691 insertions(+), 17 deletions(-) create mode 100644 proto/kms/api/cmk/types/v1/oidc.pb.go create mode 100644 proto/kms/api/cmk/types/v1/oidc.pb.validate.go create mode 100644 proto/kms/api/cmk/types/v1/oidc.proto diff --git a/proto/kms/api/cmk/sessionmanager/session/v1/session.pb.go b/proto/kms/api/cmk/sessionmanager/session/v1/session.pb.go index 69cc1eb..dfd96eb 100644 --- a/proto/kms/api/cmk/sessionmanager/session/v1/session.pb.go +++ b/proto/kms/api/cmk/sessionmanager/session/v1/session.pb.go @@ -7,6 +7,7 @@ package sessionv1 import ( + v1 "github.com/openkcm/api-sdk/proto/kms/api/cmk/types/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -181,11 +182,99 @@ func (x *GetSessionResponse) GetAuthContext() map[string]string { return nil } +type GetOIDCProviderRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TenantId string `protobuf:"bytes,1,opt,name=tenant_id,json=tenantId,proto3" json:"tenant_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetOIDCProviderRequest) Reset() { + *x = GetOIDCProviderRequest{} + mi := &file_kms_api_cmk_sessionmanager_session_v1_session_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetOIDCProviderRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOIDCProviderRequest) ProtoMessage() {} + +func (x *GetOIDCProviderRequest) ProtoReflect() protoreflect.Message { + mi := &file_kms_api_cmk_sessionmanager_session_v1_session_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetOIDCProviderRequest.ProtoReflect.Descriptor instead. +func (*GetOIDCProviderRequest) Descriptor() ([]byte, []int) { + return file_kms_api_cmk_sessionmanager_session_v1_session_proto_rawDescGZIP(), []int{2} +} + +func (x *GetOIDCProviderRequest) GetTenantId() string { + if x != nil { + return x.TenantId + } + return "" +} + +type GetOIDCProviderResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Provider *v1.OIDCProvider `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetOIDCProviderResponse) Reset() { + *x = GetOIDCProviderResponse{} + mi := &file_kms_api_cmk_sessionmanager_session_v1_session_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetOIDCProviderResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOIDCProviderResponse) ProtoMessage() {} + +func (x *GetOIDCProviderResponse) ProtoReflect() protoreflect.Message { + mi := &file_kms_api_cmk_sessionmanager_session_v1_session_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetOIDCProviderResponse.ProtoReflect.Descriptor instead. +func (*GetOIDCProviderResponse) Descriptor() ([]byte, []int) { + return file_kms_api_cmk_sessionmanager_session_v1_session_proto_rawDescGZIP(), []int{3} +} + +func (x *GetOIDCProviderResponse) GetProvider() *v1.OIDCProvider { + if x != nil { + return x.Provider + } + return nil +} + var File_kms_api_cmk_sessionmanager_session_v1_session_proto protoreflect.FileDescriptor const file_kms_api_cmk_sessionmanager_session_v1_session_proto_rawDesc = "" + "\n" + - "3kms/api/cmk/sessionmanager/session/v1/session.proto\x12%kms.api.cmk.sessionmanager.session.v1\"q\n" + + "3kms/api/cmk/sessionmanager/session/v1/session.proto\x12%kms.api.cmk.sessionmanager.session.v1\x1a\x1fkms/api/cmk/types/v1/oidc.proto\"q\n" + "\x11GetSessionRequest\x12\x1d\n" + "\n" + "session_id\x18\x01 \x01(\tR\tsessionId\x12\x1b\n" + @@ -204,10 +293,15 @@ const file_kms_api_cmk_sessionmanager_session_v1_session_proto_rawDesc = "" + "\fauth_context\x18\b \x03(\v2J.kms.api.cmk.sessionmanager.session.v1.GetSessionResponse.AuthContextEntryR\vauthContext\x1a>\n" + "\x10AuthContextEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + - "\x05value\x18\x02 \x01(\tR\x05value:\x028\x012\x8f\x01\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"5\n" + + "\x16GetOIDCProviderRequest\x12\x1b\n" + + "\ttenant_id\x18\x01 \x01(\tR\btenantId\"Y\n" + + "\x17GetOIDCProviderResponse\x12>\n" + + "\bprovider\x18\x01 \x01(\v2\".kms.api.cmk.types.v1.OIDCProviderR\bprovider2\xa4\x02\n" + "\aService\x12\x83\x01\n" + "\n" + - "GetSession\x128.kms.api.cmk.sessionmanager.session.v1.GetSessionRequest\x1a9.kms.api.cmk.sessionmanager.session.v1.GetSessionResponse\"\x00B\xc6\x02\n" + + "GetSession\x128.kms.api.cmk.sessionmanager.session.v1.GetSessionRequest\x1a9.kms.api.cmk.sessionmanager.session.v1.GetSessionResponse\"\x00\x12\x92\x01\n" + + "\x0fGetOIDCProvider\x12=.kms.api.cmk.sessionmanager.session.v1.GetOIDCProviderRequest\x1a>.kms.api.cmk.sessionmanager.session.v1.GetOIDCProviderResponse\"\x00B\xc6\x02\n" + ")com.kms.api.cmk.sessionmanager.session.v1B\fSessionProtoP\x01ZPgithub.com/openkcm/api-sdk/proto/kms/api/cmk/sessionmanager/session/v1;sessionv1\xa2\x02\x05KACSS\xaa\x02%Kms.Api.Cmk.Sessionmanager.Session.V1\xca\x02%Kms\\Api\\Cmk\\Sessionmanager\\Session\\V1\xe2\x021Kms\\Api\\Cmk\\Sessionmanager\\Session\\V1\\GPBMetadata\xea\x02*Kms::Api::Cmk::Sessionmanager::Session::V1b\x06proto3" var ( @@ -222,21 +316,27 @@ func file_kms_api_cmk_sessionmanager_session_v1_session_proto_rawDescGZIP() []by return file_kms_api_cmk_sessionmanager_session_v1_session_proto_rawDescData } -var file_kms_api_cmk_sessionmanager_session_v1_session_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_kms_api_cmk_sessionmanager_session_v1_session_proto_msgTypes = make([]protoimpl.MessageInfo, 5) var file_kms_api_cmk_sessionmanager_session_v1_session_proto_goTypes = []any{ - (*GetSessionRequest)(nil), // 0: kms.api.cmk.sessionmanager.session.v1.GetSessionRequest - (*GetSessionResponse)(nil), // 1: kms.api.cmk.sessionmanager.session.v1.GetSessionResponse - nil, // 2: kms.api.cmk.sessionmanager.session.v1.GetSessionResponse.AuthContextEntry + (*GetSessionRequest)(nil), // 0: kms.api.cmk.sessionmanager.session.v1.GetSessionRequest + (*GetSessionResponse)(nil), // 1: kms.api.cmk.sessionmanager.session.v1.GetSessionResponse + (*GetOIDCProviderRequest)(nil), // 2: kms.api.cmk.sessionmanager.session.v1.GetOIDCProviderRequest + (*GetOIDCProviderResponse)(nil), // 3: kms.api.cmk.sessionmanager.session.v1.GetOIDCProviderResponse + nil, // 4: kms.api.cmk.sessionmanager.session.v1.GetSessionResponse.AuthContextEntry + (*v1.OIDCProvider)(nil), // 5: kms.api.cmk.types.v1.OIDCProvider } var file_kms_api_cmk_sessionmanager_session_v1_session_proto_depIdxs = []int32{ - 2, // 0: kms.api.cmk.sessionmanager.session.v1.GetSessionResponse.auth_context:type_name -> kms.api.cmk.sessionmanager.session.v1.GetSessionResponse.AuthContextEntry - 0, // 1: kms.api.cmk.sessionmanager.session.v1.Service.GetSession:input_type -> kms.api.cmk.sessionmanager.session.v1.GetSessionRequest - 1, // 2: kms.api.cmk.sessionmanager.session.v1.Service.GetSession:output_type -> kms.api.cmk.sessionmanager.session.v1.GetSessionResponse - 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: kms.api.cmk.sessionmanager.session.v1.GetSessionResponse.auth_context:type_name -> kms.api.cmk.sessionmanager.session.v1.GetSessionResponse.AuthContextEntry + 5, // 1: kms.api.cmk.sessionmanager.session.v1.GetOIDCProviderResponse.provider:type_name -> kms.api.cmk.types.v1.OIDCProvider + 0, // 2: kms.api.cmk.sessionmanager.session.v1.Service.GetSession:input_type -> kms.api.cmk.sessionmanager.session.v1.GetSessionRequest + 2, // 3: kms.api.cmk.sessionmanager.session.v1.Service.GetOIDCProvider:input_type -> kms.api.cmk.sessionmanager.session.v1.GetOIDCProviderRequest + 1, // 4: kms.api.cmk.sessionmanager.session.v1.Service.GetSession:output_type -> kms.api.cmk.sessionmanager.session.v1.GetSessionResponse + 3, // 5: kms.api.cmk.sessionmanager.session.v1.Service.GetOIDCProvider:output_type -> kms.api.cmk.sessionmanager.session.v1.GetOIDCProviderResponse + 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_kms_api_cmk_sessionmanager_session_v1_session_proto_init() } @@ -250,7 +350,7 @@ func file_kms_api_cmk_sessionmanager_session_v1_session_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_kms_api_cmk_sessionmanager_session_v1_session_proto_rawDesc), len(file_kms_api_cmk_sessionmanager_session_v1_session_proto_rawDesc)), NumEnums: 0, - NumMessages: 3, + NumMessages: 5, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/kms/api/cmk/sessionmanager/session/v1/session.pb.validate.go b/proto/kms/api/cmk/sessionmanager/session/v1/session.pb.validate.go index 0377484..2818c80 100644 --- a/proto/kms/api/cmk/sessionmanager/session/v1/session.pb.validate.go +++ b/proto/kms/api/cmk/sessionmanager/session/v1/session.pb.validate.go @@ -258,3 +258,238 @@ var _ interface { Cause() error ErrorName() string } = GetSessionResponseValidationError{} + +// Validate checks the field values on GetOIDCProviderRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetOIDCProviderRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetOIDCProviderRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetOIDCProviderRequestMultiError, or nil if none found. +func (m *GetOIDCProviderRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetOIDCProviderRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for TenantId + + if len(errors) > 0 { + return GetOIDCProviderRequestMultiError(errors) + } + + return nil +} + +// GetOIDCProviderRequestMultiError is an error wrapping multiple validation +// errors returned by GetOIDCProviderRequest.ValidateAll() if the designated +// constraints aren't met. +type GetOIDCProviderRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetOIDCProviderRequestMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetOIDCProviderRequestMultiError) AllErrors() []error { return m } + +// GetOIDCProviderRequestValidationError is the validation error returned by +// GetOIDCProviderRequest.Validate if the designated constraints aren't met. +type GetOIDCProviderRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetOIDCProviderRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetOIDCProviderRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetOIDCProviderRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetOIDCProviderRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetOIDCProviderRequestValidationError) ErrorName() string { + return "GetOIDCProviderRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetOIDCProviderRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetOIDCProviderRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetOIDCProviderRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetOIDCProviderRequestValidationError{} + +// Validate checks the field values on GetOIDCProviderResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, the first error encountered is returned, or nil if there are no violations. +func (m *GetOIDCProviderResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetOIDCProviderResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// GetOIDCProviderResponseMultiError, or nil if none found. +func (m *GetOIDCProviderResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetOIDCProviderResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetProvider()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetOIDCProviderResponseValidationError{ + field: "Provider", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetOIDCProviderResponseValidationError{ + field: "Provider", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetProvider()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetOIDCProviderResponseValidationError{ + field: "Provider", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(errors) > 0 { + return GetOIDCProviderResponseMultiError(errors) + } + + return nil +} + +// GetOIDCProviderResponseMultiError is an error wrapping multiple validation +// errors returned by GetOIDCProviderResponse.ValidateAll() if the designated +// constraints aren't met. +type GetOIDCProviderResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetOIDCProviderResponseMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m GetOIDCProviderResponseMultiError) AllErrors() []error { return m } + +// GetOIDCProviderResponseValidationError is the validation error returned by +// GetOIDCProviderResponse.Validate if the designated constraints aren't met. +type GetOIDCProviderResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetOIDCProviderResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetOIDCProviderResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetOIDCProviderResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetOIDCProviderResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetOIDCProviderResponseValidationError) ErrorName() string { + return "GetOIDCProviderResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetOIDCProviderResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetOIDCProviderResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetOIDCProviderResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetOIDCProviderResponseValidationError{} diff --git a/proto/kms/api/cmk/sessionmanager/session/v1/session.proto b/proto/kms/api/cmk/sessionmanager/session/v1/session.proto index 5315b72..f6312b8 100644 --- a/proto/kms/api/cmk/sessionmanager/session/v1/session.proto +++ b/proto/kms/api/cmk/sessionmanager/session/v1/session.proto @@ -2,8 +2,11 @@ syntax = "proto3"; package kms.api.cmk.sessionmanager.session.v1; +import "kms/api/cmk/types/v1/oidc.proto"; + service Service { rpc GetSession(GetSessionRequest) returns (GetSessionResponse) {} + rpc GetOIDCProvider(GetOIDCProviderRequest) returns (GetOIDCProviderResponse) {} } message GetSessionRequest { @@ -22,3 +25,11 @@ message GetSessionResponse { repeated string groups = 7; map auth_context = 8; } + +message GetOIDCProviderRequest { + string tenant_id = 1; +} + +message GetOIDCProviderResponse { + kms.api.cmk.types.v1.OIDCProvider provider = 1; +} diff --git a/proto/kms/api/cmk/sessionmanager/session/v1/session_grpc.pb.go b/proto/kms/api/cmk/sessionmanager/session/v1/session_grpc.pb.go index ad9c8f3..1285a54 100644 --- a/proto/kms/api/cmk/sessionmanager/session/v1/session_grpc.pb.go +++ b/proto/kms/api/cmk/sessionmanager/session/v1/session_grpc.pb.go @@ -19,7 +19,8 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - Service_GetSession_FullMethodName = "/kms.api.cmk.sessionmanager.session.v1.Service/GetSession" + Service_GetSession_FullMethodName = "/kms.api.cmk.sessionmanager.session.v1.Service/GetSession" + Service_GetOIDCProvider_FullMethodName = "/kms.api.cmk.sessionmanager.session.v1.Service/GetOIDCProvider" ) // ServiceClient is the client API for Service service. @@ -27,6 +28,7 @@ const ( // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type ServiceClient interface { GetSession(ctx context.Context, in *GetSessionRequest, opts ...grpc.CallOption) (*GetSessionResponse, error) + GetOIDCProvider(ctx context.Context, in *GetOIDCProviderRequest, opts ...grpc.CallOption) (*GetOIDCProviderResponse, error) } type serviceClient struct { @@ -47,11 +49,22 @@ func (c *serviceClient) GetSession(ctx context.Context, in *GetSessionRequest, o return out, nil } +func (c *serviceClient) GetOIDCProvider(ctx context.Context, in *GetOIDCProviderRequest, opts ...grpc.CallOption) (*GetOIDCProviderResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetOIDCProviderResponse) + err := c.cc.Invoke(ctx, Service_GetOIDCProvider_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // ServiceServer is the server API for Service service. // All implementations must embed UnimplementedServiceServer // for forward compatibility. type ServiceServer interface { GetSession(context.Context, *GetSessionRequest) (*GetSessionResponse, error) + GetOIDCProvider(context.Context, *GetOIDCProviderRequest) (*GetOIDCProviderResponse, error) mustEmbedUnimplementedServiceServer() } @@ -65,6 +78,9 @@ type UnimplementedServiceServer struct{} func (UnimplementedServiceServer) GetSession(context.Context, *GetSessionRequest) (*GetSessionResponse, error) { return nil, status.Error(codes.Unimplemented, "method GetSession not implemented") } +func (UnimplementedServiceServer) GetOIDCProvider(context.Context, *GetOIDCProviderRequest) (*GetOIDCProviderResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GetOIDCProvider not implemented") +} func (UnimplementedServiceServer) mustEmbedUnimplementedServiceServer() {} func (UnimplementedServiceServer) testEmbeddedByValue() {} @@ -104,6 +120,24 @@ func _Service_GetSession_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } +func _Service_GetOIDCProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetOIDCProviderRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceServer).GetOIDCProvider(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Service_GetOIDCProvider_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceServer).GetOIDCProvider(ctx, req.(*GetOIDCProviderRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Service_ServiceDesc is the grpc.ServiceDesc for Service service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -115,6 +149,10 @@ var Service_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetSession", Handler: _Service_GetSession_Handler, }, + { + MethodName: "GetOIDCProvider", + Handler: _Service_GetOIDCProvider_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "kms/api/cmk/sessionmanager/session/v1/session.proto", diff --git a/proto/kms/api/cmk/types/v1/oidc.pb.go b/proto/kms/api/cmk/types/v1/oidc.pb.go new file mode 100644 index 0000000..9ec011d --- /dev/null +++ b/proto/kms/api/cmk/types/v1/oidc.pb.go @@ -0,0 +1,142 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc (unknown) +// source: kms/api/cmk/types/v1/oidc.proto + +package typesv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +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 OIDCProvider struct { + state protoimpl.MessageState `protogen:"open.v1"` + IssuerUrl string `protobuf:"bytes,1,opt,name=issuer_url,json=issuerUrl,proto3" json:"issuer_url,omitempty"` + JwksUri string `protobuf:"bytes,2,opt,name=jwks_uri,json=jwksUri,proto3" json:"jwks_uri,omitempty"` + Audiences []string `protobuf:"bytes,3,rep,name=audiences,proto3" json:"audiences,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OIDCProvider) Reset() { + *x = OIDCProvider{} + mi := &file_kms_api_cmk_types_v1_oidc_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OIDCProvider) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OIDCProvider) ProtoMessage() {} + +func (x *OIDCProvider) ProtoReflect() protoreflect.Message { + mi := &file_kms_api_cmk_types_v1_oidc_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OIDCProvider.ProtoReflect.Descriptor instead. +func (*OIDCProvider) Descriptor() ([]byte, []int) { + return file_kms_api_cmk_types_v1_oidc_proto_rawDescGZIP(), []int{0} +} + +func (x *OIDCProvider) GetIssuerUrl() string { + if x != nil { + return x.IssuerUrl + } + return "" +} + +func (x *OIDCProvider) GetJwksUri() string { + if x != nil { + return x.JwksUri + } + return "" +} + +func (x *OIDCProvider) GetAudiences() []string { + if x != nil { + return x.Audiences + } + return nil +} + +var File_kms_api_cmk_types_v1_oidc_proto protoreflect.FileDescriptor + +const file_kms_api_cmk_types_v1_oidc_proto_rawDesc = "" + + "\n" + + "\x1fkms/api/cmk/types/v1/oidc.proto\x12\x14kms.api.cmk.types.v1\"f\n" + + "\fOIDCProvider\x12\x1d\n" + + "\n" + + "issuer_url\x18\x01 \x01(\tR\tissuerUrl\x12\x19\n" + + "\bjwks_uri\x18\x02 \x01(\tR\ajwksUri\x12\x1c\n" + + "\taudiences\x18\x03 \x03(\tR\taudiencesB\xd9\x01\n" + + "\x18com.kms.api.cmk.types.v1B\tOidcProtoP\x01Z=github.com/openkcm/api-sdk/proto/kms/api/cmk/types/v1;typesv1\xa2\x02\x04KACT\xaa\x02\x14Kms.Api.Cmk.Types.V1\xca\x02\x14Kms\\Api\\Cmk\\Types\\V1\xe2\x02 Kms\\Api\\Cmk\\Types\\V1\\GPBMetadata\xea\x02\x18Kms::Api::Cmk::Types::V1b\x06proto3" + +var ( + file_kms_api_cmk_types_v1_oidc_proto_rawDescOnce sync.Once + file_kms_api_cmk_types_v1_oidc_proto_rawDescData []byte +) + +func file_kms_api_cmk_types_v1_oidc_proto_rawDescGZIP() []byte { + file_kms_api_cmk_types_v1_oidc_proto_rawDescOnce.Do(func() { + file_kms_api_cmk_types_v1_oidc_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_kms_api_cmk_types_v1_oidc_proto_rawDesc), len(file_kms_api_cmk_types_v1_oidc_proto_rawDesc))) + }) + return file_kms_api_cmk_types_v1_oidc_proto_rawDescData +} + +var file_kms_api_cmk_types_v1_oidc_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_kms_api_cmk_types_v1_oidc_proto_goTypes = []any{ + (*OIDCProvider)(nil), // 0: kms.api.cmk.types.v1.OIDCProvider +} +var file_kms_api_cmk_types_v1_oidc_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_kms_api_cmk_types_v1_oidc_proto_init() } +func file_kms_api_cmk_types_v1_oidc_proto_init() { + if File_kms_api_cmk_types_v1_oidc_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_kms_api_cmk_types_v1_oidc_proto_rawDesc), len(file_kms_api_cmk_types_v1_oidc_proto_rawDesc)), + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_kms_api_cmk_types_v1_oidc_proto_goTypes, + DependencyIndexes: file_kms_api_cmk_types_v1_oidc_proto_depIdxs, + MessageInfos: file_kms_api_cmk_types_v1_oidc_proto_msgTypes, + }.Build() + File_kms_api_cmk_types_v1_oidc_proto = out.File + file_kms_api_cmk_types_v1_oidc_proto_goTypes = nil + file_kms_api_cmk_types_v1_oidc_proto_depIdxs = nil +} diff --git a/proto/kms/api/cmk/types/v1/oidc.pb.validate.go b/proto/kms/api/cmk/types/v1/oidc.pb.validate.go new file mode 100644 index 0000000..4cb169f --- /dev/null +++ b/proto/kms/api/cmk/types/v1/oidc.pb.validate.go @@ -0,0 +1,139 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: kms/api/cmk/types/v1/oidc.proto + +package typesv1 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "sort" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/protobuf/types/known/anypb" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = anypb.Any{} + _ = sort.Sort +) + +// Validate checks the field values on OIDCProvider with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *OIDCProvider) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OIDCProvider with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in OIDCProviderMultiError, or +// nil if none found. +func (m *OIDCProvider) ValidateAll() error { + return m.validate(true) +} + +func (m *OIDCProvider) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for IssuerUrl + + // no validation rules for JwksUri + + if len(errors) > 0 { + return OIDCProviderMultiError(errors) + } + + return nil +} + +// OIDCProviderMultiError is an error wrapping multiple validation errors +// returned by OIDCProvider.ValidateAll() if the designated constraints aren't met. +type OIDCProviderMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OIDCProviderMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m OIDCProviderMultiError) AllErrors() []error { return m } + +// OIDCProviderValidationError is the validation error returned by +// OIDCProvider.Validate if the designated constraints aren't met. +type OIDCProviderValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OIDCProviderValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OIDCProviderValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OIDCProviderValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OIDCProviderValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OIDCProviderValidationError) ErrorName() string { return "OIDCProviderValidationError" } + +// Error satisfies the builtin error interface +func (e OIDCProviderValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOIDCProvider.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OIDCProviderValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OIDCProviderValidationError{} diff --git a/proto/kms/api/cmk/types/v1/oidc.proto b/proto/kms/api/cmk/types/v1/oidc.proto new file mode 100644 index 0000000..ed7320a --- /dev/null +++ b/proto/kms/api/cmk/types/v1/oidc.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; + +package kms.api.cmk.types.v1; + +message OIDCProvider { + string issuer_url = 1; + string jwks_uri = 2; + repeated string audiences = 3; +}