From 420581333653883c0557f718def3037f0e35dc1d Mon Sep 17 00:00:00 2001 From: Ryan Stonebraker Date: Wed, 17 Apr 2024 14:57:16 -0700 Subject: [PATCH] Fixes bug where ownership summary showed owner as canEdit even if they werent an editor, updates editors and viewers on bulk ROI write --- api/ws/handlers/roi.go | 107 +++++++++++- api/ws/wsHelpers/ownership.go | 12 +- data-formats | 2 +- generated-protos/roi-msgs.pb.go | 283 +++++++++++++++++--------------- 4 files changed, 265 insertions(+), 139 deletions(-) diff --git a/api/ws/handlers/roi.go b/api/ws/handlers/roi.go index 337decd3..54f9491d 100644 --- a/api/ws/handlers/roi.go +++ b/api/ws/handlers/roi.go @@ -166,7 +166,7 @@ func validateROI(roi *protos.ROIItem) error { return nil } -func createROI(roi *protos.ROIItem, hctx wsHelpers.HandlerContext, needMistEntry bool) (*protos.ROIItem, error) { +func createROI(roi *protos.ROIItem, hctx wsHelpers.HandlerContext, needMistEntry bool, editors *protos.UserGroupList, viewers *protos.UserGroupList) (*protos.ROIItem, error) { ctx := context.TODO() // It's a new item, check these fields... @@ -181,6 +181,15 @@ func createROI(roi *protos.ROIItem, hctx wsHelpers.HandlerContext, needMistEntry // We need to create an ownership item along with it ownerItem := wsHelpers.MakeOwnerForWrite(id, protos.ObjectType_OT_ROI, hctx.SessUser.User.Id, hctx.Svcs.TimeStamper.GetTimeNowSec()) + if editors != nil { + ownerItem.Editors.UserIds = editors.UserIds + ownerItem.Editors.GroupIds = editors.GroupIds + } + + if viewers != nil { + ownerItem.Viewers.UserIds = viewers.UserIds + ownerItem.Viewers.GroupIds = viewers.GroupIds + } roi.ModifiedUnixSec = ownerItem.CreatedUnixSec @@ -242,7 +251,7 @@ func createROI(roi *protos.ROIItem, hctx wsHelpers.HandlerContext, needMistEntry return roi, nil } -func updateROI(roi *protos.ROIItem, hctx wsHelpers.HandlerContext) (*protos.ROIItem, error) { +func updateROI(roi *protos.ROIItem, hctx wsHelpers.HandlerContext, editors *protos.UserGroupList, viewers *protos.UserGroupList) (*protos.ROIItem, error) { ctx := context.TODO() dbItem, owner, err := wsHelpers.GetUserObjectById[protos.ROIItem](true, roi.Id, protos.ObjectType_OT_ROI, dbCollections.RegionsOfInterestName, hctx) @@ -250,6 +259,25 @@ func updateROI(roi *protos.ROIItem, hctx wsHelpers.HandlerContext) (*protos.ROII return nil, err } + // Check if we need to update the ownership + if editors != nil || viewers != nil { + if editors != nil { + owner.Editors.UserIds = editors.UserIds + owner.Editors.GroupIds = editors.GroupIds + } + + if viewers != nil { + owner.Viewers.UserIds = viewers.UserIds + owner.Viewers.GroupIds = viewers.GroupIds + } + + _, err = hctx.Svcs.MongoDB.Collection(dbCollections.OwnershipName).UpdateByID(ctx, roi.Id, bson.D{{Key: "$set", Value: owner}}) + if err != nil { + return nil, err + } + + } + // Some fields can't change if len(roi.ScanId) > 0 && dbItem.ScanId != roi.ScanId { return nil, errors.New("ScanId cannot be changed") @@ -329,12 +357,12 @@ func HandleRegionOfInterestWriteReq(req *protos.RegionOfInterestWriteReq, hctx w var err error if len(req.RegionOfInterest.Id) <= 0 { - item, err = createROI(req.RegionOfInterest, hctx, req.IsMIST) + item, err = createROI(req.RegionOfInterest, hctx, req.IsMIST, nil, nil) if err != nil { return nil, err } } else { - item, err = updateROI(req.RegionOfInterest, hctx) + item, err = updateROI(req.RegionOfInterest, hctx, nil, nil) } if err != nil { return nil, err @@ -379,6 +407,37 @@ func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq if err != nil { return nil, err } + + // Delete the ownership items for the MIST ROIs + _, err = hctx.Svcs.MongoDB.Collection(dbCollections.OwnershipName).DeleteMany(context.TODO(), bson.M{"_id": bson.M{"$in": mistIdList}}) + if err != nil { + return nil, err + } + + // Delete the ROI display settings for the MIST ROIs + _, err = hctx.Svcs.MongoDB.Collection(dbCollections.UserROIDisplaySettings).DeleteMany(context.TODO(), bson.M{"_id": bson.M{"$in": mistIdList}}) + if err != nil { + return nil, err + } + } + + editors := &protos.UserGroupList{ + UserIds: []string{}, + GroupIds: []string{}, + } + viewers := &protos.UserGroupList{ + UserIds: []string{}, + GroupIds: []string{}, + } + + if req.Editors != nil { + editors.UserIds = req.Editors.UserIds + editors.GroupIds = req.Editors.GroupIds + } + + if req.Viewers != nil { + viewers.UserIds = req.Viewers.UserIds + viewers.GroupIds = req.Viewers.GroupIds } writtenROIs := []*protos.ROIItem{} @@ -387,12 +446,42 @@ func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq item.IsMIST = req.IsMIST var err error - if len(item.Id) > 0 && req.Overwrite { + if len(item.Id) > 0 && req.Overwrite && (req.MistROIScanIdsToDelete == nil || len(req.MistROIScanIdsToDelete) == 0) { // Overwrite existing ROI - item, err = updateROI(item, hctx) + item, err = updateROI(item, hctx, editors, viewers) + if err != nil { + return nil, err + } + } else if req.Overwrite && len(item.Id) <= 0 && req.IsMIST && item.MistROIItem != nil { + // We're overwriting by name, so we need to find the existing ROI + filter := bson.M{"scanid": item.ScanId, "classificationtrail": item.MistROIItem.ClassificationTrail} + opts := options.Find().SetProjection(bson.M{"_id": true}) + cursor, err := hctx.Svcs.MongoDB.Collection(dbCollections.MistROIsName).Find(context.TODO(), filter, opts) + if err != nil { + return nil, err + } + + ids := []*IdOnly{} + err = cursor.All(context.TODO(), &ids) if err != nil { return nil, err } + + if len(ids) > 0 { + // Overwrite existing ROI + item.Id = ids[0].Id + item, err = updateROI(item, hctx, editors, viewers) + if err != nil { + return nil, err + } + } else { + // Create new ROI + item, err = createROI(item, hctx, req.IsMIST, editors, viewers) + if err != nil { + return nil, err + } + } + } else if req.SkipDuplicates { // If id is not empty, but we're not overwriting, so skip this ROI // If id is empty and this is a MIST ROI, we need to check if this ROI already exists @@ -416,7 +505,7 @@ func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq continue } else { // Create new ROI - item, err = createROI(item, hctx, req.IsMIST) + item, err = createROI(item, hctx, req.IsMIST, editors, viewers) if err != nil { return nil, err } @@ -425,7 +514,7 @@ func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq } else { // Create new ROI - item, err = createROI(item, hctx, req.IsMIST) + item, err = createROI(item, hctx, req.IsMIST, editors, viewers) if err != nil { return nil, err } @@ -462,7 +551,7 @@ func HandleRegionOfInterestBulkDuplicateReq(req *protos.RegionOfInterestBulkDupl item.IsMIST = req.IsMIST // Create new ROI - newROI, err := createROI(item, hctx, req.IsMIST) + newROI, err := createROI(item, hctx, req.IsMIST, nil, nil) if err != nil { return nil, err } diff --git a/api/ws/wsHelpers/ownership.go b/api/ws/wsHelpers/ownership.go index a7b59f0e..d8920be9 100644 --- a/api/ws/wsHelpers/ownership.go +++ b/api/ws/wsHelpers/ownership.go @@ -20,6 +20,15 @@ func MakeOwnerForWrite(objectId string, objectType protos.ObjectType, creatorUse Id: objectId, ObjectType: objectType, CreatedUnixSec: uint32(createTimeUnixSec), + CreatorUserId: "", + Editors: &protos.UserGroupList{ + UserIds: []string{}, + GroupIds: []string{}, + }, + Viewers: &protos.UserGroupList{ + UserIds: []string{}, + GroupIds: []string{}, + }, } if len(creatorUserId) > 0 { @@ -199,7 +208,8 @@ func FetchOwnershipSummary(ownership *protos.OwnershipItem, sessionUser SessionU } } - result.CanEdit = string(result.CreatorUser.Id) == string(sessionUser.User.Id) + // Still have to be an editor even if you're the creator + result.CanEdit = false if ownership.Viewers != nil { result.ViewerUserCount = uint32(len(ownership.Viewers.UserIds)) diff --git a/data-formats b/data-formats index 51514d20..634b3922 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit 51514d200b90535d1f68c9407103b6ce5f0d1ea2 +Subproject commit 634b39221fe8a0a3b37b6e78e54f85d84b03fd12 diff --git a/generated-protos/roi-msgs.pb.go b/generated-protos/roi-msgs.pb.go index e3fd1680..e4600026 100644 --- a/generated-protos/roi-msgs.pb.go +++ b/generated-protos/roi-msgs.pb.go @@ -543,11 +543,13 @@ type RegionOfInterestBulkWriteReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RegionsOfInterest []*ROIItem `protobuf:"bytes,1,rep,name=regionsOfInterest,proto3" json:"regionsOfInterest,omitempty"` - Overwrite bool `protobuf:"varint,2,opt,name=overwrite,proto3" json:"overwrite,omitempty"` // if true, then overwrite existing ROIs with same ID - SkipDuplicates bool `protobuf:"varint,3,opt,name=skipDuplicates,proto3" json:"skipDuplicates,omitempty"` // if true, then skip ROIs with same ID - IsMIST bool `protobuf:"varint,4,opt,name=isMIST,proto3" json:"isMIST,omitempty"` - MistROIScanIdsToDelete []string `protobuf:"bytes,5,rep,name=mistROIScanIdsToDelete,proto3" json:"mistROIScanIdsToDelete,omitempty"` // List of scan ids to delete all MIST ROIs for + RegionsOfInterest []*ROIItem `protobuf:"bytes,1,rep,name=regionsOfInterest,proto3" json:"regionsOfInterest,omitempty"` + Overwrite bool `protobuf:"varint,2,opt,name=overwrite,proto3" json:"overwrite,omitempty"` // if true, then overwrite existing ROIs with same ID + SkipDuplicates bool `protobuf:"varint,3,opt,name=skipDuplicates,proto3" json:"skipDuplicates,omitempty"` // if true, then skip ROIs with same ID + IsMIST bool `protobuf:"varint,4,opt,name=isMIST,proto3" json:"isMIST,omitempty"` + MistROIScanIdsToDelete []string `protobuf:"bytes,5,rep,name=mistROIScanIdsToDelete,proto3" json:"mistROIScanIdsToDelete,omitempty"` // List of scan ids to delete all MIST ROIs for + Editors *UserGroupList `protobuf:"bytes,6,opt,name=editors,proto3" json:"editors,omitempty"` // List of groups that can edit the ROIs + Viewers *UserGroupList `protobuf:"bytes,7,opt,name=viewers,proto3" json:"viewers,omitempty"` // List of groups that can view the ROIs } func (x *RegionOfInterestBulkWriteReq) Reset() { @@ -617,6 +619,20 @@ func (x *RegionOfInterestBulkWriteReq) GetMistROIScanIdsToDelete() []string { return nil } +func (x *RegionOfInterestBulkWriteReq) GetEditors() *UserGroupList { + if x != nil { + return x.Editors + } + return nil +} + +func (x *RegionOfInterestBulkWriteReq) GetViewers() *UserGroupList { + if x != nil { + return x.Viewers + } + return nil +} + type RegionOfInterestBulkWriteResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -867,121 +883,128 @@ var file_roi_msgs_proto_rawDesc = []byte{ 0x0a, 0x0e, 0x72, 0x6f, 0x69, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x09, 0x72, 0x6f, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x64, 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x31, 0x0a, 0x0c, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x22, 0xe9, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, - 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, - 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x1a, 0x55, 0x0a, 0x16, 0x52, + 0x1a, 0x16, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2d, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x64, 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, + 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x31, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x22, 0xe9, + 0x01, 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, - 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x40, 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, - 0x4d, 0x49, 0x53, 0x54, 0x22, 0x4f, 0x0a, 0x17, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x34, 0x0a, 0x10, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x4f, 0x49, 0x49, - 0x74, 0x65, 0x6d, 0x52, 0x10, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x65, 0x73, 0x74, 0x22, 0x68, 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, - 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x12, 0x34, 0x0a, 0x10, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x4f, - 0x49, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x10, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, - 0x54, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x22, - 0x51, 0x0a, 0x19, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x10, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x10, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x74, 0x22, 0x7c, 0x0a, 0x27, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, - 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, - 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, - 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x22, 0x6d, 0x0a, 0x28, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x41, 0x0a, 0x0f, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, - 0x37, 0x0a, 0x25, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6b, 0x0a, 0x26, 0x52, 0x65, 0x67, 0x69, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, + 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x69, + 0x73, 0x4d, 0x49, 0x53, 0x54, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, + 0x49, 0x53, 0x54, 0x1a, 0x55, 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x25, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x40, 0x0a, 0x16, 0x52, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x22, 0x4f, 0x0a, 0x17, + 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x10, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x10, 0x72, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x22, 0x68, 0x0a, + 0x18, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, + 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x10, 0x72, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x10, 0x72, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x22, 0x51, 0x0a, 0x19, 0x52, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x10, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, + 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x10, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, + 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x22, 0x7c, 0x0a, 0x27, 0x52, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x6d, 0x0a, 0x28, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x41, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x52, 0x4f, - 0x49, 0x49, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xec, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x67, - 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x73, 0x6b, 0x69, 0x70, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x6b, 0x69, 0x70, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x12, 0x36, 0x0a, 0x16, - 0x6d, 0x69, 0x73, 0x74, 0x52, 0x4f, 0x49, 0x53, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x73, 0x54, 0x6f, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x6d, 0x69, - 0x73, 0x74, 0x52, 0x4f, 0x49, 0x53, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x73, 0x54, 0x6f, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x22, 0x57, 0x0a, 0x1d, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x36, 0x0a, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, - 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x08, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x22, 0x43, 0x0a, - 0x19, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, - 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, - 0x4d, 0x49, 0x53, 0x54, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x49, - 0x53, 0x54, 0x22, 0x1c, 0x0a, 0x1a, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, - 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x4c, 0x0a, 0x20, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x22, 0xe3, - 0x01, 0x0a, 0x21, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, - 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x67, 0x0a, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, - 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x39, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x1a, 0x55, 0x0a, - 0x16, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, - 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, - 0x65, 0x6d, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x41, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x37, 0x0a, 0x25, 0x52, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x6b, 0x0a, 0x26, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x41, 0x0a, 0x0f, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x44, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x64, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xc0, 0x02, + 0x0a, 0x1c, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, + 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x36, + 0x0a, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, 0x4f, 0x49, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x6b, 0x69, 0x70, 0x44, 0x75, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x73, 0x6b, + 0x69, 0x70, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, + 0x4d, 0x49, 0x53, 0x54, 0x12, 0x36, 0x0a, 0x16, 0x6d, 0x69, 0x73, 0x74, 0x52, 0x4f, 0x49, 0x53, + 0x63, 0x61, 0x6e, 0x49, 0x64, 0x73, 0x54, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x6d, 0x69, 0x73, 0x74, 0x52, 0x4f, 0x49, 0x53, 0x63, 0x61, + 0x6e, 0x49, 0x64, 0x73, 0x54, 0x6f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x07, + 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, 0x65, + 0x64, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, + 0x22, 0x57, 0x0a, 0x1d, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, 0x6c, 0x6b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x36, 0x0a, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x52, + 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, + 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x22, 0x43, 0x0a, 0x19, 0x52, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x22, 0x1c, + 0x0a, 0x1a, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, + 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4c, 0x0a, 0x20, + 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, + 0x42, 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, + 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x4d, 0x49, 0x53, 0x54, 0x22, 0xe3, 0x01, 0x0a, 0x21, 0x52, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, + 0x75, 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x67, 0x0a, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, + 0x65, 0x72, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x52, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x42, 0x75, + 0x6c, 0x6b, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x2e, + 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, + 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x4f, + 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x1a, 0x55, 0x0a, 0x16, 0x52, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x66, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x4f, 0x49, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x75, + 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1019,7 +1042,8 @@ var file_roi_msgs_proto_goTypes = []interface{}{ (*SearchParams)(nil), // 18: SearchParams (*ROIItem)(nil), // 19: ROIItem (*ROIItemDisplaySettings)(nil), // 20: ROIItemDisplaySettings - (*ROIItemSummary)(nil), // 21: ROIItemSummary + (*UserGroupList)(nil), // 21: UserGroupList + (*ROIItemSummary)(nil), // 22: ROIItemSummary } var file_roi_msgs_proto_depIdxs = []int32{ 18, // 0: RegionOfInterestListReq.searchParams:type_name -> SearchParams @@ -1031,15 +1055,17 @@ var file_roi_msgs_proto_depIdxs = []int32{ 20, // 6: RegionOfInterestDisplaySettingsWriteResp.displaySettings:type_name -> ROIItemDisplaySettings 20, // 7: RegionOfInterestDisplaySettingsGetResp.displaySettings:type_name -> ROIItemDisplaySettings 19, // 8: RegionOfInterestBulkWriteReq.regionsOfInterest:type_name -> ROIItem - 19, // 9: RegionOfInterestBulkWriteResp.regionsOfInterest:type_name -> ROIItem - 17, // 10: RegionOfInterestBulkDuplicateResp.regionsOfInterest:type_name -> RegionOfInterestBulkDuplicateResp.RegionsOfInterestEntry - 21, // 11: RegionOfInterestListResp.RegionsOfInterestEntry.value:type_name -> ROIItemSummary - 21, // 12: RegionOfInterestBulkDuplicateResp.RegionsOfInterestEntry.value:type_name -> ROIItemSummary - 13, // [13:13] is the sub-list for method output_type - 13, // [13:13] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 21, // 9: RegionOfInterestBulkWriteReq.editors:type_name -> UserGroupList + 21, // 10: RegionOfInterestBulkWriteReq.viewers:type_name -> UserGroupList + 19, // 11: RegionOfInterestBulkWriteResp.regionsOfInterest:type_name -> ROIItem + 17, // 12: RegionOfInterestBulkDuplicateResp.regionsOfInterest:type_name -> RegionOfInterestBulkDuplicateResp.RegionsOfInterestEntry + 22, // 13: RegionOfInterestListResp.RegionsOfInterestEntry.value:type_name -> ROIItemSummary + 22, // 14: RegionOfInterestBulkDuplicateResp.RegionsOfInterestEntry.value:type_name -> ROIItemSummary + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_roi_msgs_proto_init() } @@ -1049,6 +1075,7 @@ func file_roi_msgs_proto_init() { } file_roi_proto_init() file_search_params_proto_init() + file_ownership_access_proto_init() if !protoimpl.UnsafeEnabled { file_roi_msgs_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RegionOfInterestListReq); i {