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..72d574206fa68 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -37,6 +37,7 @@ 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" @@ -47,6 +48,7 @@ import ( "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" ) @@ -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/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 { diff --git a/lib/services/simple/access_list.go b/lib/services/simple/access_list.go new file mode 100644 index 0000000000000..a02d75330d068 --- /dev/null +++ b/lib/services/simple/access_list.go @@ -0,0 +1,192 @@ +/* + * 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 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 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) { + 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(err) +} + +// 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)) +}