From 875665ed3f54aeb5d76c9755b1691ab5695d3925 Mon Sep 17 00:00:00 2001 From: Alan <68671759+hanzhixiao@users.noreply.github.com> Date: Thu, 27 Jul 2023 21:33:04 +0800 Subject: [PATCH] token (#59) * fix/searchUserInfo Signed-off-by: hanzhixiao <709674996@qq.com> * fix search normal user Signed-off-by: hanzhixiao <709674996@qq.com> * feat token Signed-off-by: hanzhixiao <709674996@qq.com> --------- Signed-off-by: hanzhixiao <709674996@qq.com> --- config/config.yaml | 9 +- go.mod | 3 + go.sum | 8 + internal/api/admin.go | 18 +- internal/api/chat.go | 30 +- internal/api/mw.go | 72 +- internal/rpc/admin/admin.go | 9 +- internal/rpc/admin/token.go | 20 +- pkg/common/apicall/caller.go | 6 +- pkg/common/config/config.go | 5 + pkg/common/db/cache/init_redis.go | 54 ++ pkg/common/db/cache/token.go | 43 ++ pkg/common/db/database/admin.go | 17 +- pkg/common/db/database/chat.go | 4 +- pkg/common/db/model/chat/attribute.go | 10 +- pkg/common/db/table/chat/attribute.go | 2 +- pkg/common/mctx/get.go | 12 +- pkg/proto/admin/admin.pb.go | 918 +++++++++++++++----------- pkg/proto/admin/admin.proto | 9 + pkg/proto/chat/chat.go | 3 + pkg/proto/chat/chat.pb.go | 16 +- pkg/proto/chat/chat.proto | 4 +- 22 files changed, 844 insertions(+), 428 deletions(-) create mode 100644 pkg/common/db/cache/init_redis.go create mode 100644 pkg/common/db/cache/token.go diff --git a/config/config.yaml b/config/config.yaml index d5840cdc6..493db836b 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -62,7 +62,7 @@ log: # isJson: false # withStack: false -#secret: "openIM123" +secret: openIM123 #tokenPolicy: # expire: 86400 @@ -96,4 +96,9 @@ adminList: imAdmin: openIMAdmin -openIMUrl: "http://127.0.0.1:10002" \ No newline at end of file +openIMUrl: "http://127.0.0.1:10002" + +redis: + address: [ 127.0.0.1:16379 ] + username: + password: openIM123 \ No newline at end of file diff --git a/go.mod b/go.mod index 0f0c98eb9..1ab6323b3 100644 --- a/go.mod +++ b/go.mod @@ -29,6 +29,7 @@ require ( require ( github.com/OpenIMSDK/protocol v0.0.1 github.com/OpenIMSDK/tools v0.0.5 + github.com/redis/go-redis/v9 v9.0.5 ) require ( @@ -41,8 +42,10 @@ require ( github.com/aliyun/credentials-go v1.1.2 // indirect github.com/bwmarrin/snowflake v0.3.0 // indirect github.com/bytedance/sonic v1.9.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect github.com/clbanning/mxj/v2 v2.5.6 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-playground/locales v0.14.1 // indirect diff --git a/go.sum b/go.sum index 19d9efef2..19fb5da85 100644 --- a/go.sum +++ b/go.sum @@ -35,11 +35,15 @@ github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCE github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY= github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao= +github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= @@ -50,6 +54,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= @@ -143,6 +149,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/redis/go-redis/v9 v9.0.5 h1:CuQcn5HIEeK7BgElubPP8CGtE0KakrnbBSTLjathl5o= +github.com/redis/go-redis/v9 v9.0.5/go.mod h1:WqMKv5vnQbRuZstUwxQI195wHy+t4PuXDOjzMvcuQHk= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= diff --git a/internal/api/admin.go b/internal/api/admin.go index eefe6a12d..2f8dedd2c 100644 --- a/internal/api/admin.go +++ b/internal/api/admin.go @@ -17,6 +17,7 @@ package api import ( "github.com/OpenIMSDK/chat/pkg/common/apicall" "github.com/OpenIMSDK/chat/pkg/common/apistruct" + "github.com/OpenIMSDK/chat/pkg/common/config" "github.com/OpenIMSDK/chat/pkg/common/mctx" "github.com/OpenIMSDK/chat/pkg/proto/admin" "github.com/OpenIMSDK/chat/pkg/proto/chat" @@ -61,7 +62,8 @@ func (o *AdminApi) AdminLogin(c *gin.Context) { apiresp.GinError(c, err) return } - imToken, err := o.imApiCaller.UserToken(c, loginResp.AdminUserID, constant.AdminPlatformID) + imAdminUserID := config.GetIMAdmin(loginResp.AdminUserID) + imToken, err := o.imApiCaller.UserToken(c, imAdminUserID, constant.AdminPlatformID) if err != nil { apiresp.GinError(c, err) return @@ -72,7 +74,7 @@ func (o *AdminApi) AdminLogin(c *gin.Context) { return } resp.ImToken = imToken - resp.ImUserID = loginResp.AdminUserID + resp.ImUserID = imAdminUserID log.ZInfo(c, "AdminLogin api", "resp", resp) apiresp.GinSuccess(c, resp) } @@ -115,12 +117,12 @@ func (o *AdminApi) AddDefaultGroup(c *gin.Context) { apiresp.GinError(c, err) return } - token, err := o.imApiCaller.AdminToken(c) + imToken, err := o.imApiCaller.UserToken(c, config.GetIMAdmin(mctx.GetOpUserID(c)), constant.AdminPlatformID) if err != nil { apiresp.GinError(c, err) return } - groups, err := o.imApiCaller.FindGroupInfo(mctx.WithApiToken(c, token), req.GroupIDs) + groups, err := o.imApiCaller.FindGroupInfo(mctx.WithApiToken(c, imToken), req.GroupIDs) if err != nil { apiresp.GinError(c, err) return @@ -167,12 +169,12 @@ func (o *AdminApi) SearchDefaultGroup(c *gin.Context) { Groups: make([]*sdkws.GroupInfo, 0, len(searchResp.GroupIDs)), } if len(searchResp.GroupIDs) > 0 { - token, err := o.imApiCaller.AdminToken(c) + imToken, err := o.imApiCaller.UserToken(c, config.GetIMAdmin(mctx.GetOpUserID(c)), constant.AdminPlatformID) if err != nil { apiresp.GinError(c, err) return } - groups, err := o.imApiCaller.FindGroupInfo(mctx.WithApiToken(c, token), searchResp.GroupIDs) + groups, err := o.imApiCaller.FindGroupInfo(mctx.WithApiToken(c, imToken), searchResp.GroupIDs) if err != nil { apiresp.GinError(c, err) return @@ -256,12 +258,12 @@ func (o *AdminApi) BlockUser(c *gin.Context) { apiresp.GinError(c, err) return } - token, err := o.imApiCaller.UserToken(c, mctx.GetOpUserID(c), constant.AdminPlatformID) + imToken, err := o.imApiCaller.UserToken(c, config.GetIMAdmin(mctx.GetOpUserID(c)), constant.AdminPlatformID) if err != nil { apiresp.GinError(c, err) return } - err = o.imApiCaller.ForceOffLine(mctx.WithApiToken(c, token), req.UserID) + err = o.imApiCaller.ForceOffLine(mctx.WithApiToken(c, imToken), req.UserID) if err != nil { apiresp.GinError(c, err) return diff --git a/internal/api/chat.go b/internal/api/chat.go index 7c6e91ab2..29b78649c 100644 --- a/internal/api/chat.go +++ b/internal/api/chat.go @@ -110,17 +110,18 @@ func (o *ChatApi) RegisterUser(c *gin.Context) { apiresp.GinError(c, err) return } - token, err := o.imApiCaller.AdminToken(c) + imToken, err := o.imApiCaller.ImAdminTokenWithDefaultAdmin(c) if err != nil { apiresp.GinError(c, err) return } - ctx := mctx.WithApiToken(mctx.WithAdminUser(c), token) - if resp, err := o.adminClient.FindDefaultFriend(ctx, &admin.FindDefaultFriendReq{}); err == nil { - _ = o.imApiCaller.ImportFriend(ctx, respRegisterUser.UserID, resp.UserIDs) + apiCtx := mctx.WithApiToken(c, imToken) + rpcCtx := mctx.WithAdminUser(c) + if resp, err := o.adminClient.FindDefaultFriend(rpcCtx, &admin.FindDefaultFriendReq{}); err == nil { + _ = o.imApiCaller.ImportFriend(apiCtx, respRegisterUser.UserID, resp.UserIDs) } - if resp, err := o.adminClient.FindDefaultGroup(ctx, &admin.FindDefaultGroupReq{}); err != nil { - _ = o.imApiCaller.InviteToGroup(c, respRegisterUser.UserID, resp.GroupIDs) + if resp, err := o.adminClient.FindDefaultGroup(rpcCtx, &admin.FindDefaultGroupReq{}); err == nil { + _ = o.imApiCaller.InviteToGroup(apiCtx, respRegisterUser.UserID, resp.GroupIDs) } if req.AutoLogin { resp.ImToken, err = o.imApiCaller.UserToken(c, respRegisterUser.UserID, req.Platform) @@ -198,7 +199,20 @@ func (o *ChatApi) UpdateUserInfo(c *gin.Context) { apiresp.GinError(c, err) return } - token, err := o.imApiCaller.AdminToken(c) + opUserType, err := mctx.GetUserType(c) + if err != nil { + apiresp.GinError(c, err) + return + } + var imToken string + if opUserType == constant2.NormalUser { + imToken, err = o.imApiCaller.ImAdminTokenWithDefaultAdmin(c) + } else if opUserType == constant2.AdminUser { + imToken, err = o.imApiCaller.UserToken(c, config.GetIMAdmin(mctx.GetOpUserID(c)), constant.AdminPlatformID) + } else { + apiresp.GinError(c, errs.ErrArgs.Wrap("opUserType unknown")) + return + } if err != nil { apiresp.GinError(c, err) return @@ -217,7 +231,7 @@ func (o *ChatApi) UpdateUserInfo(c *gin.Context) { } else { faceURL = respUpdate.FaceUrl } - err = o.imApiCaller.UpdateUserInfo(mctx.WithApiToken(c, token), req.UserID, nickName, faceURL) + err = o.imApiCaller.UpdateUserInfo(mctx.WithApiToken(c, imToken), req.UserID, nickName, faceURL) if err != nil { apiresp.GinError(c, err) return diff --git a/internal/api/mw.go b/internal/api/mw.go index f961198c7..4975db03e 100644 --- a/internal/api/mw.go +++ b/internal/api/mw.go @@ -15,14 +15,15 @@ package api import ( - "strconv" - + "github.com/OpenIMSDK/chat/pkg/common/constant" + constant2 "github.com/OpenIMSDK/protocol/constant" "github.com/OpenIMSDK/tools/apiresp" "github.com/OpenIMSDK/tools/errs" + "github.com/OpenIMSDK/tools/log" "github.com/gin-gonic/gin" "google.golang.org/grpc" + "strconv" - "github.com/OpenIMSDK/chat/pkg/common/constant" "github.com/OpenIMSDK/chat/pkg/proto/admin" ) @@ -34,29 +35,55 @@ type MW struct { client admin.AdminClient } -func (o *MW) parseToken(c *gin.Context) (string, int32, error) { +func (o *MW) parseToken(c *gin.Context) (string, int32, string, error) { token := c.GetHeader("token") if token == "" { - return "", 0, errs.ErrArgs.Wrap("token is empty") + return "", 0, "", errs.ErrArgs.Wrap("token is empty") } resp, err := o.client.ParseToken(c, &admin.ParseTokenReq{Token: token}) if err != nil { - return "", 0, err + return "", 0, "", err } - return resp.UserID, resp.UserType, nil + return resp.UserID, resp.UserType, token, nil } -func (o *MW) parseTokenType(c *gin.Context, userType int32) (string, error) { - userID, t, err := o.parseToken(c) +func (o *MW) parseTokenType(c *gin.Context, userType int32) (string, string, error) { + userID, t, token, err := o.parseToken(c) if err != nil { - return "", err + return "", "", err } if t != userType { - return "", errs.ErrArgs.Wrap("token type error") + return "", "", errs.ErrArgs.Wrap("token type error") } - return userID, nil + return userID, token, nil } +func (o *MW) isValidToken(c *gin.Context, userID string, token string) error { + resp, err := o.client.GetUserToken(c, &admin.GetUserTokenReq{UserID: userID}) + m := resp.TokensMap + if err != nil { + log.ZWarn(c, "cache get token error", errs.ErrTokenNotExist.Wrap()) + return err + } + if len(m) == 0 { + log.ZWarn(c, "cache do not exist token error", errs.ErrTokenNotExist.Wrap()) + return errs.ErrTokenNotExist.Wrap() + } + if v, ok := m[token]; ok { + switch v { + case constant2.NormalToken: + case constant2.KickedToken: + log.ZWarn(c, "cache kicked token error", errs.ErrTokenKicked.Wrap()) + return errs.ErrTokenKicked.Wrap() + default: + log.ZWarn(c, "cache unknown token error", errs.ErrTokenUnknown.Wrap()) + return err + } + } else { + return errs.ErrTokenNotExist.Wrap() + } + return nil +} func (o *MW) setToken(c *gin.Context, userID string, userType int32) { c.Set(constant.RpcOpUserID, userID) c.Set(constant.RpcOpUserType, []string{strconv.Itoa(int(userType))}) @@ -64,31 +91,46 @@ func (o *MW) setToken(c *gin.Context, userID string, userType int32) { } func (o *MW) CheckToken(c *gin.Context) { - userID, userType, err := o.parseToken(c) + userID, userType, token, err := o.parseToken(c) if err != nil { c.Abort() apiresp.GinError(c, err) return } + if err := o.isValidToken(c, userID, token); err != nil { + c.Abort() + apiresp.GinError(c, err) + return + } o.setToken(c, userID, userType) } func (o *MW) CheckAdmin(c *gin.Context) { - userID, err := o.parseTokenType(c, constant.AdminUser) + userID, token, err := o.parseTokenType(c, constant.AdminUser) if err != nil { c.Abort() apiresp.GinError(c, err) return } + if err := o.isValidToken(c, userID, token); err != nil { + c.Abort() + apiresp.GinError(c, err) + return + } o.setToken(c, userID, constant.AdminUser) } func (o *MW) CheckUser(c *gin.Context) { - userID, err := o.parseTokenType(c, constant.NormalUser) + userID, token, err := o.parseTokenType(c, constant.NormalUser) if err != nil { c.Abort() apiresp.GinError(c, err) return } + if err := o.isValidToken(c, userID, token); err != nil { + c.Abort() + apiresp.GinError(c, err) + return + } o.setToken(c, userID, constant.NormalUser) } diff --git a/internal/rpc/admin/admin.go b/internal/rpc/admin/admin.go index 07b22c435..d54110151 100644 --- a/internal/rpc/admin/admin.go +++ b/internal/rpc/admin/admin.go @@ -16,6 +16,7 @@ package admin import ( "context" + "github.com/OpenIMSDK/chat/pkg/common/db/cache" "github.com/OpenIMSDK/tools/discoveryregistry" "github.com/OpenIMSDK/tools/mcontext" "google.golang.org/grpc" @@ -51,7 +52,11 @@ func Start(discov discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e if err := db.AutoMigrate(tables...); err != nil { return err } - if err := database.NewAdminDatabase(db).InitAdmin(context.Background()); err != nil { + rdb, err := cache.NewRedis() + if err != nil { + return err + } + if err := database.NewAdminDatabase(db, rdb).InitAdmin(context.Background()); err != nil { return err } if err := discov.CreateRpcRootNodes([]string{config.Config.RpcRegisterName.OpenImAdminName, config.Config.RpcRegisterName.OpenImChatName}); err != nil { @@ -59,7 +64,7 @@ func Start(discov discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e } admin.RegisterAdminServer(server, &adminServer{ - Database: database.NewAdminDatabase(db), + Database: database.NewAdminDatabase(db, rdb), Chat: chat.NewChatClient(discov), }) return nil diff --git a/internal/rpc/admin/token.go b/internal/rpc/admin/token.go index d9371f382..dd6956772 100644 --- a/internal/rpc/admin/token.go +++ b/internal/rpc/admin/token.go @@ -23,12 +23,16 @@ import ( "github.com/OpenIMSDK/chat/pkg/proto/admin" ) -func (*adminServer) CreateToken(ctx context.Context, req *admin.CreateTokenReq) (*admin.CreateTokenResp, error) { +func (o *adminServer) CreateToken(ctx context.Context, req *admin.CreateTokenReq) (*admin.CreateTokenResp, error) { defer log.ZDebug(ctx, "return") token, err := tokenverify.CreateToken(req.UserID, req.UserType, *config.Config.TokenPolicy.Expire) if err != nil { return nil, err } + err = o.Database.CacheToken(ctx, req.UserID, token) + if err != nil { + return nil, err + } return &admin.CreateTokenResp{ Token: token, }, nil @@ -44,3 +48,17 @@ func (*adminServer) ParseToken(ctx context.Context, req *admin.ParseTokenReq) (* UserType: userType, }, nil } + +func (o *adminServer) GetUserToken(ctx context.Context, req *admin.GetUserTokenReq) (*admin.GetUserTokenResp, error) { + + tokensMap, err := o.Database.GetTokens(ctx, req.UserID) + + if err != nil { + + return nil, err + + } + + return &admin.GetUserTokenResp{TokensMap: tokensMap}, nil + +} diff --git a/pkg/common/apicall/caller.go b/pkg/common/apicall/caller.go index deb87e836..932c73540 100644 --- a/pkg/common/apicall/caller.go +++ b/pkg/common/apicall/caller.go @@ -2,6 +2,7 @@ package apicall import ( "context" + "fmt" "github.com/OpenIMSDK/chat/pkg/common/config" "github.com/OpenIMSDK/protocol/auth" "github.com/OpenIMSDK/protocol/constant" @@ -12,7 +13,7 @@ import ( ) type CallerInterface interface { - AdminToken(ctx context.Context) (string, error) + ImAdminTokenWithDefaultAdmin(ctx context.Context) (string, error) ImportFriend(ctx context.Context, ownerUserID string, friendUserID []string) error UserToken(ctx context.Context, userID string, platform int32) (string, error) InviteToGroup(ctx context.Context, userID string, groupIDs []string) error @@ -40,11 +41,12 @@ func (c *Caller) ImportFriend(ctx context.Context, ownerUserID string, friendUse return err } -func (c *Caller) AdminToken(ctx context.Context) (string, error) { +func (c *Caller) ImAdminTokenWithDefaultAdmin(ctx context.Context) (string, error) { return c.UserToken(ctx, config.GetDefaultIMAdmin(), constant.AdminPlatformID) } func (c *Caller) UserToken(ctx context.Context, userID string, platformID int32) (string, error) { + fmt.Println(*config.Config.Secret) resp, err := userToken.Call(ctx, &auth.UserTokenReq{ Secret: *config.Config.Secret, PlatformID: platformID, diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 4fac4607c..9c24ef490 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -38,6 +38,11 @@ var Config struct { RegisterIP string `yaml:"registerIP"` ListenIP string `yaml:"listenIP"` } `yaml:"rpc"` + Redis struct { + Address []string `yaml:"address"` + Username string `yaml:"username"` + Password string `yaml:"password"` + } `yaml:"redis"` RpcPort struct { OpenImAdminPort []int `yaml:"openImAdminPort"` OpenImChatPort []int `yaml:"openImChatPort"` diff --git a/pkg/common/db/cache/init_redis.go b/pkg/common/db/cache/init_redis.go new file mode 100644 index 000000000..3c0ae9413 --- /dev/null +++ b/pkg/common/db/cache/init_redis.go @@ -0,0 +1,54 @@ +package cache + +import ( + "context" + "errors" + "fmt" + "github.com/OpenIMSDK/chat/pkg/common/config" + "time" + + "github.com/redis/go-redis/v9" + + "github.com/OpenIMSDK/tools/errs" + "github.com/OpenIMSDK/tools/mw/specialerror" +) + +const ( + maxRetry = 10 // number of retries +) + +// NewRedis Initialize redis connection. +func NewRedis() (redis.UniversalClient, error) { + if len(config.Config.Redis.Address) == 0 { + return nil, errors.New("redis address is empty") + } + specialerror.AddReplace(redis.Nil, errs.ErrRecordNotFound) + var rdb redis.UniversalClient + if len(config.Config.Redis.Address) > 1 { + rdb = redis.NewClusterClient(&redis.ClusterOptions{ + Addrs: config.Config.Redis.Address, + Username: config.Config.Redis.Username, + Password: config.Config.Redis.Password, // no password set + PoolSize: 50, + MaxRetries: maxRetry, + }) + } else { + rdb = redis.NewClient(&redis.Options{ + Addr: config.Config.Redis.Address[0], + Username: config.Config.Redis.Username, + Password: config.Config.Redis.Password, // no password set + DB: 0, // use default DB + PoolSize: 100, // connection pool size + MaxRetries: maxRetry, + }) + } + + var err error = nil + ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) + defer cancel() + err = rdb.Ping(ctx).Err() + if err != nil { + return nil, fmt.Errorf("redis ping %w", err) + } + return rdb, err +} diff --git a/pkg/common/db/cache/token.go b/pkg/common/db/cache/token.go new file mode 100644 index 000000000..0ad637aa5 --- /dev/null +++ b/pkg/common/db/cache/token.go @@ -0,0 +1,43 @@ +package cache + +import ( + "context" + "github.com/OpenIMSDK/tools/errs" + "github.com/OpenIMSDK/tools/utils" + "github.com/redis/go-redis/v9" +) + +const ( + chatToken = "CHAT_UID_TOKEN_STATUS:" +) + +type TokenInterface interface { + AddTokenFlag(ctx context.Context, userID string, token string, flag int) error + GetTokensWithoutError(ctx context.Context, userID string) (map[string]int32, error) +} + +type TokenCacheRedis struct { + rdb redis.UniversalClient +} + +func NewTokenInterface(rdb redis.UniversalClient) *TokenCacheRedis { + return &TokenCacheRedis{rdb: rdb} +} + +func (t *TokenCacheRedis) AddTokenFlag(ctx context.Context, userID string, token string, flag int) error { + key := chatToken + userID + return errs.Wrap(t.rdb.HSet(ctx, key, token, flag).Err()) +} + +func (t *TokenCacheRedis) GetTokensWithoutError(ctx context.Context, userID string) (map[string]int32, error) { + key := chatToken + userID + m, err := t.rdb.HGetAll(ctx, key).Result() + if err != nil { + return nil, errs.Wrap(err) + } + mm := make(map[string]int32) + for k, v := range m { + mm[k] = utils.StringToInt32(v) + } + return mm, nil +} diff --git a/pkg/common/db/database/admin.go b/pkg/common/db/database/admin.go index 1df6e1793..b983e600f 100644 --- a/pkg/common/db/database/admin.go +++ b/pkg/common/db/database/admin.go @@ -16,6 +16,9 @@ package database import ( "context" + "github.com/OpenIMSDK/chat/pkg/common/db/cache" + "github.com/OpenIMSDK/protocol/constant" + "github.com/redis/go-redis/v9" "github.com/OpenIMSDK/tools/tx" "gorm.io/gorm" @@ -67,9 +70,11 @@ type AdminDatabaseInterface interface { DelUserLimitLogin(ctx context.Context, ms []*table.LimitUserLoginIP) error CountLimitUserLoginIP(ctx context.Context, userID string) (uint32, error) GetLimitUserLoginIP(ctx context.Context, userID string, ip string) (*table.LimitUserLoginIP, error) + CacheToken(ctx context.Context, userID string, token string) error + GetTokens(ctx context.Context, userID string) (map[string]int32, error) } -func NewAdminDatabase(db *gorm.DB) AdminDatabaseInterface { +func NewAdminDatabase(db *gorm.DB, rdb redis.UniversalClient) AdminDatabaseInterface { return &AdminDatabase{ tx: tx.NewGorm(db), admin: admin.NewAdmin(db), @@ -81,6 +86,7 @@ func NewAdminDatabase(db *gorm.DB) AdminDatabaseInterface { registerAddGroup: admin.NewRegisterAddGroup(db), applet: admin.NewApplet(db), clientConfig: admin.NewClientConfig(db), + cache: cache.NewTokenInterface(rdb), } } @@ -95,6 +101,7 @@ type AdminDatabase struct { registerAddGroup table.RegisterAddGroupInterface applet table.AppletInterface clientConfig table.ClientConfigInterface + cache cache.TokenInterface } func (o *AdminDatabase) InitAdmin(ctx context.Context) error { @@ -264,3 +271,11 @@ func (o *AdminDatabase) CountLimitUserLoginIP(ctx context.Context, userID string func (o *AdminDatabase) GetLimitUserLoginIP(ctx context.Context, userID string, ip string) (*table.LimitUserLoginIP, error) { return o.limitUserLoginIP.Take(ctx, userID, ip) } + +func (o *AdminDatabase) CacheToken(ctx context.Context, userID string, token string) error { + return o.cache.AddTokenFlag(ctx, userID, token, constant.NormalToken) +} + +func (o *AdminDatabase) GetTokens(ctx context.Context, userID string) (map[string]int32, error) { + return o.cache.GetTokensWithoutError(ctx, userID) +} diff --git a/pkg/common/db/database/chat.go b/pkg/common/db/database/chat.go index af068e081..5c487f4dd 100644 --- a/pkg/common/db/database/chat.go +++ b/pkg/common/db/database/chat.go @@ -36,7 +36,7 @@ type ChatDatabaseInterface interface { TakeAttributeByPhone(ctx context.Context, areaCode string, phoneNumber string) (*table.Attribute, error) TakeAttributeByAccount(ctx context.Context, account string) (*table.Attribute, error) TakeAttributeByUserID(ctx context.Context, userID string) (*table.Attribute, error) - Search(ctx context.Context, normalUser int32, keyword string, genders []int32, pageNumber int32, showNumber int32) (uint32, []*table.Attribute, error) + Search(ctx context.Context, normalUser int32, keyword string, gender int32, pageNumber int32, showNumber int32) (uint32, []*table.Attribute, error) CountVerifyCodeRange(ctx context.Context, account string, start time.Time, end time.Time) (uint32, error) AddVerifyCode(ctx context.Context, verifyCode *table.VerifyCode, fn func() error) error UpdateVerifyCodeIncrCount(ctx context.Context, id uint) error @@ -113,7 +113,7 @@ func (o *ChatDatabase) TakeAttributeByUserID(ctx context.Context, userID string) return o.attribute.Take(ctx, userID) } -func (o *ChatDatabase) Search(ctx context.Context, normalUser int32, keyword string, genders []int32, pageNumber int32, showNumber int32) (total uint32, attributes []*table.Attribute, err error) { +func (o *ChatDatabase) Search(ctx context.Context, normalUser int32, keyword string, genders int32, pageNumber int32, showNumber int32) (total uint32, attributes []*table.Attribute, err error) { var forbiddenIDs []string if normalUser == constant2.NormalUser { forbiddenIDs, err = o.forbiddenAccount.FindAllIDs(ctx) diff --git a/pkg/common/db/model/chat/attribute.go b/pkg/common/db/model/chat/attribute.go index a839906c1..6495c6013 100644 --- a/pkg/common/db/model/chat/attribute.go +++ b/pkg/common/db/model/chat/attribute.go @@ -77,9 +77,15 @@ func (o *Attribute) Take(ctx context.Context, userID string) (*chat.Attribute, e return &a, errs.Wrap(o.db.WithContext(ctx).Where("user_id = ?", userID).Take(&a).Error) } -func (o *Attribute) SearchNormalUser(ctx context.Context, keyword string, forbiddenIDs []string, genders []int32, page int32, size int32) (uint32, []*chat.Attribute, error) { +func (o *Attribute) SearchNormalUser(ctx context.Context, keyword string, forbiddenIDs []string, gender int32, page int32, size int32) (uint32, []*chat.Attribute, error) { db := o.db.WithContext(ctx) - if len(genders) > 0 { + var genders []int32 + if gender == 0 { + genders = append(genders, 0, 1, 2) + } else { + genders = append(genders, gender) + } + if len(forbiddenIDs) == 0 { db = db.Where("gender in ?", genders) } if len(forbiddenIDs) > 0 { diff --git a/pkg/common/db/table/chat/attribute.go b/pkg/common/db/table/chat/attribute.go index 63639a76e..10d4ebeea 100644 --- a/pkg/common/db/table/chat/attribute.go +++ b/pkg/common/db/table/chat/attribute.go @@ -53,5 +53,5 @@ type AttributeInterface interface { TakePhone(ctx context.Context, areaCode string, phoneNumber string) (*Attribute, error) TakeAccount(ctx context.Context, account string) (*Attribute, error) Take(ctx context.Context, userID string) (*Attribute, error) - SearchNormalUser(ctx context.Context, keyword string, forbiddenID []string, genders []int32, page int32, size int32) (uint32, []*Attribute, error) + SearchNormalUser(ctx context.Context, keyword string, forbiddenID []string, gender int32, page int32, size int32) (uint32, []*Attribute, error) } diff --git a/pkg/common/mctx/get.go b/pkg/common/mctx/get.go index 06b957783..3d90b1d07 100644 --- a/pkg/common/mctx/get.go +++ b/pkg/common/mctx/get.go @@ -110,9 +110,13 @@ func GetOpUserID(ctx context.Context) string { return userID } -func GetUserType(ctx context.Context) int32 { - userType, _ := ctx.Value(constant.RpcOpUserType).(int32) - return userType +func GetUserType(ctx context.Context) (int, error) { + userTypeArr, _ := ctx.Value(constant.RpcOpUserType).([]string) + userType, err := strconv.Atoi(userTypeArr[0]) + if err != nil { + return 0, errs.ErrNoPermission.Wrap("user type invalid " + err.Error()) + } + return userType, nil } func WithOpUserID(ctx context.Context, opUserID string, userType int) context.Context { @@ -127,7 +131,7 @@ func WithOpUserID(ctx context.Context, opUserID string, userType int) context.Co func WithAdminUser(ctx context.Context) context.Context { if len(config.Config.AdminList) > 0 { - ctx = WithOpUserID(ctx, config.Config.AdminList[0].ImAdminID, constant.AdminUser) + ctx = WithOpUserID(ctx, config.Config.AdminList[0].AdminID, constant.AdminUser) } return ctx } diff --git a/pkg/proto/admin/admin.pb.go b/pkg/proto/admin/admin.pb.go index 6c9dab322..0be6ff446 100644 --- a/pkg/proto/admin/admin.pb.go +++ b/pkg/proto/admin/admin.pb.go @@ -4805,6 +4805,100 @@ func (x *GetClientConfigResp) GetConfig() map[string]string { return nil } +type GetUserTokenReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserID string `protobuf:"bytes,1,opt,name=userID,proto3" json:"userID"` +} + +func (x *GetUserTokenReq) Reset() { + *x = GetUserTokenReq{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_admin_proto_msgTypes[91] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetUserTokenReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUserTokenReq) ProtoMessage() {} + +func (x *GetUserTokenReq) ProtoReflect() protoreflect.Message { + mi := &file_admin_admin_proto_msgTypes[91] + 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 GetUserTokenReq.ProtoReflect.Descriptor instead. +func (*GetUserTokenReq) Descriptor() ([]byte, []int) { + return file_admin_admin_proto_rawDescGZIP(), []int{91} +} + +func (x *GetUserTokenReq) GetUserID() string { + if x != nil { + return x.UserID + } + return "" +} + +type GetUserTokenResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TokensMap map[string]int32 `protobuf:"bytes,1,rep,name=tokensMap,proto3" json:"tokensMap" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *GetUserTokenResp) Reset() { + *x = GetUserTokenResp{} + if protoimpl.UnsafeEnabled { + mi := &file_admin_admin_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetUserTokenResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUserTokenResp) ProtoMessage() {} + +func (x *GetUserTokenResp) ProtoReflect() protoreflect.Message { + mi := &file_admin_admin_proto_msgTypes[92] + 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 GetUserTokenResp.ProtoReflect.Descriptor instead. +func (*GetUserTokenResp) Descriptor() ([]byte, []int) { + return file_admin_admin_proto_rawDescGZIP(), []int{92} +} + +func (x *GetUserTokenResp) GetTokensMap() map[string]int32 { + if x != nil { + return x.TokensMap + } + return nil +} + var File_admin_admin_proto protoreflect.FileDescriptor var file_admin_admin_proto_rawDesc = []byte{ @@ -5288,257 +5382,275 @@ var file_admin_admin_proto_rawDesc = []byte{ 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, 0xea, 0x1e, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, - 0x40, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, - 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x5b, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x12, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, - 0x0a, 0x0f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, - 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, - 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, - 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x1a, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, - 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, - 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x44, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x25, 0x2e, 0x4f, - 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x44, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, - 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x46, - 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, - 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, - 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x6a, 0x0a, 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, - 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, - 0x0f, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, - 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, - 0x0f, 0x44, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x29, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, + 0x22, 0xa1, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x4d, + 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, + 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x4d, 0x61, 0x70, 0x1a, 0x3c, 0x0a, 0x0e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x32, 0xc1, 0x1f, 0x0a, 0x05, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x40, + 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1a, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x5b, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x23, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, + 0x0f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, - 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x44, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, - 0x10, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x67, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, - 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, - 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x41, 0x64, 0x64, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, + 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, + 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, + 0x0c, 0x47, 0x65, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x47, 0x65, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, + 0x1a, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, + 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, + 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x25, 0x2e, 0x4f, 0x70, + 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, + 0x65, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, + 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x46, 0x69, + 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, + 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x6a, 0x0a, 0x13, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, + 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x0f, + 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, + 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x0f, + 0x44, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, + 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x44, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10, + 0x46, 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x67, 0x0a, 0x12, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, + 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, - 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x64, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, - 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x6e, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, - 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, - 0x47, 0x65, 0x6e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x67, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, - 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, - 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, + 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, + 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, - 0x0a, 0x11, 0x55, 0x73, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x73, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x6e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, - 0x73, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, - 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, - 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x73, 0x0a, 0x16, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x12, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, - 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, - 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6a, - 0x0a, 0x13, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, - 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, + 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, + 0x65, 0x6e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x67, 0x0a, 0x12, 0x46, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x27, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, + 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, + 0x11, 0x55, 0x73, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x73, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x73, + 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, + 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x49, + 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x6e, 0x76, 0x69, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x73, 0x0a, 0x16, 0x53, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x12, 0x2b, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x1a, - 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, - 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, - 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6a, 0x0a, 0x13, 0x44, 0x65, - 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, - 0x65, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x26, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x50, 0x46, - 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x0e, - 0x41, 0x64, 0x64, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x23, - 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x0e, 0x44, 0x65, 0x6c, - 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x23, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, - 0x65, 0x6c, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, - 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x09, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, - 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, - 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, - 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x0b, 0x55, 0x6e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, - 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x6e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x6e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x0f, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x24, + 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6a, 0x0a, + 0x13, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, + 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, + 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, - 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x46, - 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, - 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, - 0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x73, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x62, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, - 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, - 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6a, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x28, 0x2e, + 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6a, 0x0a, 0x13, 0x44, 0x65, 0x6c, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x12, 0x28, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, + 0x6c, 0x55, 0x73, 0x65, 0x72, 0x49, 0x50, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, + 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x26, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x49, 0x50, 0x46, 0x6f, + 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x0e, 0x41, + 0x64, 0x64, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x23, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x41, 0x64, 0x64, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, + 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x49, + 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x23, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, + 0x6c, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, + 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x49, 0x50, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x10, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, + 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x1a, 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, + 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, + 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x0b, 0x55, 0x6e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, + 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x6e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x6e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x0f, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, - 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x62, 0x69, - 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x64, 0x0a, 0x11, 0x46, 0x69, + 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x26, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, + 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x27, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x55, + 0x73, 0x65, 0x72, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x73, 0x0a, 0x16, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x62, 0x69, + 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x2c, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x52, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, - 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x73, 0x65, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x6a, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x28, 0x2e, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, + 0x64, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, + 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x52, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, + 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x73, 0x65, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, - 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x41, 0x70, - 0x70, 0x6c, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, - 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, - 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, - 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x6c, 0x65, 0x74, 0x12, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, - 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, - 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x0a, 0x46, 0x69, - 0x6e, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x12, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, + 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, + 0x6c, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, + 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x65, + 0x74, 0x12, 0x1e, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x1a, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x55, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, + 0x65, 0x74, 0x12, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, + 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, + 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x0a, 0x46, 0x69, 0x6e, + 0x64, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x12, 0x1f, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, + 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x41, + 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, 0x64, - 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x4f, 0x70, 0x65, 0x6e, - 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x46, 0x69, 0x6e, - 0x64, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, 0x0c, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x12, 0x21, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x22, - 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, - 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, - 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, - 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, - 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, - 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x42, 0x2b, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x44, 0x4b, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x12, 0x21, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, + 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x5e, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, + 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x5e, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, + 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x53, 0x65, + 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x5e, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, + 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x44, 0x65, + 0x6c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x55, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x21, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x43, 0x68, 0x61, + 0x74, 0x2e, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x42, 0x2b, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x44, 0x4b, + 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5553,7 +5665,7 @@ func file_admin_admin_proto_rawDescGZIP() []byte { return file_admin_admin_proto_rawDescData } -var file_admin_admin_proto_msgTypes = make([]protoimpl.MessageInfo, 93) +var file_admin_admin_proto_msgTypes = make([]protoimpl.MessageInfo, 96) var file_admin_admin_proto_goTypes = []interface{}{ (*LoginReq)(nil), // 0: OpenIMChat.admin.LoginReq (*LoginResp)(nil), // 1: OpenIMChat.admin.LoginResp @@ -5646,146 +5758,152 @@ var file_admin_admin_proto_goTypes = []interface{}{ (*DelClientConfigResp)(nil), // 88: OpenIMChat.admin.DelClientConfigResp (*GetClientConfigReq)(nil), // 89: OpenIMChat.admin.GetClientConfigReq (*GetClientConfigResp)(nil), // 90: OpenIMChat.admin.GetClientConfigResp - nil, // 91: OpenIMChat.admin.SetClientConfigReq.ConfigEntry - nil, // 92: OpenIMChat.admin.GetClientConfigResp.ConfigEntry - (*wrapperspb.StringValue)(nil), // 93: OpenIMServer.protobuf.StringValue - (*wrapperspb.Int32Value)(nil), // 94: OpenIMServer.protobuf.Int32Value - (*sdkws.RequestPagination)(nil), // 95: OpenIMServer.sdkws.RequestPagination - (*common.UserPublicInfo)(nil), // 96: OpenIMChat.common.UserPublicInfo - (*sdkws.GroupInfo)(nil), // 97: OpenIMServer.sdkws.GroupInfo - (*wrapperspb.Int64Value)(nil), // 98: OpenIMServer.protobuf.Int64Value - (*wrapperspb.UInt32Value)(nil), // 99: OpenIMServer.protobuf.UInt32Value - (*common.AppletInfo)(nil), // 100: OpenIMChat.common.AppletInfo + (*GetUserTokenReq)(nil), // 91: OpenIMChat.admin.GetUserTokenReq + (*GetUserTokenResp)(nil), // 92: OpenIMChat.admin.GetUserTokenResp + nil, // 93: OpenIMChat.admin.SetClientConfigReq.ConfigEntry + nil, // 94: OpenIMChat.admin.GetClientConfigResp.ConfigEntry + nil, // 95: OpenIMChat.admin.GetUserTokenResp.TokensMapEntry + (*wrapperspb.StringValue)(nil), // 96: OpenIMServer.protobuf.StringValue + (*wrapperspb.Int32Value)(nil), // 97: OpenIMServer.protobuf.Int32Value + (*sdkws.RequestPagination)(nil), // 98: OpenIMServer.sdkws.RequestPagination + (*common.UserPublicInfo)(nil), // 99: OpenIMChat.common.UserPublicInfo + (*sdkws.GroupInfo)(nil), // 100: OpenIMServer.sdkws.GroupInfo + (*wrapperspb.Int64Value)(nil), // 101: OpenIMServer.protobuf.Int64Value + (*wrapperspb.UInt32Value)(nil), // 102: OpenIMServer.protobuf.UInt32Value + (*common.AppletInfo)(nil), // 103: OpenIMChat.common.AppletInfo } var file_admin_admin_proto_depIdxs = []int32{ - 93, // 0: OpenIMChat.admin.AdminUpdateInfoReq.account:type_name -> OpenIMServer.protobuf.StringValue - 93, // 1: OpenIMChat.admin.AdminUpdateInfoReq.password:type_name -> OpenIMServer.protobuf.StringValue - 93, // 2: OpenIMChat.admin.AdminUpdateInfoReq.faceURL:type_name -> OpenIMServer.protobuf.StringValue - 93, // 3: OpenIMChat.admin.AdminUpdateInfoReq.nickname:type_name -> OpenIMServer.protobuf.StringValue - 93, // 4: OpenIMChat.admin.AdminUpdateInfoReq.userID:type_name -> OpenIMServer.protobuf.StringValue - 94, // 5: OpenIMChat.admin.AdminUpdateInfoReq.level:type_name -> OpenIMServer.protobuf.Int32Value - 95, // 6: OpenIMChat.admin.SearchDefaultFriendReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 96, // 7: OpenIMChat.admin.DefaultFriendAttribute.user:type_name -> OpenIMChat.common.UserPublicInfo + 96, // 0: OpenIMChat.admin.AdminUpdateInfoReq.account:type_name -> OpenIMServer.protobuf.StringValue + 96, // 1: OpenIMChat.admin.AdminUpdateInfoReq.password:type_name -> OpenIMServer.protobuf.StringValue + 96, // 2: OpenIMChat.admin.AdminUpdateInfoReq.faceURL:type_name -> OpenIMServer.protobuf.StringValue + 96, // 3: OpenIMChat.admin.AdminUpdateInfoReq.nickname:type_name -> OpenIMServer.protobuf.StringValue + 96, // 4: OpenIMChat.admin.AdminUpdateInfoReq.userID:type_name -> OpenIMServer.protobuf.StringValue + 97, // 5: OpenIMChat.admin.AdminUpdateInfoReq.level:type_name -> OpenIMServer.protobuf.Int32Value + 98, // 6: OpenIMChat.admin.SearchDefaultFriendReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 99, // 7: OpenIMChat.admin.DefaultFriendAttribute.user:type_name -> OpenIMChat.common.UserPublicInfo 15, // 8: OpenIMChat.admin.SearchDefaultFriendResp.users:type_name -> OpenIMChat.admin.DefaultFriendAttribute - 95, // 9: OpenIMChat.admin.SearchDefaultGroupReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 97, // 10: OpenIMChat.admin.GroupAttribute.group:type_name -> OpenIMServer.sdkws.GroupInfo + 98, // 9: OpenIMChat.admin.SearchDefaultGroupReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 100, // 10: OpenIMChat.admin.GroupAttribute.group:type_name -> OpenIMServer.sdkws.GroupInfo 36, // 11: OpenIMChat.admin.FindInvitationCodeResp.codes:type_name -> OpenIMChat.admin.InvitationRegister - 96, // 12: OpenIMChat.admin.InvitationRegister.usedUser:type_name -> OpenIMChat.common.UserPublicInfo - 95, // 13: OpenIMChat.admin.SearchInvitationCodeReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 99, // 12: OpenIMChat.admin.InvitationRegister.usedUser:type_name -> OpenIMChat.common.UserPublicInfo + 98, // 13: OpenIMChat.admin.SearchInvitationCodeReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination 36, // 14: OpenIMChat.admin.SearchInvitationCodeResp.list:type_name -> OpenIMChat.admin.InvitationRegister - 95, // 15: OpenIMChat.admin.SearchUserIPLimitLoginReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 96, // 16: OpenIMChat.admin.LimitUserLoginIP.user:type_name -> OpenIMChat.common.UserPublicInfo + 98, // 15: OpenIMChat.admin.SearchUserIPLimitLoginReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 99, // 16: OpenIMChat.admin.LimitUserLoginIP.user:type_name -> OpenIMChat.common.UserPublicInfo 40, // 17: OpenIMChat.admin.SearchUserIPLimitLoginResp.limits:type_name -> OpenIMChat.admin.LimitUserLoginIP 42, // 18: OpenIMChat.admin.AddUserIPLimitLoginReq.limits:type_name -> OpenIMChat.admin.UserIPLimitLogin 42, // 19: OpenIMChat.admin.DelUserIPLimitLoginReq.limits:type_name -> OpenIMChat.admin.UserIPLimitLogin - 95, // 20: OpenIMChat.admin.SearchIPForbiddenReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 98, // 20: OpenIMChat.admin.SearchIPForbiddenReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination 47, // 21: OpenIMChat.admin.SearchIPForbiddenResp.forbiddens:type_name -> OpenIMChat.admin.IPForbidden 48, // 22: OpenIMChat.admin.AddIPForbiddenReq.forbiddens:type_name -> OpenIMChat.admin.IPForbiddenAdd - 95, // 23: OpenIMChat.admin.SearchBlockUserReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 98, // 23: OpenIMChat.admin.SearchBlockUserReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination 66, // 24: OpenIMChat.admin.SearchBlockUserResp.users:type_name -> OpenIMChat.admin.BlockUserInfo 69, // 25: OpenIMChat.admin.FindUserBlockInfoResp.blocks:type_name -> OpenIMChat.admin.BlockInfo - 93, // 26: OpenIMChat.admin.UpdateAppletReq.name:type_name -> OpenIMServer.protobuf.StringValue - 93, // 27: OpenIMChat.admin.UpdateAppletReq.appID:type_name -> OpenIMServer.protobuf.StringValue - 93, // 28: OpenIMChat.admin.UpdateAppletReq.icon:type_name -> OpenIMServer.protobuf.StringValue - 93, // 29: OpenIMChat.admin.UpdateAppletReq.url:type_name -> OpenIMServer.protobuf.StringValue - 93, // 30: OpenIMChat.admin.UpdateAppletReq.md5:type_name -> OpenIMServer.protobuf.StringValue - 98, // 31: OpenIMChat.admin.UpdateAppletReq.size:type_name -> OpenIMServer.protobuf.Int64Value - 93, // 32: OpenIMChat.admin.UpdateAppletReq.version:type_name -> OpenIMServer.protobuf.StringValue - 99, // 33: OpenIMChat.admin.UpdateAppletReq.priority:type_name -> OpenIMServer.protobuf.UInt32Value - 99, // 34: OpenIMChat.admin.UpdateAppletReq.status:type_name -> OpenIMServer.protobuf.UInt32Value - 98, // 35: OpenIMChat.admin.UpdateAppletReq.createTime:type_name -> OpenIMServer.protobuf.Int64Value - 100, // 36: OpenIMChat.admin.FindAppletResp.applets:type_name -> OpenIMChat.common.AppletInfo - 95, // 37: OpenIMChat.admin.SearchAppletReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination - 100, // 38: OpenIMChat.admin.SearchAppletResp.applets:type_name -> OpenIMChat.common.AppletInfo - 91, // 39: OpenIMChat.admin.SetClientConfigReq.config:type_name -> OpenIMChat.admin.SetClientConfigReq.ConfigEntry - 92, // 40: OpenIMChat.admin.GetClientConfigResp.config:type_name -> OpenIMChat.admin.GetClientConfigResp.ConfigEntry - 0, // 41: OpenIMChat.admin.admin.Login:input_type -> OpenIMChat.admin.LoginReq - 4, // 42: OpenIMChat.admin.admin.ChangePassword:input_type -> OpenIMChat.admin.ChangePasswordReq - 2, // 43: OpenIMChat.admin.admin.AdminUpdateInfo:input_type -> OpenIMChat.admin.AdminUpdateInfoReq - 6, // 44: OpenIMChat.admin.admin.GetAdminInfo:input_type -> OpenIMChat.admin.GetAdminInfoReq - 8, // 45: OpenIMChat.admin.admin.AddDefaultFriend:input_type -> OpenIMChat.admin.AddDefaultFriendReq - 10, // 46: OpenIMChat.admin.admin.DelDefaultFriend:input_type -> OpenIMChat.admin.DelDefaultFriendReq - 12, // 47: OpenIMChat.admin.admin.FindDefaultFriend:input_type -> OpenIMChat.admin.FindDefaultFriendReq - 14, // 48: OpenIMChat.admin.admin.SearchDefaultFriend:input_type -> OpenIMChat.admin.SearchDefaultFriendReq - 17, // 49: OpenIMChat.admin.admin.AddDefaultGroup:input_type -> OpenIMChat.admin.AddDefaultGroupReq - 19, // 50: OpenIMChat.admin.admin.DelDefaultGroup:input_type -> OpenIMChat.admin.DelDefaultGroupReq - 21, // 51: OpenIMChat.admin.admin.FindDefaultGroup:input_type -> OpenIMChat.admin.FindDefaultGroupReq - 23, // 52: OpenIMChat.admin.admin.SearchDefaultGroup:input_type -> OpenIMChat.admin.SearchDefaultGroupReq - 26, // 53: OpenIMChat.admin.admin.AddInvitationCode:input_type -> OpenIMChat.admin.AddInvitationCodeReq - 28, // 54: OpenIMChat.admin.admin.GenInvitationCode:input_type -> OpenIMChat.admin.GenInvitationCodeReq - 30, // 55: OpenIMChat.admin.admin.FindInvitationCode:input_type -> OpenIMChat.admin.FindInvitationCodeReq - 32, // 56: OpenIMChat.admin.admin.UseInvitationCode:input_type -> OpenIMChat.admin.UseInvitationCodeReq - 34, // 57: OpenIMChat.admin.admin.DelInvitationCode:input_type -> OpenIMChat.admin.DelInvitationCodeReq - 37, // 58: OpenIMChat.admin.admin.SearchInvitationCode:input_type -> OpenIMChat.admin.SearchInvitationCodeReq - 39, // 59: OpenIMChat.admin.admin.SearchUserIPLimitLogin:input_type -> OpenIMChat.admin.SearchUserIPLimitLoginReq - 43, // 60: OpenIMChat.admin.admin.AddUserIPLimitLogin:input_type -> OpenIMChat.admin.AddUserIPLimitLoginReq - 45, // 61: OpenIMChat.admin.admin.DelUserIPLimitLogin:input_type -> OpenIMChat.admin.DelUserIPLimitLoginReq - 49, // 62: OpenIMChat.admin.admin.SearchIPForbidden:input_type -> OpenIMChat.admin.SearchIPForbiddenReq - 51, // 63: OpenIMChat.admin.admin.AddIPForbidden:input_type -> OpenIMChat.admin.AddIPForbiddenReq - 53, // 64: OpenIMChat.admin.admin.DelIPForbidden:input_type -> OpenIMChat.admin.DelIPForbiddenReq - 59, // 65: OpenIMChat.admin.admin.CancellationUser:input_type -> OpenIMChat.admin.CancellationUserReq - 61, // 66: OpenIMChat.admin.admin.BlockUser:input_type -> OpenIMChat.admin.BlockUserReq - 63, // 67: OpenIMChat.admin.admin.UnblockUser:input_type -> OpenIMChat.admin.UnblockUserReq - 65, // 68: OpenIMChat.admin.admin.SearchBlockUser:input_type -> OpenIMChat.admin.SearchBlockUserReq - 68, // 69: OpenIMChat.admin.admin.FindUserBlockInfo:input_type -> OpenIMChat.admin.FindUserBlockInfoReq - 55, // 70: OpenIMChat.admin.admin.CheckRegisterForbidden:input_type -> OpenIMChat.admin.CheckRegisterForbiddenReq - 57, // 71: OpenIMChat.admin.admin.CheckLoginForbidden:input_type -> OpenIMChat.admin.CheckLoginForbiddenReq - 71, // 72: OpenIMChat.admin.admin.CreateToken:input_type -> OpenIMChat.admin.CreateTokenReq - 73, // 73: OpenIMChat.admin.admin.ParseToken:input_type -> OpenIMChat.admin.ParseTokenReq - 75, // 74: OpenIMChat.admin.admin.AddApplet:input_type -> OpenIMChat.admin.AddAppletReq - 77, // 75: OpenIMChat.admin.admin.DelApplet:input_type -> OpenIMChat.admin.DelAppletReq - 79, // 76: OpenIMChat.admin.admin.UpdateApplet:input_type -> OpenIMChat.admin.UpdateAppletReq - 81, // 77: OpenIMChat.admin.admin.FindApplet:input_type -> OpenIMChat.admin.FindAppletReq - 83, // 78: OpenIMChat.admin.admin.SearchApplet:input_type -> OpenIMChat.admin.SearchAppletReq - 89, // 79: OpenIMChat.admin.admin.GetClientConfig:input_type -> OpenIMChat.admin.GetClientConfigReq - 85, // 80: OpenIMChat.admin.admin.SetClientConfig:input_type -> OpenIMChat.admin.SetClientConfigReq - 87, // 81: OpenIMChat.admin.admin.DelClientConfig:input_type -> OpenIMChat.admin.DelClientConfigReq - 1, // 82: OpenIMChat.admin.admin.Login:output_type -> OpenIMChat.admin.LoginResp - 5, // 83: OpenIMChat.admin.admin.ChangePassword:output_type -> OpenIMChat.admin.ChangePasswordResp - 3, // 84: OpenIMChat.admin.admin.AdminUpdateInfo:output_type -> OpenIMChat.admin.AdminUpdateInfoResp - 7, // 85: OpenIMChat.admin.admin.GetAdminInfo:output_type -> OpenIMChat.admin.GetAdminInfoResp - 9, // 86: OpenIMChat.admin.admin.AddDefaultFriend:output_type -> OpenIMChat.admin.AddDefaultFriendResp - 11, // 87: OpenIMChat.admin.admin.DelDefaultFriend:output_type -> OpenIMChat.admin.DelDefaultFriendResp - 13, // 88: OpenIMChat.admin.admin.FindDefaultFriend:output_type -> OpenIMChat.admin.FindDefaultFriendResp - 16, // 89: OpenIMChat.admin.admin.SearchDefaultFriend:output_type -> OpenIMChat.admin.SearchDefaultFriendResp - 18, // 90: OpenIMChat.admin.admin.AddDefaultGroup:output_type -> OpenIMChat.admin.AddDefaultGroupResp - 20, // 91: OpenIMChat.admin.admin.DelDefaultGroup:output_type -> OpenIMChat.admin.DelDefaultGroupResp - 22, // 92: OpenIMChat.admin.admin.FindDefaultGroup:output_type -> OpenIMChat.admin.FindDefaultGroupResp - 25, // 93: OpenIMChat.admin.admin.SearchDefaultGroup:output_type -> OpenIMChat.admin.SearchDefaultGroupResp - 27, // 94: OpenIMChat.admin.admin.AddInvitationCode:output_type -> OpenIMChat.admin.AddInvitationCodeResp - 29, // 95: OpenIMChat.admin.admin.GenInvitationCode:output_type -> OpenIMChat.admin.GenInvitationCodeResp - 31, // 96: OpenIMChat.admin.admin.FindInvitationCode:output_type -> OpenIMChat.admin.FindInvitationCodeResp - 33, // 97: OpenIMChat.admin.admin.UseInvitationCode:output_type -> OpenIMChat.admin.UseInvitationCodeResp - 35, // 98: OpenIMChat.admin.admin.DelInvitationCode:output_type -> OpenIMChat.admin.DelInvitationCodeResp - 38, // 99: OpenIMChat.admin.admin.SearchInvitationCode:output_type -> OpenIMChat.admin.SearchInvitationCodeResp - 41, // 100: OpenIMChat.admin.admin.SearchUserIPLimitLogin:output_type -> OpenIMChat.admin.SearchUserIPLimitLoginResp - 44, // 101: OpenIMChat.admin.admin.AddUserIPLimitLogin:output_type -> OpenIMChat.admin.AddUserIPLimitLoginResp - 46, // 102: OpenIMChat.admin.admin.DelUserIPLimitLogin:output_type -> OpenIMChat.admin.DelUserIPLimitLoginResp - 50, // 103: OpenIMChat.admin.admin.SearchIPForbidden:output_type -> OpenIMChat.admin.SearchIPForbiddenResp - 52, // 104: OpenIMChat.admin.admin.AddIPForbidden:output_type -> OpenIMChat.admin.AddIPForbiddenResp - 54, // 105: OpenIMChat.admin.admin.DelIPForbidden:output_type -> OpenIMChat.admin.DelIPForbiddenResp - 60, // 106: OpenIMChat.admin.admin.CancellationUser:output_type -> OpenIMChat.admin.CancellationUserResp - 62, // 107: OpenIMChat.admin.admin.BlockUser:output_type -> OpenIMChat.admin.BlockUserResp - 64, // 108: OpenIMChat.admin.admin.UnblockUser:output_type -> OpenIMChat.admin.UnblockUserResp - 67, // 109: OpenIMChat.admin.admin.SearchBlockUser:output_type -> OpenIMChat.admin.SearchBlockUserResp - 70, // 110: OpenIMChat.admin.admin.FindUserBlockInfo:output_type -> OpenIMChat.admin.FindUserBlockInfoResp - 56, // 111: OpenIMChat.admin.admin.CheckRegisterForbidden:output_type -> OpenIMChat.admin.CheckRegisterForbiddenResp - 58, // 112: OpenIMChat.admin.admin.CheckLoginForbidden:output_type -> OpenIMChat.admin.CheckLoginForbiddenResp - 72, // 113: OpenIMChat.admin.admin.CreateToken:output_type -> OpenIMChat.admin.CreateTokenResp - 74, // 114: OpenIMChat.admin.admin.ParseToken:output_type -> OpenIMChat.admin.ParseTokenResp - 76, // 115: OpenIMChat.admin.admin.AddApplet:output_type -> OpenIMChat.admin.AddAppletResp - 78, // 116: OpenIMChat.admin.admin.DelApplet:output_type -> OpenIMChat.admin.DelAppletResp - 80, // 117: OpenIMChat.admin.admin.UpdateApplet:output_type -> OpenIMChat.admin.UpdateAppletResp - 82, // 118: OpenIMChat.admin.admin.FindApplet:output_type -> OpenIMChat.admin.FindAppletResp - 84, // 119: OpenIMChat.admin.admin.SearchApplet:output_type -> OpenIMChat.admin.SearchAppletResp - 90, // 120: OpenIMChat.admin.admin.GetClientConfig:output_type -> OpenIMChat.admin.GetClientConfigResp - 86, // 121: OpenIMChat.admin.admin.SetClientConfig:output_type -> OpenIMChat.admin.SetClientConfigResp - 88, // 122: OpenIMChat.admin.admin.DelClientConfig:output_type -> OpenIMChat.admin.DelClientConfigResp - 82, // [82:123] is the sub-list for method output_type - 41, // [41:82] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 96, // 26: OpenIMChat.admin.UpdateAppletReq.name:type_name -> OpenIMServer.protobuf.StringValue + 96, // 27: OpenIMChat.admin.UpdateAppletReq.appID:type_name -> OpenIMServer.protobuf.StringValue + 96, // 28: OpenIMChat.admin.UpdateAppletReq.icon:type_name -> OpenIMServer.protobuf.StringValue + 96, // 29: OpenIMChat.admin.UpdateAppletReq.url:type_name -> OpenIMServer.protobuf.StringValue + 96, // 30: OpenIMChat.admin.UpdateAppletReq.md5:type_name -> OpenIMServer.protobuf.StringValue + 101, // 31: OpenIMChat.admin.UpdateAppletReq.size:type_name -> OpenIMServer.protobuf.Int64Value + 96, // 32: OpenIMChat.admin.UpdateAppletReq.version:type_name -> OpenIMServer.protobuf.StringValue + 102, // 33: OpenIMChat.admin.UpdateAppletReq.priority:type_name -> OpenIMServer.protobuf.UInt32Value + 102, // 34: OpenIMChat.admin.UpdateAppletReq.status:type_name -> OpenIMServer.protobuf.UInt32Value + 101, // 35: OpenIMChat.admin.UpdateAppletReq.createTime:type_name -> OpenIMServer.protobuf.Int64Value + 103, // 36: OpenIMChat.admin.FindAppletResp.applets:type_name -> OpenIMChat.common.AppletInfo + 98, // 37: OpenIMChat.admin.SearchAppletReq.pagination:type_name -> OpenIMServer.sdkws.RequestPagination + 103, // 38: OpenIMChat.admin.SearchAppletResp.applets:type_name -> OpenIMChat.common.AppletInfo + 93, // 39: OpenIMChat.admin.SetClientConfigReq.config:type_name -> OpenIMChat.admin.SetClientConfigReq.ConfigEntry + 94, // 40: OpenIMChat.admin.GetClientConfigResp.config:type_name -> OpenIMChat.admin.GetClientConfigResp.ConfigEntry + 95, // 41: OpenIMChat.admin.GetUserTokenResp.tokensMap:type_name -> OpenIMChat.admin.GetUserTokenResp.TokensMapEntry + 0, // 42: OpenIMChat.admin.admin.Login:input_type -> OpenIMChat.admin.LoginReq + 4, // 43: OpenIMChat.admin.admin.ChangePassword:input_type -> OpenIMChat.admin.ChangePasswordReq + 2, // 44: OpenIMChat.admin.admin.AdminUpdateInfo:input_type -> OpenIMChat.admin.AdminUpdateInfoReq + 6, // 45: OpenIMChat.admin.admin.GetAdminInfo:input_type -> OpenIMChat.admin.GetAdminInfoReq + 8, // 46: OpenIMChat.admin.admin.AddDefaultFriend:input_type -> OpenIMChat.admin.AddDefaultFriendReq + 10, // 47: OpenIMChat.admin.admin.DelDefaultFriend:input_type -> OpenIMChat.admin.DelDefaultFriendReq + 12, // 48: OpenIMChat.admin.admin.FindDefaultFriend:input_type -> OpenIMChat.admin.FindDefaultFriendReq + 14, // 49: OpenIMChat.admin.admin.SearchDefaultFriend:input_type -> OpenIMChat.admin.SearchDefaultFriendReq + 17, // 50: OpenIMChat.admin.admin.AddDefaultGroup:input_type -> OpenIMChat.admin.AddDefaultGroupReq + 19, // 51: OpenIMChat.admin.admin.DelDefaultGroup:input_type -> OpenIMChat.admin.DelDefaultGroupReq + 21, // 52: OpenIMChat.admin.admin.FindDefaultGroup:input_type -> OpenIMChat.admin.FindDefaultGroupReq + 23, // 53: OpenIMChat.admin.admin.SearchDefaultGroup:input_type -> OpenIMChat.admin.SearchDefaultGroupReq + 26, // 54: OpenIMChat.admin.admin.AddInvitationCode:input_type -> OpenIMChat.admin.AddInvitationCodeReq + 28, // 55: OpenIMChat.admin.admin.GenInvitationCode:input_type -> OpenIMChat.admin.GenInvitationCodeReq + 30, // 56: OpenIMChat.admin.admin.FindInvitationCode:input_type -> OpenIMChat.admin.FindInvitationCodeReq + 32, // 57: OpenIMChat.admin.admin.UseInvitationCode:input_type -> OpenIMChat.admin.UseInvitationCodeReq + 34, // 58: OpenIMChat.admin.admin.DelInvitationCode:input_type -> OpenIMChat.admin.DelInvitationCodeReq + 37, // 59: OpenIMChat.admin.admin.SearchInvitationCode:input_type -> OpenIMChat.admin.SearchInvitationCodeReq + 39, // 60: OpenIMChat.admin.admin.SearchUserIPLimitLogin:input_type -> OpenIMChat.admin.SearchUserIPLimitLoginReq + 43, // 61: OpenIMChat.admin.admin.AddUserIPLimitLogin:input_type -> OpenIMChat.admin.AddUserIPLimitLoginReq + 45, // 62: OpenIMChat.admin.admin.DelUserIPLimitLogin:input_type -> OpenIMChat.admin.DelUserIPLimitLoginReq + 49, // 63: OpenIMChat.admin.admin.SearchIPForbidden:input_type -> OpenIMChat.admin.SearchIPForbiddenReq + 51, // 64: OpenIMChat.admin.admin.AddIPForbidden:input_type -> OpenIMChat.admin.AddIPForbiddenReq + 53, // 65: OpenIMChat.admin.admin.DelIPForbidden:input_type -> OpenIMChat.admin.DelIPForbiddenReq + 59, // 66: OpenIMChat.admin.admin.CancellationUser:input_type -> OpenIMChat.admin.CancellationUserReq + 61, // 67: OpenIMChat.admin.admin.BlockUser:input_type -> OpenIMChat.admin.BlockUserReq + 63, // 68: OpenIMChat.admin.admin.UnblockUser:input_type -> OpenIMChat.admin.UnblockUserReq + 65, // 69: OpenIMChat.admin.admin.SearchBlockUser:input_type -> OpenIMChat.admin.SearchBlockUserReq + 68, // 70: OpenIMChat.admin.admin.FindUserBlockInfo:input_type -> OpenIMChat.admin.FindUserBlockInfoReq + 55, // 71: OpenIMChat.admin.admin.CheckRegisterForbidden:input_type -> OpenIMChat.admin.CheckRegisterForbiddenReq + 57, // 72: OpenIMChat.admin.admin.CheckLoginForbidden:input_type -> OpenIMChat.admin.CheckLoginForbiddenReq + 71, // 73: OpenIMChat.admin.admin.CreateToken:input_type -> OpenIMChat.admin.CreateTokenReq + 73, // 74: OpenIMChat.admin.admin.ParseToken:input_type -> OpenIMChat.admin.ParseTokenReq + 75, // 75: OpenIMChat.admin.admin.AddApplet:input_type -> OpenIMChat.admin.AddAppletReq + 77, // 76: OpenIMChat.admin.admin.DelApplet:input_type -> OpenIMChat.admin.DelAppletReq + 79, // 77: OpenIMChat.admin.admin.UpdateApplet:input_type -> OpenIMChat.admin.UpdateAppletReq + 81, // 78: OpenIMChat.admin.admin.FindApplet:input_type -> OpenIMChat.admin.FindAppletReq + 83, // 79: OpenIMChat.admin.admin.SearchApplet:input_type -> OpenIMChat.admin.SearchAppletReq + 89, // 80: OpenIMChat.admin.admin.GetClientConfig:input_type -> OpenIMChat.admin.GetClientConfigReq + 85, // 81: OpenIMChat.admin.admin.SetClientConfig:input_type -> OpenIMChat.admin.SetClientConfigReq + 87, // 82: OpenIMChat.admin.admin.DelClientConfig:input_type -> OpenIMChat.admin.DelClientConfigReq + 91, // 83: OpenIMChat.admin.admin.GetUserToken:input_type -> OpenIMChat.admin.GetUserTokenReq + 1, // 84: OpenIMChat.admin.admin.Login:output_type -> OpenIMChat.admin.LoginResp + 5, // 85: OpenIMChat.admin.admin.ChangePassword:output_type -> OpenIMChat.admin.ChangePasswordResp + 3, // 86: OpenIMChat.admin.admin.AdminUpdateInfo:output_type -> OpenIMChat.admin.AdminUpdateInfoResp + 7, // 87: OpenIMChat.admin.admin.GetAdminInfo:output_type -> OpenIMChat.admin.GetAdminInfoResp + 9, // 88: OpenIMChat.admin.admin.AddDefaultFriend:output_type -> OpenIMChat.admin.AddDefaultFriendResp + 11, // 89: OpenIMChat.admin.admin.DelDefaultFriend:output_type -> OpenIMChat.admin.DelDefaultFriendResp + 13, // 90: OpenIMChat.admin.admin.FindDefaultFriend:output_type -> OpenIMChat.admin.FindDefaultFriendResp + 16, // 91: OpenIMChat.admin.admin.SearchDefaultFriend:output_type -> OpenIMChat.admin.SearchDefaultFriendResp + 18, // 92: OpenIMChat.admin.admin.AddDefaultGroup:output_type -> OpenIMChat.admin.AddDefaultGroupResp + 20, // 93: OpenIMChat.admin.admin.DelDefaultGroup:output_type -> OpenIMChat.admin.DelDefaultGroupResp + 22, // 94: OpenIMChat.admin.admin.FindDefaultGroup:output_type -> OpenIMChat.admin.FindDefaultGroupResp + 25, // 95: OpenIMChat.admin.admin.SearchDefaultGroup:output_type -> OpenIMChat.admin.SearchDefaultGroupResp + 27, // 96: OpenIMChat.admin.admin.AddInvitationCode:output_type -> OpenIMChat.admin.AddInvitationCodeResp + 29, // 97: OpenIMChat.admin.admin.GenInvitationCode:output_type -> OpenIMChat.admin.GenInvitationCodeResp + 31, // 98: OpenIMChat.admin.admin.FindInvitationCode:output_type -> OpenIMChat.admin.FindInvitationCodeResp + 33, // 99: OpenIMChat.admin.admin.UseInvitationCode:output_type -> OpenIMChat.admin.UseInvitationCodeResp + 35, // 100: OpenIMChat.admin.admin.DelInvitationCode:output_type -> OpenIMChat.admin.DelInvitationCodeResp + 38, // 101: OpenIMChat.admin.admin.SearchInvitationCode:output_type -> OpenIMChat.admin.SearchInvitationCodeResp + 41, // 102: OpenIMChat.admin.admin.SearchUserIPLimitLogin:output_type -> OpenIMChat.admin.SearchUserIPLimitLoginResp + 44, // 103: OpenIMChat.admin.admin.AddUserIPLimitLogin:output_type -> OpenIMChat.admin.AddUserIPLimitLoginResp + 46, // 104: OpenIMChat.admin.admin.DelUserIPLimitLogin:output_type -> OpenIMChat.admin.DelUserIPLimitLoginResp + 50, // 105: OpenIMChat.admin.admin.SearchIPForbidden:output_type -> OpenIMChat.admin.SearchIPForbiddenResp + 52, // 106: OpenIMChat.admin.admin.AddIPForbidden:output_type -> OpenIMChat.admin.AddIPForbiddenResp + 54, // 107: OpenIMChat.admin.admin.DelIPForbidden:output_type -> OpenIMChat.admin.DelIPForbiddenResp + 60, // 108: OpenIMChat.admin.admin.CancellationUser:output_type -> OpenIMChat.admin.CancellationUserResp + 62, // 109: OpenIMChat.admin.admin.BlockUser:output_type -> OpenIMChat.admin.BlockUserResp + 64, // 110: OpenIMChat.admin.admin.UnblockUser:output_type -> OpenIMChat.admin.UnblockUserResp + 67, // 111: OpenIMChat.admin.admin.SearchBlockUser:output_type -> OpenIMChat.admin.SearchBlockUserResp + 70, // 112: OpenIMChat.admin.admin.FindUserBlockInfo:output_type -> OpenIMChat.admin.FindUserBlockInfoResp + 56, // 113: OpenIMChat.admin.admin.CheckRegisterForbidden:output_type -> OpenIMChat.admin.CheckRegisterForbiddenResp + 58, // 114: OpenIMChat.admin.admin.CheckLoginForbidden:output_type -> OpenIMChat.admin.CheckLoginForbiddenResp + 72, // 115: OpenIMChat.admin.admin.CreateToken:output_type -> OpenIMChat.admin.CreateTokenResp + 74, // 116: OpenIMChat.admin.admin.ParseToken:output_type -> OpenIMChat.admin.ParseTokenResp + 76, // 117: OpenIMChat.admin.admin.AddApplet:output_type -> OpenIMChat.admin.AddAppletResp + 78, // 118: OpenIMChat.admin.admin.DelApplet:output_type -> OpenIMChat.admin.DelAppletResp + 80, // 119: OpenIMChat.admin.admin.UpdateApplet:output_type -> OpenIMChat.admin.UpdateAppletResp + 82, // 120: OpenIMChat.admin.admin.FindApplet:output_type -> OpenIMChat.admin.FindAppletResp + 84, // 121: OpenIMChat.admin.admin.SearchApplet:output_type -> OpenIMChat.admin.SearchAppletResp + 90, // 122: OpenIMChat.admin.admin.GetClientConfig:output_type -> OpenIMChat.admin.GetClientConfigResp + 86, // 123: OpenIMChat.admin.admin.SetClientConfig:output_type -> OpenIMChat.admin.SetClientConfigResp + 88, // 124: OpenIMChat.admin.admin.DelClientConfig:output_type -> OpenIMChat.admin.DelClientConfigResp + 92, // 125: OpenIMChat.admin.admin.GetUserToken:output_type -> OpenIMChat.admin.GetUserTokenResp + 84, // [84:126] is the sub-list for method output_type + 42, // [42:84] is the sub-list for method input_type + 42, // [42:42] is the sub-list for extension type_name + 42, // [42:42] is the sub-list for extension extendee + 0, // [0:42] is the sub-list for field type_name } func init() { file_admin_admin_proto_init() } @@ -6886,6 +7004,30 @@ func file_admin_admin_proto_init() { return nil } } + file_admin_admin_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUserTokenReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_admin_admin_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUserTokenResp); 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{ @@ -6893,7 +7035,7 @@ func file_admin_admin_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_admin_admin_proto_rawDesc, NumEnums: 0, - NumMessages: 93, + NumMessages: 96, NumExtensions: 0, NumServices: 1, }, @@ -6971,6 +7113,7 @@ type AdminClient interface { GetClientConfig(ctx context.Context, in *GetClientConfigReq, opts ...grpc.CallOption) (*GetClientConfigResp, error) SetClientConfig(ctx context.Context, in *SetClientConfigReq, opts ...grpc.CallOption) (*SetClientConfigResp, error) DelClientConfig(ctx context.Context, in *DelClientConfigReq, opts ...grpc.CallOption) (*DelClientConfigResp, error) + GetUserToken(ctx context.Context, in *GetUserTokenReq, opts ...grpc.CallOption) (*GetUserTokenResp, error) } type adminClient struct { @@ -7350,6 +7493,15 @@ func (c *adminClient) DelClientConfig(ctx context.Context, in *DelClientConfigRe return out, nil } +func (c *adminClient) GetUserToken(ctx context.Context, in *GetUserTokenReq, opts ...grpc.CallOption) (*GetUserTokenResp, error) { + out := new(GetUserTokenResp) + err := c.cc.Invoke(ctx, "/OpenIMChat.admin.admin/GetUserToken", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // AdminServer is the server API for Admin service. type AdminServer interface { // 登录 @@ -7404,6 +7556,7 @@ type AdminServer interface { GetClientConfig(context.Context, *GetClientConfigReq) (*GetClientConfigResp, error) SetClientConfig(context.Context, *SetClientConfigReq) (*SetClientConfigResp, error) DelClientConfig(context.Context, *DelClientConfigReq) (*DelClientConfigResp, error) + GetUserToken(context.Context, *GetUserTokenReq) (*GetUserTokenResp, error) } // UnimplementedAdminServer can be embedded to have forward compatible implementations. @@ -7533,6 +7686,9 @@ func (*UnimplementedAdminServer) SetClientConfig(context.Context, *SetClientConf func (*UnimplementedAdminServer) DelClientConfig(context.Context, *DelClientConfigReq) (*DelClientConfigResp, error) { return nil, status.Errorf(codes.Unimplemented, "method DelClientConfig not implemented") } +func (*UnimplementedAdminServer) GetUserToken(context.Context, *GetUserTokenReq) (*GetUserTokenResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetUserToken not implemented") +} func RegisterAdminServer(s *grpc.Server, srv AdminServer) { s.RegisterService(&_Admin_serviceDesc, srv) @@ -8276,6 +8432,24 @@ func _Admin_DelClientConfig_Handler(srv interface{}, ctx context.Context, dec fu return interceptor(ctx, in, info, handler) } +func _Admin_GetUserToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetUserTokenReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AdminServer).GetUserToken(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/OpenIMChat.admin.admin/GetUserToken", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AdminServer).GetUserToken(ctx, req.(*GetUserTokenReq)) + } + return interceptor(ctx, in, info, handler) +} + var _Admin_serviceDesc = grpc.ServiceDesc{ ServiceName: "OpenIMChat.admin.admin", HandlerType: (*AdminServer)(nil), @@ -8444,6 +8618,10 @@ var _Admin_serviceDesc = grpc.ServiceDesc{ MethodName: "DelClientConfig", Handler: _Admin_DelClientConfig_Handler, }, + { + MethodName: "GetUserToken", + Handler: _Admin_GetUserToken_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "admin/admin.proto", diff --git a/pkg/proto/admin/admin.proto b/pkg/proto/admin/admin.proto index 20276db64..edeae2c51 100644 --- a/pkg/proto/admin/admin.proto +++ b/pkg/proto/admin/admin.proto @@ -459,6 +459,14 @@ message GetClientConfigResp { map config = 1; } +message GetUserTokenReq{ + string userID=1; +} + +message GetUserTokenResp{ + map tokensMap=1; +} + service admin { //登录 rpc Login(LoginReq) returns(LoginResp); @@ -524,4 +532,5 @@ service admin { rpc SetClientConfig(SetClientConfigReq) returns(SetClientConfigResp); rpc DelClientConfig(DelClientConfigReq) returns(DelClientConfigResp); + rpc GetUserToken(GetUserTokenReq) returns (GetUserTokenResp); } \ No newline at end of file diff --git a/pkg/proto/chat/chat.go b/pkg/proto/chat/chat.go index c043a8794..ea75ce03a 100644 --- a/pkg/proto/chat/chat.go +++ b/pkg/proto/chat/chat.go @@ -180,6 +180,9 @@ func (x *SearchUserFullInfoReq) Check() error { if x.Pagination.ShowNumber < 1 { return errs.ErrArgs.Wrap("showNumber is invalid") } + if x.Normal > constant.FinDAllUser || x.Normal < constant.FindNormalUser { + return errs.ErrArgs.Wrap("normal flied is invalid") + } return nil } diff --git a/pkg/proto/chat/chat.pb.go b/pkg/proto/chat/chat.pb.go index 969ecfd82..9b0e9c0cb 100644 --- a/pkg/proto/chat/chat.pb.go +++ b/pkg/proto/chat/chat.pb.go @@ -435,7 +435,7 @@ type SearchUserPublicInfoReq struct { Keyword string `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword"` Pagination *sdkws.RequestPagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination"` - Genders []int32 `protobuf:"varint,3,rep,packed,name=genders,proto3" json:"genders"` + Genders int32 `protobuf:"varint,3,opt,name=genders,proto3" json:"genders"` } func (x *SearchUserPublicInfoReq) Reset() { @@ -484,11 +484,11 @@ func (x *SearchUserPublicInfoReq) GetPagination() *sdkws.RequestPagination { return nil } -func (x *SearchUserPublicInfoReq) GetGenders() []int32 { +func (x *SearchUserPublicInfoReq) GetGenders() int32 { if x != nil { return x.Genders } - return nil + return 0 } type SearchUserPublicInfoResp struct { @@ -2185,7 +2185,7 @@ type SearchUserFullInfoReq struct { Keyword string `protobuf:"bytes,1,opt,name=keyword,proto3" json:"keyword"` Pagination *sdkws.RequestPagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination"` - Genders []int32 `protobuf:"varint,3,rep,packed,name=genders,proto3" json:"genders"` + Genders int32 `protobuf:"varint,3,opt,name=genders,proto3" json:"genders"` Normal int32 `protobuf:"varint,4,opt,name=normal,proto3" json:"normal"` } @@ -2235,11 +2235,11 @@ func (x *SearchUserFullInfoReq) GetPagination() *sdkws.RequestPagination { return nil } -func (x *SearchUserFullInfoReq) GetGenders() []int32 { +func (x *SearchUserFullInfoReq) GetGenders() int32 { if x != nil { return x.Genders } - return nil + return 0 } func (x *SearchUserFullInfoReq) GetNormal() int32 { @@ -2401,7 +2401,7 @@ var file_chat_chat_proto_rawDesc = []byte{ 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x4d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x22, 0x69, 0x0a, 0x18, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, @@ -2622,7 +2622,7 @@ var file_chat_chat_proto_rawDesc = []byte{ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x73, 0x64, 0x6b, 0x77, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x67, 0x65, 0x6e, + 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x22, 0x65, 0x0a, 0x16, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x55, 0x73, 0x65, 0x72, 0x46, 0x75, 0x6c, 0x6c, 0x49, 0x6e, diff --git a/pkg/proto/chat/chat.proto b/pkg/proto/chat/chat.proto index 8f16b906f..00b9e626a 100644 --- a/pkg/proto/chat/chat.proto +++ b/pkg/proto/chat/chat.proto @@ -62,7 +62,7 @@ message FindUserPublicInfoResp{ message SearchUserPublicInfoReq{ string keyword = 1; OpenIMServer.sdkws.RequestPagination pagination = 2; - repeated int32 genders = 3; + int32 genders = 3; } message SearchUserPublicInfoResp{ @@ -231,7 +231,7 @@ message OpenIMCallbackResp { message SearchUserFullInfoReq{ string keyword = 1; OpenIMServer.sdkws.RequestPagination pagination = 2; - repeated int32 genders = 3; + int32 genders = 3; int32 normal = 4; }