From 4446c48e009f80fdf2d02cb45a21cd155da6ce64 Mon Sep 17 00:00:00 2001 From: Mike Wilson Date: Fri, 22 Dec 2023 13:29:51 -0500 Subject: [PATCH 1/3] Add access lists, members, and reviews to cache. Access lists, members, and reviews have been added to the cache. To do this, I have created a simple backend that doesn't perform the validation that is performed by the main access list backend and only implements a subset of actions that are needed by the cache. To support this, I've added in new gRPC methods: ListAllAccessListMembers and ListAllAccessListReviews. These do not lock any access lists and additionally do not perform any implicit or dynamic members, but just simply return the full list of all members and reviews so that these endpoints can be used to populate the cache. The general thought here that, since the order of cache events cannot be guaranteed, we'll rely on the auth server to perform the proper backend validation and use a simplified backend that simply sees if the items are present in the cache. If so, we'll return them. I've had to update a few protos to support this. While I was here, I fixed a bug in the access list gRPC client where the call tolist of reviews was not supplying the access list name. Additionally, the user login state generator will now use the cached access list values. --- api/client/accesslist/accesslist.go | 49 +- api/client/events.go | 10 + api/client/proto/event.pb.go | 56 +- .../accesslist/v1/accesslist_service.pb.go | 1110 +++++++---- .../v1/accesslist_service_grpc.pb.go | 78 + .../accesslist/v1/accesslist_service.proto | 39 + .../teleport/legacy/client/proto/event.proto | 2 + .../v1/accesslist_service_grpc_pb.d.ts | 34 + .../v1/accesslist_service_grpc_pb.js | 68 + .../accesslist/v1/accesslist_service_pb.d.ts | 104 ++ .../accesslist/v1/accesslist_service_pb.js | 1616 ++++++++++++----- lib/auth/accesspoint/accesspoint.go | 1 + lib/auth/api.go | 22 + lib/cache/cache.go | 101 ++ lib/cache/cache_test.go | 273 ++- lib/cache/collections.go | 185 ++ lib/cache/simple/access_list.go | 191 ++ lib/services/access_list.go | 30 +- lib/services/access_list_test.go | 12 + lib/services/local/access_list.go | 35 +- lib/services/local/access_list_test.go | 5 +- lib/services/local/events.go | 53 +- 22 files changed, 3225 insertions(+), 849 deletions(-) create mode 100644 lib/cache/simple/access_list.go diff --git a/api/client/accesslist/accesslist.go b/api/client/accesslist/accesslist.go index 5a91c80de24de..60973d2c01a41 100644 --- a/api/client/accesslist/accesslist.go +++ b/api/client/accesslist/accesslist.go @@ -159,6 +159,28 @@ func (c *Client) ListAccessListMembers(ctx context.Context, accessList string, p return members, resp.GetNextPageToken(), nil } +// ListAllAccessListMembers returns a paginated list of all access list members for all access lists. +func (c *Client) ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) { + resp, err := c.grpcClient.ListAllAccessListMembers(ctx, &accesslistv1.ListAllAccessListMembersRequest{ + PageSize: int32(pageSize), + PageToken: pageToken, + }) + if err != nil { + return nil, "", trace.Wrap(err) + } + + members = make([]*accesslist.AccessListMember, len(resp.Members)) + for i, member := range resp.Members { + var err error + members[i], err = conv.FromMemberProto(member, conv.WithMemberIneligibleStatusField(member)) + if err != nil { + return nil, "", trace.Wrap(err) + } + } + + return members, resp.GetNextPageToken(), nil +} + // GetAccessListMember returns the specified access list member resource. func (c *Client) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) { resp, err := c.grpcClient.GetAccessListMember(ctx, &accesslistv1.GetAccessListMemberRequest{ @@ -242,6 +264,29 @@ func (c *Client) AccessRequestPromote(ctx context.Context, req *accesslistv1.Acc // ListAccessListReviews will list access list reviews for a particular access list. func (c *Client) ListAccessListReviews(ctx context.Context, accessList string, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) { resp, err := c.grpcClient.ListAccessListReviews(ctx, &accesslistv1.ListAccessListReviewsRequest{ + AccessList: accessList, + PageSize: int32(pageSize), + NextToken: nextToken, + }) + if err != nil { + return nil, "", trace.Wrap(err) + } + + reviews = make([]*accesslist.Review, len(resp.Reviews)) + for i, review := range resp.Reviews { + var err error + reviews[i], err = conv.FromReviewProto(review) + if err != nil { + return nil, "", trace.Wrap(err) + } + } + + return reviews, resp.GetNextToken(), nil +} + +// ListAllAccessListReviews will list access list reviews for all access lists. Only to be used by the cache. +func (c *Client) ListAllAccessListReviews(ctx context.Context, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) { + resp, err := c.grpcClient.ListAllAccessListReviews(ctx, &accesslistv1.ListAllAccessListReviewsRequest{ PageSize: int32(pageSize), NextToken: nextToken, }) @@ -282,8 +327,8 @@ func (c *Client) DeleteAccessListReview(ctx context.Context, accessListName, rev return trace.Wrap(err) } -// DeleteAllAccessListReviews will delete all access list reviews from an access list. -func (c *Client) DeleteAllAccessListReviews(ctx context.Context, accessListName string) error { +// DeleteAllAccessListReviews will delete all access list reviews from all access lists. +func (c *Client) DeleteAllAccessListReviews(ctx context.Context) error { return trace.NotImplemented("DeleteAllAccessListReviews is not supported in the gRPC client") } diff --git a/api/client/events.go b/api/client/events.go index b8b1470b59c55..a57b23ce4baa4 100644 --- a/api/client/events.go +++ b/api/client/events.go @@ -246,6 +246,10 @@ func EventToGRPC(in types.Event) (*proto.Event, error) { out.Resource = &proto.Event_ReportState{ ReportState: secreprotsv1conv.ToProtoReportState(r), } + case *accesslist.Review: + out.Resource = &proto.Event_AccessListReview{ + AccessListReview: accesslistv1conv.ToReviewProto(r), + } default: return nil, trace.BadParameter("resource type %T is not supported", in.Resource) } @@ -443,6 +447,12 @@ func EventFromGRPC(in *proto.Event) (*types.Event, error) { return nil, trace.Wrap(err) } return &out, nil + } else if r := in.GetAccessListReview(); r != nil { + out.Resource, err = accesslistv1conv.FromReviewProto(r) + if err != nil { + return nil, trace.Wrap(err) + } + return &out, nil } else { return nil, trace.BadParameter("received unsupported resource %T", in.Resource) } diff --git a/api/client/proto/event.pb.go b/api/client/proto/event.pb.go index bd38859e8493e..b2599fdc42226 100644 --- a/api/client/proto/event.pb.go +++ b/api/client/proto/event.pb.go @@ -154,6 +154,7 @@ type Event struct { // *Event_AuditQuery // *Event_Report // *Event_ReportState + // *Event_AccessListReview Resource isEvent_Resource `protobuf_oneof:"Resource"` } @@ -546,6 +547,13 @@ func (x *Event) GetReportState() *v13.ReportState { return nil } +func (x *Event) GetAccessListReview() *v1.Review { + if x, ok := x.GetResource().(*Event_AccessListReview); ok { + return x.AccessListReview + } + return nil +} + type isEvent_Resource interface { isEvent_Resource() } @@ -797,6 +805,11 @@ type Event_ReportState struct { ReportState *v13.ReportState `protobuf:"bytes,52,opt,name=ReportState,proto3,oneof"` } +type Event_AccessListReview struct { + // AccessListReview is an access list review resource. + AccessListReview *v1.Review `protobuf:"bytes,53,opt,name=AccessListReview,proto3,oneof"` +} + func (*Event_ResourceHeader) isEvent_Resource() {} func (*Event_CertAuthority) isEvent_Resource() {} @@ -895,6 +908,8 @@ func (*Event_Report) isEvent_Resource() {} func (*Event_ReportState) isEvent_Resource() {} +func (*Event_AccessListReview) isEvent_Resource() {} + var File_teleport_legacy_client_proto_event_proto protoreflect.FileDescriptor var file_teleport_legacy_client_proto_event_proto_rawDesc = []byte{ @@ -914,7 +929,7 @@ var file_teleport_legacy_client_proto_event_proto_rawDesc = []byte{ 0x72, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x19, 0x0a, 0x05, 0x45, + 0x74, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x89, 0x1a, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3f, 0x0a, 0x0e, 0x52, 0x65, @@ -1115,17 +1130,21 @@ var file_teleport_legacy_client_proto_event_proto_rawDesc = []byte{ 0x74, 0x65, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x73, 0x65, 0x63, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, - 0x0b, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0a, 0x0a, 0x08, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, - 0x08, 0x31, 0x10, 0x32, 0x52, 0x12, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x41, 0x75, 0x64, 0x69, 0x74, 0x2a, 0x2a, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x00, 0x12, - 0x07, 0x0a, 0x03, 0x50, 0x55, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, - 0x54, 0x45, 0x10, 0x02, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x0b, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x10, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x48, 0x00, 0x52, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x42, 0x0a, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x31, + 0x10, 0x32, 0x52, 0x12, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x43, 0x6c, 0x6f, 0x75, + 0x64, 0x41, 0x75, 0x64, 0x69, 0x74, 0x2a, 0x2a, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, + 0x03, 0x50, 0x55, 0x54, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, + 0x10, 0x02, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1191,6 +1210,7 @@ var file_teleport_legacy_client_proto_event_proto_goTypes = []interface{}{ (*v13.AuditQuery)(nil), // 45: teleport.secreports.v1.AuditQuery (*v13.Report)(nil), // 46: teleport.secreports.v1.Report (*v13.ReportState)(nil), // 47: teleport.secreports.v1.ReportState + (*v1.Review)(nil), // 48: teleport.accesslist.v1.Review } var file_teleport_legacy_client_proto_event_proto_depIdxs = []int32{ 0, // 0: proto.Event.Type:type_name -> proto.Operation @@ -1243,11 +1263,12 @@ var file_teleport_legacy_client_proto_event_proto_depIdxs = []int32{ 45, // 47: proto.Event.AuditQuery:type_name -> teleport.secreports.v1.AuditQuery 46, // 48: proto.Event.Report:type_name -> teleport.secreports.v1.Report 47, // 49: proto.Event.ReportState:type_name -> teleport.secreports.v1.ReportState - 50, // [50:50] is the sub-list for method output_type - 50, // [50:50] is the sub-list for method input_type - 50, // [50:50] is the sub-list for extension type_name - 50, // [50:50] is the sub-list for extension extendee - 0, // [0:50] is the sub-list for field type_name + 48, // 50: proto.Event.AccessListReview:type_name -> teleport.accesslist.v1.Review + 51, // [51:51] is the sub-list for method output_type + 51, // [51:51] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_teleport_legacy_client_proto_event_proto_init() } @@ -1319,6 +1340,7 @@ func file_teleport_legacy_client_proto_event_proto_init() { (*Event_AuditQuery)(nil), (*Event_Report)(nil), (*Event_ReportState)(nil), + (*Event_AccessListReview)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go index 0af8cc4cdf8cf..36ce628d4a6d6 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go @@ -639,6 +639,122 @@ func (x *ListAccessListMembersResponse) GetNextPageToken() string { return "" } +// ListAllAccessListMembersRequest is the request for getting paginated access list members for all access lists. +type ListAllAccessListMembersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // page_size is the size of the page to request. + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // page_token is the page token. + PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` +} + +func (x *ListAllAccessListMembersRequest) Reset() { + *x = ListAllAccessListMembersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAllAccessListMembersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAllAccessListMembersRequest) ProtoMessage() {} + +func (x *ListAllAccessListMembersRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_accesslist_v1_accesslist_service_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 ListAllAccessListMembersRequest.ProtoReflect.Descriptor instead. +func (*ListAllAccessListMembersRequest) Descriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{12} +} + +func (x *ListAllAccessListMembersRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListAllAccessListMembersRequest) GetPageToken() string { + if x != nil { + return x.PageToken + } + return "" +} + +// ListAllAccessListMembersResponse is the response for getting paginated access list members for all access lists. +type ListAllAccessListMembersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // members is the list of access list members. + Members []*Member `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` + // next_page_token is the next page token. + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` +} + +func (x *ListAllAccessListMembersResponse) Reset() { + *x = ListAllAccessListMembersResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAllAccessListMembersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAllAccessListMembersResponse) ProtoMessage() {} + +func (x *ListAllAccessListMembersResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_accesslist_v1_accesslist_service_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 ListAllAccessListMembersResponse.ProtoReflect.Descriptor instead. +func (*ListAllAccessListMembersResponse) Descriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{13} +} + +func (x *ListAllAccessListMembersResponse) GetMembers() []*Member { + if x != nil { + return x.Members + } + return nil +} + +func (x *ListAllAccessListMembersResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken + } + return "" +} + // UpsertAccessListWithMembers is the request for upserting an access list with members. type UpsertAccessListWithMembersRequest struct { state protoimpl.MessageState @@ -654,7 +770,7 @@ type UpsertAccessListWithMembersRequest struct { func (x *UpsertAccessListWithMembersRequest) Reset() { *x = UpsertAccessListWithMembersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -667,7 +783,7 @@ func (x *UpsertAccessListWithMembersRequest) String() string { func (*UpsertAccessListWithMembersRequest) ProtoMessage() {} func (x *UpsertAccessListWithMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -680,7 +796,7 @@ func (x *UpsertAccessListWithMembersRequest) ProtoReflect() protoreflect.Message // Deprecated: Use UpsertAccessListWithMembersRequest.ProtoReflect.Descriptor instead. func (*UpsertAccessListWithMembersRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{12} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{14} } func (x *UpsertAccessListWithMembersRequest) GetAccessList() *AccessList { @@ -712,7 +828,7 @@ type UpsertAccessListWithMembersResponse struct { func (x *UpsertAccessListWithMembersResponse) Reset() { *x = UpsertAccessListWithMembersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -725,7 +841,7 @@ func (x *UpsertAccessListWithMembersResponse) String() string { func (*UpsertAccessListWithMembersResponse) ProtoMessage() {} func (x *UpsertAccessListWithMembersResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -738,7 +854,7 @@ func (x *UpsertAccessListWithMembersResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use UpsertAccessListWithMembersResponse.ProtoReflect.Descriptor instead. func (*UpsertAccessListWithMembersResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{13} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{15} } func (x *UpsertAccessListWithMembersResponse) GetAccessList() *AccessList { @@ -770,7 +886,7 @@ type GetAccessListMemberRequest struct { func (x *GetAccessListMemberRequest) Reset() { *x = GetAccessListMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -783,7 +899,7 @@ func (x *GetAccessListMemberRequest) String() string { func (*GetAccessListMemberRequest) ProtoMessage() {} func (x *GetAccessListMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -796,7 +912,7 @@ func (x *GetAccessListMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAccessListMemberRequest.ProtoReflect.Descriptor instead. func (*GetAccessListMemberRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{14} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{16} } func (x *GetAccessListMemberRequest) GetAccessList() string { @@ -826,7 +942,7 @@ type UpsertAccessListMemberRequest struct { func (x *UpsertAccessListMemberRequest) Reset() { *x = UpsertAccessListMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -839,7 +955,7 @@ func (x *UpsertAccessListMemberRequest) String() string { func (*UpsertAccessListMemberRequest) ProtoMessage() {} func (x *UpsertAccessListMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -852,7 +968,7 @@ func (x *UpsertAccessListMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertAccessListMemberRequest.ProtoReflect.Descriptor instead. func (*UpsertAccessListMemberRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{15} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{17} } func (x *UpsertAccessListMemberRequest) GetMember() *Member { @@ -877,7 +993,7 @@ type DeleteAccessListMemberRequest struct { func (x *DeleteAccessListMemberRequest) Reset() { *x = DeleteAccessListMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -890,7 +1006,7 @@ func (x *DeleteAccessListMemberRequest) String() string { func (*DeleteAccessListMemberRequest) ProtoMessage() {} func (x *DeleteAccessListMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -903,7 +1019,7 @@ func (x *DeleteAccessListMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAccessListMemberRequest.ProtoReflect.Descriptor instead. func (*DeleteAccessListMemberRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{16} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{18} } func (x *DeleteAccessListMemberRequest) GetAccessList() string { @@ -933,7 +1049,7 @@ type DeleteAllAccessListMembersForAccessListRequest struct { func (x *DeleteAllAccessListMembersForAccessListRequest) Reset() { *x = DeleteAllAccessListMembersForAccessListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -946,7 +1062,7 @@ func (x *DeleteAllAccessListMembersForAccessListRequest) String() string { func (*DeleteAllAccessListMembersForAccessListRequest) ProtoMessage() {} func (x *DeleteAllAccessListMembersForAccessListRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -959,7 +1075,7 @@ func (x *DeleteAllAccessListMembersForAccessListRequest) ProtoReflect() protoref // Deprecated: Use DeleteAllAccessListMembersForAccessListRequest.ProtoReflect.Descriptor instead. func (*DeleteAllAccessListMembersForAccessListRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{17} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{19} } func (x *DeleteAllAccessListMembersForAccessListRequest) GetAccessList() string { @@ -979,7 +1095,7 @@ type DeleteAllAccessListMembersRequest struct { func (x *DeleteAllAccessListMembersRequest) Reset() { *x = DeleteAllAccessListMembersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -992,7 +1108,7 @@ func (x *DeleteAllAccessListMembersRequest) String() string { func (*DeleteAllAccessListMembersRequest) ProtoMessage() {} func (x *DeleteAllAccessListMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1005,7 +1121,7 @@ func (x *DeleteAllAccessListMembersRequest) ProtoReflect() protoreflect.Message // Deprecated: Use DeleteAllAccessListMembersRequest.ProtoReflect.Descriptor instead. func (*DeleteAllAccessListMembersRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{18} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{20} } // ListAccessListReviewsRequest is the request for getting paginated access list reviews for a particular access list. @@ -1025,7 +1141,7 @@ type ListAccessListReviewsRequest struct { func (x *ListAccessListReviewsRequest) Reset() { *x = ListAccessListReviewsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1038,7 +1154,7 @@ func (x *ListAccessListReviewsRequest) String() string { func (*ListAccessListReviewsRequest) ProtoMessage() {} func (x *ListAccessListReviewsRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1051,7 +1167,7 @@ func (x *ListAccessListReviewsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAccessListReviewsRequest.ProtoReflect.Descriptor instead. func (*ListAccessListReviewsRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{19} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{21} } func (x *ListAccessListReviewsRequest) GetAccessList() string { @@ -1090,7 +1206,7 @@ type ListAccessListReviewsResponse struct { func (x *ListAccessListReviewsResponse) Reset() { *x = ListAccessListReviewsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1103,7 +1219,7 @@ func (x *ListAccessListReviewsResponse) String() string { func (*ListAccessListReviewsResponse) ProtoMessage() {} func (x *ListAccessListReviewsResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1116,7 +1232,7 @@ func (x *ListAccessListReviewsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAccessListReviewsResponse.ProtoReflect.Descriptor instead. func (*ListAccessListReviewsResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{20} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{22} } func (x *ListAccessListReviewsResponse) GetReviews() []*Review { @@ -1133,6 +1249,122 @@ func (x *ListAccessListReviewsResponse) GetNextToken() string { return "" } +// ListAllAccessListReviewsRequest is the request for getting paginated access list reviews for all access lists. +type ListAllAccessListReviewsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // page_size is the size of the page to request. + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + // next_token is the page token. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` +} + +func (x *ListAllAccessListReviewsRequest) Reset() { + *x = ListAllAccessListReviewsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAllAccessListReviewsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAllAccessListReviewsRequest) ProtoMessage() {} + +func (x *ListAllAccessListReviewsRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAllAccessListReviewsRequest.ProtoReflect.Descriptor instead. +func (*ListAllAccessListReviewsRequest) Descriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{23} +} + +func (x *ListAllAccessListReviewsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListAllAccessListReviewsRequest) GetNextToken() string { + if x != nil { + return x.NextToken + } + return "" +} + +// ListAllAccessListReviewsResponse is the response for getting paginated access list reviews for all access lists. +type ListAllAccessListReviewsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // reviews is the list of access list reviews. + Reviews []*Review `protobuf:"bytes,1,rep,name=reviews,proto3" json:"reviews,omitempty"` + // next_token is the next page token. + NextToken string `protobuf:"bytes,2,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` +} + +func (x *ListAllAccessListReviewsResponse) Reset() { + *x = ListAllAccessListReviewsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAllAccessListReviewsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAllAccessListReviewsResponse) ProtoMessage() {} + +func (x *ListAllAccessListReviewsResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAllAccessListReviewsResponse.ProtoReflect.Descriptor instead. +func (*ListAllAccessListReviewsResponse) Descriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{24} +} + +func (x *ListAllAccessListReviewsResponse) GetReviews() []*Review { + if x != nil { + return x.Reviews + } + return nil +} + +func (x *ListAllAccessListReviewsResponse) GetNextToken() string { + if x != nil { + return x.NextToken + } + return "" +} + // CreateAccessListReviewRequest is the request for creating an access list review. type CreateAccessListReviewRequest struct { state protoimpl.MessageState @@ -1146,7 +1378,7 @@ type CreateAccessListReviewRequest struct { func (x *CreateAccessListReviewRequest) Reset() { *x = CreateAccessListReviewRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1159,7 +1391,7 @@ func (x *CreateAccessListReviewRequest) String() string { func (*CreateAccessListReviewRequest) ProtoMessage() {} func (x *CreateAccessListReviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1172,7 +1404,7 @@ func (x *CreateAccessListReviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAccessListReviewRequest.ProtoReflect.Descriptor instead. func (*CreateAccessListReviewRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{21} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{25} } func (x *CreateAccessListReviewRequest) GetReview() *Review { @@ -1197,7 +1429,7 @@ type CreateAccessListReviewResponse struct { func (x *CreateAccessListReviewResponse) Reset() { *x = CreateAccessListReviewResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1210,7 +1442,7 @@ func (x *CreateAccessListReviewResponse) String() string { func (*CreateAccessListReviewResponse) ProtoMessage() {} func (x *CreateAccessListReviewResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1223,7 +1455,7 @@ func (x *CreateAccessListReviewResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAccessListReviewResponse.ProtoReflect.Descriptor instead. func (*CreateAccessListReviewResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{22} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{26} } func (x *CreateAccessListReviewResponse) GetReviewName() string { @@ -1255,7 +1487,7 @@ type DeleteAccessListReviewRequest struct { func (x *DeleteAccessListReviewRequest) Reset() { *x = DeleteAccessListReviewRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1268,7 +1500,7 @@ func (x *DeleteAccessListReviewRequest) String() string { func (*DeleteAccessListReviewRequest) ProtoMessage() {} func (x *DeleteAccessListReviewRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1281,7 +1513,7 @@ func (x *DeleteAccessListReviewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAccessListReviewRequest.ProtoReflect.Descriptor instead. func (*DeleteAccessListReviewRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{23} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{27} } func (x *DeleteAccessListReviewRequest) GetReviewName() string { @@ -1315,7 +1547,7 @@ type AccessRequestPromoteRequest struct { func (x *AccessRequestPromoteRequest) Reset() { *x = AccessRequestPromoteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1328,7 +1560,7 @@ func (x *AccessRequestPromoteRequest) String() string { func (*AccessRequestPromoteRequest) ProtoMessage() {} func (x *AccessRequestPromoteRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1341,7 +1573,7 @@ func (x *AccessRequestPromoteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AccessRequestPromoteRequest.ProtoReflect.Descriptor instead. func (*AccessRequestPromoteRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{24} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{28} } func (x *AccessRequestPromoteRequest) GetRequestId() string { @@ -1378,7 +1610,7 @@ type AccessRequestPromoteResponse struct { func (x *AccessRequestPromoteResponse) Reset() { *x = AccessRequestPromoteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1391,7 +1623,7 @@ func (x *AccessRequestPromoteResponse) String() string { func (*AccessRequestPromoteResponse) ProtoMessage() {} func (x *AccessRequestPromoteResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1404,7 +1636,7 @@ func (x *AccessRequestPromoteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AccessRequestPromoteResponse.ProtoReflect.Descriptor instead. func (*AccessRequestPromoteResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{25} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{29} } func (x *AccessRequestPromoteResponse) GetAccessRequest() *types.AccessRequestV3 { @@ -1427,7 +1659,7 @@ type GetSuggestedAccessListsRequest struct { func (x *GetSuggestedAccessListsRequest) Reset() { *x = GetSuggestedAccessListsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1440,7 +1672,7 @@ func (x *GetSuggestedAccessListsRequest) String() string { func (*GetSuggestedAccessListsRequest) ProtoMessage() {} func (x *GetSuggestedAccessListsRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1453,7 +1685,7 @@ func (x *GetSuggestedAccessListsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSuggestedAccessListsRequest.ProtoReflect.Descriptor instead. func (*GetSuggestedAccessListsRequest) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{26} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{30} } func (x *GetSuggestedAccessListsRequest) GetAccessRequestId() string { @@ -1476,7 +1708,7 @@ type GetSuggestedAccessListsResponse struct { func (x *GetSuggestedAccessListsResponse) Reset() { *x = GetSuggestedAccessListsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1489,7 +1721,7 @@ func (x *GetSuggestedAccessListsResponse) String() string { func (*GetSuggestedAccessListsResponse) ProtoMessage() {} func (x *GetSuggestedAccessListsResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27] + mi := &file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1502,7 +1734,7 @@ func (x *GetSuggestedAccessListsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSuggestedAccessListsResponse.ProtoReflect.Descriptor instead. func (*GetSuggestedAccessListsResponse) Descriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{27} + return file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP(), []int{31} } func (x *GetSuggestedAccessListsResponse) GetAccessLists() []*AccessList { @@ -1587,270 +1819,316 @@ var file_teleport_accesslist_v1_accesslist_service_proto_rawDesc = []byte{ 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, - 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xa3, 0x01, 0x0a, 0x22, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, - 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, - 0xa4, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5d, 0x0a, 0x1f, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, + 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, + 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, + 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, + 0xa3, 0x01, 0x0a, 0x22, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, - 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x5e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xa4, 0x01, 0x0a, 0x23, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, + 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x5e, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x84, 0x01, 0x0a, + 0x1d, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, + 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, + 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x22, 0x6d, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x6d, 0x0a, - 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x51, 0x0a, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x46, 0x6f, 0x72, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, - 0x36, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x7b, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x51, 0x0a, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x46, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x36, 0x0a, 0x21, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, + 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x22, 0x7b, 0x0a, + 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, + 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x78, 0x0a, 0x1d, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x72, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x07, 0x72, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5d, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x78, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x57, - 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x36, 0x0a, 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, - 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x22, 0x85, 0x01, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0f, 0x6e, - 0x65, 0x78, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x44, 0x61, 0x74, 0x65, 0x22, - 0x6a, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x7e, 0x0a, 0x1b, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x5d, 0x0a, 0x1c, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x33, 0x52, 0x0d, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x1e, 0x47, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x22, 0x7b, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x07, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x22, 0x57, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x36, 0x0a, 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x52, 0x06, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x22, 0x85, 0x01, 0x0a, 0x1e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, + 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x44, 0x61, 0x74, + 0x65, 0x22, 0x6a, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, + 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x7e, 0x0a, + 0x1b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, + 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x5d, 0x0a, + 0x1c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, + 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, + 0x0e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x33, 0x52, 0x0d, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x1e, + 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, + 0x0a, 0x11, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x68, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x53, - 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x73, 0x32, 0xfd, 0x11, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x2e, 0x2e, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, + 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x73, 0x32, 0x9d, 0x14, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0e, 0x47, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, - 0x0d, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0f, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x67, 0x0a, 0x10, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x10, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, - 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 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, 0x63, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x33, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x61, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, - 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x87, 0x01, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, - 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x67, 0x0a, 0x10, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, - 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, - 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, - 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x13, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x6f, 0x0a, 0x16, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 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, 0x89, 0x01, 0x0a, 0x27, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x46, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x46, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, - 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x46, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x10, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 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, 0x63, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, + 0x12, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x6f, 0x0a, - 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x39, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x96, - 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x3a, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x87, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, + 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, + 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x54, 0x6f, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x87, - 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8d, + 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x37, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 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, 0x81, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x33, 0x2e, 0x74, 0x65, 0x6c, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x6f, 0x0a, 0x16, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x73, 0x12, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x16, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 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, 0x89, 0x01, 0x0a, 0x27, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, + 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x46, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x46, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x46, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 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, + 0x6f, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x39, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, + 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x6c, 0x6c, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x96, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x12, 0x3a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x15, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x3b, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x8d, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x12, 0x37, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, + 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x87, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x16, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x76, 0x69, 0x65, 0x77, 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, 0x81, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x33, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8a, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, + 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x73, 0x12, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, + 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x76, + 0x31, 0x3b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1865,7 +2143,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP() []byte { return file_teleport_accesslist_v1_accesslist_service_proto_rawDescData } -var file_teleport_accesslist_v1_accesslist_service_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_teleport_accesslist_v1_accesslist_service_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_teleport_accesslist_v1_accesslist_service_proto_goTypes = []interface{}{ (*GetAccessListsRequest)(nil), // 0: teleport.accesslist.v1.GetAccessListsRequest (*GetAccessListsResponse)(nil), // 1: teleport.accesslist.v1.GetAccessListsResponse @@ -1879,88 +2157,98 @@ var file_teleport_accesslist_v1_accesslist_service_proto_goTypes = []interface{} (*GetAccessListsToReviewResponse)(nil), // 9: teleport.accesslist.v1.GetAccessListsToReviewResponse (*ListAccessListMembersRequest)(nil), // 10: teleport.accesslist.v1.ListAccessListMembersRequest (*ListAccessListMembersResponse)(nil), // 11: teleport.accesslist.v1.ListAccessListMembersResponse - (*UpsertAccessListWithMembersRequest)(nil), // 12: teleport.accesslist.v1.UpsertAccessListWithMembersRequest - (*UpsertAccessListWithMembersResponse)(nil), // 13: teleport.accesslist.v1.UpsertAccessListWithMembersResponse - (*GetAccessListMemberRequest)(nil), // 14: teleport.accesslist.v1.GetAccessListMemberRequest - (*UpsertAccessListMemberRequest)(nil), // 15: teleport.accesslist.v1.UpsertAccessListMemberRequest - (*DeleteAccessListMemberRequest)(nil), // 16: teleport.accesslist.v1.DeleteAccessListMemberRequest - (*DeleteAllAccessListMembersForAccessListRequest)(nil), // 17: teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest - (*DeleteAllAccessListMembersRequest)(nil), // 18: teleport.accesslist.v1.DeleteAllAccessListMembersRequest - (*ListAccessListReviewsRequest)(nil), // 19: teleport.accesslist.v1.ListAccessListReviewsRequest - (*ListAccessListReviewsResponse)(nil), // 20: teleport.accesslist.v1.ListAccessListReviewsResponse - (*CreateAccessListReviewRequest)(nil), // 21: teleport.accesslist.v1.CreateAccessListReviewRequest - (*CreateAccessListReviewResponse)(nil), // 22: teleport.accesslist.v1.CreateAccessListReviewResponse - (*DeleteAccessListReviewRequest)(nil), // 23: teleport.accesslist.v1.DeleteAccessListReviewRequest - (*AccessRequestPromoteRequest)(nil), // 24: teleport.accesslist.v1.AccessRequestPromoteRequest - (*AccessRequestPromoteResponse)(nil), // 25: teleport.accesslist.v1.AccessRequestPromoteResponse - (*GetSuggestedAccessListsRequest)(nil), // 26: teleport.accesslist.v1.GetSuggestedAccessListsRequest - (*GetSuggestedAccessListsResponse)(nil), // 27: teleport.accesslist.v1.GetSuggestedAccessListsResponse - (*AccessList)(nil), // 28: teleport.accesslist.v1.AccessList - (*Member)(nil), // 29: teleport.accesslist.v1.Member - (*Review)(nil), // 30: teleport.accesslist.v1.Review - (*timestamppb.Timestamp)(nil), // 31: google.protobuf.Timestamp - (*types.AccessRequestV3)(nil), // 32: types.AccessRequestV3 - (*emptypb.Empty)(nil), // 33: google.protobuf.Empty + (*ListAllAccessListMembersRequest)(nil), // 12: teleport.accesslist.v1.ListAllAccessListMembersRequest + (*ListAllAccessListMembersResponse)(nil), // 13: teleport.accesslist.v1.ListAllAccessListMembersResponse + (*UpsertAccessListWithMembersRequest)(nil), // 14: teleport.accesslist.v1.UpsertAccessListWithMembersRequest + (*UpsertAccessListWithMembersResponse)(nil), // 15: teleport.accesslist.v1.UpsertAccessListWithMembersResponse + (*GetAccessListMemberRequest)(nil), // 16: teleport.accesslist.v1.GetAccessListMemberRequest + (*UpsertAccessListMemberRequest)(nil), // 17: teleport.accesslist.v1.UpsertAccessListMemberRequest + (*DeleteAccessListMemberRequest)(nil), // 18: teleport.accesslist.v1.DeleteAccessListMemberRequest + (*DeleteAllAccessListMembersForAccessListRequest)(nil), // 19: teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest + (*DeleteAllAccessListMembersRequest)(nil), // 20: teleport.accesslist.v1.DeleteAllAccessListMembersRequest + (*ListAccessListReviewsRequest)(nil), // 21: teleport.accesslist.v1.ListAccessListReviewsRequest + (*ListAccessListReviewsResponse)(nil), // 22: teleport.accesslist.v1.ListAccessListReviewsResponse + (*ListAllAccessListReviewsRequest)(nil), // 23: teleport.accesslist.v1.ListAllAccessListReviewsRequest + (*ListAllAccessListReviewsResponse)(nil), // 24: teleport.accesslist.v1.ListAllAccessListReviewsResponse + (*CreateAccessListReviewRequest)(nil), // 25: teleport.accesslist.v1.CreateAccessListReviewRequest + (*CreateAccessListReviewResponse)(nil), // 26: teleport.accesslist.v1.CreateAccessListReviewResponse + (*DeleteAccessListReviewRequest)(nil), // 27: teleport.accesslist.v1.DeleteAccessListReviewRequest + (*AccessRequestPromoteRequest)(nil), // 28: teleport.accesslist.v1.AccessRequestPromoteRequest + (*AccessRequestPromoteResponse)(nil), // 29: teleport.accesslist.v1.AccessRequestPromoteResponse + (*GetSuggestedAccessListsRequest)(nil), // 30: teleport.accesslist.v1.GetSuggestedAccessListsRequest + (*GetSuggestedAccessListsResponse)(nil), // 31: teleport.accesslist.v1.GetSuggestedAccessListsResponse + (*AccessList)(nil), // 32: teleport.accesslist.v1.AccessList + (*Member)(nil), // 33: teleport.accesslist.v1.Member + (*Review)(nil), // 34: teleport.accesslist.v1.Review + (*timestamppb.Timestamp)(nil), // 35: google.protobuf.Timestamp + (*types.AccessRequestV3)(nil), // 36: types.AccessRequestV3 + (*emptypb.Empty)(nil), // 37: google.protobuf.Empty } var file_teleport_accesslist_v1_accesslist_service_proto_depIdxs = []int32{ - 28, // 0: teleport.accesslist.v1.GetAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList - 28, // 1: teleport.accesslist.v1.ListAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList - 28, // 2: teleport.accesslist.v1.UpsertAccessListRequest.access_list:type_name -> teleport.accesslist.v1.AccessList - 28, // 3: teleport.accesslist.v1.GetAccessListsToReviewResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList - 29, // 4: teleport.accesslist.v1.ListAccessListMembersResponse.members:type_name -> teleport.accesslist.v1.Member - 28, // 5: teleport.accesslist.v1.UpsertAccessListWithMembersRequest.access_list:type_name -> teleport.accesslist.v1.AccessList - 29, // 6: teleport.accesslist.v1.UpsertAccessListWithMembersRequest.members:type_name -> teleport.accesslist.v1.Member - 28, // 7: teleport.accesslist.v1.UpsertAccessListWithMembersResponse.access_list:type_name -> teleport.accesslist.v1.AccessList - 29, // 8: teleport.accesslist.v1.UpsertAccessListWithMembersResponse.members:type_name -> teleport.accesslist.v1.Member - 29, // 9: teleport.accesslist.v1.UpsertAccessListMemberRequest.member:type_name -> teleport.accesslist.v1.Member - 30, // 10: teleport.accesslist.v1.ListAccessListReviewsResponse.reviews:type_name -> teleport.accesslist.v1.Review - 30, // 11: teleport.accesslist.v1.CreateAccessListReviewRequest.review:type_name -> teleport.accesslist.v1.Review - 31, // 12: teleport.accesslist.v1.CreateAccessListReviewResponse.next_audit_date:type_name -> google.protobuf.Timestamp - 32, // 13: teleport.accesslist.v1.AccessRequestPromoteResponse.access_request:type_name -> types.AccessRequestV3 - 28, // 14: teleport.accesslist.v1.GetSuggestedAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList - 0, // 15: teleport.accesslist.v1.AccessListService.GetAccessLists:input_type -> teleport.accesslist.v1.GetAccessListsRequest - 2, // 16: teleport.accesslist.v1.AccessListService.ListAccessLists:input_type -> teleport.accesslist.v1.ListAccessListsRequest - 4, // 17: teleport.accesslist.v1.AccessListService.GetAccessList:input_type -> teleport.accesslist.v1.GetAccessListRequest - 5, // 18: teleport.accesslist.v1.AccessListService.UpsertAccessList:input_type -> teleport.accesslist.v1.UpsertAccessListRequest - 6, // 19: teleport.accesslist.v1.AccessListService.DeleteAccessList:input_type -> teleport.accesslist.v1.DeleteAccessListRequest - 7, // 20: teleport.accesslist.v1.AccessListService.DeleteAllAccessLists:input_type -> teleport.accesslist.v1.DeleteAllAccessListsRequest - 8, // 21: teleport.accesslist.v1.AccessListService.GetAccessListsToReview:input_type -> teleport.accesslist.v1.GetAccessListsToReviewRequest - 10, // 22: teleport.accesslist.v1.AccessListService.ListAccessListMembers:input_type -> teleport.accesslist.v1.ListAccessListMembersRequest - 14, // 23: teleport.accesslist.v1.AccessListService.GetAccessListMember:input_type -> teleport.accesslist.v1.GetAccessListMemberRequest - 15, // 24: teleport.accesslist.v1.AccessListService.UpsertAccessListMember:input_type -> teleport.accesslist.v1.UpsertAccessListMemberRequest - 16, // 25: teleport.accesslist.v1.AccessListService.DeleteAccessListMember:input_type -> teleport.accesslist.v1.DeleteAccessListMemberRequest - 17, // 26: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembersForAccessList:input_type -> teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest - 18, // 27: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembers:input_type -> teleport.accesslist.v1.DeleteAllAccessListMembersRequest - 12, // 28: teleport.accesslist.v1.AccessListService.UpsertAccessListWithMembers:input_type -> teleport.accesslist.v1.UpsertAccessListWithMembersRequest - 19, // 29: teleport.accesslist.v1.AccessListService.ListAccessListReviews:input_type -> teleport.accesslist.v1.ListAccessListReviewsRequest - 21, // 30: teleport.accesslist.v1.AccessListService.CreateAccessListReview:input_type -> teleport.accesslist.v1.CreateAccessListReviewRequest - 23, // 31: teleport.accesslist.v1.AccessListService.DeleteAccessListReview:input_type -> teleport.accesslist.v1.DeleteAccessListReviewRequest - 24, // 32: teleport.accesslist.v1.AccessListService.AccessRequestPromote:input_type -> teleport.accesslist.v1.AccessRequestPromoteRequest - 26, // 33: teleport.accesslist.v1.AccessListService.GetSuggestedAccessLists:input_type -> teleport.accesslist.v1.GetSuggestedAccessListsRequest - 1, // 34: teleport.accesslist.v1.AccessListService.GetAccessLists:output_type -> teleport.accesslist.v1.GetAccessListsResponse - 3, // 35: teleport.accesslist.v1.AccessListService.ListAccessLists:output_type -> teleport.accesslist.v1.ListAccessListsResponse - 28, // 36: teleport.accesslist.v1.AccessListService.GetAccessList:output_type -> teleport.accesslist.v1.AccessList - 28, // 37: teleport.accesslist.v1.AccessListService.UpsertAccessList:output_type -> teleport.accesslist.v1.AccessList - 33, // 38: teleport.accesslist.v1.AccessListService.DeleteAccessList:output_type -> google.protobuf.Empty - 33, // 39: teleport.accesslist.v1.AccessListService.DeleteAllAccessLists:output_type -> google.protobuf.Empty - 9, // 40: teleport.accesslist.v1.AccessListService.GetAccessListsToReview:output_type -> teleport.accesslist.v1.GetAccessListsToReviewResponse - 11, // 41: teleport.accesslist.v1.AccessListService.ListAccessListMembers:output_type -> teleport.accesslist.v1.ListAccessListMembersResponse - 29, // 42: teleport.accesslist.v1.AccessListService.GetAccessListMember:output_type -> teleport.accesslist.v1.Member - 29, // 43: teleport.accesslist.v1.AccessListService.UpsertAccessListMember:output_type -> teleport.accesslist.v1.Member - 33, // 44: teleport.accesslist.v1.AccessListService.DeleteAccessListMember:output_type -> google.protobuf.Empty - 33, // 45: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembersForAccessList:output_type -> google.protobuf.Empty - 33, // 46: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembers:output_type -> google.protobuf.Empty - 13, // 47: teleport.accesslist.v1.AccessListService.UpsertAccessListWithMembers:output_type -> teleport.accesslist.v1.UpsertAccessListWithMembersResponse - 20, // 48: teleport.accesslist.v1.AccessListService.ListAccessListReviews:output_type -> teleport.accesslist.v1.ListAccessListReviewsResponse - 22, // 49: teleport.accesslist.v1.AccessListService.CreateAccessListReview:output_type -> teleport.accesslist.v1.CreateAccessListReviewResponse - 33, // 50: teleport.accesslist.v1.AccessListService.DeleteAccessListReview:output_type -> google.protobuf.Empty - 25, // 51: teleport.accesslist.v1.AccessListService.AccessRequestPromote:output_type -> teleport.accesslist.v1.AccessRequestPromoteResponse - 27, // 52: teleport.accesslist.v1.AccessListService.GetSuggestedAccessLists:output_type -> teleport.accesslist.v1.GetSuggestedAccessListsResponse - 34, // [34:53] is the sub-list for method output_type - 15, // [15:34] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 32, // 0: teleport.accesslist.v1.GetAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList + 32, // 1: teleport.accesslist.v1.ListAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList + 32, // 2: teleport.accesslist.v1.UpsertAccessListRequest.access_list:type_name -> teleport.accesslist.v1.AccessList + 32, // 3: teleport.accesslist.v1.GetAccessListsToReviewResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList + 33, // 4: teleport.accesslist.v1.ListAccessListMembersResponse.members:type_name -> teleport.accesslist.v1.Member + 33, // 5: teleport.accesslist.v1.ListAllAccessListMembersResponse.members:type_name -> teleport.accesslist.v1.Member + 32, // 6: teleport.accesslist.v1.UpsertAccessListWithMembersRequest.access_list:type_name -> teleport.accesslist.v1.AccessList + 33, // 7: teleport.accesslist.v1.UpsertAccessListWithMembersRequest.members:type_name -> teleport.accesslist.v1.Member + 32, // 8: teleport.accesslist.v1.UpsertAccessListWithMembersResponse.access_list:type_name -> teleport.accesslist.v1.AccessList + 33, // 9: teleport.accesslist.v1.UpsertAccessListWithMembersResponse.members:type_name -> teleport.accesslist.v1.Member + 33, // 10: teleport.accesslist.v1.UpsertAccessListMemberRequest.member:type_name -> teleport.accesslist.v1.Member + 34, // 11: teleport.accesslist.v1.ListAccessListReviewsResponse.reviews:type_name -> teleport.accesslist.v1.Review + 34, // 12: teleport.accesslist.v1.ListAllAccessListReviewsResponse.reviews:type_name -> teleport.accesslist.v1.Review + 34, // 13: teleport.accesslist.v1.CreateAccessListReviewRequest.review:type_name -> teleport.accesslist.v1.Review + 35, // 14: teleport.accesslist.v1.CreateAccessListReviewResponse.next_audit_date:type_name -> google.protobuf.Timestamp + 36, // 15: teleport.accesslist.v1.AccessRequestPromoteResponse.access_request:type_name -> types.AccessRequestV3 + 32, // 16: teleport.accesslist.v1.GetSuggestedAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList + 0, // 17: teleport.accesslist.v1.AccessListService.GetAccessLists:input_type -> teleport.accesslist.v1.GetAccessListsRequest + 2, // 18: teleport.accesslist.v1.AccessListService.ListAccessLists:input_type -> teleport.accesslist.v1.ListAccessListsRequest + 4, // 19: teleport.accesslist.v1.AccessListService.GetAccessList:input_type -> teleport.accesslist.v1.GetAccessListRequest + 5, // 20: teleport.accesslist.v1.AccessListService.UpsertAccessList:input_type -> teleport.accesslist.v1.UpsertAccessListRequest + 6, // 21: teleport.accesslist.v1.AccessListService.DeleteAccessList:input_type -> teleport.accesslist.v1.DeleteAccessListRequest + 7, // 22: teleport.accesslist.v1.AccessListService.DeleteAllAccessLists:input_type -> teleport.accesslist.v1.DeleteAllAccessListsRequest + 8, // 23: teleport.accesslist.v1.AccessListService.GetAccessListsToReview:input_type -> teleport.accesslist.v1.GetAccessListsToReviewRequest + 10, // 24: teleport.accesslist.v1.AccessListService.ListAccessListMembers:input_type -> teleport.accesslist.v1.ListAccessListMembersRequest + 12, // 25: teleport.accesslist.v1.AccessListService.ListAllAccessListMembers:input_type -> teleport.accesslist.v1.ListAllAccessListMembersRequest + 16, // 26: teleport.accesslist.v1.AccessListService.GetAccessListMember:input_type -> teleport.accesslist.v1.GetAccessListMemberRequest + 17, // 27: teleport.accesslist.v1.AccessListService.UpsertAccessListMember:input_type -> teleport.accesslist.v1.UpsertAccessListMemberRequest + 18, // 28: teleport.accesslist.v1.AccessListService.DeleteAccessListMember:input_type -> teleport.accesslist.v1.DeleteAccessListMemberRequest + 19, // 29: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembersForAccessList:input_type -> teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest + 20, // 30: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembers:input_type -> teleport.accesslist.v1.DeleteAllAccessListMembersRequest + 14, // 31: teleport.accesslist.v1.AccessListService.UpsertAccessListWithMembers:input_type -> teleport.accesslist.v1.UpsertAccessListWithMembersRequest + 21, // 32: teleport.accesslist.v1.AccessListService.ListAccessListReviews:input_type -> teleport.accesslist.v1.ListAccessListReviewsRequest + 23, // 33: teleport.accesslist.v1.AccessListService.ListAllAccessListReviews:input_type -> teleport.accesslist.v1.ListAllAccessListReviewsRequest + 25, // 34: teleport.accesslist.v1.AccessListService.CreateAccessListReview:input_type -> teleport.accesslist.v1.CreateAccessListReviewRequest + 27, // 35: teleport.accesslist.v1.AccessListService.DeleteAccessListReview:input_type -> teleport.accesslist.v1.DeleteAccessListReviewRequest + 28, // 36: teleport.accesslist.v1.AccessListService.AccessRequestPromote:input_type -> teleport.accesslist.v1.AccessRequestPromoteRequest + 30, // 37: teleport.accesslist.v1.AccessListService.GetSuggestedAccessLists:input_type -> teleport.accesslist.v1.GetSuggestedAccessListsRequest + 1, // 38: teleport.accesslist.v1.AccessListService.GetAccessLists:output_type -> teleport.accesslist.v1.GetAccessListsResponse + 3, // 39: teleport.accesslist.v1.AccessListService.ListAccessLists:output_type -> teleport.accesslist.v1.ListAccessListsResponse + 32, // 40: teleport.accesslist.v1.AccessListService.GetAccessList:output_type -> teleport.accesslist.v1.AccessList + 32, // 41: teleport.accesslist.v1.AccessListService.UpsertAccessList:output_type -> teleport.accesslist.v1.AccessList + 37, // 42: teleport.accesslist.v1.AccessListService.DeleteAccessList:output_type -> google.protobuf.Empty + 37, // 43: teleport.accesslist.v1.AccessListService.DeleteAllAccessLists:output_type -> google.protobuf.Empty + 9, // 44: teleport.accesslist.v1.AccessListService.GetAccessListsToReview:output_type -> teleport.accesslist.v1.GetAccessListsToReviewResponse + 11, // 45: teleport.accesslist.v1.AccessListService.ListAccessListMembers:output_type -> teleport.accesslist.v1.ListAccessListMembersResponse + 13, // 46: teleport.accesslist.v1.AccessListService.ListAllAccessListMembers:output_type -> teleport.accesslist.v1.ListAllAccessListMembersResponse + 33, // 47: teleport.accesslist.v1.AccessListService.GetAccessListMember:output_type -> teleport.accesslist.v1.Member + 33, // 48: teleport.accesslist.v1.AccessListService.UpsertAccessListMember:output_type -> teleport.accesslist.v1.Member + 37, // 49: teleport.accesslist.v1.AccessListService.DeleteAccessListMember:output_type -> google.protobuf.Empty + 37, // 50: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembersForAccessList:output_type -> google.protobuf.Empty + 37, // 51: teleport.accesslist.v1.AccessListService.DeleteAllAccessListMembers:output_type -> google.protobuf.Empty + 15, // 52: teleport.accesslist.v1.AccessListService.UpsertAccessListWithMembers:output_type -> teleport.accesslist.v1.UpsertAccessListWithMembersResponse + 22, // 53: teleport.accesslist.v1.AccessListService.ListAccessListReviews:output_type -> teleport.accesslist.v1.ListAccessListReviewsResponse + 24, // 54: teleport.accesslist.v1.AccessListService.ListAllAccessListReviews:output_type -> teleport.accesslist.v1.ListAllAccessListReviewsResponse + 26, // 55: teleport.accesslist.v1.AccessListService.CreateAccessListReview:output_type -> teleport.accesslist.v1.CreateAccessListReviewResponse + 37, // 56: teleport.accesslist.v1.AccessListService.DeleteAccessListReview:output_type -> google.protobuf.Empty + 29, // 57: teleport.accesslist.v1.AccessListService.AccessRequestPromote:output_type -> teleport.accesslist.v1.AccessRequestPromoteResponse + 31, // 58: teleport.accesslist.v1.AccessListService.GetSuggestedAccessLists:output_type -> teleport.accesslist.v1.GetSuggestedAccessListsResponse + 38, // [38:59] is the sub-list for method output_type + 17, // [17:38] 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_teleport_accesslist_v1_accesslist_service_proto_init() } @@ -2115,7 +2403,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertAccessListWithMembersRequest); i { + switch v := v.(*ListAllAccessListMembersRequest); i { case 0: return &v.state case 1: @@ -2127,7 +2415,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertAccessListWithMembersResponse); i { + switch v := v.(*ListAllAccessListMembersResponse); i { case 0: return &v.state case 1: @@ -2139,7 +2427,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAccessListMemberRequest); i { + switch v := v.(*UpsertAccessListWithMembersRequest); i { case 0: return &v.state case 1: @@ -2151,7 +2439,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpsertAccessListMemberRequest); i { + switch v := v.(*UpsertAccessListWithMembersResponse); i { case 0: return &v.state case 1: @@ -2163,7 +2451,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAccessListMemberRequest); i { + switch v := v.(*GetAccessListMemberRequest); i { case 0: return &v.state case 1: @@ -2175,7 +2463,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAllAccessListMembersForAccessListRequest); i { + switch v := v.(*UpsertAccessListMemberRequest); i { case 0: return &v.state case 1: @@ -2187,7 +2475,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAllAccessListMembersRequest); i { + switch v := v.(*DeleteAccessListMemberRequest); i { case 0: return &v.state case 1: @@ -2199,7 +2487,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAccessListReviewsRequest); i { + switch v := v.(*DeleteAllAccessListMembersForAccessListRequest); i { case 0: return &v.state case 1: @@ -2211,7 +2499,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListAccessListReviewsResponse); i { + switch v := v.(*DeleteAllAccessListMembersRequest); i { case 0: return &v.state case 1: @@ -2223,7 +2511,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateAccessListReviewRequest); i { + switch v := v.(*ListAccessListReviewsRequest); i { case 0: return &v.state case 1: @@ -2235,7 +2523,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateAccessListReviewResponse); i { + switch v := v.(*ListAccessListReviewsResponse); i { case 0: return &v.state case 1: @@ -2247,7 +2535,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteAccessListReviewRequest); i { + switch v := v.(*ListAllAccessListReviewsRequest); i { case 0: return &v.state case 1: @@ -2259,7 +2547,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccessRequestPromoteRequest); i { + switch v := v.(*ListAllAccessListReviewsResponse); i { case 0: return &v.state case 1: @@ -2271,7 +2559,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AccessRequestPromoteResponse); i { + switch v := v.(*CreateAccessListReviewRequest); i { case 0: return &v.state case 1: @@ -2283,7 +2571,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSuggestedAccessListsRequest); i { + switch v := v.(*CreateAccessListReviewResponse); i { case 0: return &v.state case 1: @@ -2295,6 +2583,54 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } } file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteAccessListReviewRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccessRequestPromoteRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccessRequestPromoteResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSuggestedAccessListsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetSuggestedAccessListsResponse); i { case 0: return &v.state @@ -2313,7 +2649,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_teleport_accesslist_v1_accesslist_service_proto_rawDesc, NumEnums: 0, - NumMessages: 28, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go index 42df5a2b98d78..7439fdb5a8179 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service_grpc.pb.go @@ -42,6 +42,7 @@ const ( AccessListService_DeleteAllAccessLists_FullMethodName = "/teleport.accesslist.v1.AccessListService/DeleteAllAccessLists" AccessListService_GetAccessListsToReview_FullMethodName = "/teleport.accesslist.v1.AccessListService/GetAccessListsToReview" AccessListService_ListAccessListMembers_FullMethodName = "/teleport.accesslist.v1.AccessListService/ListAccessListMembers" + AccessListService_ListAllAccessListMembers_FullMethodName = "/teleport.accesslist.v1.AccessListService/ListAllAccessListMembers" AccessListService_GetAccessListMember_FullMethodName = "/teleport.accesslist.v1.AccessListService/GetAccessListMember" AccessListService_UpsertAccessListMember_FullMethodName = "/teleport.accesslist.v1.AccessListService/UpsertAccessListMember" AccessListService_DeleteAccessListMember_FullMethodName = "/teleport.accesslist.v1.AccessListService/DeleteAccessListMember" @@ -49,6 +50,7 @@ const ( AccessListService_DeleteAllAccessListMembers_FullMethodName = "/teleport.accesslist.v1.AccessListService/DeleteAllAccessListMembers" AccessListService_UpsertAccessListWithMembers_FullMethodName = "/teleport.accesslist.v1.AccessListService/UpsertAccessListWithMembers" AccessListService_ListAccessListReviews_FullMethodName = "/teleport.accesslist.v1.AccessListService/ListAccessListReviews" + AccessListService_ListAllAccessListReviews_FullMethodName = "/teleport.accesslist.v1.AccessListService/ListAllAccessListReviews" AccessListService_CreateAccessListReview_FullMethodName = "/teleport.accesslist.v1.AccessListService/CreateAccessListReview" AccessListService_DeleteAccessListReview_FullMethodName = "/teleport.accesslist.v1.AccessListService/DeleteAccessListReview" AccessListService_AccessRequestPromote_FullMethodName = "/teleport.accesslist.v1.AccessListService/AccessRequestPromote" @@ -75,6 +77,8 @@ type AccessListServiceClient interface { GetAccessListsToReview(ctx context.Context, in *GetAccessListsToReviewRequest, opts ...grpc.CallOption) (*GetAccessListsToReviewResponse, error) // ListAccessListMembers returns a paginated list of all access list members. ListAccessListMembers(ctx context.Context, in *ListAccessListMembersRequest, opts ...grpc.CallOption) (*ListAccessListMembersResponse, error) + // ListAllAccessListMembers returns a paginated list of all access list members for all access lists. + ListAllAccessListMembers(ctx context.Context, in *ListAllAccessListMembersRequest, opts ...grpc.CallOption) (*ListAllAccessListMembersResponse, error) // GetAccessListMember returns the specified access list member resource. GetAccessListMember(ctx context.Context, in *GetAccessListMemberRequest, opts ...grpc.CallOption) (*Member, error) // UpsertAccessListMember creates or updates an access list member resource. @@ -89,6 +93,8 @@ type AccessListServiceClient interface { UpsertAccessListWithMembers(ctx context.Context, in *UpsertAccessListWithMembersRequest, opts ...grpc.CallOption) (*UpsertAccessListWithMembersResponse, error) // ListAccessListReviews will list access list reviews for a particular access list. ListAccessListReviews(ctx context.Context, in *ListAccessListReviewsRequest, opts ...grpc.CallOption) (*ListAccessListReviewsResponse, error) + // ListAllAccessListReviews will list access list reviews for all access lists. + ListAllAccessListReviews(ctx context.Context, in *ListAllAccessListReviewsRequest, opts ...grpc.CallOption) (*ListAllAccessListReviewsResponse, error) // CreateAccessListReview will create a new review for an access list. It will also modify the original access list // and its members depending on the details of the review. CreateAccessListReview(ctx context.Context, in *CreateAccessListReviewRequest, opts ...grpc.CallOption) (*CreateAccessListReviewResponse, error) @@ -180,6 +186,15 @@ func (c *accessListServiceClient) ListAccessListMembers(ctx context.Context, in return out, nil } +func (c *accessListServiceClient) ListAllAccessListMembers(ctx context.Context, in *ListAllAccessListMembersRequest, opts ...grpc.CallOption) (*ListAllAccessListMembersResponse, error) { + out := new(ListAllAccessListMembersResponse) + err := c.cc.Invoke(ctx, AccessListService_ListAllAccessListMembers_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *accessListServiceClient) GetAccessListMember(ctx context.Context, in *GetAccessListMemberRequest, opts ...grpc.CallOption) (*Member, error) { out := new(Member) err := c.cc.Invoke(ctx, AccessListService_GetAccessListMember_FullMethodName, in, out, opts...) @@ -243,6 +258,15 @@ func (c *accessListServiceClient) ListAccessListReviews(ctx context.Context, in return out, nil } +func (c *accessListServiceClient) ListAllAccessListReviews(ctx context.Context, in *ListAllAccessListReviewsRequest, opts ...grpc.CallOption) (*ListAllAccessListReviewsResponse, error) { + out := new(ListAllAccessListReviewsResponse) + err := c.cc.Invoke(ctx, AccessListService_ListAllAccessListReviews_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *accessListServiceClient) CreateAccessListReview(ctx context.Context, in *CreateAccessListReviewRequest, opts ...grpc.CallOption) (*CreateAccessListReviewResponse, error) { out := new(CreateAccessListReviewResponse) err := c.cc.Invoke(ctx, AccessListService_CreateAccessListReview_FullMethodName, in, out, opts...) @@ -299,6 +323,8 @@ type AccessListServiceServer interface { GetAccessListsToReview(context.Context, *GetAccessListsToReviewRequest) (*GetAccessListsToReviewResponse, error) // ListAccessListMembers returns a paginated list of all access list members. ListAccessListMembers(context.Context, *ListAccessListMembersRequest) (*ListAccessListMembersResponse, error) + // ListAllAccessListMembers returns a paginated list of all access list members for all access lists. + ListAllAccessListMembers(context.Context, *ListAllAccessListMembersRequest) (*ListAllAccessListMembersResponse, error) // GetAccessListMember returns the specified access list member resource. GetAccessListMember(context.Context, *GetAccessListMemberRequest) (*Member, error) // UpsertAccessListMember creates or updates an access list member resource. @@ -313,6 +339,8 @@ type AccessListServiceServer interface { UpsertAccessListWithMembers(context.Context, *UpsertAccessListWithMembersRequest) (*UpsertAccessListWithMembersResponse, error) // ListAccessListReviews will list access list reviews for a particular access list. ListAccessListReviews(context.Context, *ListAccessListReviewsRequest) (*ListAccessListReviewsResponse, error) + // ListAllAccessListReviews will list access list reviews for all access lists. + ListAllAccessListReviews(context.Context, *ListAllAccessListReviewsRequest) (*ListAllAccessListReviewsResponse, error) // CreateAccessListReview will create a new review for an access list. It will also modify the original access list // and its members depending on the details of the review. CreateAccessListReview(context.Context, *CreateAccessListReviewRequest) (*CreateAccessListReviewResponse, error) @@ -353,6 +381,9 @@ func (UnimplementedAccessListServiceServer) GetAccessListsToReview(context.Conte func (UnimplementedAccessListServiceServer) ListAccessListMembers(context.Context, *ListAccessListMembersRequest) (*ListAccessListMembersResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListAccessListMembers not implemented") } +func (UnimplementedAccessListServiceServer) ListAllAccessListMembers(context.Context, *ListAllAccessListMembersRequest) (*ListAllAccessListMembersResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListAllAccessListMembers not implemented") +} func (UnimplementedAccessListServiceServer) GetAccessListMember(context.Context, *GetAccessListMemberRequest) (*Member, error) { return nil, status.Errorf(codes.Unimplemented, "method GetAccessListMember not implemented") } @@ -374,6 +405,9 @@ func (UnimplementedAccessListServiceServer) UpsertAccessListWithMembers(context. func (UnimplementedAccessListServiceServer) ListAccessListReviews(context.Context, *ListAccessListReviewsRequest) (*ListAccessListReviewsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListAccessListReviews not implemented") } +func (UnimplementedAccessListServiceServer) ListAllAccessListReviews(context.Context, *ListAllAccessListReviewsRequest) (*ListAllAccessListReviewsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListAllAccessListReviews not implemented") +} func (UnimplementedAccessListServiceServer) CreateAccessListReview(context.Context, *CreateAccessListReviewRequest) (*CreateAccessListReviewResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateAccessListReview not implemented") } @@ -543,6 +577,24 @@ func _AccessListService_ListAccessListMembers_Handler(srv interface{}, ctx conte return interceptor(ctx, in, info, handler) } +func _AccessListService_ListAllAccessListMembers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListAllAccessListMembersRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AccessListServiceServer).ListAllAccessListMembers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AccessListService_ListAllAccessListMembers_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AccessListServiceServer).ListAllAccessListMembers(ctx, req.(*ListAllAccessListMembersRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _AccessListService_GetAccessListMember_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetAccessListMemberRequest) if err := dec(in); err != nil { @@ -669,6 +721,24 @@ func _AccessListService_ListAccessListReviews_Handler(srv interface{}, ctx conte return interceptor(ctx, in, info, handler) } +func _AccessListService_ListAllAccessListReviews_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListAllAccessListReviewsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AccessListServiceServer).ListAllAccessListReviews(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AccessListService_ListAllAccessListReviews_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AccessListServiceServer).ListAllAccessListReviews(ctx, req.(*ListAllAccessListReviewsRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _AccessListService_CreateAccessListReview_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreateAccessListReviewRequest) if err := dec(in); err != nil { @@ -780,6 +850,10 @@ var AccessListService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListAccessListMembers", Handler: _AccessListService_ListAccessListMembers_Handler, }, + { + MethodName: "ListAllAccessListMembers", + Handler: _AccessListService_ListAllAccessListMembers_Handler, + }, { MethodName: "GetAccessListMember", Handler: _AccessListService_GetAccessListMember_Handler, @@ -808,6 +882,10 @@ var AccessListService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListAccessListReviews", Handler: _AccessListService_ListAccessListReviews_Handler, }, + { + MethodName: "ListAllAccessListReviews", + Handler: _AccessListService_ListAllAccessListReviews_Handler, + }, { MethodName: "CreateAccessListReview", Handler: _AccessListService_CreateAccessListReview_Handler, diff --git a/api/proto/teleport/accesslist/v1/accesslist_service.proto b/api/proto/teleport/accesslist/v1/accesslist_service.proto index 181588a0abe5c..c69fdbaa5224e 100644 --- a/api/proto/teleport/accesslist/v1/accesslist_service.proto +++ b/api/proto/teleport/accesslist/v1/accesslist_service.proto @@ -42,6 +42,8 @@ service AccessListService { // ListAccessListMembers returns a paginated list of all access list members. rpc ListAccessListMembers(ListAccessListMembersRequest) returns (ListAccessListMembersResponse); + // ListAllAccessListMembers returns a paginated list of all access list members for all access lists. + rpc ListAllAccessListMembers(ListAllAccessListMembersRequest) returns (ListAllAccessListMembersResponse); // GetAccessListMember returns the specified access list member resource. rpc GetAccessListMember(GetAccessListMemberRequest) returns (Member); // UpsertAccessListMember creates or updates an access list member resource. @@ -58,6 +60,8 @@ service AccessListService { // ListAccessListReviews will list access list reviews for a particular access list. rpc ListAccessListReviews(ListAccessListReviewsRequest) returns (ListAccessListReviewsResponse); + // ListAllAccessListReviews will list access list reviews for all access lists. + rpc ListAllAccessListReviews(ListAllAccessListReviewsRequest) returns (ListAllAccessListReviewsResponse); // CreateAccessListReview will create a new review for an access list. It will also modify the original access list // and its members depending on the details of the review. rpc CreateAccessListReview(CreateAccessListReviewRequest) returns (CreateAccessListReviewResponse); @@ -146,6 +150,23 @@ message ListAccessListMembersResponse { string next_page_token = 2; } +// ListAllAccessListMembersRequest is the request for getting paginated access list members for all access lists. +message ListAllAccessListMembersRequest { + // page_size is the size of the page to request. + int32 page_size = 1; + + // page_token is the page token. + string page_token = 2; +} + +// ListAllAccessListMembersResponse is the response for getting paginated access list members for all access lists. +message ListAllAccessListMembersResponse { + // members is the list of access list members. + repeated Member members = 1; + // next_page_token is the next page token. + string next_page_token = 2; +} + // UpsertAccessListWithMembers is the request for upserting an access list with members. message UpsertAccessListWithMembersRequest { // access_list is the access list to upsert. @@ -224,6 +245,24 @@ message ListAccessListReviewsResponse { string next_token = 2; } +// ListAllAccessListReviewsRequest is the request for getting paginated access list reviews for all access lists. +message ListAllAccessListReviewsRequest { + // page_size is the size of the page to request. + int32 page_size = 1; + + // next_token is the page token. + string next_token = 2; +} + +// ListAllAccessListReviewsResponse is the response for getting paginated access list reviews for all access lists. +message ListAllAccessListReviewsResponse { + // reviews is the list of access list reviews. + repeated Review reviews = 1; + + // next_token is the next page token. + string next_token = 2; +} + // CreateAccessListReviewRequest is the request for creating an access list review. message CreateAccessListReviewRequest { // review is the actual review to create. diff --git a/api/proto/teleport/legacy/client/proto/event.proto b/api/proto/teleport/legacy/client/proto/event.proto index d86fb39237f6f..f294f078d0879 100644 --- a/api/proto/teleport/legacy/client/proto/event.proto +++ b/api/proto/teleport/legacy/client/proto/event.proto @@ -145,5 +145,7 @@ message Event { teleport.secreports.v1.Report Report = 51; // SecurityReportState is a security report state resource. teleport.secreports.v1.ReportState ReportState = 52; + // AccessListReview is an access list review resource. + teleport.accesslist.v1.Review AccessListReview = 53; } } diff --git a/gen/proto/js/teleport/accesslist/v1/accesslist_service_grpc_pb.d.ts b/gen/proto/js/teleport/accesslist/v1/accesslist_service_grpc_pb.d.ts index f006c16efc591..506a5a4a3f125 100644 --- a/gen/proto/js/teleport/accesslist/v1/accesslist_service_grpc_pb.d.ts +++ b/gen/proto/js/teleport/accesslist/v1/accesslist_service_grpc_pb.d.ts @@ -20,6 +20,7 @@ interface IAccessListServiceService extends grpc.ServiceDefinition; responseDeserialize: grpc.deserialize; } +interface IAccessListServiceService_IListAllAccessListMembers extends grpc.MethodDefinition { + path: "/teleport.accesslist.v1.AccessListService/ListAllAccessListMembers"; + requestStream: false; + responseStream: false; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} interface IAccessListServiceService_IGetAccessListMember extends grpc.MethodDefinition { path: "/teleport.accesslist.v1.AccessListService/GetAccessListMember"; requestStream: false; @@ -168,6 +179,15 @@ interface IAccessListServiceService_IListAccessListReviews extends grpc.MethodDe responseSerialize: grpc.serialize; responseDeserialize: grpc.deserialize; } +interface IAccessListServiceService_IListAllAccessListReviews extends grpc.MethodDefinition { + path: "/teleport.accesslist.v1.AccessListService/ListAllAccessListReviews"; + requestStream: false; + responseStream: false; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} interface IAccessListServiceService_ICreateAccessListReview extends grpc.MethodDefinition { path: "/teleport.accesslist.v1.AccessListService/CreateAccessListReview"; requestStream: false; @@ -216,6 +236,7 @@ export interface IAccessListServiceServer { deleteAllAccessLists: grpc.handleUnaryCall; getAccessListsToReview: grpc.handleUnaryCall; listAccessListMembers: grpc.handleUnaryCall; + listAllAccessListMembers: grpc.handleUnaryCall; getAccessListMember: grpc.handleUnaryCall; upsertAccessListMember: grpc.handleUnaryCall; deleteAccessListMember: grpc.handleUnaryCall; @@ -223,6 +244,7 @@ export interface IAccessListServiceServer { deleteAllAccessListMembers: grpc.handleUnaryCall; upsertAccessListWithMembers: grpc.handleUnaryCall; listAccessListReviews: grpc.handleUnaryCall; + listAllAccessListReviews: grpc.handleUnaryCall; createAccessListReview: grpc.handleUnaryCall; deleteAccessListReview: grpc.handleUnaryCall; accessRequestPromote: grpc.handleUnaryCall; @@ -254,6 +276,9 @@ export interface IAccessListServiceClient { listAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersResponse) => void): grpc.ClientUnaryCall; listAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersResponse) => void): grpc.ClientUnaryCall; listAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersResponse) => void): grpc.ClientUnaryCall; + listAllAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersResponse) => void): grpc.ClientUnaryCall; + listAllAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersResponse) => void): grpc.ClientUnaryCall; + listAllAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersResponse) => void): grpc.ClientUnaryCall; getAccessListMember(request: teleport_accesslist_v1_accesslist_service_pb.GetAccessListMemberRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_pb.Member) => void): grpc.ClientUnaryCall; getAccessListMember(request: teleport_accesslist_v1_accesslist_service_pb.GetAccessListMemberRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_pb.Member) => void): grpc.ClientUnaryCall; getAccessListMember(request: teleport_accesslist_v1_accesslist_service_pb.GetAccessListMemberRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_pb.Member) => void): grpc.ClientUnaryCall; @@ -275,6 +300,9 @@ export interface IAccessListServiceClient { listAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsResponse) => void): grpc.ClientUnaryCall; listAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsResponse) => void): grpc.ClientUnaryCall; listAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsResponse) => void): grpc.ClientUnaryCall; + listAllAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsResponse) => void): grpc.ClientUnaryCall; + listAllAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsResponse) => void): grpc.ClientUnaryCall; + listAllAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsResponse) => void): grpc.ClientUnaryCall; createAccessListReview(request: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewResponse) => void): grpc.ClientUnaryCall; createAccessListReview(request: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewResponse) => void): grpc.ClientUnaryCall; createAccessListReview(request: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewResponse) => void): grpc.ClientUnaryCall; @@ -315,6 +343,9 @@ export class AccessListServiceClient extends grpc.Client implements IAccessListS public listAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersResponse) => void): grpc.ClientUnaryCall; public listAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersResponse) => void): grpc.ClientUnaryCall; public listAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListMembersResponse) => void): grpc.ClientUnaryCall; + public listAllAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersResponse) => void): grpc.ClientUnaryCall; + public listAllAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersResponse) => void): grpc.ClientUnaryCall; + public listAllAccessListMembers(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersResponse) => void): grpc.ClientUnaryCall; public getAccessListMember(request: teleport_accesslist_v1_accesslist_service_pb.GetAccessListMemberRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_pb.Member) => void): grpc.ClientUnaryCall; public getAccessListMember(request: teleport_accesslist_v1_accesslist_service_pb.GetAccessListMemberRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_pb.Member) => void): grpc.ClientUnaryCall; public getAccessListMember(request: teleport_accesslist_v1_accesslist_service_pb.GetAccessListMemberRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_pb.Member) => void): grpc.ClientUnaryCall; @@ -336,6 +367,9 @@ export class AccessListServiceClient extends grpc.Client implements IAccessListS public listAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsResponse) => void): grpc.ClientUnaryCall; public listAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsResponse) => void): grpc.ClientUnaryCall; public listAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAccessListReviewsResponse) => void): grpc.ClientUnaryCall; + public listAllAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsResponse) => void): grpc.ClientUnaryCall; + public listAllAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsResponse) => void): grpc.ClientUnaryCall; + public listAllAccessListReviews(request: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsResponse) => void): grpc.ClientUnaryCall; public createAccessListReview(request: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewRequest, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewResponse) => void): grpc.ClientUnaryCall; public createAccessListReview(request: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewResponse) => void): grpc.ClientUnaryCall; public createAccessListReview(request: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: teleport_accesslist_v1_accesslist_service_pb.CreateAccessListReviewResponse) => void): grpc.ClientUnaryCall; diff --git a/gen/proto/js/teleport/accesslist/v1/accesslist_service_grpc_pb.js b/gen/proto/js/teleport/accesslist/v1/accesslist_service_grpc_pb.js index b582ab0d31b7d..303a3ab3c39bd 100644 --- a/gen/proto/js/teleport/accesslist/v1/accesslist_service_grpc_pb.js +++ b/gen/proto/js/teleport/accesslist/v1/accesslist_service_grpc_pb.js @@ -309,6 +309,50 @@ function deserialize_teleport_accesslist_v1_ListAccessListsResponse(buffer_arg) return teleport_accesslist_v1_accesslist_service_pb.ListAccessListsResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_teleport_accesslist_v1_ListAllAccessListMembersRequest(arg) { + if (!(arg instanceof teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersRequest)) { + throw new Error('Expected argument of type teleport.accesslist.v1.ListAllAccessListMembersRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_teleport_accesslist_v1_ListAllAccessListMembersRequest(buffer_arg) { + return teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_teleport_accesslist_v1_ListAllAccessListMembersResponse(arg) { + if (!(arg instanceof teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersResponse)) { + throw new Error('Expected argument of type teleport.accesslist.v1.ListAllAccessListMembersResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_teleport_accesslist_v1_ListAllAccessListMembersResponse(buffer_arg) { + return teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_teleport_accesslist_v1_ListAllAccessListReviewsRequest(arg) { + if (!(arg instanceof teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsRequest)) { + throw new Error('Expected argument of type teleport.accesslist.v1.ListAllAccessListReviewsRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_teleport_accesslist_v1_ListAllAccessListReviewsRequest(buffer_arg) { + return teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_teleport_accesslist_v1_ListAllAccessListReviewsResponse(arg) { + if (!(arg instanceof teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsResponse)) { + throw new Error('Expected argument of type teleport.accesslist.v1.ListAllAccessListReviewsResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_teleport_accesslist_v1_ListAllAccessListReviewsResponse(buffer_arg) { + return teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_teleport_accesslist_v1_Member(arg) { if (!(arg instanceof teleport_accesslist_v1_accesslist_pb.Member)) { throw new Error('Expected argument of type teleport.accesslist.v1.Member'); @@ -463,6 +507,18 @@ listAccessListMembers: { responseSerialize: serialize_teleport_accesslist_v1_ListAccessListMembersResponse, responseDeserialize: deserialize_teleport_accesslist_v1_ListAccessListMembersResponse, }, + // ListAllAccessListMembers returns a paginated list of all access list members for all access lists. +listAllAccessListMembers: { + path: '/teleport.accesslist.v1.AccessListService/ListAllAccessListMembers', + requestStream: false, + responseStream: false, + requestType: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersRequest, + responseType: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListMembersResponse, + requestSerialize: serialize_teleport_accesslist_v1_ListAllAccessListMembersRequest, + requestDeserialize: deserialize_teleport_accesslist_v1_ListAllAccessListMembersRequest, + responseSerialize: serialize_teleport_accesslist_v1_ListAllAccessListMembersResponse, + responseDeserialize: deserialize_teleport_accesslist_v1_ListAllAccessListMembersResponse, + }, // GetAccessListMember returns the specified access list member resource. getAccessListMember: { path: '/teleport.accesslist.v1.AccessListService/GetAccessListMember', @@ -547,6 +603,18 @@ listAccessListReviews: { responseSerialize: serialize_teleport_accesslist_v1_ListAccessListReviewsResponse, responseDeserialize: deserialize_teleport_accesslist_v1_ListAccessListReviewsResponse, }, + // ListAllAccessListReviews will list access list reviews for all access lists. +listAllAccessListReviews: { + path: '/teleport.accesslist.v1.AccessListService/ListAllAccessListReviews', + requestStream: false, + responseStream: false, + requestType: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsRequest, + responseType: teleport_accesslist_v1_accesslist_service_pb.ListAllAccessListReviewsResponse, + requestSerialize: serialize_teleport_accesslist_v1_ListAllAccessListReviewsRequest, + requestDeserialize: deserialize_teleport_accesslist_v1_ListAllAccessListReviewsRequest, + responseSerialize: serialize_teleport_accesslist_v1_ListAllAccessListReviewsResponse, + responseDeserialize: deserialize_teleport_accesslist_v1_ListAllAccessListReviewsResponse, + }, // CreateAccessListReview will create a new review for an access list. It will also modify the original access list // and its members depending on the details of the review. createAccessListReview: { diff --git a/gen/proto/js/teleport/accesslist/v1/accesslist_service_pb.d.ts b/gen/proto/js/teleport/accesslist/v1/accesslist_service_pb.d.ts index d82cce190019e..f835eb113c192 100644 --- a/gen/proto/js/teleport/accesslist/v1/accesslist_service_pb.d.ts +++ b/gen/proto/js/teleport/accesslist/v1/accesslist_service_pb.d.ts @@ -281,6 +281,58 @@ export namespace ListAccessListMembersResponse { } } +export class ListAllAccessListMembersRequest extends jspb.Message { + getPageSize(): number; + setPageSize(value: number): ListAllAccessListMembersRequest; + + getPageToken(): string; + setPageToken(value: string): ListAllAccessListMembersRequest; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ListAllAccessListMembersRequest.AsObject; + static toObject(includeInstance: boolean, msg: ListAllAccessListMembersRequest): ListAllAccessListMembersRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ListAllAccessListMembersRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ListAllAccessListMembersRequest; + static deserializeBinaryFromReader(message: ListAllAccessListMembersRequest, reader: jspb.BinaryReader): ListAllAccessListMembersRequest; +} + +export namespace ListAllAccessListMembersRequest { + export type AsObject = { + pageSize: number, + pageToken: string, + } +} + +export class ListAllAccessListMembersResponse extends jspb.Message { + clearMembersList(): void; + getMembersList(): Array; + setMembersList(value: Array): ListAllAccessListMembersResponse; + addMembers(value?: teleport_accesslist_v1_accesslist_pb.Member, index?: number): teleport_accesslist_v1_accesslist_pb.Member; + + getNextPageToken(): string; + setNextPageToken(value: string): ListAllAccessListMembersResponse; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ListAllAccessListMembersResponse.AsObject; + static toObject(includeInstance: boolean, msg: ListAllAccessListMembersResponse): ListAllAccessListMembersResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ListAllAccessListMembersResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ListAllAccessListMembersResponse; + static deserializeBinaryFromReader(message: ListAllAccessListMembersResponse, reader: jspb.BinaryReader): ListAllAccessListMembersResponse; +} + +export namespace ListAllAccessListMembersResponse { + export type AsObject = { + membersList: Array, + nextPageToken: string, + } +} + export class UpsertAccessListWithMembersRequest extends jspb.Message { hasAccessList(): boolean; @@ -509,6 +561,58 @@ export namespace ListAccessListReviewsResponse { } } +export class ListAllAccessListReviewsRequest extends jspb.Message { + getPageSize(): number; + setPageSize(value: number): ListAllAccessListReviewsRequest; + + getNextToken(): string; + setNextToken(value: string): ListAllAccessListReviewsRequest; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ListAllAccessListReviewsRequest.AsObject; + static toObject(includeInstance: boolean, msg: ListAllAccessListReviewsRequest): ListAllAccessListReviewsRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ListAllAccessListReviewsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ListAllAccessListReviewsRequest; + static deserializeBinaryFromReader(message: ListAllAccessListReviewsRequest, reader: jspb.BinaryReader): ListAllAccessListReviewsRequest; +} + +export namespace ListAllAccessListReviewsRequest { + export type AsObject = { + pageSize: number, + nextToken: string, + } +} + +export class ListAllAccessListReviewsResponse extends jspb.Message { + clearReviewsList(): void; + getReviewsList(): Array; + setReviewsList(value: Array): ListAllAccessListReviewsResponse; + addReviews(value?: teleport_accesslist_v1_accesslist_pb.Review, index?: number): teleport_accesslist_v1_accesslist_pb.Review; + + getNextToken(): string; + setNextToken(value: string): ListAllAccessListReviewsResponse; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ListAllAccessListReviewsResponse.AsObject; + static toObject(includeInstance: boolean, msg: ListAllAccessListReviewsResponse): ListAllAccessListReviewsResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ListAllAccessListReviewsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ListAllAccessListReviewsResponse; + static deserializeBinaryFromReader(message: ListAllAccessListReviewsResponse, reader: jspb.BinaryReader): ListAllAccessListReviewsResponse; +} + +export namespace ListAllAccessListReviewsResponse { + export type AsObject = { + reviewsList: Array, + nextToken: string, + } +} + export class CreateAccessListReviewRequest extends jspb.Message { hasReview(): boolean; diff --git a/gen/proto/js/teleport/accesslist/v1/accesslist_service_pb.js b/gen/proto/js/teleport/accesslist/v1/accesslist_service_pb.js index 4f16a077cbec4..eb2b2a1d60a5c 100644 --- a/gen/proto/js/teleport/accesslist/v1/accesslist_service_pb.js +++ b/gen/proto/js/teleport/accesslist/v1/accesslist_service_pb.js @@ -47,6 +47,10 @@ goog.exportSymbol('proto.teleport.accesslist.v1.ListAccessListReviewsRequest', n goog.exportSymbol('proto.teleport.accesslist.v1.ListAccessListReviewsResponse', null, global); goog.exportSymbol('proto.teleport.accesslist.v1.ListAccessListsRequest', null, global); goog.exportSymbol('proto.teleport.accesslist.v1.ListAccessListsResponse', null, global); +goog.exportSymbol('proto.teleport.accesslist.v1.ListAllAccessListMembersRequest', null, global); +goog.exportSymbol('proto.teleport.accesslist.v1.ListAllAccessListMembersResponse', null, global); +goog.exportSymbol('proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest', null, global); +goog.exportSymbol('proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse', null, global); goog.exportSymbol('proto.teleport.accesslist.v1.UpsertAccessListMemberRequest', null, global); goog.exportSymbol('proto.teleport.accesslist.v1.UpsertAccessListRequest', null, global); goog.exportSymbol('proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest', null, global); @@ -303,6 +307,48 @@ if (goog.DEBUG && !COMPILED) { */ proto.teleport.accesslist.v1.ListAccessListMembersResponse.displayName = 'proto.teleport.accesslist.v1.ListAccessListMembersResponse'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.teleport.accesslist.v1.ListAllAccessListMembersRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.displayName = 'proto.teleport.accesslist.v1.ListAllAccessListMembersRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.repeatedFields_, null); +}; +goog.inherits(proto.teleport.accesslist.v1.ListAllAccessListMembersResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.displayName = 'proto.teleport.accesslist.v1.ListAllAccessListMembersResponse'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -492,6 +538,48 @@ if (goog.DEBUG && !COMPILED) { */ proto.teleport.accesslist.v1.ListAccessListReviewsResponse.displayName = 'proto.teleport.accesslist.v1.ListAccessListReviewsResponse'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.displayName = 'proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.repeatedFields_, null); +}; +goog.inherits(proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.displayName = 'proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -2404,13 +2492,6 @@ proto.teleport.accesslist.v1.ListAccessListMembersResponse.prototype.setNextPage -/** - * List of repeated fields within this message type. - * @private {!Array} - * @const - */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.repeatedFields_ = [2]; - if (jspb.Message.GENERATE_TO_OBJECT) { @@ -2426,8 +2507,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * http://goto/soy-param-migration * @return {!Object} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.toObject = function(opt_includeInstance) { - return proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.toObject(opt_includeInstance, this); +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.toObject(opt_includeInstance, this); }; @@ -2436,15 +2517,14 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.toObje * @param {boolean|undefined} includeInstance Deprecated. Whether to include * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} msg The msg instance to transform. + * @param {!proto.teleport.accesslist.v1.ListAllAccessListMembersRequest} msg The msg instance to transform. * @return {!Object} * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.toObject = function(includeInstance, msg) { +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.toObject = function(includeInstance, msg) { var f, obj = { - accessList: (f = msg.getAccessList()) && teleport_accesslist_v1_accesslist_pb.AccessList.toObject(includeInstance, f), - membersList: jspb.Message.toObjectList(msg.getMembersList(), - teleport_accesslist_v1_accesslist_pb.Member.toObject, includeInstance) + pageSize: jspb.Message.getFieldWithDefault(msg, 1, 0), + pageToken: jspb.Message.getFieldWithDefault(msg, 2, "") }; if (includeInstance) { @@ -2458,23 +2538,23 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.toObject = funct /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} + * @return {!proto.teleport.accesslist.v1.ListAllAccessListMembersRequest} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.deserializeBinary = function(bytes) { +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest; - return proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.deserializeBinaryFromReader(msg, reader); + var msg = new proto.teleport.accesslist.v1.ListAllAccessListMembersRequest; + return proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} msg The message object to deserialize into. + * @param {!proto.teleport.accesslist.v1.ListAllAccessListMembersRequest} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} + * @return {!proto.teleport.accesslist.v1.ListAllAccessListMembersRequest} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.deserializeBinaryFromReader = function(msg, reader) { +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; @@ -2482,14 +2562,12 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.deserializeBinar var field = reader.getFieldNumber(); switch (field) { case 1: - var value = new teleport_accesslist_v1_accesslist_pb.AccessList; - reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.AccessList.deserializeBinaryFromReader); - msg.setAccessList(value); + var value = /** @type {number} */ (reader.readInt32()); + msg.setPageSize(value); break; case 2: - var value = new teleport_accesslist_v1_accesslist_pb.Member; - reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.Member.deserializeBinaryFromReader); - msg.addMembers(value); + var value = /** @type {string} */ (reader.readString()); + msg.setPageToken(value); break; default: reader.skipField(); @@ -2504,9 +2582,9 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.deserializeBinar * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.serializeBinary = function() { +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); - proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.serializeBinaryToWriter(this, writer); + proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.serializeBinaryToWriter(this, writer); return writer.getResultBuffer(); }; @@ -2514,103 +2592,62 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.serial /** * Serializes the given message to binary data (in protobuf wire * format), writing to the given BinaryWriter. - * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} message + * @param {!proto.teleport.accesslist.v1.ListAllAccessListMembersRequest} message * @param {!jspb.BinaryWriter} writer * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.serializeBinaryToWriter = function(message, writer) { +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.serializeBinaryToWriter = function(message, writer) { var f = undefined; - f = message.getAccessList(); - if (f != null) { - writer.writeMessage( + f = message.getPageSize(); + if (f !== 0) { + writer.writeInt32( 1, - f, - teleport_accesslist_v1_accesslist_pb.AccessList.serializeBinaryToWriter + f ); } - f = message.getMembersList(); + f = message.getPageToken(); if (f.length > 0) { - writer.writeRepeatedMessage( + writer.writeString( 2, - f, - teleport_accesslist_v1_accesslist_pb.Member.serializeBinaryToWriter + f ); } }; /** - * optional AccessList access_list = 1; - * @return {?proto.teleport.accesslist.v1.AccessList} - */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.getAccessList = function() { - return /** @type{?proto.teleport.accesslist.v1.AccessList} */ ( - jspb.Message.getWrapperField(this, teleport_accesslist_v1_accesslist_pb.AccessList, 1)); -}; - - -/** - * @param {?proto.teleport.accesslist.v1.AccessList|undefined} value - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} returns this -*/ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.setAccessList = function(value) { - return jspb.Message.setWrapperField(this, 1, value); -}; - - -/** - * Clears the message field making it undefined. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} returns this - */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.clearAccessList = function() { - return this.setAccessList(undefined); -}; - - -/** - * Returns whether this field is set. - * @return {boolean} + * optional int32 page_size = 1; + * @return {number} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.hasAccessList = function() { - return jspb.Message.getField(this, 1) != null; +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.prototype.getPageSize = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); }; /** - * repeated Member members = 2; - * @return {!Array} + * @param {number} value + * @return {!proto.teleport.accesslist.v1.ListAllAccessListMembersRequest} returns this */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.getMembersList = function() { - return /** @type{!Array} */ ( - jspb.Message.getRepeatedWrapperField(this, teleport_accesslist_v1_accesslist_pb.Member, 2)); -}; - - -/** - * @param {!Array} value - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} returns this -*/ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.setMembersList = function(value) { - return jspb.Message.setRepeatedWrapperField(this, 2, value); +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.prototype.setPageSize = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); }; /** - * @param {!proto.teleport.accesslist.v1.Member=} opt_value - * @param {number=} opt_index - * @return {!proto.teleport.accesslist.v1.Member} + * optional string page_token = 2; + * @return {string} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.addMembers = function(opt_value, opt_index) { - return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.teleport.accesslist.v1.Member, opt_index); +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.prototype.getPageToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); }; /** - * Clears the list making it empty but non-null. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} returns this + * @param {string} value + * @return {!proto.teleport.accesslist.v1.ListAllAccessListMembersRequest} returns this */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.clearMembersList = function() { - return this.setMembersList([]); +proto.teleport.accesslist.v1.ListAllAccessListMembersRequest.prototype.setPageToken = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); }; @@ -2620,7 +2657,7 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.clearM * @private {!Array} * @const */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.repeatedFields_ = [2]; +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.repeatedFields_ = [1]; @@ -2637,8 +2674,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * http://goto/soy-param-migration * @return {!Object} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.toObject = function(opt_includeInstance) { - return proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.toObject(opt_includeInstance, this); +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.toObject(opt_includeInstance, this); }; @@ -2647,15 +2684,15 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.toObj * @param {boolean|undefined} includeInstance Deprecated. Whether to include * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} msg The msg instance to transform. + * @param {!proto.teleport.accesslist.v1.ListAllAccessListMembersResponse} msg The msg instance to transform. * @return {!Object} * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.toObject = function(includeInstance, msg) { +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.toObject = function(includeInstance, msg) { var f, obj = { - accessList: (f = msg.getAccessList()) && teleport_accesslist_v1_accesslist_pb.AccessList.toObject(includeInstance, f), membersList: jspb.Message.toObjectList(msg.getMembersList(), - teleport_accesslist_v1_accesslist_pb.Member.toObject, includeInstance) + teleport_accesslist_v1_accesslist_pb.Member.toObject, includeInstance), + nextPageToken: jspb.Message.getFieldWithDefault(msg, 2, "") }; if (includeInstance) { @@ -2669,23 +2706,23 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.toObject = func /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} + * @return {!proto.teleport.accesslist.v1.ListAllAccessListMembersResponse} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.deserializeBinary = function(bytes) { +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse; - return proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.deserializeBinaryFromReader(msg, reader); + var msg = new proto.teleport.accesslist.v1.ListAllAccessListMembersResponse; + return proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} msg The message object to deserialize into. + * @param {!proto.teleport.accesslist.v1.ListAllAccessListMembersResponse} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} + * @return {!proto.teleport.accesslist.v1.ListAllAccessListMembersResponse} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.deserializeBinaryFromReader = function(msg, reader) { +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; @@ -2693,15 +2730,14 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.deserializeBina var field = reader.getFieldNumber(); switch (field) { case 1: - var value = new teleport_accesslist_v1_accesslist_pb.AccessList; - reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.AccessList.deserializeBinaryFromReader); - msg.setAccessList(value); - break; - case 2: var value = new teleport_accesslist_v1_accesslist_pb.Member; reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.Member.deserializeBinaryFromReader); msg.addMembers(value); break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNextPageToken(value); + break; default: reader.skipField(); break; @@ -2715,9 +2751,9 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.deserializeBina * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.serializeBinary = function() { +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); - proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.serializeBinaryToWriter(this, writer); + proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.serializeBinaryToWriter(this, writer); return writer.getResultBuffer(); }; @@ -2725,106 +2761,93 @@ proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.seria /** * Serializes the given message to binary data (in protobuf wire * format), writing to the given BinaryWriter. - * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} message + * @param {!proto.teleport.accesslist.v1.ListAllAccessListMembersResponse} message * @param {!jspb.BinaryWriter} writer * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.serializeBinaryToWriter = function(message, writer) { +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.serializeBinaryToWriter = function(message, writer) { var f = undefined; - f = message.getAccessList(); - if (f != null) { - writer.writeMessage( + f = message.getMembersList(); + if (f.length > 0) { + writer.writeRepeatedMessage( 1, f, - teleport_accesslist_v1_accesslist_pb.AccessList.serializeBinaryToWriter + teleport_accesslist_v1_accesslist_pb.Member.serializeBinaryToWriter ); } - f = message.getMembersList(); + f = message.getNextPageToken(); if (f.length > 0) { - writer.writeRepeatedMessage( + writer.writeString( 2, - f, - teleport_accesslist_v1_accesslist_pb.Member.serializeBinaryToWriter + f ); } }; /** - * optional AccessList access_list = 1; - * @return {?proto.teleport.accesslist.v1.AccessList} + * repeated Member members = 1; + * @return {!Array} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.getAccessList = function() { - return /** @type{?proto.teleport.accesslist.v1.AccessList} */ ( - jspb.Message.getWrapperField(this, teleport_accesslist_v1_accesslist_pb.AccessList, 1)); +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.prototype.getMembersList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, teleport_accesslist_v1_accesslist_pb.Member, 1)); }; /** - * @param {?proto.teleport.accesslist.v1.AccessList|undefined} value - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} returns this + * @param {!Array} value + * @return {!proto.teleport.accesslist.v1.ListAllAccessListMembersResponse} returns this */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.setAccessList = function(value) { - return jspb.Message.setWrapperField(this, 1, value); +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.prototype.setMembersList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); }; /** - * Clears the message field making it undefined. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} returns this + * @param {!proto.teleport.accesslist.v1.Member=} opt_value + * @param {number=} opt_index + * @return {!proto.teleport.accesslist.v1.Member} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.clearAccessList = function() { - return this.setAccessList(undefined); +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.prototype.addMembers = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.teleport.accesslist.v1.Member, opt_index); }; /** - * Returns whether this field is set. - * @return {boolean} + * Clears the list making it empty but non-null. + * @return {!proto.teleport.accesslist.v1.ListAllAccessListMembersResponse} returns this */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.hasAccessList = function() { - return jspb.Message.getField(this, 1) != null; +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.prototype.clearMembersList = function() { + return this.setMembersList([]); }; /** - * repeated Member members = 2; - * @return {!Array} + * optional string next_page_token = 2; + * @return {string} */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.getMembersList = function() { - return /** @type{!Array} */ ( - jspb.Message.getRepeatedWrapperField(this, teleport_accesslist_v1_accesslist_pb.Member, 2)); -}; - - -/** - * @param {!Array} value - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} returns this -*/ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.setMembersList = function(value) { - return jspb.Message.setRepeatedWrapperField(this, 2, value); +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.prototype.getNextPageToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); }; /** - * @param {!proto.teleport.accesslist.v1.Member=} opt_value - * @param {number=} opt_index - * @return {!proto.teleport.accesslist.v1.Member} + * @param {string} value + * @return {!proto.teleport.accesslist.v1.ListAllAccessListMembersResponse} returns this */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.addMembers = function(opt_value, opt_index) { - return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.teleport.accesslist.v1.Member, opt_index); +proto.teleport.accesslist.v1.ListAllAccessListMembersResponse.prototype.setNextPageToken = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); }; + /** - * Clears the list making it empty but non-null. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} returns this + * List of repeated fields within this message type. + * @private {!Array} + * @const */ -proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.clearMembersList = function() { - return this.setMembersList([]); -}; - - +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.repeatedFields_ = [2]; @@ -2841,8 +2864,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * http://goto/soy-param-migration * @return {!Object} */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.toObject = function(opt_includeInstance) { - return proto.teleport.accesslist.v1.GetAccessListMemberRequest.toObject(opt_includeInstance, this); +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.toObject(opt_includeInstance, this); }; @@ -2851,14 +2874,15 @@ proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.toObject = fun * @param {boolean|undefined} includeInstance Deprecated. Whether to include * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} msg The msg instance to transform. + * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} msg The msg instance to transform. * @return {!Object} * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.toObject = function(includeInstance, msg) { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.toObject = function(includeInstance, msg) { var f, obj = { - accessList: jspb.Message.getFieldWithDefault(msg, 1, ""), - memberName: jspb.Message.getFieldWithDefault(msg, 2, "") + accessList: (f = msg.getAccessList()) && teleport_accesslist_v1_accesslist_pb.AccessList.toObject(includeInstance, f), + membersList: jspb.Message.toObjectList(msg.getMembersList(), + teleport_accesslist_v1_accesslist_pb.Member.toObject, includeInstance) }; if (includeInstance) { @@ -2872,23 +2896,23 @@ proto.teleport.accesslist.v1.GetAccessListMemberRequest.toObject = function(incl /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.deserializeBinary = function(bytes) { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.teleport.accesslist.v1.GetAccessListMemberRequest; - return proto.teleport.accesslist.v1.GetAccessListMemberRequest.deserializeBinaryFromReader(msg, reader); + var msg = new proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest; + return proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} msg The message object to deserialize into. + * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.deserializeBinaryFromReader = function(msg, reader) { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; @@ -2896,12 +2920,14 @@ proto.teleport.accesslist.v1.GetAccessListMemberRequest.deserializeBinaryFromRea var field = reader.getFieldNumber(); switch (field) { case 1: - var value = /** @type {string} */ (reader.readString()); + var value = new teleport_accesslist_v1_accesslist_pb.AccessList; + reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.AccessList.deserializeBinaryFromReader); msg.setAccessList(value); break; case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setMemberName(value); + var value = new teleport_accesslist_v1_accesslist_pb.Member; + reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.Member.deserializeBinaryFromReader); + msg.addMembers(value); break; default: reader.skipField(); @@ -2916,9 +2942,9 @@ proto.teleport.accesslist.v1.GetAccessListMemberRequest.deserializeBinaryFromRea * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.serializeBinary = function() { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); - proto.teleport.accesslist.v1.GetAccessListMemberRequest.serializeBinaryToWriter(this, writer); + proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.serializeBinaryToWriter(this, writer); return writer.getResultBuffer(); }; @@ -2926,66 +2952,114 @@ proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.serializeBinar /** * Serializes the given message to binary data (in protobuf wire * format), writing to the given BinaryWriter. - * @param {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} message + * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} message * @param {!jspb.BinaryWriter} writer * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.serializeBinaryToWriter = function(message, writer) { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.serializeBinaryToWriter = function(message, writer) { var f = undefined; f = message.getAccessList(); - if (f.length > 0) { - writer.writeString( + if (f != null) { + writer.writeMessage( 1, - f + f, + teleport_accesslist_v1_accesslist_pb.AccessList.serializeBinaryToWriter ); } - f = message.getMemberName(); + f = message.getMembersList(); if (f.length > 0) { - writer.writeString( + writer.writeRepeatedMessage( 2, - f + f, + teleport_accesslist_v1_accesslist_pb.Member.serializeBinaryToWriter ); } }; /** - * optional string access_list = 1; - * @return {string} + * optional AccessList access_list = 1; + * @return {?proto.teleport.accesslist.v1.AccessList} */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.getAccessList = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.getAccessList = function() { + return /** @type{?proto.teleport.accesslist.v1.AccessList} */ ( + jspb.Message.getWrapperField(this, teleport_accesslist_v1_accesslist_pb.AccessList, 1)); }; /** - * @param {string} value - * @return {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} returns this + * @param {?proto.teleport.accesslist.v1.AccessList|undefined} value + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} returns this +*/ +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.setAccessList = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} returns this */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.setAccessList = function(value) { - return jspb.Message.setProto3StringField(this, 1, value); +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.clearAccessList = function() { + return this.setAccessList(undefined); }; /** - * optional string member_name = 2; - * @return {string} + * Returns whether this field is set. + * @return {boolean} */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.getMemberName = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.hasAccessList = function() { + return jspb.Message.getField(this, 1) != null; }; /** - * @param {string} value - * @return {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} returns this + * repeated Member members = 2; + * @return {!Array} */ -proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.setMemberName = function(value) { - return jspb.Message.setProto3StringField(this, 2, value); +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.getMembersList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, teleport_accesslist_v1_accesslist_pb.Member, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} returns this +*/ +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.setMembersList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.teleport.accesslist.v1.Member=} opt_value + * @param {number=} opt_index + * @return {!proto.teleport.accesslist.v1.Member} + */ +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.addMembers = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.teleport.accesslist.v1.Member, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest} returns this + */ +proto.teleport.accesslist.v1.UpsertAccessListWithMembersRequest.prototype.clearMembersList = function() { + return this.setMembersList([]); }; +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.repeatedFields_ = [2]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -3001,8 +3075,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * http://goto/soy-param-migration * @return {!Object} */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.toObject = function(opt_includeInstance) { - return proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.toObject(opt_includeInstance, this); +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.toObject(opt_includeInstance, this); }; @@ -3011,13 +3085,15 @@ proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.toObject = * @param {boolean|undefined} includeInstance Deprecated. Whether to include * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} msg The msg instance to transform. + * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} msg The msg instance to transform. * @return {!Object} * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.toObject = function(includeInstance, msg) { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.toObject = function(includeInstance, msg) { var f, obj = { - member: (f = msg.getMember()) && teleport_accesslist_v1_accesslist_pb.Member.toObject(includeInstance, f) + accessList: (f = msg.getAccessList()) && teleport_accesslist_v1_accesslist_pb.AccessList.toObject(includeInstance, f), + membersList: jspb.Message.toObjectList(msg.getMembersList(), + teleport_accesslist_v1_accesslist_pb.Member.toObject, includeInstance) }; if (includeInstance) { @@ -3031,33 +3107,38 @@ proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.toObject = function(i /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.deserializeBinary = function(bytes) { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.teleport.accesslist.v1.UpsertAccessListMemberRequest; - return proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.deserializeBinaryFromReader(msg, reader); + var msg = new proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse; + return proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} msg The message object to deserialize into. + * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.deserializeBinaryFromReader = function(msg, reader) { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { - case 4: + case 1: + var value = new teleport_accesslist_v1_accesslist_pb.AccessList; + reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.AccessList.deserializeBinaryFromReader); + msg.setAccessList(value); + break; + case 2: var value = new teleport_accesslist_v1_accesslist_pb.Member; reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.Member.deserializeBinaryFromReader); - msg.setMember(value); + msg.addMembers(value); break; default: reader.skipField(); @@ -3072,9 +3153,9 @@ proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.deserializeBinaryFrom * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.serializeBinary = function() { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); - proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.serializeBinaryToWriter(this, writer); + proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.serializeBinaryToWriter(this, writer); return writer.getResultBuffer(); }; @@ -3082,16 +3163,24 @@ proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.serializeBi /** * Serializes the given message to binary data (in protobuf wire * format), writing to the given BinaryWriter. - * @param {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} message + * @param {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} message * @param {!jspb.BinaryWriter} writer * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.serializeBinaryToWriter = function(message, writer) { +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.serializeBinaryToWriter = function(message, writer) { var f = undefined; - f = message.getMember(); + f = message.getAccessList(); if (f != null) { writer.writeMessage( - 4, + 1, + f, + teleport_accesslist_v1_accesslist_pb.AccessList.serializeBinaryToWriter + ); + } + f = message.getMembersList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 2, f, teleport_accesslist_v1_accesslist_pb.Member.serializeBinaryToWriter ); @@ -3100,30 +3189,30 @@ proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.serializeBinaryToWrit /** - * optional Member member = 4; - * @return {?proto.teleport.accesslist.v1.Member} + * optional AccessList access_list = 1; + * @return {?proto.teleport.accesslist.v1.AccessList} */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.getMember = function() { - return /** @type{?proto.teleport.accesslist.v1.Member} */ ( - jspb.Message.getWrapperField(this, teleport_accesslist_v1_accesslist_pb.Member, 4)); +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.getAccessList = function() { + return /** @type{?proto.teleport.accesslist.v1.AccessList} */ ( + jspb.Message.getWrapperField(this, teleport_accesslist_v1_accesslist_pb.AccessList, 1)); }; /** - * @param {?proto.teleport.accesslist.v1.Member|undefined} value - * @return {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} returns this + * @param {?proto.teleport.accesslist.v1.AccessList|undefined} value + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} returns this */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.setMember = function(value) { - return jspb.Message.setWrapperField(this, 4, value); +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.setAccessList = function(value) { + return jspb.Message.setWrapperField(this, 1, value); }; /** * Clears the message field making it undefined. - * @return {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} returns this + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} returns this */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.clearMember = function() { - return this.setMember(undefined); +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.clearAccessList = function() { + return this.setAccessList(undefined); }; @@ -3131,8 +3220,46 @@ proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.clearMember * Returns whether this field is set. * @return {boolean} */ -proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.hasMember = function() { - return jspb.Message.getField(this, 4) != null; +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.hasAccessList = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * repeated Member members = 2; + * @return {!Array} + */ +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.getMembersList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, teleport_accesslist_v1_accesslist_pb.Member, 2)); +}; + + +/** + * @param {!Array} value + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} returns this +*/ +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.setMembersList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 2, value); +}; + + +/** + * @param {!proto.teleport.accesslist.v1.Member=} opt_value + * @param {number=} opt_index + * @return {!proto.teleport.accesslist.v1.Member} + */ +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.addMembers = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 2, opt_value, proto.teleport.accesslist.v1.Member, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse} returns this + */ +proto.teleport.accesslist.v1.UpsertAccessListWithMembersResponse.prototype.clearMembersList = function() { + return this.setMembersList([]); }; @@ -3152,8 +3279,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * http://goto/soy-param-migration * @return {!Object} */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.toObject = function(opt_includeInstance) { - return proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.toObject(opt_includeInstance, this); +proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.GetAccessListMemberRequest.toObject(opt_includeInstance, this); }; @@ -3162,14 +3289,14 @@ proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.toObject = * @param {boolean|undefined} includeInstance Deprecated. Whether to include * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} msg The msg instance to transform. + * @param {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} msg The msg instance to transform. * @return {!Object} * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.toObject = function(includeInstance, msg) { +proto.teleport.accesslist.v1.GetAccessListMemberRequest.toObject = function(includeInstance, msg) { var f, obj = { accessList: jspb.Message.getFieldWithDefault(msg, 1, ""), - memberName: jspb.Message.getFieldWithDefault(msg, 3, "") + memberName: jspb.Message.getFieldWithDefault(msg, 2, "") }; if (includeInstance) { @@ -3183,23 +3310,23 @@ proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.toObject = function(i /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} + * @return {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.deserializeBinary = function(bytes) { +proto.teleport.accesslist.v1.GetAccessListMemberRequest.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.teleport.accesslist.v1.DeleteAccessListMemberRequest; - return proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.deserializeBinaryFromReader(msg, reader); + var msg = new proto.teleport.accesslist.v1.GetAccessListMemberRequest; + return proto.teleport.accesslist.v1.GetAccessListMemberRequest.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} msg The message object to deserialize into. + * @param {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} + * @return {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.deserializeBinaryFromReader = function(msg, reader) { +proto.teleport.accesslist.v1.GetAccessListMemberRequest.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; @@ -3210,7 +3337,7 @@ proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.deserializeBinaryFrom var value = /** @type {string} */ (reader.readString()); msg.setAccessList(value); break; - case 3: + case 2: var value = /** @type {string} */ (reader.readString()); msg.setMemberName(value); break; @@ -3227,9 +3354,9 @@ proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.deserializeBinaryFrom * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.serializeBinary = function() { +proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); - proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.serializeBinaryToWriter(this, writer); + proto.teleport.accesslist.v1.GetAccessListMemberRequest.serializeBinaryToWriter(this, writer); return writer.getResultBuffer(); }; @@ -3237,11 +3364,11 @@ proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.serializeBi /** * Serializes the given message to binary data (in protobuf wire * format), writing to the given BinaryWriter. - * @param {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} message + * @param {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} message * @param {!jspb.BinaryWriter} writer * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.serializeBinaryToWriter = function(message, writer) { +proto.teleport.accesslist.v1.GetAccessListMemberRequest.serializeBinaryToWriter = function(message, writer) { var f = undefined; f = message.getAccessList(); if (f.length > 0) { @@ -3253,7 +3380,7 @@ proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.serializeBinaryToWrit f = message.getMemberName(); if (f.length > 0) { writer.writeString( - 3, + 2, f ); } @@ -3264,35 +3391,35 @@ proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.serializeBinaryToWrit * optional string access_list = 1; * @return {string} */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.getAccessList = function() { +proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.getAccessList = function() { return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); }; /** * @param {string} value - * @return {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} returns this + * @return {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} returns this */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.setAccessList = function(value) { +proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.setAccessList = function(value) { return jspb.Message.setProto3StringField(this, 1, value); }; /** - * optional string member_name = 3; + * optional string member_name = 2; * @return {string} */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.getMemberName = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.getMemberName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); }; /** * @param {string} value - * @return {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} returns this + * @return {!proto.teleport.accesslist.v1.GetAccessListMemberRequest} returns this */ -proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.setMemberName = function(value) { - return jspb.Message.setProto3StringField(this, 3, value); +proto.teleport.accesslist.v1.GetAccessListMemberRequest.prototype.setMemberName = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); }; @@ -3312,8 +3439,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * http://goto/soy-param-migration * @return {!Object} */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.prototype.toObject = function(opt_includeInstance) { - return proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.toObject(opt_includeInstance, this); +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.toObject(opt_includeInstance, this); }; @@ -3322,13 +3449,13 @@ proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.prot * @param {boolean|undefined} includeInstance Deprecated. Whether to include * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} msg The msg instance to transform. + * @param {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} msg The msg instance to transform. * @return {!Object} * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.toObject = function(includeInstance, msg) { +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.toObject = function(includeInstance, msg) { var f, obj = { - accessList: jspb.Message.getFieldWithDefault(msg, 1, "") + member: (f = msg.getMember()) && teleport_accesslist_v1_accesslist_pb.Member.toObject(includeInstance, f) }; if (includeInstance) { @@ -3342,32 +3469,33 @@ proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.toOb /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} + * @return {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.deserializeBinary = function(bytes) { +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest; - return proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.deserializeBinaryFromReader(msg, reader); + var msg = new proto.teleport.accesslist.v1.UpsertAccessListMemberRequest; + return proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} msg The message object to deserialize into. + * @param {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} + * @return {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.deserializeBinaryFromReader = function(msg, reader) { +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { - case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setAccessList(value); + case 4: + var value = new teleport_accesslist_v1_accesslist_pb.Member; + reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.Member.deserializeBinaryFromReader); + msg.setMember(value); break; default: reader.skipField(); @@ -3382,51 +3510,659 @@ proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.dese * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.serializeBinaryToWriter(this, writer); - return writer.getResultBuffer(); +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getMember(); + if (f != null) { + writer.writeMessage( + 4, + f, + teleport_accesslist_v1_accesslist_pb.Member.serializeBinaryToWriter + ); + } +}; + + +/** + * optional Member member = 4; + * @return {?proto.teleport.accesslist.v1.Member} + */ +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.getMember = function() { + return /** @type{?proto.teleport.accesslist.v1.Member} */ ( + jspb.Message.getWrapperField(this, teleport_accesslist_v1_accesslist_pb.Member, 4)); +}; + + +/** + * @param {?proto.teleport.accesslist.v1.Member|undefined} value + * @return {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} returns this +*/ +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.setMember = function(value) { + return jspb.Message.setWrapperField(this, 4, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.teleport.accesslist.v1.UpsertAccessListMemberRequest} returns this + */ +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.clearMember = function() { + return this.setMember(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.teleport.accesslist.v1.UpsertAccessListMemberRequest.prototype.hasMember = function() { + return jspb.Message.getField(this, 4) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.toObject = function(includeInstance, msg) { + var f, obj = { + accessList: jspb.Message.getFieldWithDefault(msg, 1, ""), + memberName: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.teleport.accesslist.v1.DeleteAccessListMemberRequest; + return proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setAccessList(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setMemberName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getAccessList(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getMemberName(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional string access_list = 1; + * @return {string} + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.getAccessList = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} returns this + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.setAccessList = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string member_name = 3; + * @return {string} + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.getMemberName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.teleport.accesslist.v1.DeleteAccessListMemberRequest} returns this + */ +proto.teleport.accesslist.v1.DeleteAccessListMemberRequest.prototype.setMemberName = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.toObject = function(includeInstance, msg) { + var f, obj = { + accessList: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest; + return proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setAccessList(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getAccessList(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string access_list = 1; + * @return {string} + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.prototype.getAccessList = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} returns this + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.prototype.setAccessList = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.toObject = function(includeInstance, msg) { + var f, obj = { + + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest; + return proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.ListAccessListReviewsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + accessList: jspb.Message.getFieldWithDefault(msg, 1, ""), + pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), + nextToken: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} + */ +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.teleport.accesslist.v1.ListAccessListReviewsRequest; + return proto.teleport.accesslist.v1.ListAccessListReviewsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} + */ +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setAccessList(value); + break; + case 2: + var value = /** @type {number} */ (reader.readInt32()); + msg.setPageSize(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setNextToken(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.teleport.accesslist.v1.ListAccessListReviewsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getAccessList(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getPageSize(); + if (f !== 0) { + writer.writeInt32( + 2, + f + ); + } + f = message.getNextToken(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional string access_list = 1; + * @return {string} + */ +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.getAccessList = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} returns this + */ +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.setAccessList = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional int32 page_size = 2; + * @return {number} + */ +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.getPageSize = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); }; /** - * Serializes the given message to binary data (in protobuf wire - * format), writing to the given BinaryWriter. - * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} message - * @param {!jspb.BinaryWriter} writer - * @suppress {unusedLocalVariables} f is only used for nested messages + * @param {number} value + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} returns this */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.serializeBinaryToWriter = function(message, writer) { - var f = undefined; - f = message.getAccessList(); - if (f.length > 0) { - writer.writeString( - 1, - f - ); - } +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.setPageSize = function(value) { + return jspb.Message.setProto3IntField(this, 2, value); }; /** - * optional string access_list = 1; + * optional string next_token = 3; * @return {string} */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.prototype.getAccessList = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.getNextToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); }; /** * @param {string} value - * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest} returns this + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} returns this */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersForAccessListRequest.prototype.setAccessList = function(value) { - return jspb.Message.setProto3StringField(this, 1, value); +proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.setNextToken = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); }; +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.repeatedFields_ = [1]; + if (jspb.Message.GENERATE_TO_OBJECT) { @@ -3442,8 +4178,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * http://goto/soy-param-migration * @return {!Object} */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.prototype.toObject = function(opt_includeInstance) { - return proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.toObject(opt_includeInstance, this); +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.ListAccessListReviewsResponse.toObject(opt_includeInstance, this); }; @@ -3452,13 +4188,15 @@ proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.prototype.toObjec * @param {boolean|undefined} includeInstance Deprecated. Whether to include * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} msg The msg instance to transform. + * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} msg The msg instance to transform. * @return {!Object} * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.toObject = function(includeInstance, msg) { +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.toObject = function(includeInstance, msg) { var f, obj = { - + reviewsList: jspb.Message.toObjectList(msg.getReviewsList(), + teleport_accesslist_v1_accesslist_pb.Review.toObject, includeInstance), + nextToken: jspb.Message.getFieldWithDefault(msg, 2, "") }; if (includeInstance) { @@ -3472,29 +4210,38 @@ proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.toObject = functi /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.deserializeBinary = function(bytes) { +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest; - return proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.deserializeBinaryFromReader(msg, reader); + var msg = new proto.teleport.accesslist.v1.ListAccessListReviewsResponse; + return proto.teleport.accesslist.v1.ListAccessListReviewsResponse.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} msg The message object to deserialize into. + * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.deserializeBinaryFromReader = function(msg, reader) { +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; } var field = reader.getFieldNumber(); switch (field) { + case 1: + var value = new teleport_accesslist_v1_accesslist_pb.Review; + reader.readMessage(value,teleport_accesslist_v1_accesslist_pb.Review.deserializeBinaryFromReader); + msg.addReviews(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setNextToken(value); + break; default: reader.skipField(); break; @@ -3508,9 +4255,9 @@ proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.deserializeBinary * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.prototype.serializeBinary = function() { +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); - proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.serializeBinaryToWriter(this, writer); + proto.teleport.accesslist.v1.ListAccessListReviewsResponse.serializeBinaryToWriter(this, writer); return writer.getResultBuffer(); }; @@ -3518,12 +4265,83 @@ proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.prototype.seriali /** * Serializes the given message to binary data (in protobuf wire * format), writing to the given BinaryWriter. - * @param {!proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest} message + * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} message * @param {!jspb.BinaryWriter} writer * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.DeleteAllAccessListMembersRequest.serializeBinaryToWriter = function(message, writer) { +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.serializeBinaryToWriter = function(message, writer) { var f = undefined; + f = message.getReviewsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + teleport_accesslist_v1_accesslist_pb.Review.serializeBinaryToWriter + ); + } + f = message.getNextToken(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * repeated Review reviews = 1; + * @return {!Array} + */ +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.getReviewsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, teleport_accesslist_v1_accesslist_pb.Review, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} returns this +*/ +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.setReviewsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.teleport.accesslist.v1.Review=} opt_value + * @param {number=} opt_index + * @return {!proto.teleport.accesslist.v1.Review} + */ +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.addReviews = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.teleport.accesslist.v1.Review, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} returns this + */ +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.clearReviewsList = function() { + return this.setReviewsList([]); +}; + + +/** + * optional string next_token = 2; + * @return {string} + */ +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.getNextToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} returns this + */ +proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.setNextToken = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); }; @@ -3543,8 +4361,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * http://goto/soy-param-migration * @return {!Object} */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.toObject = function(opt_includeInstance) { - return proto.teleport.accesslist.v1.ListAccessListReviewsRequest.toObject(opt_includeInstance, this); +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.toObject(opt_includeInstance, this); }; @@ -3553,15 +4371,14 @@ proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.toObject = f * @param {boolean|undefined} includeInstance Deprecated. Whether to include * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} msg The msg instance to transform. + * @param {!proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest} msg The msg instance to transform. * @return {!Object} * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.toObject = function(includeInstance, msg) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.toObject = function(includeInstance, msg) { var f, obj = { - accessList: jspb.Message.getFieldWithDefault(msg, 1, ""), - pageSize: jspb.Message.getFieldWithDefault(msg, 2, 0), - nextToken: jspb.Message.getFieldWithDefault(msg, 3, "") + pageSize: jspb.Message.getFieldWithDefault(msg, 1, 0), + nextToken: jspb.Message.getFieldWithDefault(msg, 2, "") }; if (includeInstance) { @@ -3575,23 +4392,23 @@ proto.teleport.accesslist.v1.ListAccessListReviewsRequest.toObject = function(in /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} + * @return {!proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest} */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.deserializeBinary = function(bytes) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.teleport.accesslist.v1.ListAccessListReviewsRequest; - return proto.teleport.accesslist.v1.ListAccessListReviewsRequest.deserializeBinaryFromReader(msg, reader); + var msg = new proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest; + return proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} msg The message object to deserialize into. + * @param {!proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} + * @return {!proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest} */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.deserializeBinaryFromReader = function(msg, reader) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; @@ -3599,14 +4416,10 @@ proto.teleport.accesslist.v1.ListAccessListReviewsRequest.deserializeBinaryFromR var field = reader.getFieldNumber(); switch (field) { case 1: - var value = /** @type {string} */ (reader.readString()); - msg.setAccessList(value); - break; - case 2: var value = /** @type {number} */ (reader.readInt32()); msg.setPageSize(value); break; - case 3: + case 2: var value = /** @type {string} */ (reader.readString()); msg.setNextToken(value); break; @@ -3623,9 +4436,9 @@ proto.teleport.accesslist.v1.ListAccessListReviewsRequest.deserializeBinaryFromR * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.serializeBinary = function() { +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); - proto.teleport.accesslist.v1.ListAccessListReviewsRequest.serializeBinaryToWriter(this, writer); + proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.serializeBinaryToWriter(this, writer); return writer.getResultBuffer(); }; @@ -3633,30 +4446,23 @@ proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.serializeBin /** * Serializes the given message to binary data (in protobuf wire * format), writing to the given BinaryWriter. - * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} message + * @param {!proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest} message * @param {!jspb.BinaryWriter} writer * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.serializeBinaryToWriter = function(message, writer) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.serializeBinaryToWriter = function(message, writer) { var f = undefined; - f = message.getAccessList(); - if (f.length > 0) { - writer.writeString( - 1, - f - ); - } f = message.getPageSize(); if (f !== 0) { writer.writeInt32( - 2, + 1, f ); } f = message.getNextToken(); if (f.length > 0) { writer.writeString( - 3, + 2, f ); } @@ -3664,56 +4470,38 @@ proto.teleport.accesslist.v1.ListAccessListReviewsRequest.serializeBinaryToWrite /** - * optional string access_list = 1; - * @return {string} - */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.getAccessList = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); -}; - - -/** - * @param {string} value - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} returns this - */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.setAccessList = function(value) { - return jspb.Message.setProto3StringField(this, 1, value); -}; - - -/** - * optional int32 page_size = 2; + * optional int32 page_size = 1; * @return {number} */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.getPageSize = function() { - return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.prototype.getPageSize = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); }; /** * @param {number} value - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} returns this + * @return {!proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest} returns this */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.setPageSize = function(value) { - return jspb.Message.setProto3IntField(this, 2, value); +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.prototype.setPageSize = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); }; /** - * optional string next_token = 3; + * optional string next_token = 2; * @return {string} */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.getNextToken = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.prototype.getNextToken = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); }; /** * @param {string} value - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsRequest} returns this + * @return {!proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest} returns this */ -proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.setNextToken = function(value) { - return jspb.Message.setProto3StringField(this, 3, value); +proto.teleport.accesslist.v1.ListAllAccessListReviewsRequest.prototype.setNextToken = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); }; @@ -3723,7 +4511,7 @@ proto.teleport.accesslist.v1.ListAccessListReviewsRequest.prototype.setNextToken * @private {!Array} * @const */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.repeatedFields_ = [1]; +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.repeatedFields_ = [1]; @@ -3740,8 +4528,8 @@ if (jspb.Message.GENERATE_TO_OBJECT) { * http://goto/soy-param-migration * @return {!Object} */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.toObject = function(opt_includeInstance) { - return proto.teleport.accesslist.v1.ListAccessListReviewsResponse.toObject(opt_includeInstance, this); +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.toObject(opt_includeInstance, this); }; @@ -3750,11 +4538,11 @@ proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.toObject = * @param {boolean|undefined} includeInstance Deprecated. Whether to include * the JSPB instance for transitional soy proto support: * http://goto/soy-param-migration - * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} msg The msg instance to transform. + * @param {!proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse} msg The msg instance to transform. * @return {!Object} * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.toObject = function(includeInstance, msg) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.toObject = function(includeInstance, msg) { var f, obj = { reviewsList: jspb.Message.toObjectList(msg.getReviewsList(), teleport_accesslist_v1_accesslist_pb.Review.toObject, includeInstance), @@ -3772,23 +4560,23 @@ proto.teleport.accesslist.v1.ListAccessListReviewsResponse.toObject = function(i /** * Deserializes binary data (in protobuf wire format). * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} + * @return {!proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse} */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.deserializeBinary = function(bytes) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.deserializeBinary = function(bytes) { var reader = new jspb.BinaryReader(bytes); - var msg = new proto.teleport.accesslist.v1.ListAccessListReviewsResponse; - return proto.teleport.accesslist.v1.ListAccessListReviewsResponse.deserializeBinaryFromReader(msg, reader); + var msg = new proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse; + return proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.deserializeBinaryFromReader(msg, reader); }; /** * Deserializes binary data (in protobuf wire format) from the * given reader into the given message object. - * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} msg The message object to deserialize into. + * @param {!proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse} msg The message object to deserialize into. * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} + * @return {!proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse} */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.deserializeBinaryFromReader = function(msg, reader) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.deserializeBinaryFromReader = function(msg, reader) { while (reader.nextField()) { if (reader.isEndGroup()) { break; @@ -3817,9 +4605,9 @@ proto.teleport.accesslist.v1.ListAccessListReviewsResponse.deserializeBinaryFrom * Serializes the message to binary data (in protobuf wire format). * @return {!Uint8Array} */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.serializeBinary = function() { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.prototype.serializeBinary = function() { var writer = new jspb.BinaryWriter(); - proto.teleport.accesslist.v1.ListAccessListReviewsResponse.serializeBinaryToWriter(this, writer); + proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.serializeBinaryToWriter(this, writer); return writer.getResultBuffer(); }; @@ -3827,11 +4615,11 @@ proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.serializeBi /** * Serializes the given message to binary data (in protobuf wire * format), writing to the given BinaryWriter. - * @param {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} message + * @param {!proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse} message * @param {!jspb.BinaryWriter} writer * @suppress {unusedLocalVariables} f is only used for nested messages */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.serializeBinaryToWriter = function(message, writer) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.serializeBinaryToWriter = function(message, writer) { var f = undefined; f = message.getReviewsList(); if (f.length > 0) { @@ -3855,7 +4643,7 @@ proto.teleport.accesslist.v1.ListAccessListReviewsResponse.serializeBinaryToWrit * repeated Review reviews = 1; * @return {!Array} */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.getReviewsList = function() { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.prototype.getReviewsList = function() { return /** @type{!Array} */ ( jspb.Message.getRepeatedWrapperField(this, teleport_accesslist_v1_accesslist_pb.Review, 1)); }; @@ -3863,9 +4651,9 @@ proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.getReviewsL /** * @param {!Array} value - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} returns this + * @return {!proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse} returns this */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.setReviewsList = function(value) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.prototype.setReviewsList = function(value) { return jspb.Message.setRepeatedWrapperField(this, 1, value); }; @@ -3875,16 +4663,16 @@ proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.setReviewsL * @param {number=} opt_index * @return {!proto.teleport.accesslist.v1.Review} */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.addReviews = function(opt_value, opt_index) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.prototype.addReviews = function(opt_value, opt_index) { return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.teleport.accesslist.v1.Review, opt_index); }; /** * Clears the list making it empty but non-null. - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} returns this + * @return {!proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse} returns this */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.clearReviewsList = function() { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.prototype.clearReviewsList = function() { return this.setReviewsList([]); }; @@ -3893,16 +4681,16 @@ proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.clearReview * optional string next_token = 2; * @return {string} */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.getNextToken = function() { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.prototype.getNextToken = function() { return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); }; /** * @param {string} value - * @return {!proto.teleport.accesslist.v1.ListAccessListReviewsResponse} returns this + * @return {!proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse} returns this */ -proto.teleport.accesslist.v1.ListAccessListReviewsResponse.prototype.setNextToken = function(value) { +proto.teleport.accesslist.v1.ListAllAccessListReviewsResponse.prototype.setNextToken = function(value) { return jspb.Message.setProto3StringField(this, 2, value); }; diff --git a/lib/auth/accesspoint/accesspoint.go b/lib/auth/accesspoint/accesspoint.go index c1fffcda9dc7a..aa203c23f8ba4 100644 --- a/lib/auth/accesspoint/accesspoint.go +++ b/lib/auth/accesspoint/accesspoint.go @@ -140,6 +140,7 @@ func NewAccessCache(cfg AccessCacheConfig) (*cache.Cache, error) { SAMLIdPServiceProviders: cfg.Services, UserGroups: cfg.Services, Okta: cfg.Services.OktaClient(), + AccessLists: cfg.Services.AccessListClient(), SecReports: cfg.Services.SecReportsClient(), UserLoginStates: cfg.Services.UserLoginStateClient(), Integrations: cfg.Services, diff --git a/lib/auth/api.go b/lib/auth/api.go index c41627b410a9d..2782b335aa5e8 100644 --- a/lib/auth/api.go +++ b/lib/auth/api.go @@ -25,6 +25,7 @@ import ( "github.com/gravitational/teleport/api/client/proto" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/accesslist" "github.com/gravitational/teleport/api/types/discoveryconfig" "github.com/gravitational/teleport/lib/events" "github.com/gravitational/teleport/lib/services" @@ -1068,6 +1069,27 @@ type Cache interface { // GetUserGroup returns the specified user group resources. GetUserGroup(ctx context.Context, name string) (types.UserGroup, error) + // GetAccessLists returns a list of all access lists. + GetAccessLists(context.Context) ([]*accesslist.AccessList, error) + // ListAccessLists returns a paginated list of access lists. + ListAccessLists(context.Context, int, string) ([]*accesslist.AccessList, string, error) + // GetAccessList returns the specified access list resource. + GetAccessList(context.Context, string) (*accesslist.AccessList, error) + + // ListAccessListMembers returns a paginated list of all access list members. + // May return a DynamicAccessListError if the requested access list has an + // implicit member list and the underlying implementation does not have + // enough information to compute the dynamic member list. + ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) + // GetAccessListMember returns the specified access list member resource. + // May return a DynamicAccessListError if the requested access list has an + // implicit member list and the underlying implementation does not have + // enough information to compute the dynamic member record. + GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) + + // ListAccessListReviews will list access list reviews for a particular access list. + ListAccessListReviews(ctx context.Context, accessList string, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) + // IntegrationsGetter defines read/list methods for integrations. services.IntegrationsGetter } diff --git a/lib/cache/cache.go b/lib/cache/cache.go index c8709eca12d20..0adaaa5553cf6 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -37,11 +37,13 @@ import ( apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/internalutils/stream" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/accesslist" "github.com/gravitational/teleport/api/types/discoveryconfig" "github.com/gravitational/teleport/api/types/secreports" "github.com/gravitational/teleport/api/types/userloginstate" "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/backend" + "github.com/gravitational/teleport/lib/cache/simple" "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/observability/metrics" "github.com/gravitational/teleport/lib/observability/tracing" @@ -143,6 +145,9 @@ func ForAuth(cfg Config) Config { {Kind: types.KindAuditQuery}, {Kind: types.KindSecurityReport}, {Kind: types.KindSecurityReportState}, + {Kind: types.KindAccessList}, + {Kind: types.KindAccessListMember}, + {Kind: types.KindAccessListReview}, } cfg.QueueSize = defaults.AuthQueueSize // We don't want to enable partial health for auth cache because auth uses an event stream @@ -420,6 +425,8 @@ func ForOkta(cfg Config) Config { {Kind: types.KindProxy}, {Kind: types.KindRole}, {Kind: types.KindClusterAuthPreference}, + {Kind: types.KindAccessList}, + {Kind: types.KindAccessListMember}, } cfg.QueueSize = defaults.DiscoveryQueueSize return cfg @@ -510,6 +517,7 @@ type Cache struct { headlessAuthenticationsCache services.HeadlessAuthenticationService secReportsCache services.SecReports userLoginStateCache services.UserLoginStates + accessListCache *simple.AccessListService eventsFanout *services.FanoutV2 lowVolumeEventsFanout *utils.RoundRobin[*services.FanoutV2] @@ -672,6 +680,8 @@ type Config struct { UserLoginStates services.UserLoginStates // SecEvents is the security report service. SecReports services.SecReports + // AccessLists is the access lists service. + AccessLists services.AccessLists // Backend is a backend for local cache Backend backend.Backend // MaxRetryPeriod is the maximum period between cache retries on failures @@ -862,6 +872,12 @@ func New(config Config) (*Cache, error) { return nil, trace.Wrap(err) } + accessListCache, err := simple.NewAccessListService(config.Backend) + if err != nil { + cancel() + return nil, trace.Wrap(err) + } + fanout := services.NewFanoutV2(services.FanoutV2Config{}) lowVolumeFanouts := make([]*services.FanoutV2, 0, config.FanoutShards) for i := 0; i < config.FanoutShards; i++ { @@ -900,6 +916,7 @@ func New(config Config) (*Cache, error) { headlessAuthenticationsCache: local.NewIdentityService(config.Backend), secReportsCache: secReprotsCache, userLoginStateCache: userLoginStatesCache, + accessListCache: accessListCache, eventsFanout: fanout, lowVolumeEventsFanout: utils.NewRoundRobin(lowVolumeFanouts), Logger: log.WithFields(log.Fields{ @@ -2772,6 +2789,90 @@ func (c *Cache) GetUserLoginState(ctx context.Context, name string) (*userlogins return uls, trace.Wrap(err) } +// GetAccessLists returns a list of all access lists. +func (c *Cache) GetAccessLists(ctx context.Context) ([]*accesslist.AccessList, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetAccessLists") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.accessLists) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + return rg.reader.GetAccessLists(ctx) +} + +// ListAccessLists returns a paginated list of access lists. +func (c *Cache) ListAccessLists(ctx context.Context, pageSize int, nextToken string) ([]*accesslist.AccessList, string, error) { + ctx, span := c.Tracer.Start(ctx, "cache/ListAccessLists") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.accessLists) + if err != nil { + return nil, "", trace.Wrap(err) + } + defer rg.Release() + return rg.reader.ListAccessLists(ctx, pageSize, nextToken) +} + +// GetAccessList returns the specified access list resource. +func (c *Cache) GetAccessList(ctx context.Context, name string) (*accesslist.AccessList, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetAccessList") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.accessLists) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + return rg.reader.GetAccessList(ctx, name) +} + +// ListAccessListMembers returns a paginated list of all access list members. +// May return a DynamicAccessListError if the requested access list has an +// implicit member list and the underlying implementation does not have +// enough information to compute the dynamic member list. +func (c *Cache) ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) { + ctx, span := c.Tracer.Start(ctx, "cache/ListAccessListMembers") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.accessListMembers) + if err != nil { + return nil, "", trace.Wrap(err) + } + defer rg.Release() + return rg.reader.ListAccessListMembers(ctx, accessListName, pageSize, pageToken) +} + +// GetAccessListMember returns the specified access list member resource. +// May return a DynamicAccessListError if the requested access list has an +// implicit member list and the underlying implementation does not have +// enough information to compute the dynamic member record. +func (c *Cache) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetAccessListMember") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.accessListMembers) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + return rg.reader.GetAccessListMember(ctx, accessList, memberName) +} + +// ListAccessListReviews will list access list reviews for a particular access list. +func (c *Cache) ListAccessListReviews(ctx context.Context, accessList string, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) { + ctx, span := c.Tracer.Start(ctx, "cache/ListAccessListReviews") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.accessListReviews) + if err != nil { + return nil, "", trace.Wrap(err) + } + defer rg.Release() + return rg.reader.ListAccessListReviews(ctx, accessList, pageSize, pageToken) +} + // ListResources is a part of auth.Cache implementation func (c *Cache) ListResources(ctx context.Context, req proto.ListResourcesRequest) (*types.ListResourcesResponse, error) { ctx, span := c.Tracer.Start(ctx, "cache/ListResources") diff --git a/lib/cache/cache_test.go b/lib/cache/cache_test.go index a33c831b76828..14f720aac5b54 100644 --- a/lib/cache/cache_test.go +++ b/lib/cache/cache_test.go @@ -38,6 +38,7 @@ import ( "github.com/gravitational/teleport/api/client/proto" apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/accesslist" "github.com/gravitational/teleport/api/types/discoveryconfig" "github.com/gravitational/teleport/api/types/header" "github.com/gravitational/teleport/api/types/secreports" @@ -104,6 +105,7 @@ type testPack struct { discoveryConfigs services.DiscoveryConfigs userLoginStates services.UserLoginStates secReports services.SecReports + accessLists services.AccessLists } // testFuncs are functions to support testing an object in a cache. @@ -273,6 +275,12 @@ func newPackWithoutCache(dir string, opts ...packOption) (*testPack, error) { } p.secReports = secReportsSvc + accessListsSvc, err := local.NewAccessListService(p.backend, p.backend.Clock()) + if err != nil { + return nil, trace.Wrap(err) + } + p.accessLists = accessListsSvc + return p, nil } @@ -313,6 +321,7 @@ func newPack(dir string, setupConfig func(c Config) Config, opts ...packOption) DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, SecReports: p.secReports, + AccessLists: p.accessLists, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, })) @@ -710,6 +719,7 @@ func TestCompletenessInit(t *testing.T) { DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, SecReports: p.secReports, + AccessLists: p.accessLists, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, })) @@ -781,6 +791,7 @@ func TestCompletenessReset(t *testing.T) { DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, SecReports: p.secReports, + AccessLists: p.accessLists, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, })) @@ -964,6 +975,7 @@ func TestListResources_NodesTTLVariant(t *testing.T) { DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, SecReports: p.secReports, + AccessLists: p.accessLists, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, neverOK: true, // ensure reads are never healthy @@ -1046,6 +1058,7 @@ func initStrategy(t *testing.T) { DiscoveryConfigs: p.discoveryConfigs, UserLoginStates: p.userLoginStates, SecReports: p.secReports, + AccessLists: p.accessLists, MaxRetryPeriod: 200 * time.Millisecond, EventsC: p.eventsC, })) @@ -2250,6 +2263,132 @@ func TestUserLoginStates(t *testing.T) { }) } +// TestAccessList tests that CRUD operations on access list resources are +// replicated from the backend to the cache. +func TestAccessList(t *testing.T) { + t.Parallel() + + p := newTestPack(t, ForAuth) + t.Cleanup(p.Close) + + clock := clockwork.NewFakeClockAt(time.Now()) + + testResources(t, p, testFuncs[*accesslist.AccessList]{ + newResource: func(name string) (*accesslist.AccessList, error) { + return newAccessList(t, name, clock), nil + }, + create: func(ctx context.Context, item *accesslist.AccessList) error { + _, err := p.accessLists.UpsertAccessList(ctx, item) + return trace.Wrap(err) + }, + list: func(ctx context.Context) ([]*accesslist.AccessList, error) { + items, _, err := p.accessLists.ListAccessLists(ctx, 0 /* page size */, "") + return items, trace.Wrap(err) + }, + cacheGet: p.cache.GetAccessList, + cacheList: func(ctx context.Context) ([]*accesslist.AccessList, error) { + items, _, err := p.cache.ListAccessLists(ctx, 0 /* page size */, "") + return items, trace.Wrap(err) + }, + update: func(ctx context.Context, item *accesslist.AccessList) error { + _, err := p.accessLists.UpsertAccessList(ctx, item) + return trace.Wrap(err) + }, + deleteAll: p.accessLists.DeleteAllAccessLists, + }) +} + +// TestAccessListMembers tests that CRUD operations on access list member resources are +// replicated from the backend to the cache. +func TestAccessListMembers(t *testing.T) { + t.Parallel() + + p := newTestPack(t, ForAuth) + t.Cleanup(p.Close) + + clock := clockwork.NewFakeClockAt(time.Now()) + + al, err := p.accessLists.UpsertAccessList(context.Background(), newAccessList(t, "access-list", clock)) + require.NoError(t, err) + + testResources(t, p, testFuncs[*accesslist.AccessListMember]{ + newResource: func(name string) (*accesslist.AccessListMember, error) { + return newAccessListMember(t, al.GetName(), name), nil + }, + create: func(ctx context.Context, item *accesslist.AccessListMember) error { + _, err := p.accessLists.UpsertAccessListMember(ctx, item) + return trace.Wrap(err) + }, + list: func(ctx context.Context) ([]*accesslist.AccessListMember, error) { + items, _, err := p.accessLists.ListAllAccessListMembers(ctx, 0 /* page size */, "") + return items, trace.Wrap(err) + }, + cacheGet: func(ctx context.Context, name string) (*accesslist.AccessListMember, error) { + return p.cache.GetAccessListMember(ctx, al.GetName(), name) + }, + cacheList: func(ctx context.Context) ([]*accesslist.AccessListMember, error) { + items, _, err := p.cache.ListAccessListMembers(ctx, al.GetName(), 0 /* page size */, "") + return items, trace.Wrap(err) + }, + update: func(ctx context.Context, item *accesslist.AccessListMember) error { + _, err := p.accessLists.UpsertAccessListMember(ctx, item) + return trace.Wrap(err) + }, + deleteAll: p.accessLists.DeleteAllAccessListMembers, + }) +} + +// TestAccessListReviews tests that CRUD operations on access list review resources are +// replicated from the backend to the cache. +func TestAccessListReviews(t *testing.T) { + t.Parallel() + + p := newTestPack(t, ForAuth) + t.Cleanup(p.Close) + + clock := clockwork.NewFakeClockAt(time.Now()) + + al, _, err := p.accessLists.UpsertAccessListWithMembers(context.Background(), newAccessList(t, "access-list", clock), + []*accesslist.AccessListMember{ + newAccessListMember(t, "access-list", "member1"), + newAccessListMember(t, "access-list", "member2"), + newAccessListMember(t, "access-list", "member3"), + newAccessListMember(t, "access-list", "member4"), + newAccessListMember(t, "access-list", "member5"), + }) + require.NoError(t, err) + + // Keep track of the reviews, as create can update them. We'll use this + // to make sure the values are up to date during the test. + reviews := map[string]*accesslist.Review{} + + testResources(t, p, testFuncs[*accesslist.Review]{ + newResource: func(name string) (*accesslist.Review, error) { + review := newAccessListReview(t, al.GetName(), name) + // Store the name in the description. + review.Metadata.Description = name + reviews[name] = review + return review, nil + }, + create: func(ctx context.Context, item *accesslist.Review) error { + review, _, err := p.accessLists.CreateAccessListReview(ctx, item) + // Use the old name from the description. + oldName := review.Metadata.Description + reviews[oldName].SetName(review.GetName()) + return trace.Wrap(err) + }, + list: func(ctx context.Context) ([]*accesslist.Review, error) { + items, _, err := p.accessLists.ListAllAccessListReviews(ctx, 0 /* page size */, "") + return items, trace.Wrap(err) + }, + cacheList: func(ctx context.Context) ([]*accesslist.Review, error) { + items, _, err := p.cache.ListAccessListReviews(ctx, al.GetName(), 0 /* page size */, "") + return items, trace.Wrap(err) + }, + deleteAll: p.accessLists.DeleteAllAccessListReviews, + }) +} + // testResources is a generic tester for resources. func testResources[T types.Resource](t *testing.T, p *testPack, funcs testFuncs[T]) { ctx := context.Background() @@ -2288,10 +2427,13 @@ func testResources[T types.Resource](t *testing.T, p *testPack, funcs testFuncs[ require.Empty(t, cmp.Diff(r, getR, cmpOpts...)) } - // Update the resource and upsert it into the backend again. - r.SetExpiry(r.Expiry().Add(30 * time.Minute)) - err = funcs.update(ctx, r) - require.NoError(t, err) + // update is optional as not every resource implements it + if funcs.update != nil { + // Update the resource and upsert it into the backend again. + r.SetExpiry(r.Expiry().Add(30 * time.Minute)) + err = funcs.update(ctx, r) + require.NoError(t, err) + } // Check that the resource is in the backend and only one exists (so an // update occurred). @@ -2646,6 +2788,8 @@ func newProxyEvents(events types.Events, ignoreKinds []types.WatchKind) *proxyEv func TestCacheWatchKindExistsInEvents(t *testing.T) { t.Parallel() + clock := clockwork.NewFakeClockAt(time.Now()) + cases := map[string]Config{ "ForAuth": ForAuth(Config{}), "ForProxy": ForProxy(Config{}), @@ -2706,6 +2850,9 @@ func TestCacheWatchKindExistsInEvents(t *testing.T) { types.KindAuditQuery: newAuditQuery(t, "audit-query"), types.KindSecurityReport: newSecurityReport(t, "security-report"), types.KindSecurityReportState: newSecurityReport(t, "security-report-state"), + types.KindAccessList: newAccessList(t, "access-list", clock), + types.KindAccessListMember: newAccessListMember(t, "access-list", "member"), + types.KindAccessListReview: newAccessListReview(t, "access-list", "review"), } for name, cfg := range cases { @@ -3001,6 +3148,124 @@ func newUserLoginState(t *testing.T, name string) *userloginstate.UserLoginState return uls } +func newAccessList(t *testing.T, name string, clock clockwork.Clock) *accesslist.AccessList { + t.Helper() + + accessList, err := accesslist.NewAccessList( + header.Metadata{ + Name: name, + }, + accesslist.Spec{ + Title: "title", + Description: "test access list", + Owners: []accesslist.Owner{ + { + Name: "test-user1", + Description: "test user 1", + }, + { + Name: "test-user2", + Description: "test user 2", + }, + }, + Audit: accesslist.Audit{ + NextAuditDate: clock.Now(), + }, + MembershipRequires: accesslist.Requires{ + Roles: []string{"mrole1", "mrole2"}, + Traits: map[string][]string{ + "mtrait1": {"mvalue1", "mvalue2"}, + "mtrait2": {"mvalue3", "mvalue4"}, + }, + }, + OwnershipRequires: accesslist.Requires{ + Roles: []string{"orole1", "orole2"}, + Traits: map[string][]string{ + "otrait1": {"ovalue1", "ovalue2"}, + "otrait2": {"ovalue3", "ovalue4"}, + }, + }, + Grants: accesslist.Grants{ + Roles: []string{"grole1", "grole2"}, + Traits: map[string][]string{ + "gtrait1": {"gvalue1", "gvalue2"}, + "gtrait2": {"gvalue3", "gvalue4"}, + }, + }, + }, + ) + require.NoError(t, err) + + return accessList +} + +func newAccessListMember(t *testing.T, accessList, name string) *accesslist.AccessListMember { + t.Helper() + + member, err := accesslist.NewAccessListMember( + header.Metadata{ + Name: name, + }, + accesslist.AccessListMemberSpec{ + AccessList: accessList, + Name: name, + Joined: time.Now(), + Expires: time.Now().Add(time.Hour * 24), + Reason: "a reason", + AddedBy: "dummy", + }, + ) + require.NoError(t, err) + + return member +} + +func newAccessListReview(t *testing.T, accessList, name string) *accesslist.Review { + t.Helper() + + review, err := accesslist.NewReview( + header.Metadata{ + Name: name, + }, + accesslist.ReviewSpec{ + AccessList: accessList, + Reviewers: []string{ + "user1", + "user2", + }, + ReviewDate: time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC), + Notes: "Some notes", + Changes: accesslist.ReviewChanges{ + MembershipRequirementsChanged: &accesslist.Requires{ + Roles: []string{ + "role1", + "role2", + }, + Traits: trait.Traits{ + "trait1": []string{ + "value1", + "value2", + }, + "trait2": []string{ + "value1", + "value2", + }, + }, + }, + RemovedMembers: []string{ + "member1", + "member2", + }, + ReviewFrequencyChanged: accesslist.ThreeMonths, + ReviewDayOfMonthChanged: accesslist.FifteenthDayOfMonth, + }, + }, + ) + require.NoError(t, err) + + return review +} + func withKeepalive[T any](fn func(context.Context, T) (*types.KeepAlive, error)) func(context.Context, T) error { return func(ctx context.Context, resource T) error { _, err := fn(ctx, resource) diff --git a/lib/cache/collections.go b/lib/cache/collections.go index b99b946d1e6ab..bf863b4fcadea 100644 --- a/lib/cache/collections.go +++ b/lib/cache/collections.go @@ -27,6 +27,7 @@ import ( "github.com/gravitational/teleport/api/client/proto" apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/accesslist" "github.com/gravitational/teleport/api/types/discoveryconfig" "github.com/gravitational/teleport/api/types/secreports" "github.com/gravitational/teleport/api/types/userloginstate" @@ -176,6 +177,9 @@ type cacheCollections struct { auditQueries collectionReader[services.SecurityAuditQueryGetter] secReports collectionReader[services.SecurityReportGetter] secReportsStates collectionReader[services.SecurityReportStateGetter] + accessLists collectionReader[accessListsGetter] + accessListMembers collectionReader[accessListMembersGetter] + accessListReviews collectionReader[accessListReviewsGetter] apps collectionReader[services.AppGetter] nodes collectionReader[nodeGetter] tunnelConnections collectionReader[tunnelConnectionGetter] @@ -631,6 +635,24 @@ func setupCollections(c *Cache, watches []types.WatchKind) (*cacheCollections, e } collections.userLoginStates = &genericCollection[*userloginstate.UserLoginState, services.UserLoginStatesGetter, userLoginStateExecutor]{cache: c, watch: watch} collections.byKind[resourceKind] = collections.userLoginStates + case types.KindAccessList: + if c.AccessLists == nil { + return nil, trace.BadParameter("missing parameter AccessLists") + } + collections.accessLists = &genericCollection[*accesslist.AccessList, accessListsGetter, accessListExecutor]{cache: c, watch: watch} + collections.byKind[resourceKind] = collections.accessLists + case types.KindAccessListMember: + if c.AccessLists == nil { + return nil, trace.BadParameter("missing parameter AccessLists") + } + collections.accessListMembers = &genericCollection[*accesslist.AccessListMember, accessListMembersGetter, accessListMemberExecutor]{cache: c, watch: watch} + collections.byKind[resourceKind] = collections.accessListMembers + case types.KindAccessListReview: + if c.AccessLists == nil { + return nil, trace.BadParameter("missing parameter AccessLists") + } + collections.accessListReviews = &genericCollection[*accesslist.Review, accessListReviewsGetter, accessListReviewExecutor]{cache: c, watch: watch} + collections.byKind[resourceKind] = collections.accessListReviews default: return nil, trace.BadParameter("resource %q is not supported", watch.Kind) } @@ -2581,3 +2603,166 @@ func (userLoginStateExecutor) getReader(cache *Cache, cacheOK bool) services.Use } var _ executor[*userloginstate.UserLoginState, services.UserLoginStatesGetter] = userLoginStateExecutor{} + +type accessListExecutor struct{} + +func (accessListExecutor) getAll(ctx context.Context, cache *Cache, loadSecrets bool) ([]*accesslist.AccessList, error) { + var resources []*accesslist.AccessList + var nextToken string + for { + var page []*accesslist.AccessList + var err error + page, nextToken, err = cache.AccessLists.ListAccessLists(ctx, 0 /* page size */, nextToken) + if err != nil { + return nil, trace.Wrap(err) + } + + resources = append(resources, page...) + + if nextToken == "" { + break + } + } + return resources, nil +} + +func (accessListExecutor) upsert(ctx context.Context, cache *Cache, resource *accesslist.AccessList) error { + _, err := cache.accessListCache.UpsertAccessList(ctx, resource) + return trace.Wrap(err) +} + +func (accessListExecutor) deleteAll(ctx context.Context, cache *Cache) error { + return cache.accessListCache.DeleteAllAccessLists(ctx) +} + +func (accessListExecutor) delete(ctx context.Context, cache *Cache, resource types.Resource) error { + return cache.accessListCache.DeleteAccessList(ctx, resource.GetName()) +} + +func (accessListExecutor) isSingleton() bool { return false } + +func (accessListExecutor) getReader(cache *Cache, cacheOK bool) accessListsGetter { + if cacheOK { + return cache.accessListCache + } + return cache.Config.AccessLists +} + +type accessListsGetter interface { + GetAccessLists(ctx context.Context) ([]*accesslist.AccessList, error) + ListAccessLists(ctx context.Context, pageSize int, nextToken string) ([]*accesslist.AccessList, string, error) + GetAccessList(ctx context.Context, name string) (*accesslist.AccessList, error) +} + +type accessListMemberExecutor struct{} + +func (accessListMemberExecutor) getAll(ctx context.Context, cache *Cache, loadSecrets bool) ([]*accesslist.AccessListMember, error) { + var resources []*accesslist.AccessListMember + var nextToken string + for { + var page []*accesslist.AccessListMember + var err error + page, nextToken, err = cache.AccessLists.ListAllAccessListMembers(ctx, 0 /* page size */, nextToken) + if err != nil { + return nil, trace.Wrap(err) + } + + resources = append(resources, page...) + + if nextToken == "" { + break + } + } + return resources, nil +} + +func (accessListMemberExecutor) upsert(ctx context.Context, cache *Cache, resource *accesslist.AccessListMember) error { + _, err := cache.accessListCache.UpsertAccessListMember(ctx, resource) + return trace.Wrap(err) +} + +func (accessListMemberExecutor) deleteAll(ctx context.Context, cache *Cache) error { + return cache.accessListCache.DeleteAllAccessListMembers(ctx) +} + +func (accessListMemberExecutor) delete(ctx context.Context, cache *Cache, resource types.Resource) error { + return cache.accessListCache.DeleteAccessListMember(ctx, + resource.GetMetadata().Description, // Cache passes access ID via description field. + resource.GetName()) +} + +func (accessListMemberExecutor) isSingleton() bool { return false } + +func (accessListMemberExecutor) getReader(cache *Cache, cacheOK bool) accessListMembersGetter { + if cacheOK { + return cache.accessListCache + } + return cache.Config.AccessLists +} + +type accessListMembersGetter interface { + ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, nextToken string) ([]*accesslist.AccessListMember, string, error) + GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) +} + +type accessListReviewExecutor struct{} + +func (accessListReviewExecutor) getAll(ctx context.Context, cache *Cache, loadSecrets bool) ([]*accesslist.Review, error) { + var resources []*accesslist.Review + var nextToken string + for { + var page []*accesslist.Review + var err error + page, nextToken, err = cache.AccessLists.ListAllAccessListReviews(ctx, 0 /* page size */, nextToken) + if err != nil { + return nil, trace.Wrap(err) + } + + resources = append(resources, page...) + + if nextToken == "" { + break + } + } + return resources, nil +} + +func (accessListReviewExecutor) upsert(ctx context.Context, cache *Cache, resource *accesslist.Review) error { + if _, _, err := cache.accessListCache.CreateAccessListReview(ctx, resource); err != nil { + if !trace.IsAlreadyExists(err) { + return trace.Wrap(err) + } + + if err := cache.accessListCache.DeleteAccessListReview(ctx, resource.Spec.AccessList, resource.GetName()); err != nil { + return trace.Wrap(err) + } + + if _, _, err := cache.accessListCache.CreateAccessListReview(ctx, resource); err != nil { + return trace.Wrap(err) + } + } + return nil +} + +func (accessListReviewExecutor) deleteAll(ctx context.Context, cache *Cache) error { + return cache.accessListCache.DeleteAllAccessListReviews(ctx) +} + +func (accessListReviewExecutor) delete(ctx context.Context, cache *Cache, resource types.Resource) error { + return cache.accessListCache.DeleteAccessListReview(ctx, + resource.GetMetadata().Description, // Cache passes access ID via description field. + resource.GetName()) +} + +func (accessListReviewExecutor) isSingleton() bool { return false } + +func (accessListReviewExecutor) getReader(cache *Cache, cacheOK bool) accessListReviewsGetter { + if cacheOK { + return cache.accessListCache + } + return cache.Config.AccessLists +} + +type accessListReviewsGetter interface { + ListAccessListReviews(ctx context.Context, accessList string, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) +} diff --git a/lib/cache/simple/access_list.go b/lib/cache/simple/access_list.go new file mode 100644 index 0000000000000..891d92b8a5303 --- /dev/null +++ b/lib/cache/simple/access_list.go @@ -0,0 +1,191 @@ +/* + * Teleport + * Copyright (C) 2023 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package simple + +import ( + "context" + "time" + + "github.com/gravitational/trace" + "github.com/sirupsen/logrus" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/accesslist" + "github.com/gravitational/teleport/lib/backend" + "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/teleport/lib/services/local/generic" +) + +const ( + accessListPrefix = "access_list" + accessListMaxPageSize = 100 + + accessListMemberPrefix = "access_list_member" + accessListMemberMaxPageSize = 200 + + accessListReviewPrefix = "access_list_review" + accessListReviewMaxPageSize = 200 +) + +// AccessListService is a simple access list backend service for use specifically by the cache. +type AccessListService struct { + log logrus.FieldLogger + service *generic.Service[*accesslist.AccessList] + memberService *generic.Service[*accesslist.AccessListMember] + reviewService *generic.Service[*accesslist.Review] +} + +// NewAccessListService creates a new AccessListService. This is a simple, cache focused +// backend service that doesn't perform any of the validation that the main backend service +// does. +func NewAccessListService(backend backend.Backend) (*AccessListService, error) { + service, err := generic.NewService(&generic.ServiceConfig[*accesslist.AccessList]{ + Backend: backend, + PageLimit: accessListMaxPageSize, + ResourceKind: types.KindAccessList, + BackendPrefix: accessListPrefix, + MarshalFunc: services.MarshalAccessList, + UnmarshalFunc: services.UnmarshalAccessList, + }) + if err != nil { + return nil, trace.Wrap(err) + } + + memberService, err := generic.NewService(&generic.ServiceConfig[*accesslist.AccessListMember]{ + Backend: backend, + PageLimit: accessListMemberMaxPageSize, + ResourceKind: types.KindAccessListMember, + BackendPrefix: accessListMemberPrefix, + MarshalFunc: services.MarshalAccessListMember, + UnmarshalFunc: services.UnmarshalAccessListMember, + }) + if err != nil { + return nil, trace.Wrap(err) + } + + reviewService, err := generic.NewService(&generic.ServiceConfig[*accesslist.Review]{ + Backend: backend, + PageLimit: accessListReviewMaxPageSize, + ResourceKind: types.KindAccessListReview, + BackendPrefix: accessListReviewPrefix, + MarshalFunc: services.MarshalAccessListReview, + UnmarshalFunc: services.UnmarshalAccessListReview, + }) + if err != nil { + return nil, trace.Wrap(err) + } + + return &AccessListService{ + log: logrus.WithFields(logrus.Fields{trace.Component: "access-list:simple-service"}), + service: service, + memberService: memberService, + reviewService: reviewService, + }, nil +} + +// GetAccessLists returns a list of all access lists. +func (a *AccessListService) GetAccessLists(ctx context.Context) ([]*accesslist.AccessList, error) { + accessLists, err := a.service.GetResources(ctx) + return accessLists, trace.Wrap(err) +} + +// ListAccessLists returns a paginated list of access lists. +func (a *AccessListService) ListAccessLists(ctx context.Context, pageSize int, nextToken string) ([]*accesslist.AccessList, string, error) { + return a.service.ListResources(ctx, pageSize, nextToken) +} + +// GetAccessList returns the specified access list resource. +func (a *AccessListService) GetAccessList(ctx context.Context, name string) (*accesslist.AccessList, error) { + return a.service.GetResource(ctx, name) +} + +// UpsertAccessList creates or updates an access list resource. +func (a *AccessListService) UpsertAccessList(ctx context.Context, accessList *accesslist.AccessList) (*accesslist.AccessList, error) { + return accessList, a.service.UpsertResource(ctx, accessList) +} + +// DeleteAccessList removes the specified access list resource. +func (a *AccessListService) DeleteAccessList(ctx context.Context, name string) error { + return trace.Wrap(a.service.DeleteResource(ctx, name)) +} + +// DeleteAllAccessLists removes all access lists. +func (a *AccessListService) DeleteAllAccessLists(ctx context.Context) error { + return trace.Wrap(a.service.DeleteAllResources(ctx)) +} + +// ListAccessListMembers returns a paginated list of all access list members. +func (a *AccessListService) ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, nextToken string) ([]*accesslist.AccessListMember, string, error) { + // We'll make a best effort to determine if the access list is implicit, but will proceed if we can't figure it out. + al, err := a.GetAccessList(ctx, accessListName) + if err == nil { + if al.HasImplicitMembership() { + return nil, "", trace.Wrap(services.ImplicitAccessListError{}) + } + } + return a.memberService.WithPrefix(accessListName).ListResources(ctx, pageSize, nextToken) +} + +// GetAccessListMember returns the specified access list member resource. +func (a *AccessListService) GetAccessListMember(ctx context.Context, accessListName string, memberName string) (*accesslist.AccessListMember, error) { + // We'll make a best effort to determine if the access list is implicit, but will proceed if we can't figure it out. + al, err := a.GetAccessList(ctx, accessListName) + if err == nil { + if al.HasImplicitMembership() { + return nil, trace.Wrap(services.ImplicitAccessListError{}) + } + } + return a.memberService.WithPrefix(accessListName).GetResource(ctx, memberName) +} + +// UpsertAccessListMember creates or updates an access list member resource. +func (a *AccessListService) UpsertAccessListMember(ctx context.Context, member *accesslist.AccessListMember) (*accesslist.AccessListMember, error) { + return member, trace.Wrap(a.memberService.WithPrefix(member.Spec.AccessList).UpsertResource(ctx, member)) +} + +// DeleteAccessListMember hard deletes the specified access list member resource. +func (a *AccessListService) DeleteAccessListMember(ctx context.Context, accessList string, memberName string) error { + return trace.Wrap(a.memberService.WithPrefix(accessList).DeleteResource(ctx, memberName)) +} + +// DeleteAllAccessListMembers hard deletes all access list members. +func (a *AccessListService) DeleteAllAccessListMembers(ctx context.Context) error { + return trace.Wrap(a.memberService.DeleteAllResources(ctx)) +} + +// ListAccessListReviews will list access list reviews for a particular access list. +func (a *AccessListService) ListAccessListReviews(ctx context.Context, accessList string, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) { + return a.reviewService.WithPrefix(accessList).ListResources(ctx, pageSize, pageToken) +} + +// CreateAccessListReview will create a new review for an access list. +func (a *AccessListService) CreateAccessListReview(ctx context.Context, review *accesslist.Review) (*accesslist.Review, time.Time, error) { + // Return a zero time here, as it will be ignored by the cache. + return review, time.Time{}, trace.Wrap(a.reviewService.WithPrefix(review.Spec.AccessList).CreateResource(ctx, review)) +} + +// DeleteAccessListReview will delete an access list review from the backend. +func (a *AccessListService) DeleteAccessListReview(ctx context.Context, accessListName, reviewName string) error { + return trace.Wrap(a.reviewService.WithPrefix(accessListName).DeleteResource(ctx, reviewName)) +} + +// DeleteAllAccessListReviews will delete all access list reviews from the backend. +func (a *AccessListService) DeleteAllAccessListReviews(ctx context.Context) error { + return trace.Wrap(a.reviewService.DeleteAllResources(ctx)) +} diff --git a/lib/services/access_list.go b/lib/services/access_list.go index 36d4cba88cc25..22a47650104f5 100644 --- a/lib/services/access_list.go +++ b/lib/services/access_list.go @@ -132,17 +132,26 @@ func (ImplicitAccessListError) Error() string { return "requested AccessList does not have explicit member list" } +// AccessListMemberGetter defines an interface that can retrieve access list members. +type AccessListMemberGetter interface { + // GetAccessListMember returns the specified access list member resource. + // May return a DynamicAccessListError if the requested access list has an + // implicit member list and the underlying implementation does not have + // enough information to compute the dynamic member record. + GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) +} + // AccessListMembersGetter defines an interface for reading access list members. type AccessListMembersGetter interface { + AccessListMemberGetter + // ListAccessListMembers returns a paginated list of all access list members. // May return a DynamicAccessListError if the requested access list has an // implicit member list and the underlying implementation does not have // enough information to compute the dynamic member list. ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) - // GetAccessListMember returns the specified access list member resource. - // May return a DynamicAccessListError if the requested access list has an - // implicit member list and the underlying implementation does not have - // enough information to compute the dynamic member record. + // ListAllAccessListMembers returns a paginated list of all access list members for all access lists. + ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) } @@ -240,13 +249,13 @@ func IsAccessListOwner(identity tlsca.Identity, accessList *accesslist.AccessLis // AccessListMembershipChecker will check if users are members of an access list and // makes sure the user is not locked and meets membership requirements. type AccessListMembershipChecker struct { - members AccessListMembersGetter + members AccessListMemberGetter locks LockGetter clock clockwork.Clock } // NewAccessListMembershipChecker will create a new access list membership checker. -func NewAccessListMembershipChecker(clock clockwork.Clock, members AccessListMembersGetter, locks LockGetter) *AccessListMembershipChecker { +func NewAccessListMembershipChecker(clock clockwork.Clock, members AccessListMemberGetter, locks LockGetter) *AccessListMembershipChecker { return &AccessListMembershipChecker{ members: members, locks: locks, @@ -296,7 +305,7 @@ func (a AccessListMembershipChecker) IsAccessListMember(ctx context.Context, ide } // TODO(mdwn): Remove this in favor of using the access list membership checker. -func IsAccessListMember(ctx context.Context, identity tlsca.Identity, clock clockwork.Clock, accessList *accesslist.AccessList, members AccessListMembersGetter) error { +func IsAccessListMember(ctx context.Context, identity tlsca.Identity, clock clockwork.Clock, accessList *accesslist.AccessList, members AccessListMemberGetter) error { // See if the member getter also implements lock getter. If so, use it. Otherwise, nil is fine. lockGetter, _ := members.(LockGetter) return AccessListMembershipChecker{ @@ -355,14 +364,17 @@ type AccessListReviews interface { // ListAccessListReviews will list access list reviews for a particular access list. ListAccessListReviews(ctx context.Context, accessList string, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) + // ListAllAccessListReviews will list access list reviews for all access lists. Only to be used by the cache. + ListAllAccessListReviews(ctx context.Context, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) + // CreateAccessListReview will create a new review for an access list. CreateAccessListReview(ctx context.Context, review *accesslist.Review) (updatedReview *accesslist.Review, nextReviewDate time.Time, err error) // DeleteAccessListReview will delete an access list review from the backend. DeleteAccessListReview(ctx context.Context, accessListName, reviewName string) error - // DeleteAllAccessListReviews will delete all access list reviews from an access list. - DeleteAllAccessListReviews(ctx context.Context, accessListName string) error + // DeleteAllAccessListReviews will delete all access list reviews from all access lists. + DeleteAllAccessListReviews(ctx context.Context) error } // MarshalAccessListReview marshals the access list review resource to JSON. diff --git a/lib/services/access_list_test.go b/lib/services/access_list_test.go index 04b4a664d8515..23f14e1a2d6c1 100644 --- a/lib/services/access_list_test.go +++ b/lib/services/access_list_test.go @@ -324,6 +324,18 @@ func (t *testMembersAndLockGetter) ListAccessListMembers(ctx context.Context, ac return members, "", nil } +// ListAllAccessListMembers returns a paginated list of all access list members for all access lists. +func (t *testMembersAndLockGetter) ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) ([]*accesslist.AccessListMember, string, error) { + var allMembers []*accesslist.AccessListMember + for _, members := range t.members { + for _, member := range members { + allMembers = append(allMembers, member) + } + } + + return allMembers, "", nil +} + // GetAccessListMember returns the specified access list member resource. func (t *testMembersAndLockGetter) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) { members, ok := t.members[accessList] diff --git a/lib/services/local/access_list.go b/lib/services/local/access_list.go index 40b69cc1b7495..df8f2d12309b7 100644 --- a/lib/services/local/access_list.go +++ b/lib/services/local/access_list.go @@ -268,6 +268,13 @@ func (a *AccessListService) ListAccessListMembers(ctx context.Context, accessLis return members, nextToken, nil } +// ListAllAccessListMembers returns a paginated list of all access list members for all access lists. +func (a *AccessListService) ListAllAccessListMembers(ctx context.Context, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) { + // Locks are not used here as these operations are more likely to be used by the cache. + // Lists all access list members for all access lists. + return a.memberService.ListResources(ctx, pageSize, nextToken) +} + // GetAccessListMember returns the specified access list member resource. func (a *AccessListService) GetAccessListMember(ctx context.Context, accessList string, memberName string) (*accesslist.AccessListMember, error) { var member *accesslist.AccessListMember @@ -475,15 +482,26 @@ func (a *AccessListService) ListAccessListReviews(ctx context.Context, accessLis return reviews, nextToken, nil } +// ListAllAccessListReviews will list access list reviews for all access lists. +func (a *AccessListService) ListAllAccessListReviews(ctx context.Context, pageSize int, pageToken string) (reviews []*accesslist.Review, nextToken string, err error) { + // Locks are not used here as these operations are more likely to be used by the cache. + // Lists all access list reviews for all access lists. + return a.reviewService.ListResources(ctx, pageSize, pageToken) +} + // CreateAccessListReview will create a new review for an access list. func (a *AccessListService) CreateAccessListReview(ctx context.Context, review *accesslist.Review) (*accesslist.Review, time.Time, error) { reviewName := uuid.New().String() createdReview, err := accesslist.NewReview(header.Metadata{ - Name: reviewName, + Name: reviewName, + Labels: review.GetAllLabels(), + Description: review.Metadata.Description, + Expires: review.Expiry(), }, accesslist.ReviewSpec{ AccessList: review.Spec.AccessList, Reviewers: review.Spec.Reviewers, ReviewDate: review.Spec.ReviewDate, + Notes: review.Spec.Notes, Changes: review.Spec.Changes, }) if err != nil { @@ -599,16 +617,11 @@ func (a *AccessListService) DeleteAccessListReview(ctx context.Context, accessLi return trace.Wrap(err) } -// DeleteAllAccessListReviews will delete all access list reviews from an access list. -func (a *AccessListService) DeleteAllAccessListReviews(ctx context.Context, accessList string) error { - err := a.service.RunWhileLocked(ctx, lockName(accessList), accessListLockTTL, func(ctx context.Context, _ backend.Backend) error { - _, err := a.service.GetResource(ctx, accessList) - if err != nil { - return trace.Wrap(err) - } - return trace.Wrap(a.reviewService.WithPrefix(accessList).DeleteAllResources(ctx)) - }) - return trace.Wrap(err) +// DeleteAllAccessListReviews will delete all access list reviews from all access lists. +func (a *AccessListService) DeleteAllAccessListReviews(ctx context.Context) error { + // Locks are not used here as these operations are more likely to be used by the cache. + // Delete all members for all access lists. + return trace.Wrap(a.reviewService.DeleteAllResources(ctx)) } func lockName(accessListName string) string { diff --git a/lib/services/local/access_list_test.go b/lib/services/local/access_list_test.go index 4cc38622c28c5..534693958bb56 100644 --- a/lib/services/local/access_list_test.go +++ b/lib/services/local/access_list_test.go @@ -766,11 +766,8 @@ func TestAccessListReviewCRUD(t *testing.T) { require.ErrorIs(t, err, trace.NotFound("access_list_review \"no-review\" doesn't exist")) // Try to delete all reviews from a non-existent list. - err = service.DeleteAllAccessListReviews(ctx, "non-existent-list") - require.ErrorIs(t, err, trace.NotFound("access_list \"non-existent-list\" doesn't exist")) - // Delete all access list reviews. - err = service.DeleteAllAccessListReviews(ctx, accessList1.GetName()) + err = service.DeleteAllAccessListReviews(ctx) require.NoError(t, err) // Verify that access lists reviews are gone. diff --git a/lib/services/local/events.go b/lib/services/local/events.go index bc1c7378ef2be..f4d0f6bad4060 100644 --- a/lib/services/local/events.go +++ b/lib/services/local/events.go @@ -185,6 +185,8 @@ func (e *EventsService) NewWatcher(ctx context.Context, watch types.Watch) (type parser = newUserLoginStateParser() case types.KindAccessListMember: parser = newAccessListMemberParser() + case types.KindAccessListReview: + parser = newAccessListReviewParser() default: if watch.AllowPartialSuccess { continue @@ -1802,7 +1804,19 @@ type accessListMemberParser struct { func (p *accessListMemberParser) parse(event backend.Event) (types.Resource, error) { switch event.Type { case types.OpDelete: - return resourceHeader(event, types.KindAccessListMember, types.V1, 0) + accessList, name, err := baseTwoKeys(event.Item.Key) + if err != nil { + return nil, trace.Wrap(err) + } + return &types.ResourceHeader{ + Kind: types.KindAccessListMember, + Version: types.V1, + Metadata: types.Metadata{ + Name: name, + Namespace: apidefaults.Namespace, + Description: accessList, // pass access list description field for the cache + }, + }, nil case types.OpPut: return services.UnmarshalAccessListMember(event.Item.Value, services.WithResourceID(event.Item.ID), @@ -1814,6 +1828,43 @@ func (p *accessListMemberParser) parse(event backend.Event) (types.Resource, err } } +func newAccessListReviewParser() *accessListReviewParser { + return &accessListReviewParser{ + baseParser: newBaseParser(backend.ExactKey(accessListReviewPrefix)), + } +} + +type accessListReviewParser struct { + baseParser +} + +func (p *accessListReviewParser) parse(event backend.Event) (types.Resource, error) { + switch event.Type { + case types.OpDelete: + accessList, name, err := baseTwoKeys(event.Item.Key) + if err != nil { + return nil, trace.Wrap(err) + } + return &types.ResourceHeader{ + Kind: types.KindAccessListReview, + Version: types.V1, + Metadata: types.Metadata{ + Name: name, + Namespace: apidefaults.Namespace, + Description: accessList, // pass access list description field for the cache + }, + }, nil + case types.OpPut: + return services.UnmarshalAccessListReview(event.Item.Value, + services.WithResourceID(event.Item.ID), + services.WithExpires(event.Item.Expires), + services.WithRevision(event.Item.Revision), + ) + default: + return nil, trace.BadParameter("event %v is not supported", event.Type) + } +} + func resourceHeader(event backend.Event, kind, version string, offset int) (types.Resource, error) { name, err := base(event.Item.Key, offset) if err != nil { From 676939e6befd65631a5e199259f70a8fed1442e7 Mon Sep 17 00:00:00 2001 From: Mike Wilson Date: Wed, 3 Jan 2024 14:58:48 -0500 Subject: [PATCH 2/3] Move simple backend to lib/services/simple --- lib/cache/cache.go | 2 +- lib/{cache => services}/simple/access_list.go | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename lib/{cache => services}/simple/access_list.go (100%) diff --git a/lib/cache/cache.go b/lib/cache/cache.go index 0adaaa5553cf6..72d574206fa68 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -43,12 +43,12 @@ import ( "github.com/gravitational/teleport/api/types/userloginstate" "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/backend" - "github.com/gravitational/teleport/lib/cache/simple" "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/observability/metrics" "github.com/gravitational/teleport/lib/observability/tracing" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/services/local" + "github.com/gravitational/teleport/lib/services/simple" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/teleport/lib/utils/interval" ) diff --git a/lib/cache/simple/access_list.go b/lib/services/simple/access_list.go similarity index 100% rename from lib/cache/simple/access_list.go rename to lib/services/simple/access_list.go From 3687e1cc98b7d95968de30426ed98d399220b137 Mon Sep 17 00:00:00 2001 From: Mike Wilson Date: Fri, 5 Jan 2024 09:00:12 -0500 Subject: [PATCH 3/3] Update to reflect new generic function signatures. --- lib/services/simple/access_list.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/services/simple/access_list.go b/lib/services/simple/access_list.go index 891d92b8a5303..a02d75330d068 100644 --- a/lib/services/simple/access_list.go +++ b/lib/services/simple/access_list.go @@ -117,7 +117,7 @@ func (a *AccessListService) GetAccessList(ctx context.Context, name string) (*ac // UpsertAccessList creates or updates an access list resource. func (a *AccessListService) UpsertAccessList(ctx context.Context, accessList *accesslist.AccessList) (*accesslist.AccessList, error) { - return accessList, a.service.UpsertResource(ctx, accessList) + return a.service.UpsertResource(ctx, accessList) } // DeleteAccessList removes the specified access list resource. @@ -156,7 +156,7 @@ func (a *AccessListService) GetAccessListMember(ctx context.Context, accessListN // UpsertAccessListMember creates or updates an access list member resource. func (a *AccessListService) UpsertAccessListMember(ctx context.Context, member *accesslist.AccessListMember) (*accesslist.AccessListMember, error) { - return member, trace.Wrap(a.memberService.WithPrefix(member.Spec.AccessList).UpsertResource(ctx, member)) + return a.memberService.WithPrefix(member.Spec.AccessList).UpsertResource(ctx, member) } // DeleteAccessListMember hard deletes the specified access list member resource. @@ -176,8 +176,9 @@ func (a *AccessListService) ListAccessListReviews(ctx context.Context, accessLis // CreateAccessListReview will create a new review for an access list. func (a *AccessListService) CreateAccessListReview(ctx context.Context, review *accesslist.Review) (*accesslist.Review, time.Time, error) { + review, err := a.reviewService.WithPrefix(review.Spec.AccessList).CreateResource(ctx, review) // Return a zero time here, as it will be ignored by the cache. - return review, time.Time{}, trace.Wrap(a.reviewService.WithPrefix(review.Spec.AccessList).CreateResource(ctx, review)) + return review, time.Time{}, trace.Wrap(err) } // DeleteAccessListReview will delete an access list review from the backend.