From 859012cb4cc66f277b5f6f9b0619ad446e4cad5d Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Fri, 23 Oct 2020 11:40:19 +0200 Subject: [PATCH 01/24] extend accounts.proto file with rebuild index definition --- accounts/pkg/command/rebuild_index.go | 15 +++++++++++++++ accounts/pkg/proto/v0/accounts.proto | 12 ++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 accounts/pkg/command/rebuild_index.go diff --git a/accounts/pkg/command/rebuild_index.go b/accounts/pkg/command/rebuild_index.go new file mode 100644 index 0000000000..230a969030 --- /dev/null +++ b/accounts/pkg/command/rebuild_index.go @@ -0,0 +1,15 @@ +package command + +import ( + "github.com/micro/cli/v2" + "github.com/owncloud/ocis/accounts/pkg/config" +) + +func DeleteIndex(cdf *config.Config) *cli.Command { + return &cli.Command{ + Name: "add", + Usage: "Create a new account", + Aliases: []string{"create", "a"}, + //Flags: flagset.AddAccountWithConfig(cfg, a), + } +} diff --git a/accounts/pkg/proto/v0/accounts.proto b/accounts/pkg/proto/v0/accounts.proto index cb26c1afde..5fd908d7b3 100644 --- a/accounts/pkg/proto/v0/accounts.proto +++ b/accounts/pkg/proto/v0/accounts.proto @@ -136,6 +136,18 @@ service GroupsService { } +service IndexService { + rpc RebuildIndex(RebuildIndexRequest) returns (RebuildIndexResponse); +} + +message RebuildIndexRequest { + +} + +message RebuildIndexResponse { + repeated string Indices = 1; +} + message ListAccountsRequest { // Optional. The maximum number of accounts to return in the response int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL]; From 4206071af6f698675048a5752d34e4c488df7b5d Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 11:54:07 +0200 Subject: [PATCH 02/24] First part of index reset --- accounts/pkg/indexer/indexer.go | 10 + accounts/pkg/proto/v0/accounts.pb.go | 2926 ++++++++++++------- accounts/pkg/proto/v0/accounts.pb.micro.go | 74 + accounts/pkg/proto/v0/accounts.pb.web.go | 114 + accounts/pkg/proto/v0/accounts.proto | 9 +- accounts/pkg/proto/v0/accounts.swagger.json | 193 +- accounts/pkg/server/grpc/server.go | 3 + accounts/pkg/service/v0/index.go | 15 + 8 files changed, 2340 insertions(+), 1004 deletions(-) create mode 100644 accounts/pkg/service/v0/index.go diff --git a/accounts/pkg/indexer/indexer.go b/accounts/pkg/indexer/indexer.go index 2731af4135..01426e585e 100644 --- a/accounts/pkg/indexer/indexer.go +++ b/accounts/pkg/indexer/indexer.go @@ -42,6 +42,16 @@ func getRegistryStrategy(cfg *config.Config) string { return "cs3" } +func (i Indexer) Reset() error { + for k := range i.indices { + delete(i.indices, k) + } + + // TODO: delete indexes from storage (cs3 / disk) + + return nil +} + // AddIndex adds a new index to the indexer receiver. func (i Indexer) AddIndex(t interface{}, indexBy, pkName, entityDirName, indexType string, bound *option.Bound, caseInsensitive bool) error { strategy := getRegistryStrategy(i.config) diff --git a/accounts/pkg/proto/v0/accounts.pb.go b/accounts/pkg/proto/v0/accounts.pb.go index a7991a4b7d..d71668f602 100644 --- a/accounts/pkg/proto/v0/accounts.pb.go +++ b/accounts/pkg/proto/v0/accounts.pb.go @@ -1,30 +1,124 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0-devel +// protoc v3.13.0 // source: accounts.proto package proto import ( - fmt "fmt" proto "github.com/golang/protobuf/proto" - _ "github.com/golang/protobuf/ptypes/empty" + empty "github.com/golang/protobuf/ptypes/empty" timestamp "github.com/golang/protobuf/ptypes/timestamp" _ "google.golang.org/genproto/googleapis/api/annotations" field_mask "google.golang.org/genproto/protobuf/field_mask" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type RebuildIndexRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RebuildIndexRequest) Reset() { + *x = RebuildIndexRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RebuildIndexRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RebuildIndexRequest) ProtoMessage() {} + +func (x *RebuildIndexRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RebuildIndexRequest.ProtoReflect.Descriptor instead. +func (*RebuildIndexRequest) Descriptor() ([]byte, []int) { + return file_accounts_proto_rawDescGZIP(), []int{0} +} + +type RebuildIndexResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Indices []string `protobuf:"bytes,1,rep,name=Indices,proto3" json:"Indices,omitempty"` +} + +func (x *RebuildIndexResponse) Reset() { + *x = RebuildIndexResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RebuildIndexResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RebuildIndexResponse) ProtoMessage() {} + +func (x *RebuildIndexResponse) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RebuildIndexResponse.ProtoReflect.Descriptor instead. +func (*RebuildIndexResponse) Descriptor() ([]byte, []int) { + return file_accounts_proto_rawDescGZIP(), []int{1} +} + +func (x *RebuildIndexResponse) GetIndices() []string { + if x != nil { + return x.Indices + } + return nil +} type ListAccountsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Optional. The maximum number of accounts to return in the response PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` // Optional. A pagination token returned from a previous call to `Get` @@ -53,281 +147,325 @@ type ListAccountsRequest struct { // `email` set to `foo@example.com` // * Query `display_name=\\"Test String\\"` returns accounts with // display names that include both "Test" and "String" - Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` } -func (m *ListAccountsRequest) Reset() { *m = ListAccountsRequest{} } -func (m *ListAccountsRequest) String() string { return proto.CompactTextString(m) } -func (*ListAccountsRequest) ProtoMessage() {} +func (x *ListAccountsRequest) Reset() { + *x = ListAccountsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAccountsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAccountsRequest) ProtoMessage() {} + +func (x *ListAccountsRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAccountsRequest.ProtoReflect.Descriptor instead. func (*ListAccountsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{0} + return file_accounts_proto_rawDescGZIP(), []int{2} } -func (m *ListAccountsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListAccountsRequest.Unmarshal(m, b) -} -func (m *ListAccountsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListAccountsRequest.Marshal(b, m, deterministic) -} -func (m *ListAccountsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListAccountsRequest.Merge(m, src) -} -func (m *ListAccountsRequest) XXX_Size() int { - return xxx_messageInfo_ListAccountsRequest.Size(m) -} -func (m *ListAccountsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListAccountsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ListAccountsRequest proto.InternalMessageInfo - -func (m *ListAccountsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize +func (x *ListAccountsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize } return 0 } -func (m *ListAccountsRequest) GetPageToken() string { - if m != nil { - return m.PageToken +func (x *ListAccountsRequest) GetPageToken() string { + if x != nil { + return x.PageToken } return "" } -func (m *ListAccountsRequest) GetFieldMask() *field_mask.FieldMask { - if m != nil { - return m.FieldMask +func (x *ListAccountsRequest) GetFieldMask() *field_mask.FieldMask { + if x != nil { + return x.FieldMask } return nil } -func (m *ListAccountsRequest) GetQuery() string { - if m != nil { - return m.Query +func (x *ListAccountsRequest) GetQuery() string { + if x != nil { + return x.Query } return "" } type ListAccountsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The field name should match the noun "accounts" in the method name. There // will be a maximum number of items returned based on the page_size field // in the request Accounts []*Account `protobuf:"bytes,1,rep,name=accounts,proto3" json:"accounts,omitempty"` // Token to retrieve the next page of results, or empty if there are no // more results in the list - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` } -func (m *ListAccountsResponse) Reset() { *m = ListAccountsResponse{} } -func (m *ListAccountsResponse) String() string { return proto.CompactTextString(m) } -func (*ListAccountsResponse) ProtoMessage() {} +func (x *ListAccountsResponse) Reset() { + *x = ListAccountsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListAccountsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListAccountsResponse) ProtoMessage() {} + +func (x *ListAccountsResponse) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListAccountsResponse.ProtoReflect.Descriptor instead. func (*ListAccountsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{1} + return file_accounts_proto_rawDescGZIP(), []int{3} } -func (m *ListAccountsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListAccountsResponse.Unmarshal(m, b) -} -func (m *ListAccountsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListAccountsResponse.Marshal(b, m, deterministic) -} -func (m *ListAccountsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListAccountsResponse.Merge(m, src) -} -func (m *ListAccountsResponse) XXX_Size() int { - return xxx_messageInfo_ListAccountsResponse.Size(m) -} -func (m *ListAccountsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListAccountsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ListAccountsResponse proto.InternalMessageInfo - -func (m *ListAccountsResponse) GetAccounts() []*Account { - if m != nil { - return m.Accounts +func (x *ListAccountsResponse) GetAccounts() []*Account { + if x != nil { + return x.Accounts } return nil } -func (m *ListAccountsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken +func (x *ListAccountsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken } return "" } type GetAccountRequest struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *GetAccountRequest) Reset() { *m = GetAccountRequest{} } -func (m *GetAccountRequest) String() string { return proto.CompactTextString(m) } -func (*GetAccountRequest) ProtoMessage() {} +func (x *GetAccountRequest) Reset() { + *x = GetAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAccountRequest) ProtoMessage() {} + +func (x *GetAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAccountRequest.ProtoReflect.Descriptor instead. func (*GetAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{2} + return file_accounts_proto_rawDescGZIP(), []int{4} } -func (m *GetAccountRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetAccountRequest.Unmarshal(m, b) -} -func (m *GetAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetAccountRequest.Marshal(b, m, deterministic) -} -func (m *GetAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetAccountRequest.Merge(m, src) -} -func (m *GetAccountRequest) XXX_Size() int { - return xxx_messageInfo_GetAccountRequest.Size(m) -} -func (m *GetAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetAccountRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GetAccountRequest proto.InternalMessageInfo - -func (m *GetAccountRequest) GetId() string { - if m != nil { - return m.Id +func (x *GetAccountRequest) GetId() string { + if x != nil { + return x.Id } return "" } type CreateAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The account resource to create - Account *Account `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Account *Account `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` } -func (m *CreateAccountRequest) Reset() { *m = CreateAccountRequest{} } -func (m *CreateAccountRequest) String() string { return proto.CompactTextString(m) } -func (*CreateAccountRequest) ProtoMessage() {} +func (x *CreateAccountRequest) Reset() { + *x = CreateAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateAccountRequest) ProtoMessage() {} + +func (x *CreateAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateAccountRequest.ProtoReflect.Descriptor instead. func (*CreateAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{3} + return file_accounts_proto_rawDescGZIP(), []int{5} } -func (m *CreateAccountRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateAccountRequest.Unmarshal(m, b) -} -func (m *CreateAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateAccountRequest.Marshal(b, m, deterministic) -} -func (m *CreateAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateAccountRequest.Merge(m, src) -} -func (m *CreateAccountRequest) XXX_Size() int { - return xxx_messageInfo_CreateAccountRequest.Size(m) -} -func (m *CreateAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateAccountRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_CreateAccountRequest proto.InternalMessageInfo - -func (m *CreateAccountRequest) GetAccount() *Account { - if m != nil { - return m.Account +func (x *CreateAccountRequest) GetAccount() *Account { + if x != nil { + return x.Account } return nil } type UpdateAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The account resource which replaces the resource on the server Account *Account `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` // The update mask applies to the resource. For the `FieldMask` definition, // see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } -func (m *UpdateAccountRequest) Reset() { *m = UpdateAccountRequest{} } -func (m *UpdateAccountRequest) String() string { return proto.CompactTextString(m) } -func (*UpdateAccountRequest) ProtoMessage() {} +func (x *UpdateAccountRequest) Reset() { + *x = UpdateAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateAccountRequest) ProtoMessage() {} + +func (x *UpdateAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateAccountRequest.ProtoReflect.Descriptor instead. func (*UpdateAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{4} + return file_accounts_proto_rawDescGZIP(), []int{6} } -func (m *UpdateAccountRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UpdateAccountRequest.Unmarshal(m, b) -} -func (m *UpdateAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UpdateAccountRequest.Marshal(b, m, deterministic) -} -func (m *UpdateAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateAccountRequest.Merge(m, src) -} -func (m *UpdateAccountRequest) XXX_Size() int { - return xxx_messageInfo_UpdateAccountRequest.Size(m) -} -func (m *UpdateAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateAccountRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_UpdateAccountRequest proto.InternalMessageInfo - -func (m *UpdateAccountRequest) GetAccount() *Account { - if m != nil { - return m.Account +func (x *UpdateAccountRequest) GetAccount() *Account { + if x != nil { + return x.Account } return nil } -func (m *UpdateAccountRequest) GetUpdateMask() *field_mask.FieldMask { - if m != nil { - return m.UpdateMask +func (x *UpdateAccountRequest) GetUpdateMask() *field_mask.FieldMask { + if x != nil { + return x.UpdateMask } return nil } type DeleteAccountRequest struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *DeleteAccountRequest) Reset() { *m = DeleteAccountRequest{} } -func (m *DeleteAccountRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteAccountRequest) ProtoMessage() {} +func (x *DeleteAccountRequest) Reset() { + *x = DeleteAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteAccountRequest) ProtoMessage() {} + +func (x *DeleteAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteAccountRequest.ProtoReflect.Descriptor instead. func (*DeleteAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{5} + return file_accounts_proto_rawDescGZIP(), []int{7} } -func (m *DeleteAccountRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteAccountRequest.Unmarshal(m, b) -} -func (m *DeleteAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteAccountRequest.Marshal(b, m, deterministic) -} -func (m *DeleteAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteAccountRequest.Merge(m, src) -} -func (m *DeleteAccountRequest) XXX_Size() int { - return xxx_messageInfo_DeleteAccountRequest.Size(m) -} -func (m *DeleteAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteAccountRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_DeleteAccountRequest proto.InternalMessageInfo - -func (m *DeleteAccountRequest) GetId() string { - if m != nil { - return m.Id +func (x *DeleteAccountRequest) GetId() string { + if x != nil { + return x.Id } return "" } @@ -335,6 +473,10 @@ func (m *DeleteAccountRequest) GetId() string { // Account follows the properties of the ms graph api user resuorce. // See https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties type Account struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The unique identifier for the user. Key. Not nullable. Non reassignable. Read-only. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // *true* if the account is enabled; otherwise, *false*. This property is required when a user is created. Supports $filter. @@ -432,228 +574,232 @@ type Account struct { // If this happens, the application will need to acquire a new refresh token by making a request to the authorize endpoint. // Read-only. Use revokeSignInSessions to reset. SignInSessionsValidFromDateTime *timestamp.Timestamp `protobuf:"bytes,61,opt,name=sign_in_sessions_valid_from_date_time,json=signInSessionsValidFromDateTime,proto3" json:"sign_in_sessions_valid_from_date_time,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` } -func (m *Account) Reset() { *m = Account{} } -func (m *Account) String() string { return proto.CompactTextString(m) } -func (*Account) ProtoMessage() {} +func (x *Account) Reset() { + *x = Account{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Account) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Account) ProtoMessage() {} + +func (x *Account) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Account.ProtoReflect.Descriptor instead. func (*Account) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{6} + return file_accounts_proto_rawDescGZIP(), []int{8} } -func (m *Account) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Account.Unmarshal(m, b) -} -func (m *Account) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Account.Marshal(b, m, deterministic) -} -func (m *Account) XXX_Merge(src proto.Message) { - xxx_messageInfo_Account.Merge(m, src) -} -func (m *Account) XXX_Size() int { - return xxx_messageInfo_Account.Size(m) -} -func (m *Account) XXX_DiscardUnknown() { - xxx_messageInfo_Account.DiscardUnknown(m) -} - -var xxx_messageInfo_Account proto.InternalMessageInfo - -func (m *Account) GetId() string { - if m != nil { - return m.Id +func (x *Account) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *Account) GetAccountEnabled() bool { - if m != nil { - return m.AccountEnabled +func (x *Account) GetAccountEnabled() bool { + if x != nil { + return x.AccountEnabled } return false } -func (m *Account) GetIsResourceAccount() bool { - if m != nil { - return m.IsResourceAccount +func (x *Account) GetIsResourceAccount() bool { + if x != nil { + return x.IsResourceAccount } return false } -func (m *Account) GetCreationType() string { - if m != nil { - return m.CreationType +func (x *Account) GetCreationType() string { + if x != nil { + return x.CreationType } return "" } -func (m *Account) GetIdentities() []*Identities { - if m != nil { - return m.Identities +func (x *Account) GetIdentities() []*Identities { + if x != nil { + return x.Identities } return nil } -func (m *Account) GetDisplayName() string { - if m != nil { - return m.DisplayName +func (x *Account) GetDisplayName() string { + if x != nil { + return x.DisplayName } return "" } -func (m *Account) GetPreferredName() string { - if m != nil { - return m.PreferredName +func (x *Account) GetPreferredName() string { + if x != nil { + return x.PreferredName } return "" } -func (m *Account) GetUidNumber() int64 { - if m != nil { - return m.UidNumber +func (x *Account) GetUidNumber() int64 { + if x != nil { + return x.UidNumber } return 0 } -func (m *Account) GetGidNumber() int64 { - if m != nil { - return m.GidNumber +func (x *Account) GetGidNumber() int64 { + if x != nil { + return x.GidNumber } return 0 } -func (m *Account) GetMail() string { - if m != nil { - return m.Mail +func (x *Account) GetMail() string { + if x != nil { + return x.Mail } return "" } -func (m *Account) GetDescription() string { - if m != nil { - return m.Description +func (x *Account) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Account) GetPasswordProfile() *PasswordProfile { - if m != nil { - return m.PasswordProfile +func (x *Account) GetPasswordProfile() *PasswordProfile { + if x != nil { + return x.PasswordProfile } return nil } -func (m *Account) GetMemberOf() []*Group { - if m != nil { - return m.MemberOf +func (x *Account) GetMemberOf() []*Group { + if x != nil { + return x.MemberOf } return nil } -func (m *Account) GetCreatedDateTime() *timestamp.Timestamp { - if m != nil { - return m.CreatedDateTime +func (x *Account) GetCreatedDateTime() *timestamp.Timestamp { + if x != nil { + return x.CreatedDateTime } return nil } -func (m *Account) GetDeletedDateTime() *timestamp.Timestamp { - if m != nil { - return m.DeletedDateTime +func (x *Account) GetDeletedDateTime() *timestamp.Timestamp { + if x != nil { + return x.DeletedDateTime } return nil } -func (m *Account) GetOnPremisesSyncEnabled() bool { - if m != nil { - return m.OnPremisesSyncEnabled +func (x *Account) GetOnPremisesSyncEnabled() bool { + if x != nil { + return x.OnPremisesSyncEnabled } return false } -func (m *Account) GetOnPremisesImmutableId() string { - if m != nil { - return m.OnPremisesImmutableId +func (x *Account) GetOnPremisesImmutableId() string { + if x != nil { + return x.OnPremisesImmutableId } return "" } -func (m *Account) GetOnPremisesSecurityIdentifier() string { - if m != nil { - return m.OnPremisesSecurityIdentifier +func (x *Account) GetOnPremisesSecurityIdentifier() string { + if x != nil { + return x.OnPremisesSecurityIdentifier } return "" } -func (m *Account) GetOnPremisesDistinguishedName() string { - if m != nil { - return m.OnPremisesDistinguishedName +func (x *Account) GetOnPremisesDistinguishedName() string { + if x != nil { + return x.OnPremisesDistinguishedName } return "" } -func (m *Account) GetOnPremisesSamAccountName() string { - if m != nil { - return m.OnPremisesSamAccountName +func (x *Account) GetOnPremisesSamAccountName() string { + if x != nil { + return x.OnPremisesSamAccountName } return "" } -func (m *Account) GetOnPremisesDomainName() string { - if m != nil { - return m.OnPremisesDomainName +func (x *Account) GetOnPremisesDomainName() string { + if x != nil { + return x.OnPremisesDomainName } return "" } -func (m *Account) GetOnPremisesUserPrincipalName() string { - if m != nil { - return m.OnPremisesUserPrincipalName +func (x *Account) GetOnPremisesUserPrincipalName() string { + if x != nil { + return x.OnPremisesUserPrincipalName } return "" } -func (m *Account) GetOnPremisesLastSyncDateTime() *timestamp.Timestamp { - if m != nil { - return m.OnPremisesLastSyncDateTime +func (x *Account) GetOnPremisesLastSyncDateTime() *timestamp.Timestamp { + if x != nil { + return x.OnPremisesLastSyncDateTime } return nil } -func (m *Account) GetOnPremisesProvisioningErrors() []*OnPremisesProvisioningError { - if m != nil { - return m.OnPremisesProvisioningErrors +func (x *Account) GetOnPremisesProvisioningErrors() []*OnPremisesProvisioningError { + if x != nil { + return x.OnPremisesProvisioningErrors } return nil } -func (m *Account) GetExternalUserState() string { - if m != nil { - return m.ExternalUserState +func (x *Account) GetExternalUserState() string { + if x != nil { + return x.ExternalUserState } return "" } -func (m *Account) GetExternalUserStateChangeDateTime() *timestamp.Timestamp { - if m != nil { - return m.ExternalUserStateChangeDateTime +func (x *Account) GetExternalUserStateChangeDateTime() *timestamp.Timestamp { + if x != nil { + return x.ExternalUserStateChangeDateTime } return nil } -func (m *Account) GetRefreshTokensValidFromDateTime() *timestamp.Timestamp { - if m != nil { - return m.RefreshTokensValidFromDateTime +func (x *Account) GetRefreshTokensValidFromDateTime() *timestamp.Timestamp { + if x != nil { + return x.RefreshTokensValidFromDateTime } return nil } -func (m *Account) GetSignInSessionsValidFromDateTime() *timestamp.Timestamp { - if m != nil { - return m.SignInSessionsValidFromDateTime +func (x *Account) GetSignInSessionsValidFromDateTime() *timestamp.Timestamp { + if x != nil { + return x.SignInSessionsValidFromDateTime } return nil } @@ -663,6 +809,10 @@ func (m *Account) GetSignInSessionsValidFromDateTime() *timestamp.Timestamp { // This enables the user to sign in to the user account with any of those associated identities. // They are also used to keep a history of old usernames. type Identities struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Specifies the user sign-in types in your directory, such as `emailAddress`, `userName` or `federated`. // Here, federated represents a unique identifier for a user from an issuer, that can be in any format chosen by the issuer. // Additional validation is enforced on *issuer_assigned_id* when the sign-in type is set to `emailAddress` or `userName`. @@ -680,59 +830,67 @@ type Identities struct { // * `emailAddress`, (or starts with `emailAddress` like `emailAddress1`) *issuerAssignedId* must be a valid email address // * `userName`, issuer_assigned_id must be a valid local part of an email address // Supports $filter. 512 character limit. - IssuerAssignedId string `protobuf:"bytes,3,opt,name=issuer_assigned_id,json=issuerAssignedId,proto3" json:"issuer_assigned_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + IssuerAssignedId string `protobuf:"bytes,3,opt,name=issuer_assigned_id,json=issuerAssignedId,proto3" json:"issuer_assigned_id,omitempty"` } -func (m *Identities) Reset() { *m = Identities{} } -func (m *Identities) String() string { return proto.CompactTextString(m) } -func (*Identities) ProtoMessage() {} +func (x *Identities) Reset() { + *x = Identities{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Identities) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Identities) ProtoMessage() {} + +func (x *Identities) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Identities.ProtoReflect.Descriptor instead. func (*Identities) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{7} + return file_accounts_proto_rawDescGZIP(), []int{9} } -func (m *Identities) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Identities.Unmarshal(m, b) -} -func (m *Identities) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Identities.Marshal(b, m, deterministic) -} -func (m *Identities) XXX_Merge(src proto.Message) { - xxx_messageInfo_Identities.Merge(m, src) -} -func (m *Identities) XXX_Size() int { - return xxx_messageInfo_Identities.Size(m) -} -func (m *Identities) XXX_DiscardUnknown() { - xxx_messageInfo_Identities.DiscardUnknown(m) -} - -var xxx_messageInfo_Identities proto.InternalMessageInfo - -func (m *Identities) GetSignInType() string { - if m != nil { - return m.SignInType +func (x *Identities) GetSignInType() string { + if x != nil { + return x.SignInType } return "" } -func (m *Identities) GetIssuer() string { - if m != nil { - return m.Issuer +func (x *Identities) GetIssuer() string { + if x != nil { + return x.Issuer } return "" } -func (m *Identities) GetIssuerAssignedId() string { - if m != nil { - return m.IssuerAssignedId +func (x *Identities) GetIssuerAssignedId() string { + if x != nil { + return x.IssuerAssignedId } return "" } type PasswordProfile struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The password for the user. This property is required when a user is created. // It can be updated, but the user will be required to change the password on the next login. // The password must satisfy minimum requirements as specified by the user’s passwordPolicies property. By default, a strong password is required. @@ -746,73 +904,81 @@ type PasswordProfile struct { // *true* if the user must change her password on the next login; otherwise false. ForceChangePasswordNextSignIn bool `protobuf:"varint,4,opt,name=force_change_password_next_sign_in,json=forceChangePasswordNextSignIn,proto3" json:"force_change_password_next_sign_in,omitempty"` // If *true*, at next sign-in, the user must perform a multi-factor authentication (MFA) before being forced to change their password. The behavior is identical to forceChangePasswordNextSignIn except that the user is required to first perform a multi-factor authentication before password change. After a password change, this property will be automatically reset to false. If not set, default is false. - ForceChangePasswordNextSignInWithMfa bool `protobuf:"varint,5,opt,name=force_change_password_next_sign_in_with_mfa,json=forceChangePasswordNextSignInWithMfa,proto3" json:"force_change_password_next_sign_in_with_mfa,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + ForceChangePasswordNextSignInWithMfa bool `protobuf:"varint,5,opt,name=force_change_password_next_sign_in_with_mfa,json=forceChangePasswordNextSignInWithMfa,proto3" json:"force_change_password_next_sign_in_with_mfa,omitempty"` } -func (m *PasswordProfile) Reset() { *m = PasswordProfile{} } -func (m *PasswordProfile) String() string { return proto.CompactTextString(m) } -func (*PasswordProfile) ProtoMessage() {} +func (x *PasswordProfile) Reset() { + *x = PasswordProfile{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PasswordProfile) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PasswordProfile) ProtoMessage() {} + +func (x *PasswordProfile) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PasswordProfile.ProtoReflect.Descriptor instead. func (*PasswordProfile) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{8} + return file_accounts_proto_rawDescGZIP(), []int{10} } -func (m *PasswordProfile) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PasswordProfile.Unmarshal(m, b) -} -func (m *PasswordProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PasswordProfile.Marshal(b, m, deterministic) -} -func (m *PasswordProfile) XXX_Merge(src proto.Message) { - xxx_messageInfo_PasswordProfile.Merge(m, src) -} -func (m *PasswordProfile) XXX_Size() int { - return xxx_messageInfo_PasswordProfile.Size(m) -} -func (m *PasswordProfile) XXX_DiscardUnknown() { - xxx_messageInfo_PasswordProfile.DiscardUnknown(m) -} - -var xxx_messageInfo_PasswordProfile proto.InternalMessageInfo - -func (m *PasswordProfile) GetPassword() string { - if m != nil { - return m.Password +func (x *PasswordProfile) GetPassword() string { + if x != nil { + return x.Password } return "" } -func (m *PasswordProfile) GetLastPasswordChangeDateTime() *timestamp.Timestamp { - if m != nil { - return m.LastPasswordChangeDateTime +func (x *PasswordProfile) GetLastPasswordChangeDateTime() *timestamp.Timestamp { + if x != nil { + return x.LastPasswordChangeDateTime } return nil } -func (m *PasswordProfile) GetPasswordPolicies() []string { - if m != nil { - return m.PasswordPolicies +func (x *PasswordProfile) GetPasswordPolicies() []string { + if x != nil { + return x.PasswordPolicies } return nil } -func (m *PasswordProfile) GetForceChangePasswordNextSignIn() bool { - if m != nil { - return m.ForceChangePasswordNextSignIn +func (x *PasswordProfile) GetForceChangePasswordNextSignIn() bool { + if x != nil { + return x.ForceChangePasswordNextSignIn } return false } -func (m *PasswordProfile) GetForceChangePasswordNextSignInWithMfa() bool { - if m != nil { - return m.ForceChangePasswordNextSignInWithMfa +func (x *PasswordProfile) GetForceChangePasswordNextSignInWithMfa() bool { + if x != nil { + return x.ForceChangePasswordNextSignInWithMfa } return false } type ListGroupsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Optional. The maximum number of groups to return in the response PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` // Optional. A pagination token returned from a previous call to `Get` @@ -839,384 +1005,448 @@ type ListGroupsRequest struct { // starts with "Th" // * Query `display_name=\\"Test String\\"` returns groups with // display names that include both "Test" and "String" - Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` } -func (m *ListGroupsRequest) Reset() { *m = ListGroupsRequest{} } -func (m *ListGroupsRequest) String() string { return proto.CompactTextString(m) } -func (*ListGroupsRequest) ProtoMessage() {} +func (x *ListGroupsRequest) Reset() { + *x = ListGroupsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListGroupsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListGroupsRequest) ProtoMessage() {} + +func (x *ListGroupsRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListGroupsRequest.ProtoReflect.Descriptor instead. func (*ListGroupsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{9} + return file_accounts_proto_rawDescGZIP(), []int{11} } -func (m *ListGroupsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListGroupsRequest.Unmarshal(m, b) -} -func (m *ListGroupsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListGroupsRequest.Marshal(b, m, deterministic) -} -func (m *ListGroupsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListGroupsRequest.Merge(m, src) -} -func (m *ListGroupsRequest) XXX_Size() int { - return xxx_messageInfo_ListGroupsRequest.Size(m) -} -func (m *ListGroupsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListGroupsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ListGroupsRequest proto.InternalMessageInfo - -func (m *ListGroupsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize +func (x *ListGroupsRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize } return 0 } -func (m *ListGroupsRequest) GetPageToken() string { - if m != nil { - return m.PageToken +func (x *ListGroupsRequest) GetPageToken() string { + if x != nil { + return x.PageToken } return "" } -func (m *ListGroupsRequest) GetFieldMask() *field_mask.FieldMask { - if m != nil { - return m.FieldMask +func (x *ListGroupsRequest) GetFieldMask() *field_mask.FieldMask { + if x != nil { + return x.FieldMask } return nil } -func (m *ListGroupsRequest) GetQuery() string { - if m != nil { - return m.Query +func (x *ListGroupsRequest) GetQuery() string { + if x != nil { + return x.Query } return "" } type ListGroupsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The field name should match the noun "group" in the method name. There // will be a maximum number of items returned based on the page_size field // in the request Groups []*Group `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"` // Token to retrieve the next page of results, or empty if there are no // more results in the list - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` } -func (m *ListGroupsResponse) Reset() { *m = ListGroupsResponse{} } -func (m *ListGroupsResponse) String() string { return proto.CompactTextString(m) } -func (*ListGroupsResponse) ProtoMessage() {} +func (x *ListGroupsResponse) Reset() { + *x = ListGroupsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListGroupsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListGroupsResponse) ProtoMessage() {} + +func (x *ListGroupsResponse) ProtoReflect() protoreflect.Message { + mi := &file_accounts_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 ListGroupsResponse.ProtoReflect.Descriptor instead. func (*ListGroupsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{10} + return file_accounts_proto_rawDescGZIP(), []int{12} } -func (m *ListGroupsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListGroupsResponse.Unmarshal(m, b) -} -func (m *ListGroupsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListGroupsResponse.Marshal(b, m, deterministic) -} -func (m *ListGroupsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListGroupsResponse.Merge(m, src) -} -func (m *ListGroupsResponse) XXX_Size() int { - return xxx_messageInfo_ListGroupsResponse.Size(m) -} -func (m *ListGroupsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListGroupsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ListGroupsResponse proto.InternalMessageInfo - -func (m *ListGroupsResponse) GetGroups() []*Group { - if m != nil { - return m.Groups +func (x *ListGroupsResponse) GetGroups() []*Group { + if x != nil { + return x.Groups } return nil } -func (m *ListGroupsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken +func (x *ListGroupsResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken } return "" } type GetGroupRequest struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *GetGroupRequest) Reset() { *m = GetGroupRequest{} } -func (m *GetGroupRequest) String() string { return proto.CompactTextString(m) } -func (*GetGroupRequest) ProtoMessage() {} +func (x *GetGroupRequest) Reset() { + *x = GetGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGroupRequest) ProtoMessage() {} + +func (x *GetGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_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 GetGroupRequest.ProtoReflect.Descriptor instead. func (*GetGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{11} + return file_accounts_proto_rawDescGZIP(), []int{13} } -func (m *GetGroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetGroupRequest.Unmarshal(m, b) -} -func (m *GetGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetGroupRequest.Marshal(b, m, deterministic) -} -func (m *GetGroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetGroupRequest.Merge(m, src) -} -func (m *GetGroupRequest) XXX_Size() int { - return xxx_messageInfo_GetGroupRequest.Size(m) -} -func (m *GetGroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetGroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GetGroupRequest proto.InternalMessageInfo - -func (m *GetGroupRequest) GetId() string { - if m != nil { - return m.Id +func (x *GetGroupRequest) GetId() string { + if x != nil { + return x.Id } return "" } type CreateGroupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The account resource to create - Group *Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Group *Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` } -func (m *CreateGroupRequest) Reset() { *m = CreateGroupRequest{} } -func (m *CreateGroupRequest) String() string { return proto.CompactTextString(m) } -func (*CreateGroupRequest) ProtoMessage() {} +func (x *CreateGroupRequest) Reset() { + *x = CreateGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateGroupRequest) ProtoMessage() {} + +func (x *CreateGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateGroupRequest.ProtoReflect.Descriptor instead. func (*CreateGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{12} + return file_accounts_proto_rawDescGZIP(), []int{14} } -func (m *CreateGroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateGroupRequest.Unmarshal(m, b) -} -func (m *CreateGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateGroupRequest.Marshal(b, m, deterministic) -} -func (m *CreateGroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateGroupRequest.Merge(m, src) -} -func (m *CreateGroupRequest) XXX_Size() int { - return xxx_messageInfo_CreateGroupRequest.Size(m) -} -func (m *CreateGroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateGroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_CreateGroupRequest proto.InternalMessageInfo - -func (m *CreateGroupRequest) GetGroup() *Group { - if m != nil { - return m.Group +func (x *CreateGroupRequest) GetGroup() *Group { + if x != nil { + return x.Group } return nil } type UpdateGroupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The group resource which replaces the resource on the server Group *Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` // The update mask applies to the resource. For the `FieldMask` definition, // see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` } -func (m *UpdateGroupRequest) Reset() { *m = UpdateGroupRequest{} } -func (m *UpdateGroupRequest) String() string { return proto.CompactTextString(m) } -func (*UpdateGroupRequest) ProtoMessage() {} +func (x *UpdateGroupRequest) Reset() { + *x = UpdateGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateGroupRequest) ProtoMessage() {} + +func (x *UpdateGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateGroupRequest.ProtoReflect.Descriptor instead. func (*UpdateGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{13} + return file_accounts_proto_rawDescGZIP(), []int{15} } -func (m *UpdateGroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UpdateGroupRequest.Unmarshal(m, b) -} -func (m *UpdateGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UpdateGroupRequest.Marshal(b, m, deterministic) -} -func (m *UpdateGroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateGroupRequest.Merge(m, src) -} -func (m *UpdateGroupRequest) XXX_Size() int { - return xxx_messageInfo_UpdateGroupRequest.Size(m) -} -func (m *UpdateGroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateGroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_UpdateGroupRequest proto.InternalMessageInfo - -func (m *UpdateGroupRequest) GetGroup() *Group { - if m != nil { - return m.Group +func (x *UpdateGroupRequest) GetGroup() *Group { + if x != nil { + return x.Group } return nil } -func (m *UpdateGroupRequest) GetUpdateMask() *field_mask.FieldMask { - if m != nil { - return m.UpdateMask +func (x *UpdateGroupRequest) GetUpdateMask() *field_mask.FieldMask { + if x != nil { + return x.UpdateMask } return nil } type DeleteGroupRequest struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } -func (m *DeleteGroupRequest) Reset() { *m = DeleteGroupRequest{} } -func (m *DeleteGroupRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteGroupRequest) ProtoMessage() {} +func (x *DeleteGroupRequest) Reset() { + *x = DeleteGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteGroupRequest) ProtoMessage() {} + +func (x *DeleteGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteGroupRequest.ProtoReflect.Descriptor instead. func (*DeleteGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{14} + return file_accounts_proto_rawDescGZIP(), []int{16} } -func (m *DeleteGroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteGroupRequest.Unmarshal(m, b) -} -func (m *DeleteGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteGroupRequest.Marshal(b, m, deterministic) -} -func (m *DeleteGroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteGroupRequest.Merge(m, src) -} -func (m *DeleteGroupRequest) XXX_Size() int { - return xxx_messageInfo_DeleteGroupRequest.Size(m) -} -func (m *DeleteGroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteGroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_DeleteGroupRequest proto.InternalMessageInfo - -func (m *DeleteGroupRequest) GetId() string { - if m != nil { - return m.Id +func (x *DeleteGroupRequest) GetId() string { + if x != nil { + return x.Id } return "" } type AddMemberRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The id of the group to add a member to GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // The account id to add - AccountId string `protobuf:"bytes,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + AccountId string `protobuf:"bytes,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` } -func (m *AddMemberRequest) Reset() { *m = AddMemberRequest{} } -func (m *AddMemberRequest) String() string { return proto.CompactTextString(m) } -func (*AddMemberRequest) ProtoMessage() {} +func (x *AddMemberRequest) Reset() { + *x = AddMemberRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddMemberRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddMemberRequest) ProtoMessage() {} + +func (x *AddMemberRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddMemberRequest.ProtoReflect.Descriptor instead. func (*AddMemberRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{15} + return file_accounts_proto_rawDescGZIP(), []int{17} } -func (m *AddMemberRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_AddMemberRequest.Unmarshal(m, b) -} -func (m *AddMemberRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_AddMemberRequest.Marshal(b, m, deterministic) -} -func (m *AddMemberRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_AddMemberRequest.Merge(m, src) -} -func (m *AddMemberRequest) XXX_Size() int { - return xxx_messageInfo_AddMemberRequest.Size(m) -} -func (m *AddMemberRequest) XXX_DiscardUnknown() { - xxx_messageInfo_AddMemberRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_AddMemberRequest proto.InternalMessageInfo - -func (m *AddMemberRequest) GetGroupId() string { - if m != nil { - return m.GroupId +func (x *AddMemberRequest) GetGroupId() string { + if x != nil { + return x.GroupId } return "" } -func (m *AddMemberRequest) GetAccountId() string { - if m != nil { - return m.AccountId +func (x *AddMemberRequest) GetAccountId() string { + if x != nil { + return x.AccountId } return "" } type RemoveMemberRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The id of the group to remove a member from GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` // The account id to remove - AccountId string `protobuf:"bytes,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + AccountId string `protobuf:"bytes,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` } -func (m *RemoveMemberRequest) Reset() { *m = RemoveMemberRequest{} } -func (m *RemoveMemberRequest) String() string { return proto.CompactTextString(m) } -func (*RemoveMemberRequest) ProtoMessage() {} +func (x *RemoveMemberRequest) Reset() { + *x = RemoveMemberRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RemoveMemberRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveMemberRequest) ProtoMessage() {} + +func (x *RemoveMemberRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RemoveMemberRequest.ProtoReflect.Descriptor instead. func (*RemoveMemberRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{16} + return file_accounts_proto_rawDescGZIP(), []int{18} } -func (m *RemoveMemberRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RemoveMemberRequest.Unmarshal(m, b) -} -func (m *RemoveMemberRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RemoveMemberRequest.Marshal(b, m, deterministic) -} -func (m *RemoveMemberRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveMemberRequest.Merge(m, src) -} -func (m *RemoveMemberRequest) XXX_Size() int { - return xxx_messageInfo_RemoveMemberRequest.Size(m) -} -func (m *RemoveMemberRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveMemberRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_RemoveMemberRequest proto.InternalMessageInfo - -func (m *RemoveMemberRequest) GetGroupId() string { - if m != nil { - return m.GroupId +func (x *RemoveMemberRequest) GetGroupId() string { + if x != nil { + return x.GroupId } return "" } -func (m *RemoveMemberRequest) GetAccountId() string { - if m != nil { - return m.AccountId +func (x *RemoveMemberRequest) GetAccountId() string { + if x != nil { + return x.AccountId } return "" } type ListMembersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` // Optional. A pagination token returned from a previous call to `Get` // that indicates from where search should continue @@ -1244,132 +1474,148 @@ type ListMembersRequest struct { // display names that include both "Test" and "String" Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` // The id of the group to list members from - Id string `protobuf:"bytes,5,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Id string `protobuf:"bytes,5,opt,name=id,proto3" json:"id,omitempty"` } -func (m *ListMembersRequest) Reset() { *m = ListMembersRequest{} } -func (m *ListMembersRequest) String() string { return proto.CompactTextString(m) } -func (*ListMembersRequest) ProtoMessage() {} +func (x *ListMembersRequest) Reset() { + *x = ListMembersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListMembersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListMembersRequest) ProtoMessage() {} + +func (x *ListMembersRequest) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListMembersRequest.ProtoReflect.Descriptor instead. func (*ListMembersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{17} + return file_accounts_proto_rawDescGZIP(), []int{19} } -func (m *ListMembersRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListMembersRequest.Unmarshal(m, b) -} -func (m *ListMembersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListMembersRequest.Marshal(b, m, deterministic) -} -func (m *ListMembersRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListMembersRequest.Merge(m, src) -} -func (m *ListMembersRequest) XXX_Size() int { - return xxx_messageInfo_ListMembersRequest.Size(m) -} -func (m *ListMembersRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListMembersRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ListMembersRequest proto.InternalMessageInfo - -func (m *ListMembersRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize +func (x *ListMembersRequest) GetPageSize() int32 { + if x != nil { + return x.PageSize } return 0 } -func (m *ListMembersRequest) GetPageToken() string { - if m != nil { - return m.PageToken +func (x *ListMembersRequest) GetPageToken() string { + if x != nil { + return x.PageToken } return "" } -func (m *ListMembersRequest) GetFieldMask() *field_mask.FieldMask { - if m != nil { - return m.FieldMask +func (x *ListMembersRequest) GetFieldMask() *field_mask.FieldMask { + if x != nil { + return x.FieldMask } return nil } -func (m *ListMembersRequest) GetQuery() string { - if m != nil { - return m.Query +func (x *ListMembersRequest) GetQuery() string { + if x != nil { + return x.Query } return "" } -func (m *ListMembersRequest) GetId() string { - if m != nil { - return m.Id +func (x *ListMembersRequest) GetId() string { + if x != nil { + return x.Id } return "" } type ListMembersResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The field name should match the noun "members" in the method name. There // will be a maximum number of items returned based on the page_size field // in the request Members []*Account `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` // Token to retrieve the next page of results, or empty if there are no // more results in the list - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` } -func (m *ListMembersResponse) Reset() { *m = ListMembersResponse{} } -func (m *ListMembersResponse) String() string { return proto.CompactTextString(m) } -func (*ListMembersResponse) ProtoMessage() {} +func (x *ListMembersResponse) Reset() { + *x = ListMembersResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListMembersResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListMembersResponse) ProtoMessage() {} + +func (x *ListMembersResponse) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListMembersResponse.ProtoReflect.Descriptor instead. func (*ListMembersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{18} + return file_accounts_proto_rawDescGZIP(), []int{20} } -func (m *ListMembersResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListMembersResponse.Unmarshal(m, b) -} -func (m *ListMembersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListMembersResponse.Marshal(b, m, deterministic) -} -func (m *ListMembersResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListMembersResponse.Merge(m, src) -} -func (m *ListMembersResponse) XXX_Size() int { - return xxx_messageInfo_ListMembersResponse.Size(m) -} -func (m *ListMembersResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListMembersResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ListMembersResponse proto.InternalMessageInfo - -func (m *ListMembersResponse) GetMembers() []*Account { - if m != nil { - return m.Members +func (x *ListMembersResponse) GetMembers() []*Account { + if x != nil { + return x.Members } return nil } -func (m *ListMembersResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken +func (x *ListMembersResponse) GetNextPageToken() string { + if x != nil { + return x.NextPageToken } return "" } type Group struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // The unique identifier for the group. // Returned by default. Inherited from directoryObject. Key. Not nullable. Read-only. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // The display name for the group. This property is required when a group is created and cannot be cleared during updates. // Returned by default. Supports $filter and $orderby. // groupofnames MUST cn - DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` // groupofnames MUST/MAY member // Users, contacts, and groups that are members of this group. HTTP Methods: GET (supported for all groups), POST (supported for security groups and mail-enabled security groups), DELETE (supported only for security groups) Read-only. Nullable. // TODO accounts (users) only for now, we can add groups with the dedicated message using oneof construct later Members []*Account `protobuf:"bytes,3,rep,name=members,proto3" json:"members,omitempty"` @@ -1429,177 +1675,185 @@ type Group struct { OnPremisesLastSyncDateTime string `protobuf:"bytes,27,opt,name=on_premises_last_sync_date_time,json=onPremisesLastSyncDateTime,proto3" json:"on_premises_last_sync_date_time,omitempty"` // Errors when using synchronization during provisioning. OnPremisesProvisioningErrors []*OnPremisesProvisioningError `protobuf:"bytes,28,rep,name=on_premises_provisioning_errors,json=onPremisesProvisioningErrors,proto3" json:"on_premises_provisioning_errors,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` } -func (m *Group) Reset() { *m = Group{} } -func (m *Group) String() string { return proto.CompactTextString(m) } -func (*Group) ProtoMessage() {} +func (x *Group) Reset() { + *x = Group{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Group) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Group) ProtoMessage() {} + +func (x *Group) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Group.ProtoReflect.Descriptor instead. func (*Group) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{19} + return file_accounts_proto_rawDescGZIP(), []int{21} } -func (m *Group) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Group.Unmarshal(m, b) -} -func (m *Group) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Group.Marshal(b, m, deterministic) -} -func (m *Group) XXX_Merge(src proto.Message) { - xxx_messageInfo_Group.Merge(m, src) -} -func (m *Group) XXX_Size() int { - return xxx_messageInfo_Group.Size(m) -} -func (m *Group) XXX_DiscardUnknown() { - xxx_messageInfo_Group.DiscardUnknown(m) -} - -var xxx_messageInfo_Group proto.InternalMessageInfo - -func (m *Group) GetId() string { - if m != nil { - return m.Id +func (x *Group) GetId() string { + if x != nil { + return x.Id } return "" } -func (m *Group) GetDisplayName() string { - if m != nil { - return m.DisplayName +func (x *Group) GetDisplayName() string { + if x != nil { + return x.DisplayName } return "" } -func (m *Group) GetMembers() []*Account { - if m != nil { - return m.Members +func (x *Group) GetMembers() []*Account { + if x != nil { + return x.Members } return nil } -func (m *Group) GetOwners() []*Account { - if m != nil { - return m.Owners +func (x *Group) GetOwners() []*Account { + if x != nil { + return x.Owners } return nil } -func (m *Group) GetDescription() string { - if m != nil { - return m.Description +func (x *Group) GetDescription() string { + if x != nil { + return x.Description } return "" } -func (m *Group) GetGidNumber() int64 { - if m != nil { - return m.GidNumber +func (x *Group) GetGidNumber() int64 { + if x != nil { + return x.GidNumber } return 0 } -func (m *Group) GetCreatedDateTime() *timestamp.Timestamp { - if m != nil { - return m.CreatedDateTime +func (x *Group) GetCreatedDateTime() *timestamp.Timestamp { + if x != nil { + return x.CreatedDateTime } return nil } -func (m *Group) GetDeletedDateTime() *timestamp.Timestamp { - if m != nil { - return m.DeletedDateTime +func (x *Group) GetDeletedDateTime() *timestamp.Timestamp { + if x != nil { + return x.DeletedDateTime } return nil } -func (m *Group) GetExpirationDateTime() *timestamp.Timestamp { - if m != nil { - return m.ExpirationDateTime +func (x *Group) GetExpirationDateTime() *timestamp.Timestamp { + if x != nil { + return x.ExpirationDateTime } return nil } -func (m *Group) GetHideFromAddressLists() bool { - if m != nil { - return m.HideFromAddressLists +func (x *Group) GetHideFromAddressLists() bool { + if x != nil { + return x.HideFromAddressLists } return false } -func (m *Group) GetVisibility() string { - if m != nil { - return m.Visibility +func (x *Group) GetVisibility() string { + if x != nil { + return x.Visibility } return "" } -func (m *Group) GetOnPremisesSyncEnabled() bool { - if m != nil { - return m.OnPremisesSyncEnabled +func (x *Group) GetOnPremisesSyncEnabled() bool { + if x != nil { + return x.OnPremisesSyncEnabled } return false } -func (m *Group) GetOnPremisesImmutableId() string { - if m != nil { - return m.OnPremisesImmutableId +func (x *Group) GetOnPremisesImmutableId() string { + if x != nil { + return x.OnPremisesImmutableId } return "" } -func (m *Group) GetOnPremisesSecurityIdentifier() string { - if m != nil { - return m.OnPremisesSecurityIdentifier +func (x *Group) GetOnPremisesSecurityIdentifier() string { + if x != nil { + return x.OnPremisesSecurityIdentifier } return "" } -func (m *Group) GetOnPremisesDistinguishedName() string { - if m != nil { - return m.OnPremisesDistinguishedName +func (x *Group) GetOnPremisesDistinguishedName() string { + if x != nil { + return x.OnPremisesDistinguishedName } return "" } -func (m *Group) GetOnPremisesSamAccountName() string { - if m != nil { - return m.OnPremisesSamAccountName +func (x *Group) GetOnPremisesSamAccountName() string { + if x != nil { + return x.OnPremisesSamAccountName } return "" } -func (m *Group) GetOnPremisesDomainName() string { - if m != nil { - return m.OnPremisesDomainName +func (x *Group) GetOnPremisesDomainName() string { + if x != nil { + return x.OnPremisesDomainName } return "" } -func (m *Group) GetOnPremisesNetBiosName() string { - if m != nil { - return m.OnPremisesNetBiosName +func (x *Group) GetOnPremisesNetBiosName() string { + if x != nil { + return x.OnPremisesNetBiosName } return "" } -func (m *Group) GetOnPremisesLastSyncDateTime() string { - if m != nil { - return m.OnPremisesLastSyncDateTime +func (x *Group) GetOnPremisesLastSyncDateTime() string { + if x != nil { + return x.OnPremisesLastSyncDateTime } return "" } -func (m *Group) GetOnPremisesProvisioningErrors() []*OnPremisesProvisioningError { - if m != nil { - return m.OnPremisesProvisioningErrors +func (x *Group) GetOnPremisesProvisioningErrors() []*OnPremisesProvisioningError { + if x != nil { + return x.OnPremisesProvisioningErrors } return nil } type OnPremisesProvisioningError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // Category of the provisioning error. Note: Currently, there is only one possible value. Possible value: PropertyConflict - indicates a property value is not unique. Other objects contain the same value for the property. Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` // The date and time at which the error occurred. @@ -1607,215 +1861,917 @@ type OnPremisesProvisioningError struct { // Name of the directory property causing the error. Current possible values: UserPrincipalName or ProxyAddress PropertyCausingError string `protobuf:"bytes,3,opt,name=property_causing_error,json=propertyCausingError,proto3" json:"property_causing_error,omitempty"` // Value of the property causing the error. - Value string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Value string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` } -func (m *OnPremisesProvisioningError) Reset() { *m = OnPremisesProvisioningError{} } -func (m *OnPremisesProvisioningError) String() string { return proto.CompactTextString(m) } -func (*OnPremisesProvisioningError) ProtoMessage() {} +func (x *OnPremisesProvisioningError) Reset() { + *x = OnPremisesProvisioningError{} + if protoimpl.UnsafeEnabled { + mi := &file_accounts_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OnPremisesProvisioningError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OnPremisesProvisioningError) ProtoMessage() {} + +func (x *OnPremisesProvisioningError) ProtoReflect() protoreflect.Message { + mi := &file_accounts_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OnPremisesProvisioningError.ProtoReflect.Descriptor instead. func (*OnPremisesProvisioningError) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{20} + return file_accounts_proto_rawDescGZIP(), []int{22} } -func (m *OnPremisesProvisioningError) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OnPremisesProvisioningError.Unmarshal(m, b) -} -func (m *OnPremisesProvisioningError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OnPremisesProvisioningError.Marshal(b, m, deterministic) -} -func (m *OnPremisesProvisioningError) XXX_Merge(src proto.Message) { - xxx_messageInfo_OnPremisesProvisioningError.Merge(m, src) -} -func (m *OnPremisesProvisioningError) XXX_Size() int { - return xxx_messageInfo_OnPremisesProvisioningError.Size(m) -} -func (m *OnPremisesProvisioningError) XXX_DiscardUnknown() { - xxx_messageInfo_OnPremisesProvisioningError.DiscardUnknown(m) -} - -var xxx_messageInfo_OnPremisesProvisioningError proto.InternalMessageInfo - -func (m *OnPremisesProvisioningError) GetCategory() string { - if m != nil { - return m.Category +func (x *OnPremisesProvisioningError) GetCategory() string { + if x != nil { + return x.Category } return "" } -func (m *OnPremisesProvisioningError) GetOccurredDateTime() *timestamp.Timestamp { - if m != nil { - return m.OccurredDateTime +func (x *OnPremisesProvisioningError) GetOccurredDateTime() *timestamp.Timestamp { + if x != nil { + return x.OccurredDateTime } return nil } -func (m *OnPremisesProvisioningError) GetPropertyCausingError() string { - if m != nil { - return m.PropertyCausingError +func (x *OnPremisesProvisioningError) GetPropertyCausingError() string { + if x != nil { + return x.PropertyCausingError } return "" } -func (m *OnPremisesProvisioningError) GetValue() string { - if m != nil { - return m.Value +func (x *OnPremisesProvisioningError) GetValue() string { + if x != nil { + return x.Value } return "" } -func init() { - proto.RegisterType((*ListAccountsRequest)(nil), "settings.ListAccountsRequest") - proto.RegisterType((*ListAccountsResponse)(nil), "settings.ListAccountsResponse") - proto.RegisterType((*GetAccountRequest)(nil), "settings.GetAccountRequest") - proto.RegisterType((*CreateAccountRequest)(nil), "settings.CreateAccountRequest") - proto.RegisterType((*UpdateAccountRequest)(nil), "settings.UpdateAccountRequest") - proto.RegisterType((*DeleteAccountRequest)(nil), "settings.DeleteAccountRequest") - proto.RegisterType((*Account)(nil), "settings.Account") - proto.RegisterType((*Identities)(nil), "settings.Identities") - proto.RegisterType((*PasswordProfile)(nil), "settings.PasswordProfile") - proto.RegisterType((*ListGroupsRequest)(nil), "settings.ListGroupsRequest") - proto.RegisterType((*ListGroupsResponse)(nil), "settings.ListGroupsResponse") - proto.RegisterType((*GetGroupRequest)(nil), "settings.GetGroupRequest") - proto.RegisterType((*CreateGroupRequest)(nil), "settings.CreateGroupRequest") - proto.RegisterType((*UpdateGroupRequest)(nil), "settings.UpdateGroupRequest") - proto.RegisterType((*DeleteGroupRequest)(nil), "settings.DeleteGroupRequest") - proto.RegisterType((*AddMemberRequest)(nil), "settings.AddMemberRequest") - proto.RegisterType((*RemoveMemberRequest)(nil), "settings.RemoveMemberRequest") - proto.RegisterType((*ListMembersRequest)(nil), "settings.ListMembersRequest") - proto.RegisterType((*ListMembersResponse)(nil), "settings.ListMembersResponse") - proto.RegisterType((*Group)(nil), "settings.Group") - proto.RegisterType((*OnPremisesProvisioningError)(nil), "settings.OnPremisesProvisioningError") +var File_accounts_proto protoreflect.FileDescriptor + +var file_accounts_proto_rawDesc = []byte{ + 0x0a, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, + 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, + 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x30, 0x0a, 0x14, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x6e, 0x64, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x49, 0x6e, 0x64, 0x69, 0x63, + 0x65, 0x73, 0x22, 0xb1, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, + 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, + 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x19, 0x0a, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, + 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x6d, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, + 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 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, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x43, 0x0a, 0x14, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0x80, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, + 0x73, 0x6b, 0x22, 0x26, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x88, 0x0d, 0x0a, 0x07, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, + 0x2e, 0x0a, 0x13, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x73, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0a, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, + 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x69, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x69, 0x64, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x10, 0x70, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0f, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2b, + 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x12, 0x46, 0x0a, 0x11, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x6f, + 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x6f, + 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, + 0x73, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, + 0x65, 0x73, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x45, 0x0a, + 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, + 0x65, 0x73, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x1e, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, + 0x73, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, + 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x6f, 0x6e, + 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, + 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x1c, 0x6f, 0x6e, 0x5f, + 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x61, 0x6d, 0x5f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x18, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x61, 0x6d, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x6f, 0x6e, 0x5f, + 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6f, 0x6e, 0x50, 0x72, + 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x44, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x6f, 0x6e, 0x50, 0x72, 0x65, + 0x6d, 0x69, 0x73, 0x65, 0x73, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, + 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5f, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, + 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1c, 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, 0x1a, 0x6f, 0x6e, 0x50, + 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x44, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x6c, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, + 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4f, 0x6e, 0x50, 0x72, + 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, + 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x1c, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, + 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x24, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x29, 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, + 0x1f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x67, 0x0a, 0x23, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x3c, 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, 0x1e, 0x72, 0x65, 0x66, 0x72, 0x65, + 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x72, 0x6f, + 0x6d, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x6a, 0x0a, 0x25, 0x73, 0x69, 0x67, + 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x3d, 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, 0x1f, 0x73, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x74, 0x0a, 0x0a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x49, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x2c, 0x0a, + 0x12, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, 0x73, 0x73, 0x75, 0x65, + 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, 0x64, 0x22, 0xe0, 0x02, 0x0a, 0x0f, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x5e, 0x0a, 0x1e, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x1a, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x22, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x69, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x49, 0x6e, 0x12, 0x59, 0x0a, 0x2b, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6d, + 0x66, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4e, 0x65, 0x78, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x66, 0x61, 0x22, 0xaf, + 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, + 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x19, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x22, 0x65, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 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, 0x21, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x12, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x78, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, + 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, + 0x6b, 0x22, 0x24, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4c, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xc0, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, + 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x19, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, + 0x41, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6a, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 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, 0xea, 0x08, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, + 0x29, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, + 0x67, 0x69, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x67, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x11, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x14, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x09, 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, 0x12, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x68, 0x69, 0x64, + 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x68, 0x69, 0x64, 0x65, + 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, + 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, + 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, + 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x15, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x79, + 0x6e, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, + 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x6e, 0x50, + 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x49, 0x64, 0x12, 0x45, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, + 0x73, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x6f, 0x6e, 0x50, + 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x1e, 0x6f, 0x6e, 0x5f, + 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x1b, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x69, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, + 0x0a, 0x1c, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x61, + 0x6d, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, + 0x53, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, + 0x0a, 0x17, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x14, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x19, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, + 0x69, 0x73, 0x65, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x6f, 0x73, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, + 0x69, 0x73, 0x65, 0x73, 0x4e, 0x65, 0x74, 0x42, 0x69, 0x6f, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x43, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, + 0x69, 0x73, 0x65, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x6c, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, + 0x73, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, + 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, + 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x52, 0x1c, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x1b, 0x4f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, + 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x48, + 0x0a, 0x12, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, + 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x79, 0x43, 0x61, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x32, 0xcb, 0x04, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x78, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, + 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x3a, + 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x2d, 0x67, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0d, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2b, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x2d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0d, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, + 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x2d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0d, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x2e, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 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, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, + 0x01, 0x2a, 0x32, 0x90, 0x07, 0x0a, 0x0d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x70, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x6c, + 0x69, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x5e, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x26, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, + 0x67, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x67, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, + 0x67, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, + 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x29, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6e, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6d, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x30, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, + 0x24, 0x72, 0x65, 0x66, 0x3a, 0x01, 0x2a, 0x12, 0x80, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, + 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x7d, 0x2f, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x24, 0x72, 0x65, 0x66, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x0b, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x3d, 0x2a, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x24, 0x72, + 0x65, 0x66, 0x3a, 0x01, 0x2a, 0x32, 0x7f, 0x0a, 0x0c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, + 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2f, 0x72, 0x65, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x3a, 0x01, 0x2a, 0x42, 0x14, 0x5a, 0x12, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x30, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } -func init() { proto.RegisterFile("accounts.proto", fileDescriptor_e1e7723af4c007b7) } +var ( + file_accounts_proto_rawDescOnce sync.Once + file_accounts_proto_rawDescData = file_accounts_proto_rawDesc +) -var fileDescriptor_e1e7723af4c007b7 = []byte{ - // 1980 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xdd, 0x6e, 0x1b, 0xc7, - 0x15, 0x06, 0x45, 0x53, 0x22, 0x0f, 0x25, 0x4b, 0x1a, 0x33, 0xf6, 0x8a, 0xfa, 0x31, 0xbd, 0xb6, - 0x6c, 0xd9, 0xaa, 0xa5, 0xc0, 0x89, 0xd1, 0xd6, 0x6e, 0x8a, 0xca, 0x92, 0xed, 0x12, 0xf0, 0x8f, - 0x40, 0x39, 0x2d, 0xda, 0x8b, 0x2c, 0x56, 0xdc, 0x21, 0x35, 0x31, 0xf7, 0x27, 0x33, 0xb3, 0xb2, - 0x98, 0x20, 0x40, 0xd0, 0xab, 0x5e, 0x16, 0xe8, 0x83, 0x14, 0x7d, 0x83, 0xde, 0xf7, 0xa2, 0x17, - 0x7d, 0x81, 0x5c, 0xf4, 0xaa, 0x4f, 0x51, 0xcc, 0xdf, 0xee, 0x72, 0x97, 0x14, 0x1d, 0xdb, 0x40, - 0x11, 0x20, 0x57, 0xe2, 0xce, 0xf9, 0xce, 0xf9, 0xce, 0x9c, 0x39, 0x3b, 0xf3, 0xed, 0x08, 0x2e, - 0xba, 0xdd, 0x6e, 0x18, 0x07, 0x9c, 0xed, 0x44, 0x34, 0xe4, 0x21, 0xaa, 0x32, 0xcc, 0x39, 0x09, - 0xfa, 0xac, 0x79, 0xb5, 0x1f, 0x86, 0xfd, 0x01, 0xde, 0x75, 0x23, 0xb2, 0xdb, 0x23, 0x78, 0xe0, - 0x39, 0xc7, 0xf8, 0xc4, 0x3d, 0x25, 0x21, 0x55, 0xd0, 0xe6, 0x5a, 0x06, 0xe0, 0x06, 0x41, 0xc8, - 0x5d, 0x4e, 0xc2, 0x40, 0x07, 0x6a, 0xae, 0x6a, 0xab, 0x7c, 0x3a, 0x8e, 0x7b, 0xbb, 0xd8, 0x8f, - 0xf8, 0x50, 0x1b, 0x5b, 0x79, 0xa3, 0x22, 0xf0, 0x5d, 0xf6, 0x5a, 0x23, 0xae, 0xe6, 0x11, 0x9c, - 0xf8, 0x98, 0x71, 0xd7, 0x8f, 0x14, 0xc0, 0xfe, 0x7b, 0x09, 0x2e, 0x3d, 0x23, 0x8c, 0xef, 0xe9, - 0xfc, 0x3b, 0xf8, 0xab, 0x18, 0x33, 0x8e, 0x5a, 0x50, 0x8b, 0xdc, 0x3e, 0x76, 0x18, 0xf9, 0x1a, - 0x5b, 0xa5, 0x56, 0x69, 0xab, 0xf2, 0xa8, 0xfc, 0xfd, 0x5e, 0xa9, 0x53, 0x15, 0xa3, 0x47, 0xe4, - 0x6b, 0x8c, 0x6c, 0x00, 0x89, 0xe0, 0xe1, 0x6b, 0x1c, 0x58, 0x33, 0xad, 0xd2, 0x56, 0x4d, 0x41, - 0xa4, 0xe3, 0x2b, 0x31, 0x8a, 0x7e, 0x09, 0x90, 0xa6, 0x64, 0x95, 0x5b, 0xa5, 0xad, 0xfa, 0xbd, - 0xe6, 0x8e, 0xca, 0x69, 0xc7, 0xe4, 0xb4, 0xf3, 0x44, 0x40, 0x9e, 0xbb, 0xec, 0x75, 0xa7, 0xd6, - 0x33, 0x3f, 0xd1, 0x0a, 0x54, 0xbe, 0x8a, 0x31, 0x1d, 0x5a, 0x17, 0xd2, 0xc8, 0x6a, 0xc4, 0xf6, - 0xa1, 0x31, 0x9a, 0x32, 0x8b, 0xc2, 0x80, 0x61, 0x74, 0x17, 0xaa, 0x66, 0x19, 0xac, 0x52, 0xab, - 0xbc, 0x55, 0xbf, 0xb7, 0xbc, 0x63, 0xd6, 0x61, 0x47, 0xa3, 0x3b, 0x09, 0x04, 0xdd, 0x84, 0xc5, - 0x00, 0x9f, 0x71, 0x27, 0x3f, 0x8b, 0xce, 0x82, 0x18, 0x3e, 0x34, 0x93, 0xb0, 0xaf, 0xc3, 0xf2, - 0x53, 0x6c, 0xd8, 0x4c, 0x7d, 0x2e, 0xc2, 0x0c, 0xf1, 0x64, 0x61, 0x6a, 0x9d, 0x19, 0xe2, 0xd9, - 0xfb, 0xd0, 0xd8, 0xa7, 0xd8, 0xe5, 0x38, 0x87, 0xdb, 0x86, 0x39, 0x4d, 0x28, 0xc1, 0x63, 0x53, - 0x32, 0x08, 0xfb, 0xbb, 0x12, 0x34, 0x3e, 0x8f, 0xbc, 0xf7, 0x8b, 0x82, 0x1e, 0x42, 0x3d, 0x96, - 0x41, 0x54, 0xd5, 0x67, 0xa6, 0x56, 0x1d, 0x14, 0x5c, 0xfc, 0xb6, 0x6f, 0x42, 0xe3, 0x00, 0x0f, - 0x70, 0x21, 0x83, 0xfc, 0x7c, 0xff, 0xbc, 0x00, 0x73, 0x1a, 0x92, 0xb7, 0xa1, 0x5b, 0xb0, 0xa8, - 0x73, 0x71, 0x70, 0xe0, 0x1e, 0x0f, 0xb0, 0x27, 0x93, 0xa8, 0x76, 0xcc, 0x5b, 0xf2, 0x58, 0x8d, - 0xa2, 0x1d, 0xb8, 0x44, 0x98, 0x43, 0x31, 0x0b, 0x63, 0xda, 0xc5, 0x8e, 0x99, 0x62, 0x59, 0x82, - 0x97, 0x89, 0x58, 0x59, 0x69, 0x31, 0x44, 0xd7, 0x61, 0xa1, 0x2b, 0x8a, 0x4c, 0xc2, 0xc0, 0xe1, - 0xc3, 0x08, 0xab, 0xde, 0xe8, 0xcc, 0x9b, 0xc1, 0x57, 0xc3, 0x08, 0xa3, 0x4f, 0x01, 0x88, 0x87, - 0x03, 0x4e, 0x38, 0xc1, 0xcc, 0xaa, 0xc8, 0x3e, 0x68, 0xa4, 0xe5, 0x6a, 0x27, 0xb6, 0x4e, 0x06, - 0x87, 0xae, 0xc1, 0xbc, 0x47, 0x58, 0x34, 0x70, 0x87, 0x4e, 0xe0, 0xfa, 0xd8, 0x9a, 0x95, 0x91, - 0xeb, 0x7a, 0xec, 0x85, 0xeb, 0x63, 0xb4, 0x09, 0x17, 0x23, 0x8a, 0x7b, 0x98, 0x52, 0xec, 0x29, - 0xd0, 0x9c, 0x6a, 0x97, 0x64, 0x54, 0xc2, 0xd6, 0x01, 0x62, 0xe2, 0x39, 0x41, 0xec, 0x1f, 0x63, - 0x6a, 0x55, 0x5b, 0xa5, 0xad, 0x72, 0xa7, 0x16, 0x13, 0xef, 0x85, 0x1c, 0x10, 0xe6, 0x7e, 0x6a, - 0xae, 0x29, 0x73, 0x3f, 0x31, 0x23, 0xb8, 0xe0, 0xbb, 0x64, 0x60, 0x81, 0x0c, 0x2d, 0x7f, 0xa3, - 0x16, 0xd4, 0x3d, 0xcc, 0xba, 0x94, 0x44, 0x62, 0x92, 0x56, 0x5d, 0xa7, 0x96, 0x0e, 0xa1, 0x03, - 0x58, 0x8a, 0x5c, 0xc6, 0xde, 0x84, 0xd4, 0x73, 0x22, 0x1a, 0xf6, 0xc8, 0x00, 0x5b, 0xf3, 0x72, - 0xdd, 0x57, 0xd2, 0x99, 0x1f, 0x6a, 0xc4, 0xa1, 0x02, 0x74, 0x16, 0xa3, 0xd1, 0x01, 0xb4, 0x0d, - 0x55, 0x1f, 0x8b, 0x2c, 0x5e, 0xf6, 0xac, 0x05, 0x59, 0xb7, 0xc5, 0xd4, 0xfb, 0x29, 0x0d, 0xe3, - 0xa8, 0x93, 0x00, 0xd0, 0x13, 0x58, 0x96, 0x65, 0xc7, 0x9e, 0x23, 0x7b, 0x4d, 0x6c, 0x2c, 0xd6, - 0xd2, 0x84, 0x5e, 0x7b, 0x65, 0x76, 0x9d, 0xce, 0xa2, 0x76, 0x3a, 0x70, 0x39, 0x16, 0xa3, 0x22, - 0x8e, 0x27, 0x1b, 0x2e, 0x1b, 0x67, 0x79, 0x7a, 0x1c, 0xed, 0x94, 0xc4, 0xf9, 0x39, 0x58, 0x61, - 0xe0, 0x44, 0x14, 0xfb, 0x84, 0x61, 0xe6, 0xb0, 0x61, 0xd0, 0x4d, 0xba, 0xaf, 0x21, 0x1b, 0xea, - 0xa3, 0x30, 0x38, 0xd4, 0xe6, 0xa3, 0x61, 0xd0, 0x35, 0x4d, 0x98, 0x73, 0x24, 0xbe, 0x1f, 0x73, - 0x61, 0x71, 0x88, 0x67, 0x7d, 0x24, 0x4b, 0x9d, 0x71, 0x6c, 0x1b, 0x6b, 0xdb, 0x43, 0x8f, 0xe1, - 0xea, 0x08, 0x23, 0xee, 0xc6, 0x94, 0xf0, 0xa1, 0xa3, 0xba, 0xaa, 0x47, 0x30, 0xb5, 0x2e, 0x4b, - 0xff, 0xb5, 0x0c, 0xb1, 0x06, 0xb5, 0x13, 0x0c, 0xda, 0x87, 0x8d, 0x6c, 0x18, 0x8f, 0x30, 0x51, - 0xf0, 0x98, 0xb0, 0x13, 0xd3, 0x66, 0x57, 0x64, 0x94, 0xd5, 0x34, 0xca, 0x41, 0x16, 0x23, 0x9b, - 0xee, 0xd7, 0xb0, 0x36, 0x92, 0x8b, 0xeb, 0x9b, 0xb7, 0x49, 0x85, 0xb0, 0x64, 0x08, 0x2b, 0x93, - 0x88, 0xeb, 0xeb, 0xb7, 0x4a, 0xfa, 0xdf, 0x87, 0x2b, 0x23, 0x49, 0x84, 0xbe, 0x4b, 0x02, 0xe5, - 0xba, 0x22, 0x5d, 0x1b, 0x19, 0x76, 0x69, 0x94, 0x6e, 0x07, 0xa3, 0x25, 0x88, 0x19, 0xa6, 0x4e, - 0x44, 0x49, 0xd0, 0x25, 0x91, 0x3b, 0x50, 0xee, 0xcd, 0x7c, 0xf2, 0x9f, 0x33, 0x4c, 0x0f, 0x0d, - 0x46, 0x46, 0x71, 0x46, 0xa3, 0x0c, 0x5c, 0xc6, 0xd5, 0xfa, 0xa5, 0x0d, 0xb1, 0x36, 0xb5, 0x21, - 0x9a, 0x29, 0xc3, 0x33, 0x97, 0x71, 0xb1, 0xc2, 0x49, 0x6f, 0x0c, 0x46, 0x09, 0x22, 0x1a, 0x9e, - 0x12, 0x46, 0xc2, 0x80, 0x04, 0x7d, 0x07, 0x53, 0x1a, 0x52, 0x66, 0xad, 0xcb, 0x7e, 0xdf, 0x4c, - 0xfb, 0xfd, 0x65, 0x12, 0xee, 0x30, 0x03, 0x7f, 0x2c, 0xd0, 0xd9, 0x05, 0x2d, 0x18, 0x99, 0xd8, - 0xd5, 0xf0, 0x19, 0xc7, 0x34, 0x70, 0x07, 0xaa, 0x22, 0x8c, 0xbb, 0x1c, 0x5b, 0x5b, 0xb2, 0x10, - 0xcb, 0xc6, 0x24, 0xca, 0x70, 0x24, 0x0c, 0x88, 0xc0, 0x8d, 0x31, 0x78, 0xa7, 0x7b, 0xe2, 0x06, - 0x7d, 0x9c, 0xa9, 0xc1, 0xed, 0xa9, 0x35, 0xb8, 0x5a, 0x08, 0xbe, 0x2f, 0x83, 0x24, 0x85, 0xe8, - 0xc3, 0x75, 0x8a, 0x7b, 0x14, 0xb3, 0x13, 0x75, 0xe0, 0x31, 0xe7, 0xd4, 0x1d, 0x10, 0xcf, 0xe9, - 0xd1, 0xd0, 0xcf, 0x30, 0xfd, 0x6a, 0x2a, 0xd3, 0x86, 0x0e, 0x23, 0x4f, 0x48, 0xf6, 0x3b, 0x11, - 0xe4, 0x09, 0x0d, 0xfd, 0x84, 0xe8, 0x4b, 0xd8, 0x64, 0xa4, 0x1f, 0x38, 0x24, 0x70, 0x18, 0x66, - 0xa2, 0x3e, 0x13, 0xa8, 0x3e, 0x9b, 0x3e, 0x29, 0x11, 0xa8, 0x1d, 0x1c, 0xe9, 0x30, 0x05, 0x2e, - 0x9b, 0x03, 0xa4, 0x9b, 0x3a, 0x6a, 0xc1, 0xbc, 0x61, 0x96, 0x47, 0x84, 0x3a, 0x96, 0x40, 0x05, - 0x91, 0x07, 0xc4, 0x65, 0x98, 0x25, 0x8c, 0xc5, 0x98, 0xea, 0xe3, 0x5e, 0x3f, 0xa1, 0x9f, 0x01, - 0x52, 0xbf, 0x1c, 0x97, 0x09, 0x38, 0xf6, 0xc4, 0x16, 0x50, 0x96, 0x98, 0x25, 0x65, 0xd9, 0xd3, - 0x86, 0xb6, 0x67, 0x7f, 0x3f, 0x03, 0x8b, 0xb9, 0x1d, 0x15, 0x35, 0xa1, 0x6a, 0xf6, 0x54, 0xcd, - 0x9b, 0x3c, 0xa3, 0x2f, 0x60, 0x43, 0x36, 0x76, 0xb2, 0x4f, 0x17, 0xd6, 0x77, 0x66, 0x7a, 0x8f, - 0x8b, 0x08, 0x86, 0x34, 0xb7, 0xb4, 0xdb, 0xb0, 0x9c, 0x1e, 0x01, 0xe1, 0x80, 0x74, 0xc5, 0xe9, - 0x57, 0x6e, 0x95, 0x45, 0xf2, 0xc9, 0x46, 0xaf, 0xc7, 0x51, 0x1b, 0xec, 0x5e, 0x28, 0x8e, 0x5c, - 0x9d, 0x44, 0xe2, 0x29, 0x05, 0x91, 0xae, 0x9f, 0x3c, 0x5d, 0xab, 0x9d, 0x75, 0x89, 0x54, 0x6c, - 0x86, 0xfb, 0x05, 0x3e, 0xe3, 0x47, 0xb2, 0xa2, 0xe8, 0x0f, 0xb0, 0x3d, 0x3d, 0x94, 0xf3, 0x86, - 0xf0, 0x13, 0xc7, 0xef, 0xb9, 0x56, 0x45, 0xc6, 0xbc, 0x71, 0x6e, 0xcc, 0xdf, 0x13, 0x7e, 0xf2, - 0xbc, 0xe7, 0xda, 0x7f, 0x2b, 0xc1, 0xb2, 0x10, 0x7a, 0xf2, 0xe8, 0xf9, 0x51, 0x28, 0x53, 0x0c, - 0x28, 0x9b, 0xb0, 0xd6, 0xa5, 0xb7, 0x60, 0xb6, 0x2f, 0x47, 0xb4, 0x2a, 0x2d, 0x9c, 0xaa, 0xda, - 0xfc, 0xd6, 0x8a, 0xf4, 0x1a, 0x2c, 0x3e, 0xc5, 0x8a, 0x65, 0x92, 0x3e, 0x7b, 0x08, 0x48, 0xe9, - 0xd1, 0x11, 0xd4, 0x26, 0x54, 0x24, 0x95, 0x56, 0x91, 0x85, 0x44, 0x94, 0xd5, 0x3e, 0x03, 0xa4, - 0x64, 0xe8, 0x3b, 0x38, 0xbf, 0x9f, 0xfc, 0xbc, 0x01, 0x48, 0xc9, 0xcf, 0x73, 0x27, 0xf7, 0x0c, - 0x96, 0xf6, 0x3c, 0xef, 0xb9, 0x94, 0x22, 0x06, 0xb3, 0x02, 0x55, 0xc9, 0xef, 0x24, 0xc8, 0x39, - 0xf9, 0xdc, 0xf6, 0x84, 0xe4, 0x32, 0x87, 0x21, 0xf1, 0x74, 0x45, 0x6b, 0x7a, 0xa4, 0xed, 0xd9, - 0x2f, 0xe1, 0x52, 0x07, 0xfb, 0xe1, 0x29, 0xfe, 0x50, 0x01, 0xff, 0x51, 0x52, 0x6d, 0xa0, 0xe2, - 0xfd, 0x18, 0x1a, 0x57, 0x57, 0xb8, 0x92, 0x54, 0xf8, 0x4b, 0xf5, 0x55, 0x98, 0xcc, 0x40, 0x77, - 0xf2, 0x36, 0xcc, 0x29, 0x01, 0x78, 0xce, 0x07, 0x96, 0x41, 0xbc, 0x75, 0x37, 0xff, 0xb7, 0x0a, - 0x15, 0xb9, 0xdc, 0x85, 0x0f, 0x89, 0xbc, 0x28, 0x9f, 0x29, 0x8a, 0xf2, 0x4c, 0x46, 0xe5, 0xa9, - 0x19, 0xdd, 0x86, 0xd9, 0xf0, 0x4d, 0x20, 0xb0, 0x17, 0x26, 0x61, 0x35, 0x20, 0xaf, 0xb9, 0x2b, - 0x45, 0xcd, 0x3d, 0x2a, 0xe4, 0x67, 0xf3, 0x42, 0x7e, 0xac, 0x3e, 0x9e, 0xfb, 0x40, 0xfa, 0xb8, - 0xfa, 0xc3, 0xf5, 0xf1, 0x33, 0x68, 0xe0, 0xb3, 0x88, 0x50, 0xf5, 0xf5, 0x94, 0x86, 0xaa, 0x4d, - 0x0d, 0x85, 0x52, 0xbf, 0x24, 0xda, 0x7d, 0xb8, 0x72, 0x42, 0x3c, 0xac, 0x4e, 0x73, 0xd7, 0xf3, - 0x28, 0x66, 0xcc, 0x19, 0x10, 0xc6, 0x99, 0xfc, 0x72, 0xa9, 0x76, 0x1a, 0xc2, 0x2c, 0x8e, 0xe9, - 0x3d, 0x65, 0x14, 0xdd, 0xc4, 0xd0, 0x06, 0x80, 0x50, 0x4b, 0xc7, 0x64, 0x40, 0xf8, 0x50, 0x7f, - 0xc8, 0x64, 0x46, 0x7e, 0x12, 0xf1, 0xff, 0x0f, 0x11, 0xff, 0x0b, 0x58, 0xc9, 0xba, 0x05, 0x98, - 0x3b, 0xc7, 0x24, 0x64, 0x59, 0xf9, 0x9e, 0x29, 0xde, 0x0b, 0xcc, 0x1f, 0x91, 0x90, 0x49, 0xcf, - 0xfd, 0xe9, 0xc2, 0x7d, 0x55, 0xfa, 0xbf, 0xa7, 0x38, 0x5f, 0xfb, 0x60, 0xe2, 0xdc, 0xfe, 0x57, - 0x09, 0x56, 0xcf, 0xf1, 0x16, 0x12, 0xae, 0xeb, 0x72, 0xdc, 0x0f, 0xe9, 0xd0, 0x48, 0x38, 0xf3, - 0x8c, 0x7e, 0x0b, 0x28, 0xec, 0x76, 0x63, 0xf9, 0xfd, 0xff, 0x43, 0x64, 0xdb, 0x92, 0xf1, 0x4a, - 0xe6, 0xfc, 0x29, 0x5c, 0x8e, 0x68, 0x18, 0x61, 0xca, 0x87, 0x4e, 0xd7, 0x8d, 0x59, 0x32, 0x57, - 0x2d, 0x37, 0x1b, 0xc6, 0xba, 0xaf, 0x8c, 0x2a, 0xb7, 0x06, 0x54, 0x4e, 0xdd, 0x41, 0x6c, 0xae, - 0x3d, 0xd4, 0xc3, 0xbd, 0x7f, 0x5e, 0x80, 0x45, 0x73, 0x15, 0x76, 0x84, 0xe9, 0x29, 0xe9, 0x62, - 0x74, 0x06, 0xf3, 0xd9, 0x1b, 0x32, 0xb4, 0x9e, 0x96, 0x6e, 0xcc, 0x65, 0x5f, 0x73, 0x63, 0x92, - 0x59, 0x6d, 0xfb, 0xf6, 0xed, 0x3f, 0xfd, 0xfb, 0x3f, 0x7f, 0x9d, 0xb9, 0x6e, 0x6f, 0xc8, 0x4b, - 0xca, 0xd3, 0x8f, 0x77, 0xcd, 0x1d, 0x5a, 0xf2, 0xe3, 0xae, 0x78, 0xf7, 0x1f, 0x94, 0xee, 0xa0, - 0x1e, 0x40, 0x7a, 0x59, 0x86, 0x56, 0x33, 0x1a, 0x21, 0x7f, 0x85, 0xd6, 0x2c, 0xee, 0xbe, 0xf6, - 0x96, 0x24, 0xb2, 0xed, 0xf5, 0xc9, 0x44, 0x7d, 0x2c, 0x79, 0x42, 0x58, 0x18, 0xb9, 0x6f, 0x43, - 0x99, 0x39, 0x8c, 0xbb, 0x88, 0x1b, 0xc7, 0xb6, 0x2d, 0xd9, 0x36, 0xed, 0xd6, 0x64, 0x36, 0xb5, - 0x1b, 0x6b, 0xc2, 0x91, 0xab, 0xb9, 0x2c, 0xe1, 0xb8, 0x3b, 0xbb, 0x77, 0x24, 0x54, 0x5a, 0x48, - 0x10, 0x72, 0x58, 0x18, 0xb9, 0x89, 0xcb, 0x12, 0x8e, 0xbb, 0xa2, 0x6b, 0x5e, 0x2e, 0xb4, 0xe0, - 0x63, 0x3f, 0xe2, 0xc3, 0xb7, 0x61, 0x55, 0x87, 0xc5, 0x83, 0xd2, 0x9d, 0x7b, 0x7f, 0x99, 0x83, - 0x05, 0x25, 0x5f, 0x4d, 0x2f, 0x45, 0x00, 0xa9, 0xa6, 0xcd, 0xae, 0x68, 0x41, 0x9a, 0x37, 0xd7, - 0xc6, 0x1b, 0x75, 0x17, 0xdd, 0x92, 0x79, 0x5c, 0xb3, 0xd7, 0x0a, 0x79, 0x28, 0xf9, 0x9b, 0xf4, - 0xd0, 0x17, 0x50, 0x35, 0xf2, 0x16, 0xad, 0x8c, 0x74, 0x50, 0x56, 0x15, 0x36, 0xf3, 0x02, 0xd4, - 0xbe, 0x29, 0x09, 0x5a, 0xf6, 0xea, 0x24, 0x02, 0xdd, 0x3b, 0x7d, 0xa8, 0x67, 0xb4, 0x31, 0x5a, - 0xcb, 0x77, 0xce, 0xf9, 0x2c, 0x93, 0x5f, 0x06, 0xcd, 0x92, 0xf6, 0x4c, 0x1f, 0xea, 0x19, 0x1d, - 0x9d, 0x25, 0x2a, 0xca, 0xeb, 0x77, 0x20, 0x4a, 0x7b, 0x25, 0x80, 0x7a, 0x46, 0x36, 0x67, 0x89, - 0x8a, 0x6a, 0x7a, 0x62, 0x9f, 0x4c, 0xe5, 0x4b, 0xba, 0x04, 0xf9, 0x50, 0x4b, 0x04, 0x38, 0x6a, - 0x66, 0x1a, 0x3d, 0xa7, 0xca, 0x8b, 0x93, 0xfa, 0x44, 0x92, 0xdc, 0xb5, 0xb7, 0x0c, 0x89, 0x8a, - 0xbd, 0xfb, 0x8d, 0xd1, 0xda, 0x9f, 0xdd, 0xf9, 0x76, 0x57, 0xeb, 0xb5, 0xdd, 0x1b, 0x14, 0xf7, - 0x04, 0xdd, 0x77, 0x25, 0x98, 0xcf, 0x4a, 0xf4, 0xec, 0x7e, 0x36, 0x46, 0xba, 0x17, 0x59, 0x7f, - 0x23, 0x59, 0x1f, 0xd8, 0xf7, 0xdf, 0x86, 0xf5, 0x9b, 0x54, 0xdb, 0x7f, 0x9b, 0xa4, 0x30, 0x84, - 0x7a, 0x46, 0x10, 0xa3, 0x5c, 0xa7, 0x8f, 0x2a, 0xfd, 0xe6, 0xfa, 0x04, 0xab, 0x7e, 0x11, 0xee, - 0xca, 0x6c, 0x6e, 0xd9, 0x76, 0x3e, 0x9b, 0xb1, 0xb3, 0x7f, 0xd4, 0xf8, 0x23, 0x8a, 0x5e, 0xf7, - 0xd5, 0xbf, 0x70, 0x76, 0x4f, 0x3f, 0x7e, 0xa8, 0x96, 0x6d, 0x56, 0xfe, 0xf9, 0xe4, 0x7f, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x52, 0x6c, 0xdb, 0xd1, 0x7a, 0x1a, 0x00, 0x00, +func file_accounts_proto_rawDescGZIP() []byte { + file_accounts_proto_rawDescOnce.Do(func() { + file_accounts_proto_rawDescData = protoimpl.X.CompressGZIP(file_accounts_proto_rawDescData) + }) + return file_accounts_proto_rawDescData +} + +var file_accounts_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_accounts_proto_goTypes = []interface{}{ + (*RebuildIndexRequest)(nil), // 0: settings.RebuildIndexRequest + (*RebuildIndexResponse)(nil), // 1: settings.RebuildIndexResponse + (*ListAccountsRequest)(nil), // 2: settings.ListAccountsRequest + (*ListAccountsResponse)(nil), // 3: settings.ListAccountsResponse + (*GetAccountRequest)(nil), // 4: settings.GetAccountRequest + (*CreateAccountRequest)(nil), // 5: settings.CreateAccountRequest + (*UpdateAccountRequest)(nil), // 6: settings.UpdateAccountRequest + (*DeleteAccountRequest)(nil), // 7: settings.DeleteAccountRequest + (*Account)(nil), // 8: settings.Account + (*Identities)(nil), // 9: settings.Identities + (*PasswordProfile)(nil), // 10: settings.PasswordProfile + (*ListGroupsRequest)(nil), // 11: settings.ListGroupsRequest + (*ListGroupsResponse)(nil), // 12: settings.ListGroupsResponse + (*GetGroupRequest)(nil), // 13: settings.GetGroupRequest + (*CreateGroupRequest)(nil), // 14: settings.CreateGroupRequest + (*UpdateGroupRequest)(nil), // 15: settings.UpdateGroupRequest + (*DeleteGroupRequest)(nil), // 16: settings.DeleteGroupRequest + (*AddMemberRequest)(nil), // 17: settings.AddMemberRequest + (*RemoveMemberRequest)(nil), // 18: settings.RemoveMemberRequest + (*ListMembersRequest)(nil), // 19: settings.ListMembersRequest + (*ListMembersResponse)(nil), // 20: settings.ListMembersResponse + (*Group)(nil), // 21: settings.Group + (*OnPremisesProvisioningError)(nil), // 22: settings.OnPremisesProvisioningError + (*field_mask.FieldMask)(nil), // 23: google.protobuf.FieldMask + (*timestamp.Timestamp)(nil), // 24: google.protobuf.Timestamp + (*empty.Empty)(nil), // 25: google.protobuf.Empty +} +var file_accounts_proto_depIdxs = []int32{ + 23, // 0: settings.ListAccountsRequest.field_mask:type_name -> google.protobuf.FieldMask + 8, // 1: settings.ListAccountsResponse.accounts:type_name -> settings.Account + 8, // 2: settings.CreateAccountRequest.account:type_name -> settings.Account + 8, // 3: settings.UpdateAccountRequest.account:type_name -> settings.Account + 23, // 4: settings.UpdateAccountRequest.update_mask:type_name -> google.protobuf.FieldMask + 9, // 5: settings.Account.identities:type_name -> settings.Identities + 10, // 6: settings.Account.password_profile:type_name -> settings.PasswordProfile + 21, // 7: settings.Account.memberOf:type_name -> settings.Group + 24, // 8: settings.Account.created_date_time:type_name -> google.protobuf.Timestamp + 24, // 9: settings.Account.deleted_date_time:type_name -> google.protobuf.Timestamp + 24, // 10: settings.Account.on_premises_last_sync_date_time:type_name -> google.protobuf.Timestamp + 22, // 11: settings.Account.on_premises_provisioning_errors:type_name -> settings.OnPremisesProvisioningError + 24, // 12: settings.Account.external_user_state_change_date_time:type_name -> google.protobuf.Timestamp + 24, // 13: settings.Account.refresh_tokens_valid_from_date_time:type_name -> google.protobuf.Timestamp + 24, // 14: settings.Account.sign_in_sessions_valid_from_date_time:type_name -> google.protobuf.Timestamp + 24, // 15: settings.PasswordProfile.last_password_change_date_time:type_name -> google.protobuf.Timestamp + 23, // 16: settings.ListGroupsRequest.field_mask:type_name -> google.protobuf.FieldMask + 21, // 17: settings.ListGroupsResponse.groups:type_name -> settings.Group + 21, // 18: settings.CreateGroupRequest.group:type_name -> settings.Group + 21, // 19: settings.UpdateGroupRequest.group:type_name -> settings.Group + 23, // 20: settings.UpdateGroupRequest.update_mask:type_name -> google.protobuf.FieldMask + 23, // 21: settings.ListMembersRequest.field_mask:type_name -> google.protobuf.FieldMask + 8, // 22: settings.ListMembersResponse.members:type_name -> settings.Account + 8, // 23: settings.Group.members:type_name -> settings.Account + 8, // 24: settings.Group.owners:type_name -> settings.Account + 24, // 25: settings.Group.created_date_time:type_name -> google.protobuf.Timestamp + 24, // 26: settings.Group.deleted_date_time:type_name -> google.protobuf.Timestamp + 24, // 27: settings.Group.expiration_date_time:type_name -> google.protobuf.Timestamp + 22, // 28: settings.Group.on_premises_provisioning_errors:type_name -> settings.OnPremisesProvisioningError + 24, // 29: settings.OnPremisesProvisioningError.occurred_date_time:type_name -> google.protobuf.Timestamp + 2, // 30: settings.AccountsService.ListAccounts:input_type -> settings.ListAccountsRequest + 4, // 31: settings.AccountsService.GetAccount:input_type -> settings.GetAccountRequest + 5, // 32: settings.AccountsService.CreateAccount:input_type -> settings.CreateAccountRequest + 6, // 33: settings.AccountsService.UpdateAccount:input_type -> settings.UpdateAccountRequest + 7, // 34: settings.AccountsService.DeleteAccount:input_type -> settings.DeleteAccountRequest + 11, // 35: settings.GroupsService.ListGroups:input_type -> settings.ListGroupsRequest + 13, // 36: settings.GroupsService.GetGroup:input_type -> settings.GetGroupRequest + 14, // 37: settings.GroupsService.CreateGroup:input_type -> settings.CreateGroupRequest + 15, // 38: settings.GroupsService.UpdateGroup:input_type -> settings.UpdateGroupRequest + 16, // 39: settings.GroupsService.DeleteGroup:input_type -> settings.DeleteGroupRequest + 17, // 40: settings.GroupsService.AddMember:input_type -> settings.AddMemberRequest + 18, // 41: settings.GroupsService.RemoveMember:input_type -> settings.RemoveMemberRequest + 19, // 42: settings.GroupsService.ListMembers:input_type -> settings.ListMembersRequest + 0, // 43: settings.IndexService.RebuildIndex:input_type -> settings.RebuildIndexRequest + 3, // 44: settings.AccountsService.ListAccounts:output_type -> settings.ListAccountsResponse + 8, // 45: settings.AccountsService.GetAccount:output_type -> settings.Account + 8, // 46: settings.AccountsService.CreateAccount:output_type -> settings.Account + 8, // 47: settings.AccountsService.UpdateAccount:output_type -> settings.Account + 25, // 48: settings.AccountsService.DeleteAccount:output_type -> google.protobuf.Empty + 12, // 49: settings.GroupsService.ListGroups:output_type -> settings.ListGroupsResponse + 21, // 50: settings.GroupsService.GetGroup:output_type -> settings.Group + 21, // 51: settings.GroupsService.CreateGroup:output_type -> settings.Group + 21, // 52: settings.GroupsService.UpdateGroup:output_type -> settings.Group + 25, // 53: settings.GroupsService.DeleteGroup:output_type -> google.protobuf.Empty + 21, // 54: settings.GroupsService.AddMember:output_type -> settings.Group + 21, // 55: settings.GroupsService.RemoveMember:output_type -> settings.Group + 20, // 56: settings.GroupsService.ListMembers:output_type -> settings.ListMembersResponse + 1, // 57: settings.IndexService.RebuildIndex:output_type -> settings.RebuildIndexResponse + 44, // [44:58] is the sub-list for method output_type + 30, // [30:44] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name +} + +func init() { file_accounts_proto_init() } +func file_accounts_proto_init() { + if File_accounts_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_accounts_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RebuildIndexRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RebuildIndexResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAccountsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListAccountsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Account); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Identities); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PasswordProfile); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListGroupsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListGroupsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddMemberRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RemoveMemberRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListMembersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListMembersResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Group); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_accounts_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OnPremisesProvisioningError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_accounts_proto_rawDesc, + NumEnums: 0, + NumMessages: 23, + NumExtensions: 0, + NumServices: 3, + }, + GoTypes: file_accounts_proto_goTypes, + DependencyIndexes: file_accounts_proto_depIdxs, + MessageInfos: file_accounts_proto_msgTypes, + }.Build() + File_accounts_proto = out.File + file_accounts_proto_rawDesc = nil + file_accounts_proto_goTypes = nil + file_accounts_proto_depIdxs = nil } diff --git a/accounts/pkg/proto/v0/accounts.pb.micro.go b/accounts/pkg/proto/v0/accounts.pb.micro.go index 2fd6dfd27f..b26141b639 100644 --- a/accounts/pkg/proto/v0/accounts.pb.micro.go +++ b/accounts/pkg/proto/v0/accounts.pb.micro.go @@ -551,3 +551,77 @@ func (h *groupsServiceHandler) RemoveMember(ctx context.Context, in *RemoveMembe func (h *groupsServiceHandler) ListMembers(ctx context.Context, in *ListMembersRequest, out *ListMembersResponse) error { return h.GroupsServiceHandler.ListMembers(ctx, in, out) } + +// Api Endpoints for IndexService service + +func NewIndexServiceEndpoints() []*api.Endpoint { + return []*api.Endpoint{ + &api.Endpoint{ + Name: "IndexService.RebuildIndex", + Path: []string{"/api/v0/index/rebuild"}, + Method: []string{"POST"}, + Body: "*", + Handler: "rpc", + }, + } +} + +// Client API for IndexService service + +type IndexService interface { + RebuildIndex(ctx context.Context, in *RebuildIndexRequest, opts ...client.CallOption) (*RebuildIndexResponse, error) +} + +type indexService struct { + c client.Client + name string +} + +func NewIndexService(name string, c client.Client) IndexService { + return &indexService{ + c: c, + name: name, + } +} + +func (c *indexService) RebuildIndex(ctx context.Context, in *RebuildIndexRequest, opts ...client.CallOption) (*RebuildIndexResponse, error) { + req := c.c.NewRequest(c.name, "IndexService.RebuildIndex", in) + out := new(RebuildIndexResponse) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for IndexService service + +type IndexServiceHandler interface { + RebuildIndex(context.Context, *RebuildIndexRequest, *RebuildIndexResponse) error +} + +func RegisterIndexServiceHandler(s server.Server, hdlr IndexServiceHandler, opts ...server.HandlerOption) error { + type indexService interface { + RebuildIndex(ctx context.Context, in *RebuildIndexRequest, out *RebuildIndexResponse) error + } + type IndexService struct { + indexService + } + h := &indexServiceHandler{hdlr} + opts = append(opts, api.WithEndpoint(&api.Endpoint{ + Name: "IndexService.RebuildIndex", + Path: []string{"/api/v0/index/rebuild"}, + Method: []string{"POST"}, + Body: "*", + Handler: "rpc", + })) + return s.Handle(s.NewHandler(&IndexService{h}, opts...)) +} + +type indexServiceHandler struct { + IndexServiceHandler +} + +func (h *indexServiceHandler) RebuildIndex(ctx context.Context, in *RebuildIndexRequest, out *RebuildIndexResponse) error { + return h.IndexServiceHandler.RebuildIndex(ctx, in, out) +} diff --git a/accounts/pkg/proto/v0/accounts.pb.web.go b/accounts/pkg/proto/v0/accounts.pb.web.go index 5caafddfef..16379fce7c 100644 --- a/accounts/pkg/proto/v0/accounts.pb.web.go +++ b/accounts/pkg/proto/v0/accounts.pb.web.go @@ -372,6 +372,120 @@ func RegisterGroupsServiceWeb(r chi.Router, i GroupsServiceHandler, middlewares r.MethodFunc("POST", "/api/v0/groups/{id=*}/members/$ref", handler.ListMembers) } +type webIndexServiceHandler struct { + r chi.Router + h IndexServiceHandler +} + +func (h *webIndexServiceHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + h.r.ServeHTTP(w, r) +} + +func (h *webIndexServiceHandler) RebuildIndex(w http.ResponseWriter, r *http.Request) { + + req := &RebuildIndexRequest{} + + resp := &RebuildIndexResponse{} + + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, err.Error(), http.StatusPreconditionFailed) + return + } + + if err := h.h.RebuildIndex( + r.Context(), + req, + resp, + ); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + render.Status(r, http.StatusCreated) + render.JSON(w, r, resp) +} + +func RegisterIndexServiceWeb(r chi.Router, i IndexServiceHandler, middlewares ...func(http.Handler) http.Handler) { + handler := &webIndexServiceHandler{ + r: r, + h: i, + } + + r.MethodFunc("POST", "/api/v0/index/rebuild", handler.RebuildIndex) +} + +// RebuildIndexRequestJSONMarshaler describes the default jsonpb.Marshaler used by all +// instances of RebuildIndexRequest. This struct is safe to replace or modify but +// should not be done so concurrently. +var RebuildIndexRequestJSONMarshaler = new(jsonpb.Marshaler) + +// MarshalJSON satisfies the encoding/json Marshaler interface. This method +// uses the more correct jsonpb package to correctly marshal the message. +func (m *RebuildIndexRequest) MarshalJSON() ([]byte, error) { + if m == nil { + return json.Marshal(nil) + } + + buf := &bytes.Buffer{} + + if err := RebuildIndexRequestJSONMarshaler.Marshal(buf, m); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +var _ json.Marshaler = (*RebuildIndexRequest)(nil) + +// RebuildIndexRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all +// instances of RebuildIndexRequest. This struct is safe to replace or modify but +// should not be done so concurrently. +var RebuildIndexRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) + +// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method +// uses the more correct jsonpb package to correctly unmarshal the message. +func (m *RebuildIndexRequest) UnmarshalJSON(b []byte) error { + return RebuildIndexRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) +} + +var _ json.Unmarshaler = (*RebuildIndexRequest)(nil) + +// RebuildIndexResponseJSONMarshaler describes the default jsonpb.Marshaler used by all +// instances of RebuildIndexResponse. This struct is safe to replace or modify but +// should not be done so concurrently. +var RebuildIndexResponseJSONMarshaler = new(jsonpb.Marshaler) + +// MarshalJSON satisfies the encoding/json Marshaler interface. This method +// uses the more correct jsonpb package to correctly marshal the message. +func (m *RebuildIndexResponse) MarshalJSON() ([]byte, error) { + if m == nil { + return json.Marshal(nil) + } + + buf := &bytes.Buffer{} + + if err := RebuildIndexResponseJSONMarshaler.Marshal(buf, m); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +var _ json.Marshaler = (*RebuildIndexResponse)(nil) + +// RebuildIndexResponseJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all +// instances of RebuildIndexResponse. This struct is safe to replace or modify but +// should not be done so concurrently. +var RebuildIndexResponseJSONUnmarshaler = new(jsonpb.Unmarshaler) + +// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method +// uses the more correct jsonpb package to correctly unmarshal the message. +func (m *RebuildIndexResponse) UnmarshalJSON(b []byte) error { + return RebuildIndexResponseJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) +} + +var _ json.Unmarshaler = (*RebuildIndexResponse)(nil) + // ListAccountsRequestJSONMarshaler describes the default jsonpb.Marshaler used by all // instances of ListAccountsRequest. This struct is safe to replace or modify but // should not be done so concurrently. diff --git a/accounts/pkg/proto/v0/accounts.proto b/accounts/pkg/proto/v0/accounts.proto index 5fd908d7b3..3cf9c98f97 100644 --- a/accounts/pkg/proto/v0/accounts.proto +++ b/accounts/pkg/proto/v0/accounts.proto @@ -137,7 +137,14 @@ service GroupsService { } service IndexService { - rpc RebuildIndex(RebuildIndexRequest) returns (RebuildIndexResponse); + rpc RebuildIndex(RebuildIndexRequest) returns (RebuildIndexResponse) { + // All request parameters go into body. + option (google.api.http) = { + // URLs are broken + post: "/api/v0/index/rebuild" + body: "*" + }; + } } message RebuildIndexRequest { diff --git a/accounts/pkg/proto/v0/accounts.swagger.json b/accounts/pkg/proto/v0/accounts.swagger.json index 721e27f718..d8cd17d81e 100644 --- a/accounts/pkg/proto/v0/accounts.swagger.json +++ b/accounts/pkg/proto/v0/accounts.swagger.json @@ -14,13 +14,19 @@ "/api/v0/accounts/accounts-create": { "post": { "summary": "Creates an account", - "operationId": "CreateAccount", + "operationId": "AccountsService_CreateAccount", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsAccount" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -41,13 +47,19 @@ "/api/v0/accounts/accounts-delete": { "post": { "summary": "Deletes an account", - "operationId": "DeleteAccount", + "operationId": "AccountsService_DeleteAccount", "responses": { "200": { "description": "A successful response.", "schema": { "properties": {} } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -68,13 +80,19 @@ "/api/v0/accounts/accounts-get": { "post": { "summary": "Gets an account", - "operationId": "GetAccount", + "operationId": "AccountsService_GetAccount", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsAccount" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -95,13 +113,19 @@ "/api/v0/accounts/accounts-list": { "post": { "summary": "Lists accounts", - "operationId": "ListAccounts", + "operationId": "AccountsService_ListAccounts", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsListAccountsResponse" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -122,13 +146,19 @@ "/api/v0/accounts/accounts-update": { "post": { "summary": "Updates an account", - "operationId": "UpdateAccount", + "operationId": "AccountsService_UpdateAccount", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsAccount" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -148,14 +178,20 @@ }, "/api/v0/accounts/groups-create": { "post": { - "summary": "Creates an account", - "operationId": "CreateGroup", + "summary": "Creates a group", + "operationId": "GroupsService_CreateGroup", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsGroup" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -175,14 +211,20 @@ }, "/api/v0/accounts/groups-delete": { "post": { - "summary": "Deletes an account", - "operationId": "DeleteGroup", + "summary": "Deletes a group", + "operationId": "GroupsService_DeleteGroup", "responses": { "200": { "description": "A successful response.", "schema": { "properties": {} } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -202,14 +244,20 @@ }, "/api/v0/accounts/groups-get": { "post": { - "summary": "Gets an account", - "operationId": "GetGroup", + "summary": "Gets an groups", + "operationId": "GroupsService_GetGroup", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsGroup" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -229,14 +277,20 @@ }, "/api/v0/accounts/groups-list": { "post": { - "summary": "Lists accounts", - "operationId": "ListGroups", + "summary": "Lists groups", + "operationId": "GroupsService_ListGroups", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsListGroupsResponse" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -256,14 +310,20 @@ }, "/api/v0/accounts/groups-update": { "post": { - "summary": "Updates an account", - "operationId": "UpdateGroup", + "summary": "Updates a group", + "operationId": "GroupsService_UpdateGroup", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsGroup" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -284,13 +344,19 @@ "/api/v0/groups/{group_id}/members/$ref": { "post": { "summary": "group:addmember https://docs.microsoft.com/en-us/graph/api/group-post-members?view=graph-rest-1.0\u0026tabs=http", - "operationId": "AddMember", + "operationId": "GroupsService_AddMember", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsGroup" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -318,13 +384,19 @@ "/api/v0/groups/{group_id}/members/{account_id}/$ref": { "post": { "summary": "group:removemember https://docs.microsoft.com/en-us/graph/api/group-delete-members?view=graph-rest-1.0", - "operationId": "RemoveMember", + "operationId": "GroupsService_RemoveMember", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsGroup" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -359,13 +431,19 @@ "/api/v0/groups/{id}/members/$ref": { "post": { "summary": "group:listmembers https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0", - "operationId": "ListMembers", + "operationId": "GroupsService_ListMembers", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/settingsListMembersResponse" } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } } }, "parameters": [ @@ -389,9 +467,53 @@ "GroupsService" ] } + }, + "/api/v0/index/rebuild": { + "post": { + "operationId": "IndexService_RebuildIndex", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/settingsRebuildIndexResponse" + } + }, + "default": { + "description": "An unexpected error response", + "schema": { + "$ref": "#/definitions/runtimeError" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/settingsRebuildIndexRequest" + } + } + ], + "tags": [ + "IndexService" + ] + } } }, "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "type_url": { + "type": "string" + }, + "value": { + "type": "string", + "format": "byte" + } + } + }, "protobufFieldMask": { "type": "object", "properties": { @@ -406,6 +528,27 @@ "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is unmappable.", "title": "`FieldMask` represents a set of symbolic field paths, for example:" }, + "runtimeError": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + }, "settingsAccount": { "type": "object", "properties": { @@ -898,6 +1041,20 @@ } } }, + "settingsRebuildIndexRequest": { + "type": "object" + }, + "settingsRebuildIndexResponse": { + "type": "object", + "properties": { + "Indices": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, "settingsRemoveMemberRequest": { "type": "object", "properties": { diff --git a/accounts/pkg/server/grpc/server.go b/accounts/pkg/server/grpc/server.go index 80fd1c3ccd..c4c267770f 100644 --- a/accounts/pkg/server/grpc/server.go +++ b/accounts/pkg/server/grpc/server.go @@ -26,6 +26,9 @@ func Server(opts ...Option) grpc.Service { if err := proto.RegisterGroupsServiceHandler(service.Server(), handler); err != nil { options.Logger.Fatal().Err(err).Msg("could not register groups handler") } + if err := proto.RegisterIndexServiceHandler(service.Server(), handler); err != nil { + options.Logger.Fatal().Err(err).Msg("could not register index handler") + } service.Init() return service diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go new file mode 100644 index 0000000000..cb5d3d704a --- /dev/null +++ b/accounts/pkg/service/v0/index.go @@ -0,0 +1,15 @@ +package service + +import ( + "context" + + "github.com/owncloud/ocis/accounts/pkg/proto/v0" +) + +func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRequest, response *proto.RebuildIndexResponse) error { + if err := s.index.Reset(); err != nil { + return err + } + + return nil +} From 17b7c8242588200163b231d12d521647b7350de4 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Fri, 23 Oct 2020 12:23:33 +0200 Subject: [PATCH 03/24] basic wiring --- accounts/pkg/command/rebuild_index.go | 25 +++++++++++++++++++++---- accounts/pkg/command/root.go | 1 + accounts/pkg/service/v0/index.go | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/accounts/pkg/command/rebuild_index.go b/accounts/pkg/command/rebuild_index.go index 230a969030..b4df1d55f2 100644 --- a/accounts/pkg/command/rebuild_index.go +++ b/accounts/pkg/command/rebuild_index.go @@ -1,15 +1,32 @@ package command import ( + "context" + "fmt" + "github.com/micro/cli/v2" + "github.com/micro/go-micro/v2/client/grpc" "github.com/owncloud/ocis/accounts/pkg/config" + index "github.com/owncloud/ocis/accounts/pkg/proto/v0" ) +// DeleteIndex rebuilds the entire configured index. func DeleteIndex(cdf *config.Config) *cli.Command { return &cli.Command{ - Name: "add", - Usage: "Create a new account", - Aliases: []string{"create", "a"}, - //Flags: flagset.AddAccountWithConfig(cfg, a), + Name: "rebuildIndex", + Usage: "Rebuilds the service's index", + Aliases: []string{"rebuild", "ri"}, + Action: func(ctx *cli.Context) error { + idxSvcID := "com.owncloud.api.accounts" + idxSvc := index.NewIndexService(idxSvcID, grpc.NewClient()) + + rsp, err := idxSvc.RebuildIndex(context.Background(), &index.RebuildIndexRequest{}) + if err != nil { + return err + } + + fmt.Printf("deleted: %+v", rsp.Indices) + return nil + }, } } diff --git a/accounts/pkg/command/root.go b/accounts/pkg/command/root.go index ad7776bcaa..68c6192f0d 100644 --- a/accounts/pkg/command/root.go +++ b/accounts/pkg/command/root.go @@ -49,6 +49,7 @@ func Execute() error { InspectAccount(cfg), RemoveAccount(cfg), PrintVersion(cfg), + DeleteIndex(cfg), }, } diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go index cb5d3d704a..94653b41cb 100644 --- a/accounts/pkg/service/v0/index.go +++ b/accounts/pkg/service/v0/index.go @@ -10,6 +10,6 @@ func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRe if err := s.index.Reset(); err != nil { return err } - + response.Indices = []string{"foo", "bar"} return nil } From a518a51f72e8b104fac09996136d5833f1300cf3 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 12:55:01 +0200 Subject: [PATCH 04/24] Extract creating indices on the indexer into a function --- accounts/pkg/service/v0/index.go | 55 ++++++++++++++++++++++++++++++ accounts/pkg/service/v0/service.go | 40 +--------------------- 2 files changed, 56 insertions(+), 39 deletions(-) diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go index 94653b41cb..a0eeedce24 100644 --- a/accounts/pkg/service/v0/index.go +++ b/accounts/pkg/service/v0/index.go @@ -3,13 +3,68 @@ package service import ( "context" + "github.com/owncloud/ocis/accounts/pkg/config" + "github.com/owncloud/ocis/accounts/pkg/indexer" + "github.com/owncloud/ocis/accounts/pkg/indexer/option" "github.com/owncloud/ocis/accounts/pkg/proto/v0" ) +// RebuildIndex deletes all indices (in memory and on storage) and rebuilds them from scratch. func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRequest, response *proto.RebuildIndexResponse) error { if err := s.index.Reset(); err != nil { return err } response.Indices = []string{"foo", "bar"} + + if err := createIndices(s.index, s.Config); err != nil { + return err + } + + // TODO: read all the documents and add them to the indexer. + + return nil +} + +// createIndices adds all indices to the indexer that we have for this service. +func createIndices(idx *indexer.Indexer, cfg *config.Config) error { + // Accounts + if err := idx.AddIndex(&proto.Account{}, "DisplayName", "Id", "accounts", "non_unique", nil, true); err != nil { + return err + } + if err := idx.AddIndex(&proto.Account{}, "Mail", "Id", "accounts", "unique", nil, true); err != nil { + return err + } + + if err := idx.AddIndex(&proto.Account{}, "OnPremisesSamAccountName", "Id", "accounts", "unique", nil, true); err != nil { + return err + } + + if err := idx.AddIndex(&proto.Account{}, "PreferredName", "Id", "accounts", "unique", nil, true); err != nil { + return err + } + + if err := idx.AddIndex(&proto.Account{}, "UidNumber", "Id", "accounts", "autoincrement", &option.Bound{ + Lower: cfg.Index.UID.Lower, + Upper: cfg.Index.UID.Upper, + }, false); err != nil { + return err + } + + // Groups + if err := idx.AddIndex(&proto.Group{}, "OnPremisesSamAccountName", "Id", "groups", "unique", nil, true); err != nil { + return err + } + + if err := idx.AddIndex(&proto.Group{}, "DisplayName", "Id", "groups", "non_unique", nil, true); err != nil { + return err + } + + if err := idx.AddIndex(&proto.Group{}, "GidNumber", "Id", "groups", "autoincrement", &option.Bound{ + Lower: cfg.Index.GID.Lower, + Upper: cfg.Index.GID.Upper, + }, false); err != nil { + return err + } + return nil } diff --git a/accounts/pkg/service/v0/service.go b/accounts/pkg/service/v0/service.go index 99152690e4..01ce8be166 100644 --- a/accounts/pkg/service/v0/service.go +++ b/accounts/pkg/service/v0/service.go @@ -9,8 +9,6 @@ import ( "strings" "time" - "github.com/owncloud/ocis/accounts/pkg/indexer/option" - "github.com/owncloud/ocis/accounts/pkg/indexer" "github.com/owncloud/ocis/accounts/pkg/storage" @@ -77,45 +75,9 @@ func New(opts ...Option) (s *Service, err error) { func (s Service) buildIndex() (*indexer.Indexer, error) { idx := indexer.CreateIndexer(s.Config) - // Accounts - if err := idx.AddIndex(&proto.Account{}, "DisplayName", "Id", "accounts", "non_unique", nil, true); err != nil { + if err := createIndices(idx, s.Config); err != nil { return nil, err } - if err := idx.AddIndex(&proto.Account{}, "Mail", "Id", "accounts", "unique", nil, true); err != nil { - return nil, err - } - - if err := idx.AddIndex(&proto.Account{}, "OnPremisesSamAccountName", "Id", "accounts", "unique", nil, true); err != nil { - return nil, err - } - - if err := idx.AddIndex(&proto.Account{}, "PreferredName", "Id", "accounts", "unique", nil, true); err != nil { - return nil, err - } - - if err := idx.AddIndex(&proto.Account{}, "UidNumber", "Id", "accounts", "autoincrement", &option.Bound{ - Lower: s.Config.Index.UID.Lower, - Upper: s.Config.Index.UID.Upper, - }, false); err != nil { - return nil, err - } - - // Groups - if err := idx.AddIndex(&proto.Group{}, "OnPremisesSamAccountName", "Id", "groups", "unique", nil, true); err != nil { - return nil, err - } - - if err := idx.AddIndex(&proto.Group{}, "DisplayName", "Id", "groups", "non_unique", nil, true); err != nil { - return nil, err - } - - if err := idx.AddIndex(&proto.Group{}, "GidNumber", "Id", "groups", "autoincrement", &option.Bound{ - Lower: s.Config.Index.GID.Lower, - Upper: s.Config.Index.GID.Upper, - }, false); err != nil { - return nil, err - } - return idx, nil } From f89c05cf612cc20e2c150e916db1680f03d07500 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Fri, 23 Oct 2020 14:11:20 +0200 Subject: [PATCH 05/24] raw implementation of index Delete --- .../pkg/indexer/index/cs3/autoincrement.go | 32 +++++++++++++++++++ accounts/pkg/indexer/index/cs3/non_unique.go | 24 ++++++++++++++ accounts/pkg/indexer/index/cs3/unique.go | 32 +++++++++++++++++++ .../pkg/indexer/index/disk/autoincrement.go | 27 +++++++++------- accounts/pkg/indexer/index/disk/non_unique.go | 5 +++ accounts/pkg/indexer/index/disk/unique.go | 5 +++ accounts/pkg/indexer/index/index.go | 1 + accounts/pkg/indexer/indexer.go | 14 +++++--- accounts/pkg/service/v0/index.go | 7 ++-- 9 files changed, 128 insertions(+), 19 deletions(-) diff --git a/accounts/pkg/indexer/index/cs3/autoincrement.go b/accounts/pkg/indexer/index/cs3/autoincrement.go index 465521588a..ded4d9aa12 100644 --- a/accounts/pkg/indexer/index/cs3/autoincrement.go +++ b/accounts/pkg/indexer/index/cs3/autoincrement.go @@ -15,6 +15,7 @@ import ( idxerrs "github.com/owncloud/ocis/accounts/pkg/indexer/errors" user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" v1beta11 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" "github.com/cs3org/reva/pkg/rgrpc/todo/pool" @@ -385,3 +386,34 @@ func (idx *Autoincrement) next() (int, error) { } return latest + 1, nil } + +func (idx *Autoincrement) getAuthenticatedContext(ctx context.Context) (context.Context, error) { + t, err := idx.authenticate(ctx) + if err != nil { + return nil, err + } + ctx = metadata.AppendToOutgoingContext(ctx, token.TokenHeader, t) + return ctx, nil +} + +// Delete deletes the index folder from its storage. +func (idx *Autoincrement) Delete() error { + ctx, err := idx.getAuthenticatedContext(context.Background()) + if err != nil { + return err + } + + res, err := idx.storageProvider.Delete(ctx, &provider.DeleteRequest{ + Ref: &provider.Reference{ + Spec: &provider.Reference_Path{Path: path.Join("/meta", idx.indexRootDir)}, + }, + }) + if err != nil { + return err + } + if res.Status.Code != rpc.Code_CODE_OK { + return fmt.Errorf("error deleting index root dir: %v", idx.indexRootDir) + } + + return nil +} diff --git a/accounts/pkg/indexer/index/cs3/non_unique.go b/accounts/pkg/indexer/index/cs3/non_unique.go index c017d791bf..d0a9dd9237 100644 --- a/accounts/pkg/indexer/index/cs3/non_unique.go +++ b/accounts/pkg/indexer/index/cs3/non_unique.go @@ -10,6 +10,8 @@ import ( "path/filepath" "strings" + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" v1beta11 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" @@ -408,3 +410,25 @@ func (idx *NonUnique) getAuthenticatedContext(ctx context.Context) (context.Cont ctx = metadata.AppendToOutgoingContext(ctx, token.TokenHeader, t) return ctx, nil } + +// Delete deletes the index folder from its storage. +func (idx *NonUnique) Delete() error { + ctx, err := idx.getAuthenticatedContext(context.Background()) + if err != nil { + return err + } + + res, err := idx.storageProvider.Delete(ctx, &provider.DeleteRequest{ + Ref: &provider.Reference{ + Spec: &provider.Reference_Path{Path: path.Join("/meta", idx.indexRootDir)}, + }, + }) + if err != nil { + return err + } + if res.Status.Code != rpc.Code_CODE_OK { + return fmt.Errorf("error deleting index root dir: %v", idx.indexRootDir) + } + + return nil +} diff --git a/accounts/pkg/indexer/index/cs3/unique.go b/accounts/pkg/indexer/index/cs3/unique.go index a5526b47cb..9768eac6bd 100644 --- a/accounts/pkg/indexer/index/cs3/unique.go +++ b/accounts/pkg/indexer/index/cs3/unique.go @@ -11,6 +11,7 @@ import ( "strings" user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" v1beta11 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" "github.com/cs3org/reva/pkg/rgrpc/todo/pool" @@ -370,3 +371,34 @@ func (idx *Unique) authenticate(ctx context.Context) (token string, err error) { } return idx.tokenManager.MintToken(ctx, u) } + +func (idx *Unique) getAuthenticatedContext(ctx context.Context) (context.Context, error) { + t, err := idx.authenticate(ctx) + if err != nil { + return nil, err + } + ctx = metadata.AppendToOutgoingContext(ctx, token.TokenHeader, t) + return ctx, nil +} + +// Delete deletes the index folder from its storage. +func (idx *Unique) Delete() error { + ctx, err := idx.getAuthenticatedContext(context.Background()) + if err != nil { + return err + } + + res, err := idx.storageProvider.Delete(ctx, &provider.DeleteRequest{ + Ref: &provider.Reference{ + Spec: &provider.Reference_Path{Path: path.Join("/meta", idx.indexRootDir)}, + }, + }) + if err != nil { + return err + } + if res.Status.Code != rpc.Code_CODE_OK { + return fmt.Errorf("error deleting index root dir: %v", idx.indexRootDir) + } + + return nil +} diff --git a/accounts/pkg/indexer/index/disk/autoincrement.go b/accounts/pkg/indexer/index/disk/autoincrement.go index 170e274b92..279b5edb8c 100644 --- a/accounts/pkg/indexer/index/disk/autoincrement.go +++ b/accounts/pkg/indexer/index/disk/autoincrement.go @@ -19,11 +19,11 @@ import ( // Autoincrement are fields for an index of type autoincrement. type Autoincrement struct { - indexBy string - typeName string - filesDir string - indexBaseDir string - indexRootDir string + indexBy string + typeName string + filesDir string + indexBaseDir string + indexRootDir string bound *option.Bound } @@ -54,12 +54,12 @@ func NewAutoincrementIndex(o ...option.Option) index.Index { } return &Autoincrement{ - indexBy: opts.IndexBy, - typeName: opts.TypeName, - filesDir: opts.FilesDir, - bound: opts.Bound, - indexBaseDir: path.Join(opts.DataDir, "index.disk"), - indexRootDir: path.Join(path.Join(opts.DataDir, "index.disk"), strings.Join([]string{"autoincrement", opts.TypeName, opts.IndexBy}, ".")), + indexBy: opts.IndexBy, + typeName: opts.TypeName, + filesDir: opts.FilesDir, + bound: opts.Bound, + indexBaseDir: path.Join(opts.DataDir, "index.disk"), + indexRootDir: path.Join(path.Join(opts.DataDir, "index.disk"), strings.Join([]string{"autoincrement", opts.TypeName, opts.IndexBy}, ".")), } } @@ -260,3 +260,8 @@ func (idx *Autoincrement) next() (int, error) { return latest + 1, nil } + +// Delete deletes the index folder from its storage. +func (idx *Autoincrement) Delete() error { + return nil +} diff --git a/accounts/pkg/indexer/index/disk/non_unique.go b/accounts/pkg/indexer/index/disk/non_unique.go index 8f0c7d6948..b4df3db5b8 100644 --- a/accounts/pkg/indexer/index/disk/non_unique.go +++ b/accounts/pkg/indexer/index/disk/non_unique.go @@ -233,3 +233,8 @@ func (idx *NonUnique) TypeName() string { func (idx *NonUnique) FilesDir() string { return idx.filesDir } + +// Delete deletes the index folder from its storage. +func (idx *NonUnique) Delete() error { + return nil +} diff --git a/accounts/pkg/indexer/index/disk/unique.go b/accounts/pkg/indexer/index/disk/unique.go index 7b94362236..6a53744695 100644 --- a/accounts/pkg/indexer/index/disk/unique.go +++ b/accounts/pkg/indexer/index/disk/unique.go @@ -220,3 +220,8 @@ func isValidSymlink(path string) (err error) { return } + +// Delete deletes the index folder from its storage. +func (idx *Unique) Delete() error { + return nil +} diff --git a/accounts/pkg/indexer/index/index.go b/accounts/pkg/indexer/index/index.go index e6f62862e0..9ad7aee7bd 100644 --- a/accounts/pkg/indexer/index/index.go +++ b/accounts/pkg/indexer/index/index.go @@ -13,4 +13,5 @@ type Index interface { IndexBy() string TypeName() string FilesDir() string + Delete() error // Delete deletes the index folder from its storage. } diff --git a/accounts/pkg/indexer/indexer.go b/accounts/pkg/indexer/indexer.go index 01426e585e..064ac6d751 100644 --- a/accounts/pkg/indexer/indexer.go +++ b/accounts/pkg/indexer/indexer.go @@ -43,11 +43,17 @@ func getRegistryStrategy(cfg *config.Config) string { } func (i Indexer) Reset() error { - for k := range i.indices { - delete(i.indices, k) - } + // TODO: is the root "index.cs3" folder somewhere? + // basically every implementation should take care of deleting its root folder. - // TODO: delete indexes from storage (cs3 / disk) + for j := range i.indices { + for _, indices := range i.indices[j].IndicesByField { + for _, idx := range indices { + _ = idx.Delete() + } + } + delete(i.indices, j) + } return nil } diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go index a0eeedce24..58517cb802 100644 --- a/accounts/pkg/service/v0/index.go +++ b/accounts/pkg/service/v0/index.go @@ -14,9 +14,8 @@ func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRe if err := s.index.Reset(); err != nil { return err } - response.Indices = []string{"foo", "bar"} - if err := createIndices(s.index, s.Config); err != nil { + if err := recreateContainers(s.index, s.Config); err != nil { return err } @@ -25,8 +24,8 @@ func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRe return nil } -// createIndices adds all indices to the indexer that we have for this service. -func createIndices(idx *indexer.Indexer, cfg *config.Config) error { +// recreateContainers adds all indices to the indexer that we have for this service. +func recreateContainers(idx *indexer.Indexer, cfg *config.Config) error { // Accounts if err := idx.AddIndex(&proto.Account{}, "DisplayName", "Id", "accounts", "non_unique", nil, true); err != nil { return err From 03a0c3d5e528ee9a63de6adc4d79f3a2c6aff35d Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 14:45:37 +0200 Subject: [PATCH 06/24] Rebuild index for accounts --- accounts/pkg/service/v0/index.go | 11 +++++++++ accounts/pkg/service/v0/service.go | 2 +- accounts/pkg/storage/cs3.go | 36 ++++++++++++++++++++++++++++++ accounts/pkg/storage/disk.go | 22 ++++++++++++++---- accounts/pkg/storage/repo.go | 4 +++- 5 files changed, 69 insertions(+), 6 deletions(-) diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go index 58517cb802..527af918f8 100644 --- a/accounts/pkg/service/v0/index.go +++ b/accounts/pkg/service/v0/index.go @@ -19,6 +19,17 @@ func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRe return err } + accounts := make([]*proto.Account, 0) + if err := s.repo.LoadAccounts(ctx, accounts); err != nil { + return err + } + for i := range accounts { + _, err := s.index.Add(accounts[i]) + if err != nil { + return err + } + } + // TODO: read all the documents and add them to the indexer. return nil diff --git a/accounts/pkg/service/v0/service.go b/accounts/pkg/service/v0/service.go index 01ce8be166..f1b3b22f14 100644 --- a/accounts/pkg/service/v0/service.go +++ b/accounts/pkg/service/v0/service.go @@ -75,7 +75,7 @@ func New(opts ...Option) (s *Service, err error) { func (s Service) buildIndex() (*indexer.Indexer, error) { idx := indexer.CreateIndexer(s.Config) - if err := createIndices(idx, s.Config); err != nil { + if err := recreateContainers(idx, s.Config); err != nil { return nil, err } return idx, nil diff --git a/accounts/pkg/storage/cs3.go b/accounts/pkg/storage/cs3.go index 930144c875..f2b3e06064 100644 --- a/accounts/pkg/storage/cs3.go +++ b/accounts/pkg/storage/cs3.go @@ -8,6 +8,7 @@ import ( "io/ioutil" "net/http" "path" + "path/filepath" "strings" user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" @@ -18,6 +19,7 @@ import ( "github.com/cs3org/reva/pkg/token/manager/jwt" "github.com/owncloud/ocis/accounts/pkg/config" "github.com/owncloud/ocis/accounts/pkg/proto/v0" + olog "github.com/owncloud/ocis/ocis-pkg/log" "google.golang.org/grpc/metadata" ) @@ -90,6 +92,10 @@ func (r CS3Repo) LoadAccount(ctx context.Context, id string, a *proto.Account) ( return err } + return r.loadAccount(id, t, a) +} + +func (r CS3Repo) loadAccount(id string, t string, a *proto.Account) error { resp, err := r.dataProvider.get(r.accountURL(id), t) if err != nil { return err @@ -109,6 +115,36 @@ func (r CS3Repo) LoadAccount(ctx context.Context, id string, a *proto.Account) ( return json.Unmarshal(b, &a) } +// LoadAccounts loads all the accounts from the cs3 api. If ids are given, the result set will be filtered. +func (r CS3Repo) LoadAccounts(ctx context.Context, a []*proto.Account) (err error) { + t, err := r.authenticate(ctx) + if err != nil { + return err + } + + ctx = metadata.AppendToOutgoingContext(ctx, token.TokenHeader, t) + res, err := r.storageProvider.ListContainer(ctx, &provider.ListContainerRequest{ + Ref: &provider.Reference{ + Spec: &provider.Reference_Path{Path: path.Join("/meta", accountsFolder)}, + }, + }) + if err != nil { + return err + } + + log := olog.NewLogger(olog.Pretty(r.cfg.Log.Pretty), olog.Color(r.cfg.Log.Color), olog.Level(r.cfg.Log.Level)) + for i := range res.Infos { + acc := &proto.Account{} + err := r.loadAccount(filepath.Base(res.Infos[i].Path), t, acc) + if err != nil { + log.Err(err).Msg("could not load account") + continue + } + a = append(a, acc) + } + return nil +} + // DeleteAccount deletes an account via cs3 by id func (r CS3Repo) DeleteAccount(ctx context.Context, id string) (err error) { t, err := r.authenticate(ctx) diff --git a/accounts/pkg/storage/disk.go b/accounts/pkg/storage/disk.go index fddfb6a0ef..ad3b3f1395 100644 --- a/accounts/pkg/storage/disk.go +++ b/accounts/pkg/storage/disk.go @@ -17,8 +17,8 @@ var groupLock sync.Mutex // DiskRepo provides a local filesystem implementation of the Repo interface type DiskRepo struct { - cfg *config.Config - log olog.Logger + cfg *config.Config + log olog.Logger } // NewDiskRepo creates a new disk repo @@ -37,8 +37,8 @@ func NewDiskRepo(cfg *config.Config, log olog.Logger) DiskRepo { } } return DiskRepo{ - cfg: cfg, - log: log, + cfg: cfg, + log: log, } } @@ -70,6 +70,20 @@ func (r DiskRepo) LoadAccount(ctx context.Context, id string, a *proto.Account) return json.Unmarshal(data, a) } +// LoadAccounts loads all the accounts from the local filesystem. If ids are given, the result set will be filtered. +func (r DiskRepo) LoadAccounts(ctx context.Context, a []*proto.Account) (err error) { + root := filepath.Join(r.cfg.Repo.Disk.Path, accountsFolder) + return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + acc := &proto.Account{} + if err = r.LoadAccount(ctx, filepath.Base(path), acc); err != nil { + r.log.Err(err).Msg("could not load account") + return nil + } + a = append(a, acc) + return nil + }) +} + // DeleteAccount from the local filesystem func (r DiskRepo) DeleteAccount(ctx context.Context, id string) (err error) { path := filepath.Join(r.cfg.Repo.Disk.Path, accountsFolder, id) diff --git a/accounts/pkg/storage/repo.go b/accounts/pkg/storage/repo.go index 27f278876a..6833af76ff 100644 --- a/accounts/pkg/storage/repo.go +++ b/accounts/pkg/storage/repo.go @@ -2,18 +2,20 @@ package storage import ( "context" + "github.com/owncloud/ocis/accounts/pkg/proto/v0" ) const ( accountsFolder = "accounts" - groupsFolder = "groups" + groupsFolder = "groups" ) // Repo defines the storage operations type Repo interface { WriteAccount(ctx context.Context, a *proto.Account) (err error) LoadAccount(ctx context.Context, id string, a *proto.Account) (err error) + LoadAccounts(ctx context.Context, a []*proto.Account) (err error) DeleteAccount(ctx context.Context, id string) (err error) WriteGroup(ctx context.Context, g *proto.Group) (err error) LoadGroup(ctx context.Context, id string, g *proto.Group) (err error) From 8ac50f98392972aaa8883d73cddbbbe2786ca05e Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 16:03:03 +0200 Subject: [PATCH 07/24] Fix loading all accounts --- accounts/pkg/service/v0/index.go | 12 ++++++++---- accounts/pkg/storage/cs3.go | 18 +++++++++--------- accounts/pkg/storage/disk.go | 16 ++++++++-------- accounts/pkg/storage/repo.go | 6 +++++- 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go index 527af918f8..5dab75fac3 100644 --- a/accounts/pkg/service/v0/index.go +++ b/accounts/pkg/service/v0/index.go @@ -3,6 +3,8 @@ package service import ( "context" + "github.com/owncloud/ocis/accounts/pkg/storage" + "github.com/owncloud/ocis/accounts/pkg/config" "github.com/owncloud/ocis/accounts/pkg/indexer" "github.com/owncloud/ocis/accounts/pkg/indexer/option" @@ -19,12 +21,14 @@ func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRe return err } - accounts := make([]*proto.Account, 0) - if err := s.repo.LoadAccounts(ctx, accounts); err != nil { + resp := &storage.Accounts{ + Accounts: make([]*proto.Account, 0), + } + if err := s.repo.LoadAccounts(ctx, resp); err != nil { return err } - for i := range accounts { - _, err := s.index.Add(accounts[i]) + for i := range resp.Accounts { + _, err := s.index.Add(resp.Accounts[i]) if err != nil { return err } diff --git a/accounts/pkg/storage/cs3.go b/accounts/pkg/storage/cs3.go index f2b3e06064..1417351a47 100644 --- a/accounts/pkg/storage/cs3.go +++ b/accounts/pkg/storage/cs3.go @@ -23,7 +23,7 @@ import ( "google.golang.org/grpc/metadata" ) -// CS3Repo provides a cs3 implementation of the Repo interface +// CS3Repo provides A cs3 implementation of the Repo interface type CS3Repo struct { cfg *config.Config tm token.Manager @@ -31,7 +31,7 @@ type CS3Repo struct { dataProvider dataProviderClient // Used to create and download data via http, bypassing reva upload protocol } -// NewCS3Repo creates a new cs3 repo +// NewCS3Repo creates A new cs3 repo func NewCS3Repo(cfg *config.Config) (Repo, error) { tokenManager, err := jwt.New(map[string]interface{}{ "secret": cfg.TokenManager.JWTSecret, @@ -58,7 +58,7 @@ func NewCS3Repo(cfg *config.Config) (Repo, error) { }, nil } -// WriteAccount writes an account via cs3 and modifies the provided account (e.g. with a generated id). +// WriteAccount writes an account via cs3 and modifies the provided account (e.G. with A generated id). func (r CS3Repo) WriteAccount(ctx context.Context, a *proto.Account) (err error) { t, err := r.authenticate(ctx) if err != nil { @@ -116,7 +116,7 @@ func (r CS3Repo) loadAccount(id string, t string, a *proto.Account) error { } // LoadAccounts loads all the accounts from the cs3 api. If ids are given, the result set will be filtered. -func (r CS3Repo) LoadAccounts(ctx context.Context, a []*proto.Account) (err error) { +func (r CS3Repo) LoadAccounts(ctx context.Context, a *Accounts) (err error) { t, err := r.authenticate(ctx) if err != nil { return err @@ -140,7 +140,7 @@ func (r CS3Repo) LoadAccounts(ctx context.Context, a []*proto.Account) (err erro log.Err(err).Msg("could not load account") continue } - a = append(a, acc) + a.Accounts = append(a.Accounts, acc) } return nil } @@ -172,7 +172,7 @@ func (r CS3Repo) DeleteAccount(ctx context.Context, id string) (err error) { return nil } -// WriteGroup writes a group via cs3 and modifies the provided group (e.g. with a generated id). +// WriteGroup writes A group via cs3 and modifies the provided group (e.G. with A generated id). func (r CS3Repo) WriteGroup(ctx context.Context, g *proto.Group) (err error) { t, err := r.authenticate(ctx) if err != nil { @@ -199,7 +199,7 @@ func (r CS3Repo) WriteGroup(ctx context.Context, g *proto.Group) (err error) { return nil } -// LoadGroup loads a group via cs3 by id and writes it to the provided group +// LoadGroup loads A group via cs3 by id and writes it to the provided group func (r CS3Repo) LoadGroup(ctx context.Context, id string, g *proto.Group) (err error) { t, err := r.authenticate(ctx) if err != nil { @@ -225,7 +225,7 @@ func (r CS3Repo) LoadGroup(ctx context.Context, id string, g *proto.Group) (err return json.Unmarshal(b, &g) } -// DeleteGroup deletes a group via cs3 by id +// DeleteGroup deletes A group via cs3 by id func (r CS3Repo) DeleteGroup(ctx context.Context, id string) (err error) { t, err := r.authenticate(ctx) if err != nil { @@ -296,7 +296,7 @@ func (r CS3Repo) makeRootDirIfNotExist(ctx context.Context, folder string) error return nil } -// TODO: this is copied from proxy. Find a better solution or move it to ocis-pkg +// TODO: this is copied from proxy. Find A better solution or move it to ocis-pkg func singleJoiningSlash(a, b string) string { aslash := strings.HasSuffix(a, "/") bslash := strings.HasPrefix(b, "/") diff --git a/accounts/pkg/storage/disk.go b/accounts/pkg/storage/disk.go index ad3b3f1395..f7e62cfcfd 100644 --- a/accounts/pkg/storage/disk.go +++ b/accounts/pkg/storage/disk.go @@ -15,13 +15,13 @@ import ( var groupLock sync.Mutex -// DiskRepo provides a local filesystem implementation of the Repo interface +// DiskRepo provides A local filesystem implementation of the Repo interface type DiskRepo struct { cfg *config.Config log olog.Logger } -// NewDiskRepo creates a new disk repo +// NewDiskRepo creates A new disk repo func NewDiskRepo(cfg *config.Config, log olog.Logger) DiskRepo { paths := []string{ filepath.Join(cfg.Repo.Disk.Path, accountsFolder), @@ -71,7 +71,7 @@ func (r DiskRepo) LoadAccount(ctx context.Context, id string, a *proto.Account) } // LoadAccounts loads all the accounts from the local filesystem. If ids are given, the result set will be filtered. -func (r DiskRepo) LoadAccounts(ctx context.Context, a []*proto.Account) (err error) { +func (r DiskRepo) LoadAccounts(ctx context.Context, a *Accounts) (err error) { root := filepath.Join(r.cfg.Repo.Disk.Path, accountsFolder) return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { acc := &proto.Account{} @@ -79,7 +79,7 @@ func (r DiskRepo) LoadAccounts(ctx context.Context, a []*proto.Account) (err err r.log.Err(err).Msg("could not load account") return nil } - a = append(a, acc) + a.Accounts = append(a.Accounts, acc) return nil }) } @@ -147,7 +147,7 @@ func (r DiskRepo) DeleteGroup(ctx context.Context, id string) (err error) { //return merrors.InternalServerError(r.serviceID, "could not remove group: %v", err.Error()) } -// deflateMemberOf replaces the groups of a user with an instance that only contains the id +// deflateMemberOf replaces the groups of A user with an instance that only contains the id func (r DiskRepo) deflateMemberOf(a *proto.Account) { if a == nil { return @@ -157,14 +157,14 @@ func (r DiskRepo) deflateMemberOf(a *proto.Account) { if a.MemberOf[i].Id != "" { deflated = append(deflated, &proto.Group{Id: a.MemberOf[i].Id}) } else { - // TODO fetch and use an id when group only has a name but no id + // TODO fetch and use an id when group only has A name but no id r.log.Error().Str("id", a.Id).Interface("group", a.MemberOf[i]).Msg("resolving groups by name is not implemented yet") } } a.MemberOf = deflated } -// deflateMembers replaces the users of a group with an instance that only contains the id +// deflateMembers replaces the users of A group with an instance that only contains the id func (r DiskRepo) deflateMembers(g *proto.Group) { if g == nil { return @@ -174,7 +174,7 @@ func (r DiskRepo) deflateMembers(g *proto.Group) { if g.Members[i].Id != "" { deflated = append(deflated, &proto.Account{Id: g.Members[i].Id}) } else { - // TODO fetch and use an id when group only has a name but no id + // TODO fetch and use an id when group only has A name but no id r.log.Error().Str("id", g.Id).Interface("account", g.Members[i]).Msg("resolving members by name is not implemented yet") } } diff --git a/accounts/pkg/storage/repo.go b/accounts/pkg/storage/repo.go index 6833af76ff..77a9518270 100644 --- a/accounts/pkg/storage/repo.go +++ b/accounts/pkg/storage/repo.go @@ -11,11 +11,15 @@ const ( groupsFolder = "groups" ) +type Accounts struct { + Accounts []*proto.Account +} + // Repo defines the storage operations type Repo interface { WriteAccount(ctx context.Context, a *proto.Account) (err error) LoadAccount(ctx context.Context, id string, a *proto.Account) (err error) - LoadAccounts(ctx context.Context, a []*proto.Account) (err error) + LoadAccounts(ctx context.Context, a *Accounts) (err error) DeleteAccount(ctx context.Context, id string) (err error) WriteGroup(ctx context.Context, g *proto.Group) (err error) LoadGroup(ctx context.Context, id string, g *proto.Group) (err error) From 6eaa04ee9e97dfd0ca5ba909823043b758f17271 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 16:09:00 +0200 Subject: [PATCH 08/24] Rebuild groups index --- accounts/pkg/service/v0/index.go | 21 ++++++--- accounts/pkg/storage/cs3.go | 76 +++++++++++++++++++++++--------- accounts/pkg/storage/disk.go | 19 ++++++-- accounts/pkg/storage/repo.go | 5 +++ 4 files changed, 91 insertions(+), 30 deletions(-) diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go index 5dab75fac3..dd6184d7b5 100644 --- a/accounts/pkg/service/v0/index.go +++ b/accounts/pkg/service/v0/index.go @@ -21,20 +21,31 @@ func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRe return err } - resp := &storage.Accounts{ + accounts := &storage.Accounts{ Accounts: make([]*proto.Account, 0), } - if err := s.repo.LoadAccounts(ctx, resp); err != nil { + if err := s.repo.LoadAccounts(ctx, accounts); err != nil { return err } - for i := range resp.Accounts { - _, err := s.index.Add(resp.Accounts[i]) + for i := range accounts.Accounts { + _, err := s.index.Add(accounts.Accounts[i]) if err != nil { return err } } - // TODO: read all the documents and add them to the indexer. + groups := &storage.Groups{ + Groups: make([]*proto.Group, 0), + } + if err := s.repo.LoadGroups(ctx, groups); err != nil { + return err + } + for i := range groups.Groups { + _, err := s.index.Add(groups.Groups[i]) + if err != nil { + return err + } + } return nil } diff --git a/accounts/pkg/storage/cs3.go b/accounts/pkg/storage/cs3.go index 1417351a47..0fdbcc3033 100644 --- a/accounts/pkg/storage/cs3.go +++ b/accounts/pkg/storage/cs3.go @@ -95,27 +95,7 @@ func (r CS3Repo) LoadAccount(ctx context.Context, id string, a *proto.Account) ( return r.loadAccount(id, t, a) } -func (r CS3Repo) loadAccount(id string, t string, a *proto.Account) error { - resp, err := r.dataProvider.get(r.accountURL(id), t) - if err != nil { - return err - } - - if resp.StatusCode == http.StatusNotFound { - return ¬FoundErr{"account", id} - } - - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return err - } - if err = resp.Body.Close(); err != nil { - return err - } - return json.Unmarshal(b, &a) -} - -// LoadAccounts loads all the accounts from the cs3 api. If ids are given, the result set will be filtered. +// LoadAccounts loads all the accounts from the cs3 api func (r CS3Repo) LoadAccounts(ctx context.Context, a *Accounts) (err error) { t, err := r.authenticate(ctx) if err != nil { @@ -145,6 +125,26 @@ func (r CS3Repo) LoadAccounts(ctx context.Context, a *Accounts) (err error) { return nil } +func (r CS3Repo) loadAccount(id string, t string, a *proto.Account) error { + resp, err := r.dataProvider.get(r.accountURL(id), t) + if err != nil { + return err + } + + if resp.StatusCode == http.StatusNotFound { + return ¬FoundErr{"account", id} + } + + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return err + } + if err = resp.Body.Close(); err != nil { + return err + } + return json.Unmarshal(b, &a) +} + // DeleteAccount deletes an account via cs3 by id func (r CS3Repo) DeleteAccount(ctx context.Context, id string) (err error) { t, err := r.authenticate(ctx) @@ -206,6 +206,40 @@ func (r CS3Repo) LoadGroup(ctx context.Context, id string, g *proto.Group) (err return err } + return r.loadGroup(id, t, g) +} + +// LoadGroups loads all the groups from the cs3 api +func (r CS3Repo) LoadGroups(ctx context.Context, g *Groups) (err error) { + t, err := r.authenticate(ctx) + if err != nil { + return err + } + + ctx = metadata.AppendToOutgoingContext(ctx, token.TokenHeader, t) + res, err := r.storageProvider.ListContainer(ctx, &provider.ListContainerRequest{ + Ref: &provider.Reference{ + Spec: &provider.Reference_Path{Path: path.Join("/meta", groupsFolder)}, + }, + }) + if err != nil { + return err + } + + log := olog.NewLogger(olog.Pretty(r.cfg.Log.Pretty), olog.Color(r.cfg.Log.Color), olog.Level(r.cfg.Log.Level)) + for i := range res.Infos { + grp := &proto.Group{} + err := r.loadGroup(filepath.Base(res.Infos[i].Path), t, grp) + if err != nil { + log.Err(err).Msg("could not load account") + continue + } + g.Groups = append(g.Groups, grp) + } + return nil +} + +func (r CS3Repo) loadGroup(id string, t string, g *proto.Group) error { resp, err := r.dataProvider.get(r.groupURL(id), t) if err != nil { return err diff --git a/accounts/pkg/storage/disk.go b/accounts/pkg/storage/disk.go index f7e62cfcfd..4de84d2b93 100644 --- a/accounts/pkg/storage/disk.go +++ b/accounts/pkg/storage/disk.go @@ -70,7 +70,7 @@ func (r DiskRepo) LoadAccount(ctx context.Context, id string, a *proto.Account) return json.Unmarshal(data, a) } -// LoadAccounts loads all the accounts from the local filesystem. If ids are given, the result set will be filtered. +// LoadAccounts loads all the accounts from the local filesystem func (r DiskRepo) LoadAccounts(ctx context.Context, a *Accounts) (err error) { root := filepath.Join(r.cfg.Repo.Disk.Path, accountsFolder) return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { @@ -132,6 +132,20 @@ func (r DiskRepo) LoadGroup(ctx context.Context, id string, g *proto.Group) (err return json.Unmarshal(data, g) } +// LoadGroups loads all the groups from the local filesystem +func (r DiskRepo) LoadGroups(ctx context.Context, g *Groups) (err error) { + root := filepath.Join(r.cfg.Repo.Disk.Path, groupsFolder) + return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + grp := &proto.Group{} + if err = r.LoadGroup(ctx, filepath.Base(path), grp); err != nil { + r.log.Err(err).Msg("could not load group") + return nil + } + g.Groups = append(g.Groups, grp) + return nil + }) +} + // DeleteGroup from the local filesystem func (r DiskRepo) DeleteGroup(ctx context.Context, id string) (err error) { path := filepath.Join(r.cfg.Repo.Disk.Path, groupsFolder, id) @@ -142,9 +156,6 @@ func (r DiskRepo) DeleteGroup(ctx context.Context, id string) (err error) { } return - - //r.log.Error().Err(err).Str("id", id).Str("path", path).Msg("could not remove group") - //return merrors.InternalServerError(r.serviceID, "could not remove group: %v", err.Error()) } // deflateMemberOf replaces the groups of A user with an instance that only contains the id diff --git a/accounts/pkg/storage/repo.go b/accounts/pkg/storage/repo.go index 77a9518270..bb3e1a6a7d 100644 --- a/accounts/pkg/storage/repo.go +++ b/accounts/pkg/storage/repo.go @@ -15,6 +15,10 @@ type Accounts struct { Accounts []*proto.Account } +type Groups struct { + Groups []*proto.Group +} + // Repo defines the storage operations type Repo interface { WriteAccount(ctx context.Context, a *proto.Account) (err error) @@ -23,5 +27,6 @@ type Repo interface { DeleteAccount(ctx context.Context, id string) (err error) WriteGroup(ctx context.Context, g *proto.Group) (err error) LoadGroup(ctx context.Context, id string, g *proto.Group) (err error) + LoadGroups(ctx context.Context, g *Groups) (err error) DeleteGroup(ctx context.Context, id string) (err error) } From 16a74c8a7e3250249e4fd8a38ec1663dd83e747f Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 16:15:52 +0200 Subject: [PATCH 09/24] Docblocks and refactoring --- accounts/pkg/indexer/indexer.go | 4 +- accounts/pkg/proto/v0/accounts.pb.go | 823 ++++++++++---------- accounts/pkg/proto/v0/accounts.proto | 2 - accounts/pkg/proto/v0/accounts.swagger.json | 10 +- accounts/pkg/service/v0/index.go | 58 +- 5 files changed, 439 insertions(+), 458 deletions(-) diff --git a/accounts/pkg/indexer/indexer.go b/accounts/pkg/indexer/indexer.go index 064ac6d751..69a28af516 100644 --- a/accounts/pkg/indexer/indexer.go +++ b/accounts/pkg/indexer/indexer.go @@ -42,10 +42,8 @@ func getRegistryStrategy(cfg *config.Config) string { return "cs3" } +// Reset takes care of deleting all indices from storage and from the internal map of indices func (i Indexer) Reset() error { - // TODO: is the root "index.cs3" folder somewhere? - // basically every implementation should take care of deleting its root folder. - for j := range i.indices { for _, indices := range i.indices[j].IndicesByField { for _, idx := range indices { diff --git a/accounts/pkg/proto/v0/accounts.pb.go b/accounts/pkg/proto/v0/accounts.pb.go index d71668f602..d265ca3131 100644 --- a/accounts/pkg/proto/v0/accounts.pb.go +++ b/accounts/pkg/proto/v0/accounts.pb.go @@ -71,8 +71,6 @@ type RebuildIndexResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - - Indices []string `protobuf:"bytes,1,rep,name=Indices,proto3" json:"Indices,omitempty"` } func (x *RebuildIndexResponse) Reset() { @@ -107,13 +105,6 @@ func (*RebuildIndexResponse) Descriptor() ([]byte, []int) { return file_accounts_proto_rawDescGZIP(), []int{1} } -func (x *RebuildIndexResponse) GetIndices() []string { - if x != nil { - return x.Indices - } - return nil -} - type ListAccountsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1940,11 +1931,179 @@ var file_accounts_proto_rawDesc = []byte{ 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x30, 0x0a, 0x14, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x6e, 0x64, 0x69, - 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x49, 0x6e, 0x64, 0x69, 0x63, - 0x65, 0x73, 0x22, 0xb1, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, + 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, + 0x6b, 0x12, 0x19, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x6d, 0x0a, 0x14, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 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, 0x23, 0x0a, 0x11, 0x47, + 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x43, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, + 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x26, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x88, 0x0d, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x11, 0x69, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x69, + 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, + 0x75, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x64, + 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, + 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x69, 0x6c, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, + 0x0a, 0x10, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, + 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x52, 0x0f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, + 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4f, + 0x66, 0x12, 0x46, 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, + 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x14, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x15, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, + 0x79, 0x6e, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, + 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x6d, 0x75, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x6e, + 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, + 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x6f, 0x6e, + 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x1e, 0x6f, 0x6e, + 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x1b, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x69, + 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x3e, 0x0a, 0x1c, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, + 0x61, 0x6d, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, + 0x73, 0x53, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x35, 0x0a, 0x17, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x64, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x14, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, + 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, + 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x1b, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x55, 0x73, 0x65, 0x72, 0x50, + 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5f, 0x0a, 0x1f, + 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x1c, 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, 0x1a, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x4c, 0x61, 0x73, + 0x74, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x6c, 0x0a, + 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, + 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x4f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x1c, 0x6f, + 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x24, 0x65, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x29, 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, 0x1f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, + 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x67, 0x0a, 0x23, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, + 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x66, + 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x3c, 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, + 0x1e, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x6a, 0x0a, 0x25, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x3d, 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, 0x1f, 0x73, 0x69, 0x67, 0x6e, + 0x49, 0x6e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x46, + 0x72, 0x6f, 0x6d, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x74, 0x0a, 0x0a, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x69, 0x67, + 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, + 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, + 0x75, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x61, 0x73, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, + 0x64, 0x22, 0xe0, 0x02, 0x0a, 0x0f, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x12, 0x5e, 0x0a, 0x1e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1a, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x49, + 0x0a, 0x22, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x69, 0x67, + 0x6e, 0x5f, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x66, 0x6f, 0x72, 0x63, + 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4e, + 0x65, 0x78, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x12, 0x59, 0x0a, 0x2b, 0x66, 0x6f, 0x72, + 0x63, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, + 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6d, 0x66, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, + 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, + 0x6f, 0x72, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x57, 0x69, 0x74, + 0x68, 0x4d, 0x66, 0x61, 0x22, 0xaf, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, @@ -1954,416 +2113,246 @@ var file_accounts_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x19, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x6d, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, - 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 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, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x43, 0x0a, 0x14, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x80, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, - 0x73, 0x6b, 0x22, 0x26, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x88, 0x0d, 0x0a, 0x07, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, - 0x2e, 0x0a, 0x13, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x73, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0a, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, - 0x0e, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x69, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x69, 0x64, 0x4e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x10, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x50, 0x61, - 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0f, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2b, - 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x12, 0x46, 0x0a, 0x11, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x6f, - 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x6f, - 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, - 0x73, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, - 0x65, 0x73, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x45, 0x0a, - 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, - 0x65, 0x73, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x1e, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, - 0x73, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x6f, 0x6e, - 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, - 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x1c, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x61, 0x6d, 0x5f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x18, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x61, 0x6d, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6f, 0x6e, 0x50, 0x72, - 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x44, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x6f, 0x6e, 0x50, 0x72, 0x65, - 0x6d, 0x69, 0x73, 0x65, 0x73, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, - 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5f, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, - 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, - 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x22, 0x65, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x06, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, + 0x72, 0x6f, 0x75, 0x70, 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, 0x21, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x3b, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x78, 0x0a, + 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 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, 0x1a, 0x6f, 0x6e, 0x50, - 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x44, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x6c, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, - 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x1d, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4f, 0x6e, 0x50, 0x72, + 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x24, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4c, 0x0a, + 0x10, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x13, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xc0, 0x01, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, + 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, + 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x19, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, + 0x6a, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 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, 0xea, 0x08, 0x0a, 0x05, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, + 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x69, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x46, 0x0a, 0x11, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x4c, 0x0a, 0x14, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 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, 0x12, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x35, 0x0a, 0x17, 0x68, 0x69, 0x64, 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x14, 0x68, 0x69, 0x64, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, + 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, + 0x69, 0x73, 0x65, 0x73, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, + 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x69, + 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x15, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x49, 0x6d, 0x6d, + 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x45, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, + 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x1c, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, + 0x43, 0x0a, 0x1e, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x64, + 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, + 0x73, 0x65, 0x73, 0x44, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x1c, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, + 0x73, 0x65, 0x73, 0x5f, 0x73, 0x61, 0x6d, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6f, 0x6e, 0x50, 0x72, + 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, + 0x73, 0x65, 0x73, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, + 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x19, 0x6f, + 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x62, + 0x69, 0x6f, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, + 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x4e, 0x65, 0x74, 0x42, 0x69, 0x6f, + 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, + 0x69, 0x73, 0x65, 0x73, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, + 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x79, + 0x6e, 0x63, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x6c, 0x0a, 0x1f, 0x6f, 0x6e, + 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x1c, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4f, + 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x1c, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, - 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x1c, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, - 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x11, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x24, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x29, 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, - 0x1f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x67, 0x0a, 0x23, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x3c, 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, 0x1e, 0x72, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x72, 0x6f, - 0x6d, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x6a, 0x0a, 0x25, 0x73, 0x69, 0x67, - 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x3d, 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, 0x1f, 0x73, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x61, 0x74, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x74, 0x0a, 0x0a, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x49, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x12, 0x2c, 0x0a, - 0x12, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, 0x73, 0x73, 0x75, 0x65, - 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, 0x64, 0x22, 0xe0, 0x02, 0x0a, 0x0f, - 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x5e, 0x0a, 0x1e, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x1a, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x22, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x69, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x53, 0x69, 0x67, - 0x6e, 0x49, 0x6e, 0x12, 0x59, 0x0a, 0x2b, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x6e, 0x65, 0x78, - 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6d, - 0x66, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x24, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x43, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x4e, 0x65, 0x78, - 0x74, 0x53, 0x69, 0x67, 0x6e, 0x49, 0x6e, 0x57, 0x69, 0x74, 0x68, 0x4d, 0x66, 0x61, 0x22, 0xaf, - 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x19, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x22, 0x65, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 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, 0x21, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x12, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x25, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x78, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, - 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, - 0x61, 0x73, 0x6b, 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, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, - 0x6b, 0x22, 0x24, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4c, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x4f, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0xc0, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x22, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, - 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, - 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x19, - 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, - 0x41, 0x01, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6a, 0x0a, 0x13, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 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, 0xea, 0x08, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, - 0x29, 0x0a, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x06, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, - 0x67, 0x69, 0x64, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x67, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x11, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4c, 0x0a, 0x14, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x09, 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, 0x12, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x68, 0x69, 0x64, - 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x68, 0x69, 0x64, 0x65, - 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, - 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, - 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x15, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x79, - 0x6e, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x6e, 0x50, - 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x49, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x49, 0x64, 0x12, 0x45, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, - 0x73, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x6f, 0x6e, 0x50, - 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x1e, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x1b, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x69, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, - 0x0a, 0x1c, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x73, 0x61, - 0x6d, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x18, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, - 0x53, 0x61, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x35, - 0x0a, 0x17, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x19, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, - 0x69, 0x73, 0x65, 0x73, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x62, 0x69, 0x6f, 0x73, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, - 0x69, 0x73, 0x65, 0x73, 0x4e, 0x65, 0x74, 0x42, 0x69, 0x6f, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x43, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x5f, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1a, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, - 0x69, 0x73, 0x65, 0x73, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x6c, 0x0a, 0x1f, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x6d, 0x69, - 0x73, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, - 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, - 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x52, 0x1c, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x1b, 0x4f, 0x6e, 0x50, 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, - 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x48, - 0x0a, 0x12, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, - 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x43, 0x61, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x32, 0xcb, 0x04, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x78, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, - 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x3a, - 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x2d, 0x67, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0d, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x2d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6f, 0x0a, 0x0d, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, - 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x2d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0d, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x2e, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 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, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, + 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x1b, 0x4f, 0x6e, 0x50, + 0x72, 0x65, 0x6d, 0x69, 0x73, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x69, 0x6e, 0x67, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, + 0x67, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, + 0x67, 0x6f, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x12, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x6f, 0x63, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x34, + 0x0a, 0x16, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x5f, 0x63, 0x61, 0x75, 0x73, 0x69, + 0x6e, 0x67, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x43, 0x61, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0xcb, 0x04, 0x0a, 0x0f, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x78, + 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1d, + 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x66, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x1d, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x67, 0x65, 0x74, 0x3a, 0x01, 0x2a, + 0x12, 0x6f, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x01, + 0x2a, 0x12, 0x6f, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, - 0x01, 0x2a, 0x32, 0x90, 0x07, 0x0a, 0x0d, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x70, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x6c, - 0x69, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x5e, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x65, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x26, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, - 0x67, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x67, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, + 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 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, 0x22, 0x2b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x25, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2d, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x32, 0x90, 0x07, 0x0a, 0x0d, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x70, 0x0a, 0x0a, 0x4c, 0x69, + 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x1b, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x1c, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x5e, 0x0a, 0x08, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x19, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, + 0x72, 0x6f, 0x75, 0x70, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, - 0x67, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, - 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x73, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x29, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6e, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6d, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x30, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, - 0x24, 0x72, 0x65, 0x66, 0x3a, 0x01, 0x2a, 0x12, 0x80, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x67, 0x65, 0x74, 0x3a, 0x01, 0x2a, 0x12, 0x67, 0x0a, 0x0b, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x67, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6e, + 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x2e, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x1e, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x6d, + 0x0a, 0x09, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, - 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, + 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x7d, 0x2f, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x24, 0x72, 0x65, 0x66, 0x3a, 0x01, 0x2a, 0x12, 0x79, 0x0a, 0x0b, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x3d, 0x2a, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x24, 0x72, - 0x65, 0x66, 0x3a, 0x01, 0x2a, 0x32, 0x7f, 0x0a, 0x0c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0c, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2f, 0x72, 0x65, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x3a, 0x01, 0x2a, 0x42, 0x14, 0x5a, 0x12, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x30, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x24, 0x72, 0x65, 0x66, 0x3a, 0x01, 0x2a, 0x12, 0x80, 0x01, + 0x0a, 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1d, + 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x40, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x3d, 0x2a, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x24, 0x72, 0x65, 0x66, 0x3a, 0x01, 0x2a, + 0x12, 0x79, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, + 0x1c, 0x2e, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x27, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x3d, 0x2a, 0x7d, 0x2f, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x2f, 0x24, 0x72, 0x65, 0x66, 0x3a, 0x01, 0x2a, 0x32, 0x7f, 0x0a, 0x0c, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x0c, 0x52, + 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1d, 0x2e, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x30, 0x2f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x2f, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x3a, 0x01, 0x2a, 0x42, 0x14, 0x5a, 0x12, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x30, 0x3b, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/accounts/pkg/proto/v0/accounts.proto b/accounts/pkg/proto/v0/accounts.proto index 3cf9c98f97..9410491d29 100644 --- a/accounts/pkg/proto/v0/accounts.proto +++ b/accounts/pkg/proto/v0/accounts.proto @@ -148,11 +148,9 @@ service IndexService { } message RebuildIndexRequest { - } message RebuildIndexResponse { - repeated string Indices = 1; } message ListAccountsRequest { diff --git a/accounts/pkg/proto/v0/accounts.swagger.json b/accounts/pkg/proto/v0/accounts.swagger.json index d8cd17d81e..37f50807d9 100644 --- a/accounts/pkg/proto/v0/accounts.swagger.json +++ b/accounts/pkg/proto/v0/accounts.swagger.json @@ -1045,15 +1045,7 @@ "type": "object" }, "settingsRebuildIndexResponse": { - "type": "object", - "properties": { - "Indices": { - "type": "array", - "items": { - "type": "string" - } - } - } + "type": "object" }, "settingsRemoveMemberRequest": { "type": "object", diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go index dd6184d7b5..e62a3b88df 100644 --- a/accounts/pkg/service/v0/index.go +++ b/accounts/pkg/service/v0/index.go @@ -21,33 +21,7 @@ func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRe return err } - accounts := &storage.Accounts{ - Accounts: make([]*proto.Account, 0), - } - if err := s.repo.LoadAccounts(ctx, accounts); err != nil { - return err - } - for i := range accounts.Accounts { - _, err := s.index.Add(accounts.Accounts[i]) - if err != nil { - return err - } - } - - groups := &storage.Groups{ - Groups: make([]*proto.Group, 0), - } - if err := s.repo.LoadGroups(ctx, groups); err != nil { - return err - } - for i := range groups.Groups { - _, err := s.index.Add(groups.Groups[i]) - if err != nil { - return err - } - } - - return nil + return reindexDocuments(ctx, s.repo, s.index) } // recreateContainers adds all indices to the indexer that we have for this service. @@ -93,3 +67,33 @@ func recreateContainers(idx *indexer.Indexer, cfg *config.Config) error { return nil } + +// reindexDocuments loads all existing documents and adds them to the index. +func reindexDocuments(ctx context.Context, repo storage.Repo, index *indexer.Indexer) error { + accounts := &storage.Accounts{ + Accounts: make([]*proto.Account, 0), + } + if err := repo.LoadAccounts(ctx, accounts); err != nil { + return err + } + for i := range accounts.Accounts { + _, err := index.Add(accounts.Accounts[i]) + if err != nil { + return err + } + } + + groups := &storage.Groups{ + Groups: make([]*proto.Group, 0), + } + if err := repo.LoadGroups(ctx, groups); err != nil { + return err + } + for i := range groups.Groups { + _, err := index.Add(groups.Groups[i]) + if err != nil { + return err + } + } + return nil +} From bf5a96071425add2056f28d15e67e6e2c1c8b5f2 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 16:30:23 +0200 Subject: [PATCH 10/24] Reformat responses --- accounts/pkg/command/rebuild_index.go | 4 ++-- accounts/pkg/service/v0/index.go | 20 ++++++++------------ accounts/pkg/storage/cs3.go | 8 ++++---- accounts/pkg/storage/disk.go | 8 ++++---- accounts/pkg/storage/repo.go | 12 ++---------- 5 files changed, 20 insertions(+), 32 deletions(-) diff --git a/accounts/pkg/command/rebuild_index.go b/accounts/pkg/command/rebuild_index.go index b4df1d55f2..3f37023619 100644 --- a/accounts/pkg/command/rebuild_index.go +++ b/accounts/pkg/command/rebuild_index.go @@ -20,12 +20,12 @@ func DeleteIndex(cdf *config.Config) *cli.Command { idxSvcID := "com.owncloud.api.accounts" idxSvc := index.NewIndexService(idxSvcID, grpc.NewClient()) - rsp, err := idxSvc.RebuildIndex(context.Background(), &index.RebuildIndexRequest{}) + _, err := idxSvc.RebuildIndex(context.Background(), &index.RebuildIndexRequest{}) if err != nil { return err } - fmt.Printf("deleted: %+v", rsp.Indices) + fmt.Print("index rebuilt successfully") return nil }, } diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go index e62a3b88df..5bb3f49bcb 100644 --- a/accounts/pkg/service/v0/index.go +++ b/accounts/pkg/service/v0/index.go @@ -70,27 +70,23 @@ func recreateContainers(idx *indexer.Indexer, cfg *config.Config) error { // reindexDocuments loads all existing documents and adds them to the index. func reindexDocuments(ctx context.Context, repo storage.Repo, index *indexer.Indexer) error { - accounts := &storage.Accounts{ - Accounts: make([]*proto.Account, 0), - } - if err := repo.LoadAccounts(ctx, accounts); err != nil { + accounts := make([]*proto.Account, 0) + if err := repo.LoadAccounts(ctx, &accounts); err != nil { return err } - for i := range accounts.Accounts { - _, err := index.Add(accounts.Accounts[i]) + for i := range accounts { + _, err := index.Add(accounts[i]) if err != nil { return err } } - groups := &storage.Groups{ - Groups: make([]*proto.Group, 0), - } - if err := repo.LoadGroups(ctx, groups); err != nil { + groups := make([]*proto.Group, 0) + if err := repo.LoadGroups(ctx, &groups); err != nil { return err } - for i := range groups.Groups { - _, err := index.Add(groups.Groups[i]) + for i := range groups { + _, err := index.Add(groups[i]) if err != nil { return err } diff --git a/accounts/pkg/storage/cs3.go b/accounts/pkg/storage/cs3.go index 0fdbcc3033..af41f95ed6 100644 --- a/accounts/pkg/storage/cs3.go +++ b/accounts/pkg/storage/cs3.go @@ -96,7 +96,7 @@ func (r CS3Repo) LoadAccount(ctx context.Context, id string, a *proto.Account) ( } // LoadAccounts loads all the accounts from the cs3 api -func (r CS3Repo) LoadAccounts(ctx context.Context, a *Accounts) (err error) { +func (r CS3Repo) LoadAccounts(ctx context.Context, a *[]*proto.Account) (err error) { t, err := r.authenticate(ctx) if err != nil { return err @@ -120,7 +120,7 @@ func (r CS3Repo) LoadAccounts(ctx context.Context, a *Accounts) (err error) { log.Err(err).Msg("could not load account") continue } - a.Accounts = append(a.Accounts, acc) + *a = append(*a, acc) } return nil } @@ -210,7 +210,7 @@ func (r CS3Repo) LoadGroup(ctx context.Context, id string, g *proto.Group) (err } // LoadGroups loads all the groups from the cs3 api -func (r CS3Repo) LoadGroups(ctx context.Context, g *Groups) (err error) { +func (r CS3Repo) LoadGroups(ctx context.Context, g *[]*proto.Group) (err error) { t, err := r.authenticate(ctx) if err != nil { return err @@ -234,7 +234,7 @@ func (r CS3Repo) LoadGroups(ctx context.Context, g *Groups) (err error) { log.Err(err).Msg("could not load account") continue } - g.Groups = append(g.Groups, grp) + *g = append(*g, grp) } return nil } diff --git a/accounts/pkg/storage/disk.go b/accounts/pkg/storage/disk.go index 4de84d2b93..4d09e61b43 100644 --- a/accounts/pkg/storage/disk.go +++ b/accounts/pkg/storage/disk.go @@ -71,7 +71,7 @@ func (r DiskRepo) LoadAccount(ctx context.Context, id string, a *proto.Account) } // LoadAccounts loads all the accounts from the local filesystem -func (r DiskRepo) LoadAccounts(ctx context.Context, a *Accounts) (err error) { +func (r DiskRepo) LoadAccounts(ctx context.Context, a *[]*proto.Account) (err error) { root := filepath.Join(r.cfg.Repo.Disk.Path, accountsFolder) return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { acc := &proto.Account{} @@ -79,7 +79,7 @@ func (r DiskRepo) LoadAccounts(ctx context.Context, a *Accounts) (err error) { r.log.Err(err).Msg("could not load account") return nil } - a.Accounts = append(a.Accounts, acc) + *a = append(*a, acc) return nil }) } @@ -133,7 +133,7 @@ func (r DiskRepo) LoadGroup(ctx context.Context, id string, g *proto.Group) (err } // LoadGroups loads all the groups from the local filesystem -func (r DiskRepo) LoadGroups(ctx context.Context, g *Groups) (err error) { +func (r DiskRepo) LoadGroups(ctx context.Context, g *[]*proto.Group) (err error) { root := filepath.Join(r.cfg.Repo.Disk.Path, groupsFolder) return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { grp := &proto.Group{} @@ -141,7 +141,7 @@ func (r DiskRepo) LoadGroups(ctx context.Context, g *Groups) (err error) { r.log.Err(err).Msg("could not load group") return nil } - g.Groups = append(g.Groups, grp) + *g = append(*g, grp) return nil }) } diff --git a/accounts/pkg/storage/repo.go b/accounts/pkg/storage/repo.go index bb3e1a6a7d..739dff43a8 100644 --- a/accounts/pkg/storage/repo.go +++ b/accounts/pkg/storage/repo.go @@ -11,22 +11,14 @@ const ( groupsFolder = "groups" ) -type Accounts struct { - Accounts []*proto.Account -} - -type Groups struct { - Groups []*proto.Group -} - // Repo defines the storage operations type Repo interface { WriteAccount(ctx context.Context, a *proto.Account) (err error) LoadAccount(ctx context.Context, id string, a *proto.Account) (err error) - LoadAccounts(ctx context.Context, a *Accounts) (err error) + LoadAccounts(ctx context.Context, a *[]*proto.Account) (err error) DeleteAccount(ctx context.Context, id string) (err error) WriteGroup(ctx context.Context, g *proto.Group) (err error) LoadGroup(ctx context.Context, id string, g *proto.Group) (err error) - LoadGroups(ctx context.Context, g *Groups) (err error) + LoadGroups(ctx context.Context, g *[]*proto.Group) (err error) DeleteGroup(ctx context.Context, id string) (err error) } From be6c429535a99418a26331e551a93e36319d30f3 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 16:34:51 +0200 Subject: [PATCH 11/24] Add more details to errors --- accounts/pkg/service/v0/index.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/accounts/pkg/service/v0/index.go b/accounts/pkg/service/v0/index.go index 5bb3f49bcb..3bb75e4399 100644 --- a/accounts/pkg/service/v0/index.go +++ b/accounts/pkg/service/v0/index.go @@ -2,6 +2,7 @@ package service import ( "context" + "fmt" "github.com/owncloud/ocis/accounts/pkg/storage" @@ -14,14 +15,18 @@ import ( // RebuildIndex deletes all indices (in memory and on storage) and rebuilds them from scratch. func (s Service) RebuildIndex(ctx context.Context, request *proto.RebuildIndexRequest, response *proto.RebuildIndexResponse) error { if err := s.index.Reset(); err != nil { - return err + return fmt.Errorf("failed to delete index containers: %w", err) } if err := recreateContainers(s.index, s.Config); err != nil { - return err + return fmt.Errorf("failed to recreate index containers: %w", err) } - return reindexDocuments(ctx, s.repo, s.index) + if err := reindexDocuments(ctx, s.repo, s.index); err != nil { + return fmt.Errorf("failed to reindex documents: %w", err) + } + + return nil } // recreateContainers adds all indices to the indexer that we have for this service. From ed5cb9d6100b41c46115b49d7f2c7ea2eb892dea Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 16:40:20 +0200 Subject: [PATCH 12/24] Print error on rebuild command --- accounts/pkg/command/rebuild_index.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/accounts/pkg/command/rebuild_index.go b/accounts/pkg/command/rebuild_index.go index 3f37023619..9cc73ce910 100644 --- a/accounts/pkg/command/rebuild_index.go +++ b/accounts/pkg/command/rebuild_index.go @@ -6,6 +6,7 @@ import ( "github.com/micro/cli/v2" "github.com/micro/go-micro/v2/client/grpc" + merrors "github.com/micro/go-micro/v2/errors" "github.com/owncloud/ocis/accounts/pkg/config" index "github.com/owncloud/ocis/accounts/pkg/proto/v0" ) @@ -22,10 +23,11 @@ func DeleteIndex(cdf *config.Config) *cli.Command { _, err := idxSvc.RebuildIndex(context.Background(), &index.RebuildIndexRequest{}) if err != nil { + fmt.Println(merrors.FromError(err).Detail) return err } - fmt.Print("index rebuilt successfully") + fmt.Println("index rebuilt successfully") return nil }, } From 2b76accc42aac1adb7b9966feb5ff6b99e81fcec Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 16:51:53 +0200 Subject: [PATCH 13/24] Refactor delete into helper --- .../pkg/indexer/index/cs3/autoincrement.go | 15 +---------- accounts/pkg/indexer/index/cs3/helper.go | 26 +++++++++++++++++++ accounts/pkg/indexer/index/cs3/non_unique.go | 16 +----------- accounts/pkg/indexer/index/cs3/unique.go | 15 +---------- .../unreleased/accounts-index-rebuild.md | 7 +++++ 5 files changed, 36 insertions(+), 43 deletions(-) create mode 100644 accounts/pkg/indexer/index/cs3/helper.go create mode 100644 changelog/unreleased/accounts-index-rebuild.md diff --git a/accounts/pkg/indexer/index/cs3/autoincrement.go b/accounts/pkg/indexer/index/cs3/autoincrement.go index ded4d9aa12..d1d9a9268d 100644 --- a/accounts/pkg/indexer/index/cs3/autoincrement.go +++ b/accounts/pkg/indexer/index/cs3/autoincrement.go @@ -15,7 +15,6 @@ import ( idxerrs "github.com/owncloud/ocis/accounts/pkg/indexer/errors" user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" - rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" v1beta11 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" "github.com/cs3org/reva/pkg/rgrpc/todo/pool" @@ -403,17 +402,5 @@ func (idx *Autoincrement) Delete() error { return err } - res, err := idx.storageProvider.Delete(ctx, &provider.DeleteRequest{ - Ref: &provider.Reference{ - Spec: &provider.Reference_Path{Path: path.Join("/meta", idx.indexRootDir)}, - }, - }) - if err != nil { - return err - } - if res.Status.Code != rpc.Code_CODE_OK { - return fmt.Errorf("error deleting index root dir: %v", idx.indexRootDir) - } - - return nil + return deleteIndexRoot(ctx, idx.storageProvider, idx.indexRootDir) } diff --git a/accounts/pkg/indexer/index/cs3/helper.go b/accounts/pkg/indexer/index/cs3/helper.go new file mode 100644 index 0000000000..186e570347 --- /dev/null +++ b/accounts/pkg/indexer/index/cs3/helper.go @@ -0,0 +1,26 @@ +package cs3 + +import ( + "context" + "fmt" + "path" + + rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" +) + +func deleteIndexRoot(ctx context.Context, storageProvider provider.ProviderAPIClient, indexRootDir string) error { + res, err := storageProvider.Delete(ctx, &provider.DeleteRequest{ + Ref: &provider.Reference{ + Spec: &provider.Reference_Path{Path: path.Join("/meta", indexRootDir)}, + }, + }) + if err != nil { + return err + } + if res.Status.Code != rpc.Code_CODE_OK { + return fmt.Errorf("error deleting index root dir: %v", indexRootDir) + } + + return nil +} diff --git a/accounts/pkg/indexer/index/cs3/non_unique.go b/accounts/pkg/indexer/index/cs3/non_unique.go index d0a9dd9237..f0a6ea6834 100644 --- a/accounts/pkg/indexer/index/cs3/non_unique.go +++ b/accounts/pkg/indexer/index/cs3/non_unique.go @@ -10,8 +10,6 @@ import ( "path/filepath" "strings" - rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" - user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" v1beta11 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" @@ -418,17 +416,5 @@ func (idx *NonUnique) Delete() error { return err } - res, err := idx.storageProvider.Delete(ctx, &provider.DeleteRequest{ - Ref: &provider.Reference{ - Spec: &provider.Reference_Path{Path: path.Join("/meta", idx.indexRootDir)}, - }, - }) - if err != nil { - return err - } - if res.Status.Code != rpc.Code_CODE_OK { - return fmt.Errorf("error deleting index root dir: %v", idx.indexRootDir) - } - - return nil + return deleteIndexRoot(ctx, idx.storageProvider, idx.indexRootDir) } diff --git a/accounts/pkg/indexer/index/cs3/unique.go b/accounts/pkg/indexer/index/cs3/unique.go index 9768eac6bd..ae007f2d1a 100644 --- a/accounts/pkg/indexer/index/cs3/unique.go +++ b/accounts/pkg/indexer/index/cs3/unique.go @@ -11,7 +11,6 @@ import ( "strings" user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1" - rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" v1beta11 "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" "github.com/cs3org/reva/pkg/rgrpc/todo/pool" @@ -388,17 +387,5 @@ func (idx *Unique) Delete() error { return err } - res, err := idx.storageProvider.Delete(ctx, &provider.DeleteRequest{ - Ref: &provider.Reference{ - Spec: &provider.Reference_Path{Path: path.Join("/meta", idx.indexRootDir)}, - }, - }) - if err != nil { - return err - } - if res.Status.Code != rpc.Code_CODE_OK { - return fmt.Errorf("error deleting index root dir: %v", idx.indexRootDir) - } - - return nil + return deleteIndexRoot(ctx, idx.storageProvider, idx.indexRootDir) } diff --git a/changelog/unreleased/accounts-index-rebuild.md b/changelog/unreleased/accounts-index-rebuild.md new file mode 100644 index 0000000000..4b5d0b9096 --- /dev/null +++ b/changelog/unreleased/accounts-index-rebuild.md @@ -0,0 +1,7 @@ +Change: Rebuild index command for accounts + +Tags: accounts + +The index for the accounts service can now be rebuilt by running the cli command `./bin/ocis accounts rebuild`. It deletes all configured indices and rebuilds them from the documents found on storage. + +https://github.com/owncloud/ocis/pull/748 From 9a30688521dcebc8a99d56e07040dabb53ce7337 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Fri, 23 Oct 2020 16:53:13 +0200 Subject: [PATCH 14/24] implement Delete operation --- accounts/pkg/indexer/index/disk/autoincrement.go | 2 +- accounts/pkg/indexer/index/disk/helper.go | 1 + accounts/pkg/indexer/index/disk/non_unique.go | 2 +- accounts/pkg/indexer/index/disk/unique.go | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 accounts/pkg/indexer/index/disk/helper.go diff --git a/accounts/pkg/indexer/index/disk/autoincrement.go b/accounts/pkg/indexer/index/disk/autoincrement.go index 279b5edb8c..d686652304 100644 --- a/accounts/pkg/indexer/index/disk/autoincrement.go +++ b/accounts/pkg/indexer/index/disk/autoincrement.go @@ -263,5 +263,5 @@ func (idx *Autoincrement) next() (int, error) { // Delete deletes the index folder from its storage. func (idx *Autoincrement) Delete() error { - return nil + return os.Remove(idx.indexRootDir) } diff --git a/accounts/pkg/indexer/index/disk/helper.go b/accounts/pkg/indexer/index/disk/helper.go new file mode 100644 index 0000000000..8be362d5f4 --- /dev/null +++ b/accounts/pkg/indexer/index/disk/helper.go @@ -0,0 +1 @@ +package disk diff --git a/accounts/pkg/indexer/index/disk/non_unique.go b/accounts/pkg/indexer/index/disk/non_unique.go index b4df3db5b8..3dfa6bc180 100644 --- a/accounts/pkg/indexer/index/disk/non_unique.go +++ b/accounts/pkg/indexer/index/disk/non_unique.go @@ -236,5 +236,5 @@ func (idx *NonUnique) FilesDir() string { // Delete deletes the index folder from its storage. func (idx *NonUnique) Delete() error { - return nil + return os.Remove(idx.indexRootDir) } diff --git a/accounts/pkg/indexer/index/disk/unique.go b/accounts/pkg/indexer/index/disk/unique.go index 6a53744695..751fd73ded 100644 --- a/accounts/pkg/indexer/index/disk/unique.go +++ b/accounts/pkg/indexer/index/disk/unique.go @@ -223,5 +223,5 @@ func isValidSymlink(path string) (err error) { // Delete deletes the index folder from its storage. func (idx *Unique) Delete() error { - return nil + return os.Remove(idx.indexRootDir) } From 55d1f78bdac18073a76e0cf7cc52f12ae5b04968 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Fri, 23 Oct 2020 17:14:27 +0200 Subject: [PATCH 15/24] Fix delete for disk indexes --- accounts/pkg/indexer/index/disk/autoincrement.go | 2 +- accounts/pkg/indexer/index/disk/non_unique.go | 2 +- accounts/pkg/indexer/index/disk/unique.go | 2 +- accounts/pkg/indexer/indexer.go | 5 ++++- accounts/pkg/storage/disk.go | 8 ++++---- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/accounts/pkg/indexer/index/disk/autoincrement.go b/accounts/pkg/indexer/index/disk/autoincrement.go index d686652304..33bfd82b2a 100644 --- a/accounts/pkg/indexer/index/disk/autoincrement.go +++ b/accounts/pkg/indexer/index/disk/autoincrement.go @@ -263,5 +263,5 @@ func (idx *Autoincrement) next() (int, error) { // Delete deletes the index folder from its storage. func (idx *Autoincrement) Delete() error { - return os.Remove(idx.indexRootDir) + return os.RemoveAll(idx.indexRootDir) } diff --git a/accounts/pkg/indexer/index/disk/non_unique.go b/accounts/pkg/indexer/index/disk/non_unique.go index 3dfa6bc180..d9fcf7508d 100644 --- a/accounts/pkg/indexer/index/disk/non_unique.go +++ b/accounts/pkg/indexer/index/disk/non_unique.go @@ -236,5 +236,5 @@ func (idx *NonUnique) FilesDir() string { // Delete deletes the index folder from its storage. func (idx *NonUnique) Delete() error { - return os.Remove(idx.indexRootDir) + return os.RemoveAll(idx.indexRootDir) } diff --git a/accounts/pkg/indexer/index/disk/unique.go b/accounts/pkg/indexer/index/disk/unique.go index 751fd73ded..a9252a334c 100644 --- a/accounts/pkg/indexer/index/disk/unique.go +++ b/accounts/pkg/indexer/index/disk/unique.go @@ -223,5 +223,5 @@ func isValidSymlink(path string) (err error) { // Delete deletes the index folder from its storage. func (idx *Unique) Delete() error { - return os.Remove(idx.indexRootDir) + return os.RemoveAll(idx.indexRootDir) } diff --git a/accounts/pkg/indexer/indexer.go b/accounts/pkg/indexer/indexer.go index 69a28af516..e93baf9ed0 100644 --- a/accounts/pkg/indexer/indexer.go +++ b/accounts/pkg/indexer/indexer.go @@ -47,7 +47,10 @@ func (i Indexer) Reset() error { for j := range i.indices { for _, indices := range i.indices[j].IndicesByField { for _, idx := range indices { - _ = idx.Delete() + err := idx.Delete() + if err != nil { + return err + } } } delete(i.indices, j) diff --git a/accounts/pkg/storage/disk.go b/accounts/pkg/storage/disk.go index 4d09e61b43..275c5a8048 100644 --- a/accounts/pkg/storage/disk.go +++ b/accounts/pkg/storage/disk.go @@ -75,8 +75,8 @@ func (r DiskRepo) LoadAccounts(ctx context.Context, a *[]*proto.Account) (err er root := filepath.Join(r.cfg.Repo.Disk.Path, accountsFolder) return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { acc := &proto.Account{} - if err = r.LoadAccount(ctx, filepath.Base(path), acc); err != nil { - r.log.Err(err).Msg("could not load account") + if e := r.LoadAccount(ctx, filepath.Base(path), acc); e != nil { + r.log.Err(e).Msg("could not load account") return nil } *a = append(*a, acc) @@ -137,8 +137,8 @@ func (r DiskRepo) LoadGroups(ctx context.Context, g *[]*proto.Group) (err error) root := filepath.Join(r.cfg.Repo.Disk.Path, groupsFolder) return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { grp := &proto.Group{} - if err = r.LoadGroup(ctx, filepath.Base(path), grp); err != nil { - r.log.Err(err).Msg("could not load group") + if e := r.LoadGroup(ctx, filepath.Base(path), grp); e != nil { + r.log.Err(e).Msg("could not load group") return nil } *g = append(*g, grp) From 0aecfcd742ecb3b0b9b84a751e4dbca1835eaef9 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Fri, 23 Oct 2020 23:31:37 +0200 Subject: [PATCH 16/24] small refactor on disk autoincrement index, move some helper functions --- .../pkg/indexer/index/disk/autoincrement.go | 60 +++---------------- accounts/pkg/indexer/index/disk/helper.go | 51 ++++++++++++++++ 2 files changed, 59 insertions(+), 52 deletions(-) diff --git a/accounts/pkg/indexer/index/disk/autoincrement.go b/accounts/pkg/indexer/index/disk/autoincrement.go index 33bfd82b2a..846187e2ad 100644 --- a/accounts/pkg/indexer/index/disk/autoincrement.go +++ b/accounts/pkg/indexer/index/disk/autoincrement.go @@ -5,8 +5,6 @@ import ( "os" "path" "path/filepath" - "reflect" - "sort" "strconv" "strings" @@ -28,22 +26,17 @@ type Autoincrement struct { bound *option.Bound } -// - Creating an autoincrement index has to be thread safe. -// - Validation: autoincrement indexes should only work on integers. - func init() { registry.IndexConstructorRegistry["disk"]["autoincrement"] = NewAutoincrementIndex } -// NewAutoincrementIndex instantiates a new AutoincrementIndex instance. Init() should be -// called afterward to ensure correct on-disk structure. +// NewAutoincrementIndex instantiates a new AutoincrementIndex instance. Init() MUST be called upon instantiation. func NewAutoincrementIndex(o ...option.Option) index.Index { opts := &option.Options{} for _, opt := range o { opt(opts) } - // validate the field if opts.Entity == nil { panic("invalid autoincrement index: configured without entity") } @@ -63,16 +56,6 @@ func NewAutoincrementIndex(o ...option.Option) index.Index { } } -var ( - validKinds = []reflect.Kind{ - reflect.Int, - reflect.Int8, - reflect.Int16, - reflect.Int32, - reflect.Int64, - } -) - // Init initializes an autoincrement index. func (idx *Autoincrement) Init() error { if _, err := os.Stat(idx.filesDir); err != nil { @@ -207,38 +190,6 @@ func (idx *Autoincrement) FilesDir() string { return idx.filesDir } -func isValidKind(k reflect.Kind) bool { - for _, v := range validKinds { - if k == v { - return true - } - } - return false -} - -func getKind(i interface{}, field string) (reflect.Kind, error) { - r := reflect.ValueOf(i) - return reflect.Indirect(r).FieldByName(field).Kind(), nil -} - -func readDir(dirname string) ([]os.FileInfo, error) { - f, err := os.Open(dirname) - if err != nil { - return nil, err - } - list, err := f.Readdir(-1) - f.Close() - if err != nil { - return nil, err - } - sort.Slice(list, func(i, j int) bool { - a, _ := strconv.Atoi(list[i].Name()) - b, _ := strconv.Atoi(list[j].Name()) - return a < b - }) - return list, nil -} - func (idx *Autoincrement) next() (int, error) { files, err := readDir(idx.indexRootDir) if err != nil { @@ -249,7 +200,7 @@ func (idx *Autoincrement) next() (int, error) { return int(idx.bound.Lower), nil } - latest, err := strconv.Atoi(path.Base(files[len(files)-1].Name())) + latest := lastValueFromTree(err, files) if err != nil { return -1, err } @@ -261,7 +212,12 @@ func (idx *Autoincrement) next() (int, error) { return latest + 1, nil } -// Delete deletes the index folder from its storage. +// Delete deletes the index root folder from the configured storage. func (idx *Autoincrement) Delete() error { return os.RemoveAll(idx.indexRootDir) } + +func lastValueFromTree(err error, files []os.FileInfo) int { + latest, err := strconv.Atoi(path.Base(files[len(files)-1].Name())) + return latest +} diff --git a/accounts/pkg/indexer/index/disk/helper.go b/accounts/pkg/indexer/index/disk/helper.go index 8be362d5f4..50eafd4139 100644 --- a/accounts/pkg/indexer/index/disk/helper.go +++ b/accounts/pkg/indexer/index/disk/helper.go @@ -1 +1,52 @@ package disk + +import ( + "os" + "reflect" + "sort" + "strconv" +) + +var ( + validKinds = []reflect.Kind{ + reflect.Int, + reflect.Int8, + reflect.Int16, + reflect.Int32, + reflect.Int64, + } +) + +// verifies an autoincrement field kind on the target struct. +func isValidKind(k reflect.Kind) bool { + for _, v := range validKinds { + if k == v { + return true + } + } + return false +} + +func getKind(i interface{}, field string) (reflect.Kind, error) { + r := reflect.ValueOf(i) + return reflect.Indirect(r).FieldByName(field).Kind(), nil +} + +// readDir is an implementation of os.ReadDir but with different sorting. +func readDir(dirname string) ([]os.FileInfo, error) { + f, err := os.Open(dirname) + if err != nil { + return nil, err + } + list, err := f.Readdir(-1) + f.Close() + if err != nil { + return nil, err + } + sort.Slice(list, func(i, j int) bool { + a, _ := strconv.Atoi(list[i].Name()) + b, _ := strconv.Atoi(list[j].Name()) + return a < b + }) + return list, nil +} From ae248d871ff1158db8f1da79e068894f8c4d8581 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Sat, 24 Oct 2020 00:07:57 +0200 Subject: [PATCH 17/24] fix TestListMembersEmptyGroup by setting a new Guid --- accounts/pkg/proto/v0/accounts.pb.micro_test.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/accounts/pkg/proto/v0/accounts.pb.micro_test.go b/accounts/pkg/proto/v0/accounts.pb.micro_test.go index f3e09a515e..6ecbd25d3e 100644 --- a/accounts/pkg/proto/v0/accounts.pb.micro_test.go +++ b/accounts/pkg/proto/v0/accounts.pb.micro_test.go @@ -1208,19 +1208,23 @@ func TestListMembers(t *testing.T) { } func TestListMembersEmptyGroup(t *testing.T) { - group := &proto.Group{Id: "5d58e5ec-842e-498b-8800-61f2ec6f911c", GidNumber: 30002, OnPremisesSamAccountName: "quantum-group", DisplayName: "Quantum Group", Members: []*proto.Account{}} - - createGroup(t, group) + group := &proto.Group{Id: "5d58e5ec-842e-498b-8800-61f2ec6f911c", GidNumber: 60000, OnPremisesSamAccountName: "quantum-group", DisplayName: "Quantum Group", Members: []*proto.Account{}} client := service.Client() cl := proto.NewGroupsService("com.owncloud.api.accounts", client) + request := &proto.CreateGroupRequest{Group: group} + _, err := cl.CreateGroup(context.Background(), request) + if err == nil { + newCreatedGroups = append(newCreatedGroups, group.Id) + } + req := &proto.ListMembersRequest{Id: group.Id} - res, err := cl.ListMembers(context.Background(), req) + listRes, err := cl.ListMembers(context.Background(), req) assert.NoError(t, err) - assert.Empty(t, res.Members) + assert.Empty(t, listRes.Members) cleanUp(t) } From 337a114d10bd7a4fc4ccae57fe9d775d2c5bcb23 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Sat, 24 Oct 2020 06:13:18 +0200 Subject: [PATCH 18/24] Fix uppercase A and G comments --- accounts/pkg/storage/cs3.go | 14 +++++++------- accounts/pkg/storage/disk.go | 12 ++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/accounts/pkg/storage/cs3.go b/accounts/pkg/storage/cs3.go index e14290be46..e43d246558 100644 --- a/accounts/pkg/storage/cs3.go +++ b/accounts/pkg/storage/cs3.go @@ -25,7 +25,7 @@ import ( "google.golang.org/grpc/metadata" ) -// CS3Repo provides A cs3 implementation of the Repo interface +// CS3Repo provides a cs3 implementation of the Repo interface type CS3Repo struct { cfg *config.Config tm token.Manager @@ -33,7 +33,7 @@ type CS3Repo struct { dataProvider dataProviderClient // Used to create and download data via http, bypassing reva upload protocol } -// NewCS3Repo creates A new cs3 repo +// NewCS3Repo creates a new cs3 repo func NewCS3Repo(cfg *config.Config) (Repo, error) { tokenManager, err := jwt.New(map[string]interface{}{ "secret": cfg.TokenManager.JWTSecret, @@ -60,7 +60,7 @@ func NewCS3Repo(cfg *config.Config) (Repo, error) { }, nil } -// WriteAccount writes an account via cs3 and modifies the provided account (e.G. with A generated id). +// WriteAccount writes an account via cs3 and modifies the provided account (e.g. with a generated id). func (r CS3Repo) WriteAccount(ctx context.Context, a *proto.Account) (err error) { t, err := r.authenticate(ctx) if err != nil { @@ -174,7 +174,7 @@ func (r CS3Repo) DeleteAccount(ctx context.Context, id string) (err error) { return nil } -// WriteGroup writes A group via cs3 and modifies the provided group (e.G. with A generated id). +// WriteGroup writes a group via cs3 and modifies the provided group (e.g. with a generated id). func (r CS3Repo) WriteGroup(ctx context.Context, g *proto.Group) (err error) { t, err := r.authenticate(ctx) if err != nil { @@ -201,7 +201,7 @@ func (r CS3Repo) WriteGroup(ctx context.Context, g *proto.Group) (err error) { return nil } -// LoadGroup loads A group via cs3 by id and writes it to the provided group +// LoadGroup loads a group via cs3 by id and writes it to the provided group func (r CS3Repo) LoadGroup(ctx context.Context, id string, g *proto.Group) (err error) { t, err := r.authenticate(ctx) if err != nil { @@ -261,7 +261,7 @@ func (r CS3Repo) loadGroup(id string, t string, g *proto.Group) error { return json.Unmarshal(b, &g) } -// DeleteGroup deletes A group via cs3 by id +// DeleteGroup deletes a group via cs3 by id func (r CS3Repo) DeleteGroup(ctx context.Context, id string) (err error) { t, err := r.authenticate(ctx) if err != nil { @@ -354,7 +354,7 @@ func MakeDirIfNotExist(ctx context.Context, sp provider.ProviderAPIClient, folde return nil } -// TODO: this is copied from proxy. Find A better solution or move it to ocis-pkg +// TODO: this is copied from proxy. Find a better solution or move it to ocis-pkg func singleJoiningSlash(a, b string) string { aslash := strings.HasSuffix(a, "/") bslash := strings.HasPrefix(b, "/") diff --git a/accounts/pkg/storage/disk.go b/accounts/pkg/storage/disk.go index 275c5a8048..6041e88562 100644 --- a/accounts/pkg/storage/disk.go +++ b/accounts/pkg/storage/disk.go @@ -15,13 +15,13 @@ import ( var groupLock sync.Mutex -// DiskRepo provides A local filesystem implementation of the Repo interface +// DiskRepo provides a local filesystem implementation of the Repo interface type DiskRepo struct { cfg *config.Config log olog.Logger } -// NewDiskRepo creates A new disk repo +// NewDiskRepo creates a new disk repo func NewDiskRepo(cfg *config.Config, log olog.Logger) DiskRepo { paths := []string{ filepath.Join(cfg.Repo.Disk.Path, accountsFolder), @@ -158,7 +158,7 @@ func (r DiskRepo) DeleteGroup(ctx context.Context, id string) (err error) { return } -// deflateMemberOf replaces the groups of A user with an instance that only contains the id +// deflateMemberOf replaces the groups of a user with an instance that only contains the id func (r DiskRepo) deflateMemberOf(a *proto.Account) { if a == nil { return @@ -168,14 +168,14 @@ func (r DiskRepo) deflateMemberOf(a *proto.Account) { if a.MemberOf[i].Id != "" { deflated = append(deflated, &proto.Group{Id: a.MemberOf[i].Id}) } else { - // TODO fetch and use an id when group only has A name but no id + // TODO fetch and use an id when group only has a name but no id r.log.Error().Str("id", a.Id).Interface("group", a.MemberOf[i]).Msg("resolving groups by name is not implemented yet") } } a.MemberOf = deflated } -// deflateMembers replaces the users of A group with an instance that only contains the id +// deflateMembers replaces the users of a group with an instance that only contains the id func (r DiskRepo) deflateMembers(g *proto.Group) { if g == nil { return @@ -185,7 +185,7 @@ func (r DiskRepo) deflateMembers(g *proto.Group) { if g.Members[i].Id != "" { deflated = append(deflated, &proto.Account{Id: g.Members[i].Id}) } else { - // TODO fetch and use an id when group only has A name but no id + // TODO fetch and use an id when group only has a name but no id r.log.Error().Str("id", g.Id).Interface("account", g.Members[i]).Msg("resolving members by name is not implemented yet") } } From 0f03d8c52cf9e7e673b2a70be4540fa57dd1f04e Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Sat, 24 Oct 2020 06:15:34 +0200 Subject: [PATCH 19/24] Rename command --- accounts/pkg/command/rebuild_index.go | 6 +++--- accounts/pkg/command/root.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/accounts/pkg/command/rebuild_index.go b/accounts/pkg/command/rebuild_index.go index 9cc73ce910..d789f0a860 100644 --- a/accounts/pkg/command/rebuild_index.go +++ b/accounts/pkg/command/rebuild_index.go @@ -11,11 +11,11 @@ import ( index "github.com/owncloud/ocis/accounts/pkg/proto/v0" ) -// DeleteIndex rebuilds the entire configured index. -func DeleteIndex(cdf *config.Config) *cli.Command { +// RebuildIndex rebuilds the entire configured index. +func RebuildIndex(cdf *config.Config) *cli.Command { return &cli.Command{ Name: "rebuildIndex", - Usage: "Rebuilds the service's index", + Usage: "Rebuilds the service's index, i.e. deleting and then re-adding all existing documents", Aliases: []string{"rebuild", "ri"}, Action: func(ctx *cli.Context) error { idxSvcID := "com.owncloud.api.accounts" diff --git a/accounts/pkg/command/root.go b/accounts/pkg/command/root.go index 68c6192f0d..63f9803889 100644 --- a/accounts/pkg/command/root.go +++ b/accounts/pkg/command/root.go @@ -49,7 +49,7 @@ func Execute() error { InspectAccount(cfg), RemoveAccount(cfg), PrintVersion(cfg), - DeleteIndex(cfg), + RebuildIndex(cfg), }, } From 70b47484f514082e6813257790c62389fdc67811 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Sat, 24 Oct 2020 06:21:52 +0200 Subject: [PATCH 20/24] Reuse getAuthenticatedContext --- accounts/pkg/indexer/index/cs3/autoincrement.go | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/accounts/pkg/indexer/index/cs3/autoincrement.go b/accounts/pkg/indexer/index/cs3/autoincrement.go index 28ae40463a..feb787357a 100644 --- a/accounts/pkg/indexer/index/cs3/autoincrement.go +++ b/accounts/pkg/indexer/index/cs3/autoincrement.go @@ -99,12 +99,10 @@ func (idx *Autoincrement) Init() error { idx.storageProvider = client - ctx := context.Background() - tk, err := idx.authenticate(ctx) + ctx, err := idx.getAuthenticatedContext(context.Background()) if err != nil { return err } - ctx = metadata.AppendToOutgoingContext(ctx, token.TokenHeader, tk) if err := idx.makeDirIfNotExists(ctx, idx.indexBaseDir); err != nil { return err @@ -170,14 +168,12 @@ func (idx *Autoincrement) Remove(id string, v string) error { return err } - ctx := context.Background() - t, err := idx.authenticate(ctx) + ctx, err := idx.getAuthenticatedContext(context.Background()) if err != nil { return err } deletePath := path.Join("/meta", idx.indexRootDir, v) - ctx = metadata.AppendToOutgoingContext(ctx, token.TokenHeader, t) resp, err := idx.storageProvider.Delete(ctx, &provider.DeleteRequest{ Ref: &provider.Reference{ Spec: &provider.Reference_Path{Path: deletePath}, @@ -211,13 +207,11 @@ func (idx *Autoincrement) Update(id, oldV, newV string) error { // Search allows for glob search on the index. func (idx *Autoincrement) Search(pattern string) ([]string, error) { - ctx := context.Background() - t, err := idx.authenticate(ctx) + ctx, err := idx.getAuthenticatedContext(context.Background()) if err != nil { return nil, err } - ctx = metadata.AppendToOutgoingContext(ctx, token.TokenHeader, t) res, err := idx.storageProvider.ListContainer(ctx, &provider.ListContainerRequest{ Ref: &provider.Reference{ Spec: &provider.Reference_Path{Path: path.Join("/meta", idx.indexRootDir)}, @@ -326,13 +320,11 @@ func (idx *Autoincrement) authenticate(ctx context.Context) (token string, err e } func (idx *Autoincrement) next() (int, error) { - ctx := context.Background() - t, err := idx.authenticate(ctx) + ctx, err := idx.getAuthenticatedContext(context.Background()) if err != nil { return -1, err } - ctx = metadata.AppendToOutgoingContext(ctx, token.TokenHeader, t) res, err := idx.storageProvider.ListContainer(ctx, &provider.ListContainerRequest{ Ref: &provider.Reference{ Spec: &provider.Reference_Path{Path: path.Join("/meta", idx.indexRootDir)}, From fe0e4303a0be68d077139487f3f9d43038fa7ce3 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Sat, 24 Oct 2020 06:37:29 +0200 Subject: [PATCH 21/24] Use `LoadAccounts` in accounts handler --- accounts/pkg/service/v0/accounts.go | 24 +++++++++++++++---- .../unreleased/accounts-index-rebuild.md | 4 +++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/accounts/pkg/service/v0/accounts.go b/accounts/pkg/service/v0/accounts.go index bb3dfb4f14..45021bbe8e 100644 --- a/accounts/pkg/service/v0/accounts.go +++ b/accounts/pkg/service/v0/accounts.go @@ -146,6 +146,26 @@ func (s Service) ListAccounts(ctx context.Context, in *proto.ListAccountsRequest return nil } + if in.Query == "" { + err = s.repo.LoadAccounts(ctx, &out.Accounts) + if err != nil { + s.log.Err(err).Msg("failed to load all accounts from storage") + return merrors.InternalServerError(s.id, "failed to load all accounts") + } + for i := range out.Accounts { + a := out.Accounts[i] + + // TODO add groups only if requested + // if in.FieldMask ... + s.expandMemberOf(a) + + if a.PasswordProfile != nil { + a.PasswordProfile.Password = "" + } + } + return nil + } + searchResults, err := s.findAccountsByQuery(ctx, in.Query) out.Accounts = make([]*proto.Account, 0, len(searchResults)) @@ -180,10 +200,6 @@ func (s Service) findAccountsByQuery(ctx context.Context, query string) ([]strin var searchResults []string var err error - if query == "" { - return s.index.FindByPartial(&proto.Account{}, "Mail", "*") - } - // TODO: more explicit queries have to be on top var onPremOrMailQuery = regexp.MustCompile(`^on_premises_sam_account_name eq '(.*)' or mail eq '(.*)'$`) match := onPremOrMailQuery.FindStringSubmatch(query) diff --git a/changelog/unreleased/accounts-index-rebuild.md b/changelog/unreleased/accounts-index-rebuild.md index 4b5d0b9096..bce22a26e0 100644 --- a/changelog/unreleased/accounts-index-rebuild.md +++ b/changelog/unreleased/accounts-index-rebuild.md @@ -2,6 +2,8 @@ Change: Rebuild index command for accounts Tags: accounts -The index for the accounts service can now be rebuilt by running the cli command `./bin/ocis accounts rebuild`. It deletes all configured indices and rebuilds them from the documents found on storage. +The index for the accounts service can now be rebuilt by running the cli command `./bin/ocis accounts rebuild`. +It deletes all configured indices and rebuilds them from the documents found on storage. For this we also introduced +a `LoadAccounts` and `LoadGroups` function on storage for loading all existing documents. https://github.com/owncloud/ocis/pull/748 From 47e53c727408e676d7bf54d52bc1d26cae023b84 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Sat, 24 Oct 2020 06:56:41 +0200 Subject: [PATCH 22/24] Fix staticcheck --- accounts/pkg/indexer/index/disk/autoincrement.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/accounts/pkg/indexer/index/disk/autoincrement.go b/accounts/pkg/indexer/index/disk/autoincrement.go index 846187e2ad..c036461dc9 100644 --- a/accounts/pkg/indexer/index/disk/autoincrement.go +++ b/accounts/pkg/indexer/index/disk/autoincrement.go @@ -200,7 +200,7 @@ func (idx *Autoincrement) next() (int, error) { return int(idx.bound.Lower), nil } - latest := lastValueFromTree(err, files) + latest, err := lastValueFromTree(files) if err != nil { return -1, err } @@ -217,7 +217,10 @@ func (idx *Autoincrement) Delete() error { return os.RemoveAll(idx.indexRootDir) } -func lastValueFromTree(err error, files []os.FileInfo) int { +func lastValueFromTree(files []os.FileInfo) (int, error) { latest, err := strconv.Atoi(path.Base(files[len(files)-1].Name())) - return latest + if err != nil { + return -1, err + } + return latest, nil } From f10c3e285234ae20946246b2cdfcf1669d9c4ccf Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Sat, 24 Oct 2020 07:42:47 +0200 Subject: [PATCH 23/24] Disable unstable cs3 tests (connection to metadata storage) --- accounts/pkg/indexer/indexer_test.go | 62 ++++++++++++++-------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/accounts/pkg/indexer/indexer_test.go b/accounts/pkg/indexer/indexer_test.go index 276aec14ca..641d51ebe5 100644 --- a/accounts/pkg/indexer/indexer_test.go +++ b/accounts/pkg/indexer/indexer_test.go @@ -14,37 +14,37 @@ import ( "github.com/stretchr/testify/assert" ) -const cs3RootFolder = "/var/tmp/ocis/storage/users/data" - -func TestIndexer_CS3_AddWithUniqueIndex(t *testing.T) { - dataDir, err := WriteIndexTestData(Data, "ID", cs3RootFolder) - assert.NoError(t, err) - indexer := createCs3Indexer() - - err = indexer.AddIndex(&User{}, "UserName", "ID", "users", "unique", nil, false) - assert.NoError(t, err) - - u := &User{ID: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"} - _, err = indexer.Add(u) - assert.NoError(t, err) - - _ = os.RemoveAll(dataDir) -} - -func TestIndexer_CS3_AddWithNonUniqueIndex(t *testing.T) { - dataDir, err := WriteIndexTestData(Data, "ID", cs3RootFolder) - assert.NoError(t, err) - indexer := createCs3Indexer() - - err = indexer.AddIndex(&User{}, "UserName", "ID", "users", "non_unique", nil, false) - assert.NoError(t, err) - - u := &User{ID: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"} - _, err = indexer.Add(u) - assert.NoError(t, err) - - _ = os.RemoveAll(dataDir) -} +//const cs3RootFolder = "/var/tmp/ocis/storage/users/data" +// +//func TestIndexer_CS3_AddWithUniqueIndex(t *testing.T) { +// dataDir, err := WriteIndexTestData(Data, "ID", cs3RootFolder) +// assert.NoError(t, err) +// indexer := createCs3Indexer() +// +// err = indexer.AddIndex(&User{}, "UserName", "ID", "users", "unique", nil, false) +// assert.NoError(t, err) +// +// u := &User{ID: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"} +// _, err = indexer.Add(u) +// assert.NoError(t, err) +// +// _ = os.RemoveAll(dataDir) +//} +// +//func TestIndexer_CS3_AddWithNonUniqueIndex(t *testing.T) { +// dataDir, err := WriteIndexTestData(Data, "ID", cs3RootFolder) +// assert.NoError(t, err) +// indexer := createCs3Indexer() +// +// err = indexer.AddIndex(&User{}, "UserName", "ID", "users", "non_unique", nil, false) +// assert.NoError(t, err) +// +// u := &User{ID: "abcdefg-123", UserName: "mikey", Email: "mikey@example.com"} +// _, err = indexer.Add(u) +// assert.NoError(t, err) +// +// _ = os.RemoveAll(dataDir) +//} func TestIndexer_Disk_FindByWithUniqueIndex(t *testing.T) { dataDir, err := WriteIndexTestData(Data, "ID", "") From bef3a4dca68eb1ef43a081a758b776755323d745 Mon Sep 17 00:00:00 2001 From: Benedikt Kulmann Date: Sat, 24 Oct 2020 08:03:02 +0200 Subject: [PATCH 24/24] Remove unused cs3 indexer in indexer tests --- accounts/pkg/indexer/indexer_test.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/accounts/pkg/indexer/indexer_test.go b/accounts/pkg/indexer/indexer_test.go index 641d51ebe5..942adddf23 100644 --- a/accounts/pkg/indexer/indexer_test.go +++ b/accounts/pkg/indexer/indexer_test.go @@ -251,18 +251,18 @@ func TestIndexer_Disk_UpdateWithNonUniqueIndex(t *testing.T) { _ = os.RemoveAll(dataDir) } -func createCs3Indexer() *Indexer { - return CreateIndexer(&config.Config{ - Repo: config.Repo{ - CS3: config.CS3{ - ProviderAddr: "0.0.0.0:9215", - DataURL: "http://localhost:9216", - DataPrefix: "data", - JWTSecret: "Pive-Fumkiu4", - }, - }, - }) -} +//func createCs3Indexer() *Indexer { +// return CreateIndexer(&config.Config{ +// Repo: config.Repo{ +// CS3: config.CS3{ +// ProviderAddr: "0.0.0.0:9215", +// DataURL: "http://localhost:9216", +// DataPrefix: "data", +// JWTSecret: "Pive-Fumkiu4", +// }, +// }, +// }) +//} func createDiskIndexer(dataDir string) *Indexer { return CreateIndexer(&config.Config{