add management interface

pull/5/head
Gordon 3 years ago
parent 68eaa51ebe
commit 66c1b19696

@ -117,6 +117,7 @@ push:
accessID: 111
secretKey: 111
appmanageruid: "openIM123456"
secret: tuoyun
multiloginpolicy:

@ -11,10 +11,11 @@ import (
"strings"
)
/*
type paramsAddBlackList struct {
OperationID string `json:"operationID" binding:"required"`
UID string `json:"uid" binding:"required"`
}
}*/
func AddBlacklist(c *gin.Context) {
log.Info("", "", "api add blacklist init ....")
@ -32,6 +33,7 @@ func AddBlacklist(c *gin.Context) {
Uid: params.UID,
OperationID: params.OperationID,
Token: c.Request.Header.Get("token"),
OwnerUid: params.OwnerUid,
}
log.Info(req.Token, req.OperationID, "api add blacklist is server:userID=%s", req.Uid)
RpcResp, err := client.AddBlacklist(context.Background(), req)

@ -11,18 +11,54 @@ import (
"strings"
)
type paramsImportFriendReq struct {
OperationID string `json:"operationID" binding:"required"`
UID string `json:"uid" binding:"required"`
OwnerUid string `json:"ownerUid"`
}
type paramsAddFriend struct {
OperationID string `json:"operationID" binding:"required"`
UID string `json:"uid" binding:"required"`
ReqMessage string `json:"reqMessage"`
}
//
func ImportFriend(c *gin.Context) {
log.Info("", "", "ImportFriend init ....")
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
client := pbFriend.NewFriendClient(etcdConn)
params := paramsImportFriendReq{}
if err := c.BindJSON(&params); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
req := &pbFriend.ImportFriendReq{
Uid: params.UID,
OperationID: params.OperationID,
OwnerUid: params.OwnerUid,
Token: c.Request.Header.Get("token"),
}
log.Info(req.Token, req.OperationID, "api add friend is server")
RpcResp, err := client.ImportFriend(context.Background(), req)
if err != nil {
log.Error(req.Token, req.OperationID, "err=%s,ImportFriend failed", err)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "cImportFriend failed"})
return
}
log.InfoByArgs("ImportFriend success,args=%s", RpcResp.String())
resp := gin.H{"errCode": RpcResp.ErrorCode, "errMsg": RpcResp.ErrorMsg}
c.JSON(http.StatusOK, resp)
log.InfoByArgs("ImportFriend success return,get args=%s,return args=%s", req.String(), RpcResp.String())
}
func AddFriend(c *gin.Context) {
log.Info("", "", "api add friend init ....")
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImFriendName)
client := pbFriend.NewFriendClient(etcdConn)
//defer etcdConn.Close()
params := paramsAddFriend{}
if err := c.BindJSON(&params); err != nil {

@ -15,6 +15,7 @@ import (
type paramsSearchFriend struct {
OperationID string `json:"operationID" binding:"required"`
UID string `json:"uid" binding:"required"`
OwnerUid string `json:"ownerUid"`
}
func GetFriendsInfo(c *gin.Context) {

@ -0,0 +1,204 @@
/*
** description("").
** copyright('open-im,www.open-im.io').
** author("fg,Gordon@tuoyun.net").
** time(2021/9/15 15:23).
*/
package manage
import (
"Open_IM/src/common/config"
"Open_IM/src/common/constant"
"Open_IM/src/common/log"
"Open_IM/src/grpc-etcdv3/getcdv3"
pbChat "Open_IM/src/proto/chat"
"Open_IM/src/utils"
"context"
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"github.com/mitchellh/mapstructure"
"net/http"
"strings"
)
var validate *validator.Validate
type paramsManagementSendMsg struct {
OperationID string `json:"operationID" binding:"required"`
SendID string `json:"sendID" binding:"required"`
RecvID string `json:"recvID" binding:"required"`
SenderNickName string `json:"senderNickName" `
SenderFaceURL string `json:"senderFaceURL" `
ForceList []string `json:"forceList" `
Content map[string]interface{} `json:"content" binding:"required"`
ContentType int32 `json:"contentType" binding:"required"`
SessionType int32 `json:"sessionType" binding:"required"`
}
func newUserSendMsgReq(token string, params *paramsManagementSendMsg) *pbChat.UserSendMsgReq {
var newContent string
switch params.ContentType {
case constant.Text:
newContent = params.Content["text"].(string)
case constant.Picture:
fallthrough
case constant.Custom:
fallthrough
case constant.Voice:
fallthrough
case constant.File:
newContent = utils.StructToJsonString(params.Content)
default:
}
pbData := pbChat.UserSendMsgReq{
ReqIdentifier: constant.WSSendMsg,
Token: token,
SendID: params.SendID,
SenderNickName: params.SenderNickName,
SenderFaceURL: params.SenderFaceURL,
OperationID: params.OperationID,
PlatformID: 0,
SessionType: params.SessionType,
MsgFrom: constant.UserMsgType,
ContentType: params.ContentType,
RecvID: params.RecvID,
ForceList: params.ForceList,
Content: newContent,
ClientMsgID: utils.GetMsgID(params.SendID),
}
return &pbData
}
func init() {
validate = validator.New()
}
func ManagementSendMsg(c *gin.Context) {
var data interface{}
params := paramsManagementSendMsg{}
if err := c.BindJSON(&params); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
log.ErrorByKv("json unmarshal err", c.PostForm("operationID"), "err", err.Error(), "content", c.PostForm("content"))
return
}
switch params.ContentType {
case constant.Text:
data = TextElem{}
case constant.Picture:
data = PictureElem{}
case constant.Custom:
data = CustomElem{}
default:
c.JSON(http.StatusBadRequest, gin.H{"errCode": 404, "errMsg": "contentType err"})
log.ErrorByKv("contentType err", c.PostForm("operationID"), "content", c.PostForm("content"))
return
}
if err := mapstructure.WeakDecode(params.Content, &data); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": err.Error()})
log.ErrorByKv("content to Data struct err", "", "err", err.Error())
return
} else if err := validate.Struct(data); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 403, "errMsg": err.Error()})
log.ErrorByKv("data args validate err", "", "err", err.Error())
return
}
token := c.Request.Header.Get("token")
if !utils.VerifyToken(token, config.Config.AppManagerUid) {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": "token validate err,not authorized", "sendTime": 0, "MsgID": ""})
return
}
log.InfoByKv("Ws call success to ManagementSendMsgReq", params.OperationID, "Parameters", params)
pbData := newUserSendMsgReq(token, &params)
log.Info("", "", "api ManagementSendMsg call start..., [data: %s]", pbData.String())
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName)
client := pbChat.NewChatClient(etcdConn)
log.Info("", "", "api ManagementSendMsg call, api call rpc...")
reply, _ := client.UserSendMsg(context.Background(), pbData)
log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String())
c.JSON(http.StatusOK, gin.H{
"errCode": reply.ErrCode,
"errMsg": reply.ErrMsg,
"sendTime": reply.SendTime,
"msgID": reply.ClientMsgID,
})
}
type PictureBaseInfo struct {
UUID string `mapstructure:"uuid"`
Type string `mapstructure:"type" validate:"required"`
Size int64 `mapstructure:"size" validate:"required"`
Width int32 `mapstructure:"width" validate:"required"`
Height int32 `mapstructure:"height" validate:"required"`
Url string `mapstructure:"url" validate:"required"`
}
type PictureElem struct {
SourcePath string `mapstructure:"sourcePath"`
SourcePicture PictureBaseInfo `mapstructure:"sourcePicture" validate:"required"`
BigPicture PictureBaseInfo `mapstructure:"bigPicture" `
SnapshotPicture PictureBaseInfo `mapstructure:"snapshotPicture"`
}
type SoundElem struct {
UUID string `mapstructure:"uuid"`
SoundPath string `mapstructure:"soundPath"`
SourceURL string `mapstructure:"sourceUrl"`
DataSize int64 `mapstructure:"dataSize"`
Duration int64 `mapstructure:"duration"`
}
type VideoElem struct {
VideoPath string `mapstructure:"videoPath"`
VideoUUID string `mapstructure:"videoUUID"`
VideoURL string `mapstructure:"videoUrl"`
VideoType string `mapstructure:"videoType"`
VideoSize int64 `mapstructure:"videoSize"`
Duration int64 `mapstructure:"duration"`
SnapshotPath string `mapstructure:"snapshotPath"`
SnapshotUUID string `mapstructure:"snapshotUUID"`
SnapshotSize int64 `mapstructure:"snapshotSize"`
SnapshotURL string `mapstructure:"snapshotUrl"`
SnapshotWidth int32 `mapstructure:"snapshotWidth"`
SnapshotHeight int32 `mapstructure:"snapshotHeight"`
}
type FileElem struct {
FilePath string `mapstructure:"filePath"`
UUID string `mapstructure:"uuid"`
SourceURL string `mapstructure:"sourceUrl"`
FileName string `mapstructure:"fileName"`
FileSize int64 `mapstructure:"fileSize"`
}
//type MergeElem struct {
// Title string `json:"title"`
// AbstractList []string `json:"abstractList"`
// MultiMessage []*MsgStruct `json:"multiMessage"`
//}
type AtElem struct {
Text string `mapstructure:"text"`
AtUserList []string `mapstructure:"atUserList"`
IsAtSelf bool `mapstructure:"isAtSelf"`
}
type LocationElem struct {
Description string `mapstructure:"description"`
Longitude float64 `mapstructure:"longitude"`
Latitude float64 `mapstructure:"latitude"`
}
type CustomElem struct {
Data string `mapstructure:"data" validate:"required"`
Description string `mapstructure:"description"`
Extension string `mapstructure:"extension"`
}
type TextElem struct {
Text string `mapstructure:"text" validate:"required"`
}
//type QuoteElem struct {
// Text string `json:"text"`
// QuoteMessage *MsgStruct `json:"quoteMessage"`
//}

@ -0,0 +1,78 @@
/*
** description("").
** copyright('open-im,www.open-im.io').
** author("fg,Gordon@tuoyun.net").
** time(2021/9/15 10:28).
*/
package manage
import (
"Open_IM/src/common/config"
"Open_IM/src/common/log"
"Open_IM/src/grpc-etcdv3/getcdv3"
pbUser "Open_IM/src/proto/user"
"context"
"github.com/gin-gonic/gin"
"net/http"
"strings"
)
type paramsDeleteUsers struct {
OperationID string `json:"operationID" binding:"required"`
DeleteUidList []string `json:"deleteUidList" binding:"required"`
}
type paramsGetAllUsersUid struct {
OperationID string `json:"operationID" binding:"required"`
}
func DeleteUser(c *gin.Context) {
params := paramsDeleteUsers{}
if err := c.BindJSON(&params); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
log.InfoByKv("DeleteUser req come here", params.OperationID, "DeleteUidList", params.DeleteUidList)
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
client := pbUser.NewUserClient(etcdConn)
//defer etcdConn.Close()
req := &pbUser.DeleteUsersReq{
OperationID: params.OperationID,
DeleteUidList: params.DeleteUidList,
Token: c.Request.Header.Get("token"),
}
RpcResp, err := client.DeleteUsers(context.Background(), req)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call delete users rpc server failed"})
return
}
log.InfoByKv("call delete user rpc server is success", params.OperationID, "resp args", RpcResp.String())
resp := gin.H{"errCode": RpcResp.CommonResp.ErrorCode, "errMsg": RpcResp.CommonResp.ErrorMsg, "failedUidList": RpcResp.FailedUidList}
c.JSON(http.StatusOK, resp)
}
func GetAllUsersUid(c *gin.Context) {
params := paramsGetAllUsersUid{}
if err := c.BindJSON(&params); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
log.InfoByKv("GetAllUsersUid req come here", params.OperationID)
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName)
client := pbUser.NewUserClient(etcdConn)
//defer etcdConn.Close()
req := &pbUser.GetAllUsersUidReq{
OperationID: params.OperationID,
Token: c.Request.Header.Get("token"),
}
RpcResp, err := client.GetAllUsersUid(context.Background(), req)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": err.Error(), "uidList": []string{}})
return
}
log.InfoByKv("call GetAllUsersUid rpc server is success", params.OperationID, "resp args", RpcResp.String())
resp := gin.H{"errCode": RpcResp.CommonResp.ErrorCode, "errMsg": RpcResp.CommonResp.ErrorMsg, "uidList": RpcResp.UidList}
c.JSON(http.StatusOK, resp)
}

@ -5,6 +5,7 @@ import (
apiChat "Open_IM/src/api/chat"
"Open_IM/src/api/friend"
"Open_IM/src/api/group"
"Open_IM/src/api/manage"
apiThird "Open_IM/src/api/third"
"Open_IM/src/api/user"
"Open_IM/src/utils"
@ -47,6 +48,7 @@ func main() {
friendRouterGroup.POST("/add_friend_response", friend.AddFriendResponse)
friendRouterGroup.POST("/set_friend_comment", friend.SetFriendComment)
friendRouterGroup.POST("/is_friend", friend.IsFriend)
friendRouterGroup.POST("/import_friend", friend.ImportFriend)
}
//group related routing group
groupRouterGroup := r.Group("/group")
@ -84,6 +86,12 @@ func main() {
chatGroup.POST("/pull_msg", apiChat.UserPullMsg)
chatGroup.POST("/send_msg", apiChat.UserSendMsg)
}
managementGroup := r.Group("/manager")
{
managementGroup.POST("/delete_user", manage.DeleteUser)
managementGroup.POST("/send_msg", manage.ManagementSendMsg)
managementGroup.POST("/get_all_users_uid", manage.GetAllUsersUid)
}
ginPort := flag.Int("port", 10000, "get ginServerPort from cmd,default 10000 as port")
flag.Parse()

@ -22,6 +22,7 @@ type paramsStruct struct {
Birth string `json:"birth"`
Email string `json:"email"`
Ex string `json:"ex"`
Uid string `json:"uid"`
}
func UpdateUserInfo(c *gin.Context) {
@ -46,6 +47,7 @@ func UpdateUserInfo(c *gin.Context) {
Birth: params.Birth,
Email: params.Email,
Ex: params.Ex,
Uid: params.Uid,
}
log.InfoByKv("api update user info is server", req.OperationID, req.Token)
RpcResp, err := client.UpdateUserInfo(context.Background(), req)

@ -124,8 +124,8 @@ type config struct {
MsgToPush string `yaml:"msgToPush"`
}
}
Secret string
AppManagerUid string
Secret string
MultiLoginPolicy struct {
OnlyOneTerminalAccess bool `yaml:"onlyOneTerminalAccess"`

@ -30,6 +30,7 @@ const (
Video = 104
File = 105
AtText = 106
Custom = 110
SyncSenderMsg = 108
//SysRelated

@ -30,6 +30,17 @@ func UserRegister(pb *pbAuth.UserRegisterReq) error {
return nil
}
func UserDelete(uid string) error {
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
if err != nil {
return err
}
err = dbConn.Table("user").Where("uid=?", uid).Delete(User{}).Error
if err != nil {
return err
}
return nil
}
func FindUserByUID(uid string) (*User, error) {
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
if err != nil {

File diff suppressed because it is too large Load Diff

@ -40,6 +40,16 @@ message AddFriendReq{
}
message ImportFriendReq{
string uid = 1;
string OperationID = 2;
string Token = 3;
string OwnerUid = 4;
}
message GetFriendApplyReq{
string OperationID = 1;
string Token = 2;
@ -91,6 +101,7 @@ message AddBlacklistReq{
string uid = 1;
string OperationID = 2;
string Token = 3;
string OwnerUid = 4;
}
@ -167,4 +178,5 @@ service friend{
rpc deleteFriend(DeleteFriendReq) returns(CommonResp);
rpc addFriendResponse(AddFriendResponseReq) returns(CommonResp);
rpc setFriendComment(SetFriendCommentReq) returns(CommonResp);
rpc ImportFriend(ImportFriendReq) returns(CommonResp);
}

@ -1,16 +1,15 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: user/user.proto
package user
package user // import "user"
import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import (
context "context"
fmt "fmt"
proto "github.com/golang/protobuf/proto"
context "golang.org/x/net/context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
math "math"
)
// Reference imports to suppress errors if they are not otherwise used.
@ -22,11 +21,11 @@ var _ = math.Inf
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type CommonResp struct {
ErrorCode int32 `protobuf:"varint,1,opt,name=errorCode,proto3" json:"errorCode,omitempty"`
ErrorMsg string `protobuf:"bytes,2,opt,name=errorMsg,proto3" json:"errorMsg,omitempty"`
ErrorCode int32 `protobuf:"varint,1,opt,name=errorCode" json:"errorCode,omitempty"`
ErrorMsg string `protobuf:"bytes,2,opt,name=errorMsg" json:"errorMsg,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -36,17 +35,16 @@ func (m *CommonResp) Reset() { *m = CommonResp{} }
func (m *CommonResp) String() string { return proto.CompactTextString(m) }
func (*CommonResp) ProtoMessage() {}
func (*CommonResp) Descriptor() ([]byte, []int) {
return fileDescriptor_ed89022014131a74, []int{0}
return fileDescriptor_user_9367ac00c24112e8, []int{0}
}
func (m *CommonResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommonResp.Unmarshal(m, b)
}
func (m *CommonResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CommonResp.Marshal(b, m, deterministic)
}
func (m *CommonResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_CommonResp.Merge(m, src)
func (dst *CommonResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_CommonResp.Merge(dst, src)
}
func (m *CommonResp) XXX_Size() int {
return xxx_messageInfo_CommonResp.Size(m)
@ -71,10 +69,202 @@ func (m *CommonResp) GetErrorMsg() string {
return ""
}
type DeleteUsersResp struct {
CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
FailedUidList []string `protobuf:"bytes,2,rep,name=failedUidList" json:"failedUidList,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} }
func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) }
func (*DeleteUsersResp) ProtoMessage() {}
func (*DeleteUsersResp) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9367ac00c24112e8, []int{1}
}
func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b)
}
func (m *DeleteUsersResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DeleteUsersResp.Marshal(b, m, deterministic)
}
func (dst *DeleteUsersResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_DeleteUsersResp.Merge(dst, src)
}
func (m *DeleteUsersResp) XXX_Size() int {
return xxx_messageInfo_DeleteUsersResp.Size(m)
}
func (m *DeleteUsersResp) XXX_DiscardUnknown() {
xxx_messageInfo_DeleteUsersResp.DiscardUnknown(m)
}
var xxx_messageInfo_DeleteUsersResp proto.InternalMessageInfo
func (m *DeleteUsersResp) GetCommonResp() *CommonResp {
if m != nil {
return m.CommonResp
}
return nil
}
func (m *DeleteUsersResp) GetFailedUidList() []string {
if m != nil {
return m.FailedUidList
}
return nil
}
type DeleteUsersReq struct {
DeleteUidList []string `protobuf:"bytes,2,rep,name=deleteUidList" json:"deleteUidList,omitempty"`
Token string `protobuf:"bytes,3,opt,name=token" json:"token,omitempty"`
OperationID string `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} }
func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) }
func (*DeleteUsersReq) ProtoMessage() {}
func (*DeleteUsersReq) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9367ac00c24112e8, []int{2}
}
func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b)
}
func (m *DeleteUsersReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_DeleteUsersReq.Marshal(b, m, deterministic)
}
func (dst *DeleteUsersReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_DeleteUsersReq.Merge(dst, src)
}
func (m *DeleteUsersReq) XXX_Size() int {
return xxx_messageInfo_DeleteUsersReq.Size(m)
}
func (m *DeleteUsersReq) XXX_DiscardUnknown() {
xxx_messageInfo_DeleteUsersReq.DiscardUnknown(m)
}
var xxx_messageInfo_DeleteUsersReq proto.InternalMessageInfo
func (m *DeleteUsersReq) GetDeleteUidList() []string {
if m != nil {
return m.DeleteUidList
}
return nil
}
func (m *DeleteUsersReq) GetToken() string {
if m != nil {
return m.Token
}
return ""
}
func (m *DeleteUsersReq) GetOperationID() string {
if m != nil {
return m.OperationID
}
return ""
}
type GetAllUsersUidReq struct {
Token string `protobuf:"bytes,2,opt,name=token" json:"token,omitempty"`
OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetAllUsersUidReq) Reset() { *m = GetAllUsersUidReq{} }
func (m *GetAllUsersUidReq) String() string { return proto.CompactTextString(m) }
func (*GetAllUsersUidReq) ProtoMessage() {}
func (*GetAllUsersUidReq) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9367ac00c24112e8, []int{3}
}
func (m *GetAllUsersUidReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetAllUsersUidReq.Unmarshal(m, b)
}
func (m *GetAllUsersUidReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetAllUsersUidReq.Marshal(b, m, deterministic)
}
func (dst *GetAllUsersUidReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetAllUsersUidReq.Merge(dst, src)
}
func (m *GetAllUsersUidReq) XXX_Size() int {
return xxx_messageInfo_GetAllUsersUidReq.Size(m)
}
func (m *GetAllUsersUidReq) XXX_DiscardUnknown() {
xxx_messageInfo_GetAllUsersUidReq.DiscardUnknown(m)
}
var xxx_messageInfo_GetAllUsersUidReq proto.InternalMessageInfo
func (m *GetAllUsersUidReq) GetToken() string {
if m != nil {
return m.Token
}
return ""
}
func (m *GetAllUsersUidReq) GetOperationID() string {
if m != nil {
return m.OperationID
}
return ""
}
type GetAllUsersUidResp struct {
CommonResp *CommonResp `protobuf:"bytes,1,opt,name=commonResp" json:"commonResp,omitempty"`
UidList []string `protobuf:"bytes,2,rep,name=uidList" json:"uidList,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetAllUsersUidResp) Reset() { *m = GetAllUsersUidResp{} }
func (m *GetAllUsersUidResp) String() string { return proto.CompactTextString(m) }
func (*GetAllUsersUidResp) ProtoMessage() {}
func (*GetAllUsersUidResp) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9367ac00c24112e8, []int{4}
}
func (m *GetAllUsersUidResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetAllUsersUidResp.Unmarshal(m, b)
}
func (m *GetAllUsersUidResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetAllUsersUidResp.Marshal(b, m, deterministic)
}
func (dst *GetAllUsersUidResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetAllUsersUidResp.Merge(dst, src)
}
func (m *GetAllUsersUidResp) XXX_Size() int {
return xxx_messageInfo_GetAllUsersUidResp.Size(m)
}
func (m *GetAllUsersUidResp) XXX_DiscardUnknown() {
xxx_messageInfo_GetAllUsersUidResp.DiscardUnknown(m)
}
var xxx_messageInfo_GetAllUsersUidResp proto.InternalMessageInfo
func (m *GetAllUsersUidResp) GetCommonResp() *CommonResp {
if m != nil {
return m.CommonResp
}
return nil
}
func (m *GetAllUsersUidResp) GetUidList() []string {
if m != nil {
return m.UidList
}
return nil
}
type GetUserInfoReq struct {
UserIDList []string `protobuf:"bytes,1,rep,name=userIDList,proto3" json:"userIDList,omitempty"`
Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"`
OperationID string `protobuf:"bytes,3,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
UserIDList []string `protobuf:"bytes,1,rep,name=userIDList" json:"userIDList,omitempty"`
Token string `protobuf:"bytes,2,opt,name=token" json:"token,omitempty"`
OperationID string `protobuf:"bytes,3,opt,name=OperationID" json:"OperationID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -84,17 +274,16 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} }
func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetUserInfoReq) ProtoMessage() {}
func (*GetUserInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_ed89022014131a74, []int{1}
return fileDescriptor_user_9367ac00c24112e8, []int{5}
}
func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b)
}
func (m *GetUserInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetUserInfoReq.Marshal(b, m, deterministic)
}
func (m *GetUserInfoReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetUserInfoReq.Merge(m, src)
func (dst *GetUserInfoReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetUserInfoReq.Merge(dst, src)
}
func (m *GetUserInfoReq) XXX_Size() int {
return xxx_messageInfo_GetUserInfoReq.Size(m)
@ -127,9 +316,9 @@ func (m *GetUserInfoReq) GetOperationID() string {
}
type GetUserInfoResp struct {
ErrorCode int32 `protobuf:"varint,1,opt,name=errorCode,proto3" json:"errorCode,omitempty"`
ErrorMsg string `protobuf:"bytes,2,opt,name=errorMsg,proto3" json:"errorMsg,omitempty"`
Data []*UserInfo `protobuf:"bytes,3,rep,name=Data,proto3" json:"Data,omitempty"`
ErrorCode int32 `protobuf:"varint,1,opt,name=errorCode" json:"errorCode,omitempty"`
ErrorMsg string `protobuf:"bytes,2,opt,name=errorMsg" json:"errorMsg,omitempty"`
Data []*UserInfo `protobuf:"bytes,3,rep,name=Data" json:"Data,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -139,17 +328,16 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} }
func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetUserInfoResp) ProtoMessage() {}
func (*GetUserInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_ed89022014131a74, []int{2}
return fileDescriptor_user_9367ac00c24112e8, []int{6}
}
func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b)
}
func (m *GetUserInfoResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetUserInfoResp.Marshal(b, m, deterministic)
}
func (m *GetUserInfoResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetUserInfoResp.Merge(m, src)
func (dst *GetUserInfoResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetUserInfoResp.Merge(dst, src)
}
func (m *GetUserInfoResp) XXX_Size() int {
return xxx_messageInfo_GetUserInfoResp.Size(m)
@ -182,14 +370,14 @@ func (m *GetUserInfoResp) GetData() []*UserInfo {
}
type UserInfo struct {
Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Icon string `protobuf:"bytes,3,opt,name=icon,proto3" json:"icon,omitempty"`
Gender int32 `protobuf:"varint,4,opt,name=gender,proto3" json:"gender,omitempty"`
Mobile string `protobuf:"bytes,5,opt,name=mobile,proto3" json:"mobile,omitempty"`
Birth string `protobuf:"bytes,6,opt,name=birth,proto3" json:"birth,omitempty"`
Email string `protobuf:"bytes,7,opt,name=email,proto3" json:"email,omitempty"`
Ex string `protobuf:"bytes,8,opt,name=ex,proto3" json:"ex,omitempty"`
Uid string `protobuf:"bytes,1,opt,name=uid" json:"uid,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
Icon string `protobuf:"bytes,3,opt,name=icon" json:"icon,omitempty"`
Gender int32 `protobuf:"varint,4,opt,name=gender" json:"gender,omitempty"`
Mobile string `protobuf:"bytes,5,opt,name=mobile" json:"mobile,omitempty"`
Birth string `protobuf:"bytes,6,opt,name=birth" json:"birth,omitempty"`
Email string `protobuf:"bytes,7,opt,name=email" json:"email,omitempty"`
Ex string `protobuf:"bytes,8,opt,name=ex" json:"ex,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -199,17 +387,16 @@ func (m *UserInfo) Reset() { *m = UserInfo{} }
func (m *UserInfo) String() string { return proto.CompactTextString(m) }
func (*UserInfo) ProtoMessage() {}
func (*UserInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_ed89022014131a74, []int{3}
return fileDescriptor_user_9367ac00c24112e8, []int{7}
}
func (m *UserInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UserInfo.Unmarshal(m, b)
}
func (m *UserInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UserInfo.Marshal(b, m, deterministic)
}
func (m *UserInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_UserInfo.Merge(m, src)
func (dst *UserInfo) XXX_Merge(src proto.Message) {
xxx_messageInfo_UserInfo.Merge(dst, src)
}
func (m *UserInfo) XXX_Size() int {
return xxx_messageInfo_UserInfo.Size(m)
@ -277,8 +464,8 @@ func (m *UserInfo) GetEx() string {
}
type LogoutReq struct {
OperationID string `protobuf:"bytes,1,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"`
OperationID string `protobuf:"bytes,1,opt,name=OperationID" json:"OperationID,omitempty"`
Token string `protobuf:"bytes,2,opt,name=token" json:"token,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -288,17 +475,16 @@ func (m *LogoutReq) Reset() { *m = LogoutReq{} }
func (m *LogoutReq) String() string { return proto.CompactTextString(m) }
func (*LogoutReq) ProtoMessage() {}
func (*LogoutReq) Descriptor() ([]byte, []int) {
return fileDescriptor_ed89022014131a74, []int{4}
return fileDescriptor_user_9367ac00c24112e8, []int{8}
}
func (m *LogoutReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LogoutReq.Unmarshal(m, b)
}
func (m *LogoutReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_LogoutReq.Marshal(b, m, deterministic)
}
func (m *LogoutReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_LogoutReq.Merge(m, src)
func (dst *LogoutReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_LogoutReq.Merge(dst, src)
}
func (m *LogoutReq) XXX_Size() int {
return xxx_messageInfo_LogoutReq.Size(m)
@ -324,15 +510,16 @@ func (m *LogoutReq) GetToken() string {
}
type UpdateUserInfoReq struct {
Icon string `protobuf:"bytes,1,opt,name=icon,proto3" json:"icon,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Gender int32 `protobuf:"varint,3,opt,name=gender,proto3" json:"gender,omitempty"`
Mobile string `protobuf:"bytes,4,opt,name=mobile,proto3" json:"mobile,omitempty"`
Birth string `protobuf:"bytes,5,opt,name=birth,proto3" json:"birth,omitempty"`
Email string `protobuf:"bytes,6,opt,name=email,proto3" json:"email,omitempty"`
Ex string `protobuf:"bytes,7,opt,name=ex,proto3" json:"ex,omitempty"`
Token string `protobuf:"bytes,8,opt,name=token,proto3" json:"token,omitempty"`
OperationID string `protobuf:"bytes,9,opt,name=OperationID,proto3" json:"OperationID,omitempty"`
Icon string `protobuf:"bytes,1,opt,name=icon" json:"icon,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
Gender int32 `protobuf:"varint,3,opt,name=gender" json:"gender,omitempty"`
Mobile string `protobuf:"bytes,4,opt,name=mobile" json:"mobile,omitempty"`
Birth string `protobuf:"bytes,5,opt,name=birth" json:"birth,omitempty"`
Email string `protobuf:"bytes,6,opt,name=email" json:"email,omitempty"`
Ex string `protobuf:"bytes,7,opt,name=ex" json:"ex,omitempty"`
Token string `protobuf:"bytes,8,opt,name=token" json:"token,omitempty"`
OperationID string `protobuf:"bytes,9,opt,name=OperationID" json:"OperationID,omitempty"`
Uid string `protobuf:"bytes,10,opt,name=Uid" json:"Uid,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -342,17 +529,16 @@ func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} }
func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) }
func (*UpdateUserInfoReq) ProtoMessage() {}
func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_ed89022014131a74, []int{5}
return fileDescriptor_user_9367ac00c24112e8, []int{9}
}
func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b)
}
func (m *UpdateUserInfoReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_UpdateUserInfoReq.Marshal(b, m, deterministic)
}
func (m *UpdateUserInfoReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_UpdateUserInfoReq.Merge(m, src)
func (dst *UpdateUserInfoReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_UpdateUserInfoReq.Merge(dst, src)
}
func (m *UpdateUserInfoReq) XXX_Size() int {
return xxx_messageInfo_UpdateUserInfoReq.Size(m)
@ -426,8 +612,19 @@ func (m *UpdateUserInfoReq) GetOperationID() string {
return ""
}
func (m *UpdateUserInfoReq) GetUid() string {
if m != nil {
return m.Uid
}
return ""
}
func init() {
proto.RegisterType((*CommonResp)(nil), "user.CommonResp")
proto.RegisterType((*DeleteUsersResp)(nil), "user.DeleteUsersResp")
proto.RegisterType((*DeleteUsersReq)(nil), "user.DeleteUsersReq")
proto.RegisterType((*GetAllUsersUidReq)(nil), "user.GetAllUsersUidReq")
proto.RegisterType((*GetAllUsersUidResp)(nil), "user.GetAllUsersUidResp")
proto.RegisterType((*GetUserInfoReq)(nil), "user.GetUserInfoReq")
proto.RegisterType((*GetUserInfoResp)(nil), "user.GetUserInfoResp")
proto.RegisterType((*UserInfo)(nil), "user.UserInfo")
@ -435,67 +632,34 @@ func init() {
proto.RegisterType((*UpdateUserInfoReq)(nil), "user.UpdateUserInfoReq")
}
func init() {
proto.RegisterFile("user/user.proto", fileDescriptor_ed89022014131a74)
}
var fileDescriptor_ed89022014131a74 = []byte{
// 416 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0x4d, 0x8b, 0xd4, 0x40,
0x10, 0xa5, 0x27, 0x1f, 0x9b, 0x54, 0x20, 0xbb, 0x16, 0xab, 0x36, 0x83, 0x48, 0xc8, 0x29, 0xa7,
0x15, 0xd6, 0x9b, 0x7b, 0x73, 0x06, 0x65, 0x60, 0x45, 0x08, 0xec, 0xc5, 0x5b, 0xc6, 0x94, 0x99,
0xe0, 0x24, 0x1d, 0x3b, 0x3d, 0x30, 0x37, 0xff, 0x92, 0xff, 0xc8, 0xbf, 0x22, 0xdd, 0xc9, 0x4c,
0x32, 0x33, 0xd1, 0x8b, 0x97, 0x50, 0xef, 0x75, 0xa8, 0xaa, 0xf7, 0xaa, 0x0a, 0xae, 0x77, 0x2d,
0xc9, 0x37, 0xfa, 0x73, 0xd7, 0x48, 0xa1, 0x04, 0xda, 0x3a, 0x8e, 0x3f, 0x00, 0x2c, 0x44, 0x55,
0x89, 0x3a, 0xa5, 0xb6, 0xc1, 0x57, 0xe0, 0x93, 0x94, 0x42, 0x2e, 0x44, 0x4e, 0x9c, 0x45, 0x2c,
0x71, 0xd2, 0x81, 0xc0, 0x39, 0x78, 0x06, 0x7c, 0x6a, 0x0b, 0x3e, 0x8b, 0x58, 0xe2, 0xa7, 0x47,
0x1c, 0x6f, 0x20, 0xfc, 0x48, 0xea, 0xa9, 0x25, 0xb9, 0xaa, 0xbf, 0x89, 0x94, 0x7e, 0xe0, 0x6b,
0x00, 0x5d, 0x61, 0xb5, 0x7c, 0x2c, 0x5b, 0xc5, 0x59, 0x64, 0x25, 0x7e, 0x3a, 0x62, 0xf0, 0x16,
0x1c, 0x25, 0xbe, 0x53, 0xdd, 0xa7, 0xea, 0x00, 0x46, 0x10, 0x7c, 0x6e, 0x48, 0x66, 0xaa, 0x14,
0xf5, 0x6a, 0xc9, 0x2d, 0xf3, 0x36, 0xa6, 0x62, 0x01, 0xd7, 0x27, 0x95, 0xfe, 0xa7, 0x6d, 0x8c,
0xc1, 0x5e, 0x66, 0x2a, 0xe3, 0x56, 0x64, 0x25, 0xc1, 0x7d, 0x78, 0x67, 0xfc, 0x39, 0xe6, 0x36,
0x6f, 0xf1, 0x2f, 0x06, 0xde, 0x81, 0xc2, 0x1b, 0xb0, 0x76, 0x65, 0x6e, 0x8a, 0xf8, 0xa9, 0x0e,
0x11, 0xc1, 0xae, 0xb3, 0x8a, 0xfa, 0xd4, 0x26, 0xd6, 0x5c, 0xf9, 0x55, 0xd4, 0x7d, 0xfb, 0x26,
0xc6, 0x17, 0xe0, 0x16, 0x54, 0xe7, 0x24, 0xb9, 0x6d, 0x3a, 0xec, 0x91, 0xe6, 0x2b, 0xb1, 0x2e,
0xb7, 0xc4, 0x1d, 0xf3, 0x77, 0x8f, 0xb4, 0x3f, 0xeb, 0x52, 0xaa, 0x0d, 0x77, 0x3b, 0x7f, 0x0c,
0xd0, 0x2c, 0x55, 0x59, 0xb9, 0xe5, 0x57, 0x1d, 0x6b, 0x00, 0x86, 0x30, 0xa3, 0x3d, 0xf7, 0x0c,
0x35, 0xa3, 0x7d, 0xbc, 0x00, 0xff, 0x51, 0x14, 0x62, 0xa7, 0xf4, 0x20, 0xce, 0x2c, 0x65, 0x17,
0x96, 0x4e, 0x8f, 0x22, 0xfe, 0xcd, 0xe0, 0xd9, 0x53, 0x93, 0x67, 0x8a, 0xc6, 0x63, 0x3d, 0x48,
0x63, 0x23, 0x69, 0x53, 0x16, 0x0c, 0x72, 0xad, 0xbf, 0xc8, 0xb5, 0xa7, 0xe5, 0x3a, 0x93, 0x72,
0xdd, 0x4b, 0xb9, 0x57, 0x07, 0xb9, 0x43, 0xff, 0xde, 0x3f, 0x56, 0xc9, 0xbf, 0xd0, 0x7d, 0xff,
0x13, 0xcc, 0x11, 0xe0, 0x3b, 0x08, 0x8a, 0x61, 0xa5, 0xf0, 0xb6, 0x5b, 0x83, 0xd3, 0x7d, 0x9e,
0x3f, 0x9f, 0x60, 0xdb, 0x06, 0x1f, 0x20, 0x3c, 0x35, 0x09, 0x5f, 0xf6, 0x5b, 0x74, 0x6e, 0xdd,
0xfc, 0xa6, 0x7b, 0x18, 0xee, 0xed, 0x7d, 0xf0, 0xc5, 0xd7, 0xd4, 0x83, 0xfe, 0xac, 0x5d, 0x73,
0x97, 0x6f, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x6d, 0x34, 0xa2, 0xaa, 0x03, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface
var _ grpc.ClientConn
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6
const _ = grpc.SupportPackageIsVersion4
// Client API for User service
// UserClient is the client API for User service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type UserClient interface {
GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error)
UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, opts ...grpc.CallOption) (*CommonResp, error)
DeleteUsers(ctx context.Context, in *DeleteUsersReq, opts ...grpc.CallOption) (*DeleteUsersResp, error)
GetAllUsersUid(ctx context.Context, in *GetAllUsersUidReq, opts ...grpc.CallOption) (*GetAllUsersUidResp, error)
}
type userClient struct {
cc grpc.ClientConnInterface
cc *grpc.ClientConn
}
func NewUserClient(cc grpc.ClientConnInterface) UserClient {
func NewUserClient(cc *grpc.ClientConn) UserClient {
return &userClient{cc}
}
func (c *userClient) GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts ...grpc.CallOption) (*GetUserInfoResp, error) {
out := new(GetUserInfoResp)
err := c.cc.Invoke(ctx, "/user.user/getUserInfo", in, out, opts...)
err := grpc.Invoke(ctx, "/user.user/getUserInfo", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
@ -504,28 +668,38 @@ func (c *userClient) GetUserInfo(ctx context.Context, in *GetUserInfoReq, opts .
func (c *userClient) UpdateUserInfo(ctx context.Context, in *UpdateUserInfoReq, opts ...grpc.CallOption) (*CommonResp, error) {
out := new(CommonResp)
err := c.cc.Invoke(ctx, "/user.user/UpdateUserInfo", in, out, opts...)
err := grpc.Invoke(ctx, "/user.user/UpdateUserInfo", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// UserServer is the server API for User service.
type UserServer interface {
GetUserInfo(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error)
UpdateUserInfo(context.Context, *UpdateUserInfoReq) (*CommonResp, error)
func (c *userClient) DeleteUsers(ctx context.Context, in *DeleteUsersReq, opts ...grpc.CallOption) (*DeleteUsersResp, error) {
out := new(DeleteUsersResp)
err := grpc.Invoke(ctx, "/user.user/DeleteUsers", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// UnimplementedUserServer can be embedded to have forward compatible implementations.
type UnimplementedUserServer struct {
func (c *userClient) GetAllUsersUid(ctx context.Context, in *GetAllUsersUidReq, opts ...grpc.CallOption) (*GetAllUsersUidResp, error) {
out := new(GetAllUsersUidResp)
err := grpc.Invoke(ctx, "/user.user/GetAllUsersUid", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (*UnimplementedUserServer) GetUserInfo(ctx context.Context, req *GetUserInfoReq) (*GetUserInfoResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetUserInfo not implemented")
}
func (*UnimplementedUserServer) UpdateUserInfo(ctx context.Context, req *UpdateUserInfoReq) (*CommonResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateUserInfo not implemented")
// Server API for User service
type UserServer interface {
GetUserInfo(context.Context, *GetUserInfoReq) (*GetUserInfoResp, error)
UpdateUserInfo(context.Context, *UpdateUserInfoReq) (*CommonResp, error)
DeleteUsers(context.Context, *DeleteUsersReq) (*DeleteUsersResp, error)
GetAllUsersUid(context.Context, *GetAllUsersUidReq) (*GetAllUsersUidResp, error)
}
func RegisterUserServer(s *grpc.Server, srv UserServer) {
@ -568,6 +742,42 @@ func _User_UpdateUserInfo_Handler(srv interface{}, ctx context.Context, dec func
return interceptor(ctx, in, info, handler)
}
func _User_DeleteUsers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DeleteUsersReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(UserServer).DeleteUsers(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/user.user/DeleteUsers",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(UserServer).DeleteUsers(ctx, req.(*DeleteUsersReq))
}
return interceptor(ctx, in, info, handler)
}
func _User_GetAllUsersUid_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetAllUsersUidReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(UserServer).GetAllUsersUid(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/user.user/GetAllUsersUid",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(UserServer).GetAllUsersUid(ctx, req.(*GetAllUsersUidReq))
}
return interceptor(ctx, in, info, handler)
}
var _User_serviceDesc = grpc.ServiceDesc{
ServiceName: "user.user",
HandlerType: (*UserServer)(nil),
@ -580,7 +790,56 @@ var _User_serviceDesc = grpc.ServiceDesc{
MethodName: "UpdateUserInfo",
Handler: _User_UpdateUserInfo_Handler,
},
{
MethodName: "DeleteUsers",
Handler: _User_DeleteUsers_Handler,
},
{
MethodName: "GetAllUsersUid",
Handler: _User_GetAllUsersUid_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "user/user.proto",
}
func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_9367ac00c24112e8) }
var fileDescriptor_user_9367ac00c24112e8 = []byte{
// 560 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x6f, 0xd3, 0x40,
0x10, 0x95, 0xed, 0x7c, 0x79, 0x22, 0x92, 0x74, 0x55, 0x60, 0x15, 0x21, 0x14, 0x59, 0x1c, 0x72,
0x2a, 0x28, 0xdc, 0xe8, 0x09, 0x12, 0x51, 0x45, 0x14, 0x55, 0xb2, 0xe4, 0x0b, 0x27, 0x9c, 0xee,
0x34, 0x5d, 0xe1, 0x78, 0x8d, 0xbd, 0x91, 0x7a, 0xe4, 0x27, 0xf1, 0xd7, 0xf8, 0x07, 0x68, 0xc7,
0x71, 0xe2, 0xaf, 0x72, 0xa0, 0x17, 0x6b, 0xe7, 0xed, 0xfa, 0xbd, 0x7d, 0x33, 0xb3, 0x03, 0xe3,
0x7d, 0x86, 0xe9, 0x5b, 0xf3, 0xb9, 0x48, 0x52, 0xa5, 0x15, 0xeb, 0x98, 0xb5, 0xf7, 0x19, 0x60,
0xa9, 0x76, 0x3b, 0x15, 0xfb, 0x98, 0x25, 0xec, 0x15, 0xb8, 0x98, 0xa6, 0x2a, 0x5d, 0x2a, 0x81,
0xdc, 0x9a, 0x59, 0xf3, 0xae, 0x7f, 0x02, 0xd8, 0x14, 0x06, 0x14, 0x7c, 0xcd, 0xb6, 0xdc, 0x9e,
0x59, 0x73, 0xd7, 0x3f, 0xc6, 0x9e, 0x84, 0xf1, 0x0a, 0x23, 0xd4, 0x18, 0x64, 0x98, 0x66, 0x44,
0xf6, 0x0e, 0xe0, 0xf6, 0x48, 0x4d, 0x6c, 0xc3, 0xc5, 0xe4, 0x82, 0x6e, 0x70, 0x92, 0xf4, 0x4b,
0x67, 0xd8, 0x1b, 0x78, 0x76, 0x17, 0xca, 0x08, 0x45, 0x20, 0xc5, 0xb5, 0xcc, 0x34, 0xb7, 0x67,
0xce, 0xdc, 0xf5, 0xab, 0xa0, 0x17, 0xc3, 0xa8, 0x22, 0xf5, 0xd3, 0xfc, 0x27, 0x72, 0xa4, 0xfa,
0x5f, 0x05, 0x64, 0xe7, 0xd0, 0xd5, 0xea, 0x07, 0xc6, 0xdc, 0xa1, 0xbb, 0xe7, 0x01, 0x9b, 0xc1,
0xf0, 0x26, 0xc1, 0x34, 0xd4, 0x52, 0xc5, 0xeb, 0x15, 0xef, 0xd0, 0x5e, 0x19, 0xf2, 0xbe, 0xc0,
0xd9, 0x15, 0xea, 0x8f, 0x51, 0x44, 0x7a, 0x81, 0x14, 0x46, 0xf2, 0x48, 0x66, 0xd7, 0xc8, 0x54,
0x89, 0x2c, 0x17, 0x2a, 0x43, 0xde, 0x77, 0x60, 0x75, 0xb2, 0xff, 0x4a, 0x15, 0x87, 0xfe, 0xbe,
0x62, 0xb6, 0x08, 0xbd, 0x7b, 0x18, 0x5d, 0xa1, 0x36, 0xf4, 0xeb, 0xf8, 0x4e, 0x99, 0xbb, 0xbe,
0x06, 0x30, 0x54, 0xeb, 0x15, 0x1d, 0xb7, 0xe8, 0x78, 0x09, 0x79, 0xdc, 0xcb, 0x4d, 0xd3, 0x4b,
0x39, 0x31, 0x0a, 0xc6, 0x15, 0xa5, 0xa7, 0x34, 0x10, 0xf3, 0xa0, 0xb3, 0x0a, 0x75, 0xc8, 0x9d,
0x99, 0x33, 0x1f, 0x2e, 0x46, 0xb9, 0xf9, 0x23, 0x37, 0xed, 0x79, 0xbf, 0x2d, 0x18, 0x14, 0x10,
0x9b, 0x80, 0xb3, 0x97, 0x82, 0x44, 0x5c, 0xdf, 0x2c, 0x19, 0x83, 0x4e, 0x1c, 0xee, 0xf0, 0x40,
0x4d, 0x6b, 0x83, 0xc9, 0x5b, 0x55, 0xd4, 0x9c, 0xd6, 0xec, 0x05, 0xf4, 0xb6, 0x18, 0x0b, 0x4c,
0xa9, 0xda, 0x5d, 0xff, 0x10, 0x19, 0x7c, 0xa7, 0x36, 0x32, 0x42, 0xde, 0xa5, 0xd3, 0x87, 0xc8,
0xe4, 0x67, 0x23, 0x53, 0x7d, 0xcf, 0x7b, 0x79, 0x7e, 0x28, 0x30, 0x28, 0xee, 0x42, 0x19, 0xf1,
0x7e, 0x8e, 0x52, 0xc0, 0x46, 0x60, 0xe3, 0x03, 0x1f, 0x10, 0x64, 0xe3, 0x83, 0xb7, 0x04, 0xf7,
0x5a, 0x6d, 0xd5, 0x5e, 0x9b, 0x42, 0xd4, 0x52, 0x6a, 0x35, 0x52, 0xda, 0x5e, 0x0a, 0xef, 0x8f,
0x05, 0x67, 0x41, 0x22, 0xc2, 0xbc, 0xe5, 0x8b, 0xb2, 0x16, 0xd6, 0xac, 0x92, 0xb5, 0xb6, 0x14,
0x9c, 0xec, 0x3a, 0x8f, 0xd8, 0xed, 0xb4, 0xdb, 0xed, 0xb6, 0xda, 0xed, 0x35, 0xed, 0xf6, 0x0b,
0xbb, 0xa7, 0xfb, 0x0f, 0xfe, 0xd1, 0x4a, 0x6e, 0xd3, 0xf7, 0x04, 0x9c, 0x40, 0x0a, 0x0e, 0x79,
0x31, 0x03, 0x29, 0x16, 0xbf, 0x6c, 0xa0, 0x09, 0xc5, 0x3e, 0xc0, 0x70, 0x7b, 0xea, 0x32, 0x76,
0x9e, 0x77, 0x46, 0xb5, 0xc5, 0xa7, 0xcf, 0x5b, 0xd0, 0x2c, 0x61, 0x97, 0x30, 0xaa, 0xe6, 0x8d,
0xbd, 0x3c, 0x34, 0x56, 0x3d, 0x9b, 0xd3, 0xc6, 0x73, 0x33, 0xc2, 0xa5, 0x39, 0x53, 0x08, 0x57,
0x47, 0x4f, 0x21, 0x5c, 0x9f, 0x7d, 0x4b, 0x7a, 0x84, 0xa5, 0x67, 0x5e, 0x08, 0x37, 0x26, 0xc9,
0x94, 0xb7, 0x6f, 0x64, 0xc9, 0xa7, 0xe1, 0x37, 0xd7, 0x6c, 0x5d, 0x9a, 0xcf, 0xa6, 0x47, 0x53,
0xfb, 0xfd, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x0f, 0x5a, 0xd9, 0xc8, 0x05, 0x00, 0x00,
}

@ -6,7 +6,25 @@ message CommonResp{
int32 errorCode = 1;
string errorMsg = 2;
}
message DeleteUsersResp{
CommonResp commonResp = 1;
repeated string failedUidList = 2;
}
message DeleteUsersReq{
repeated string deleteUidList = 2;
string token = 3;
string OperationID = 4;
}
message GetAllUsersUidReq{
string token = 2;
string operationID = 3;
}
message GetAllUsersUidResp{
CommonResp commonResp = 1;
repeated string uidList = 2;
}
message GetUserInfoReq{
repeated string userIDList = 1;
string token = 2;
@ -44,9 +62,12 @@ message UpdateUserInfoReq{
string ex = 7;
string token = 8;
string OperationID = 9;
string Uid = 10;
}
service user {
rpc getUserInfo(GetUserInfoReq) returns(GetUserInfoResp);
rpc UpdateUserInfo(UpdateUserInfoReq) returns(CommonResp);
rpc DeleteUsers(DeleteUsersReq)returns(DeleteUsersResp);
rpc GetAllUsersUid(GetAllUsersUidReq)returns(GetAllUsersUidResp);
}

@ -20,6 +20,7 @@ func NewContentStructString(isDisplay int32, ID string, text string) string {
c := Content{IsDisplay: isDisplay, ID: ID, Text: text}
return c.contentToString()
}
func (c *Content) contentToString() string {
data, _ := json.Marshal(c)
dataString := string(data)
@ -62,6 +63,13 @@ type NotificationContent struct {
DefaultTips string `json:"defaultTips"`
Detail string `json:"detail"`
}
func (c *NotificationContent) ContentToString() string {
data, _ := json.Marshal(c)
dataString := string(data)
return dataString
}
type KickGroupMemberApiReq struct {
GroupID string `json:"groupID"`
UidList []string `json:"uidList"`

@ -17,7 +17,23 @@ func (s *friendServer) AddBlacklist(ctx context.Context, req *pbFriend.AddBlackl
log.Error(req.Token, req.OperationID, "err=%s,parse token failed", err.Error())
return &pbFriend.CommonResp{ErrorCode: config.ErrParseToken.ErrCode, ErrorMsg: config.ErrParseToken.ErrMsg}, nil
}
err = im_mysql_model.InsertInToUserBlackList(claims.UID, req.Uid)
isMagagerFlag := 0
tokenUid := claims.UID
if tokenUid == config.Config.AppManagerUid {
isMagagerFlag = 1
}
if isMagagerFlag == 0 {
err = im_mysql_model.InsertInToUserBlackList(claims.UID, req.Uid)
if err != nil {
log.Error(req.Token, req.OperationID, "err=%s,Failed to add blacklist", err.Error())
return &pbFriend.CommonResp{ErrorCode: config.ErrMysql.ErrCode, ErrorMsg: config.ErrMysql.ErrMsg}, nil
}
log.Info(req.Token, req.OperationID, "rpc add blacklist success return,uid=%s", req.Uid)
return &pbFriend.CommonResp{}, nil
}
err = im_mysql_model.InsertInToUserBlackList(req.OwnerUid, req.Uid)
if err != nil {
log.Error(req.Token, req.OperationID, "err=%s,Failed to add blacklist", err.Error())
return &pbFriend.CommonResp{ErrorCode: config.ErrMysql.ErrCode, ErrorMsg: config.ErrMysql.ErrMsg}, nil

@ -51,3 +51,66 @@ func (s *friendServer) AddFriend(ctx context.Context, req *pbFriend.AddFriendReq
}
return &pbFriend.CommonResp{}, nil
}
func (s *friendServer) ImportFriend(ctx context.Context, req *pbFriend.ImportFriendReq) (*pbFriend.CommonResp, error) {
log.Info(req.Token, req.OperationID, "ImportFriendis server,userid=%s", req.OwnerUid)
//Parse token, to find current user information
claims, err := utils.ParseToken(req.Token)
if err != nil {
log.Error(req.Token, req.OperationID, "err=%s,parse token failed", err.Error())
return &pbFriend.CommonResp{ErrorCode: config.ErrParseToken.ErrCode, ErrorMsg: config.ErrParseToken.ErrMsg}, nil
}
if claims.UID != config.Config.AppManagerUid {
log.Error(req.Token, req.OperationID, "not magager uid", claims.UID, config.Config.AppManagerUid)
return &pbFriend.CommonResp{ErrorCode: config.ErrParseToken.ErrCode, ErrorMsg: config.ErrParseToken.ErrMsg}, nil
}
if _, err = im_mysql_model.FindUserByUID(req.Uid); err != nil {
log.Error(req.Token, req.OperationID, "this user not exists,cant not add friend", req.Uid)
return &pbFriend.CommonResp{ErrorCode: config.ErrAddFriend.ErrCode, ErrorMsg: config.ErrSearchUserInfo.ErrMsg}, nil
}
if _, err = im_mysql_model.FindUserByUID(req.OwnerUid); err != nil {
log.Error(req.Token, req.OperationID, "this user not exists,cant not add friend", req.OwnerUid)
return &pbFriend.CommonResp{ErrorCode: config.ErrAddFriend.ErrCode, ErrorMsg: config.ErrSearchUserInfo.ErrMsg}, nil
}
_, err = im_mysql_model.FindFriendRelationshipFromFriend(req.OwnerUid, req.Uid)
if err != nil {
log.Error("", req.OperationID, err.Error())
}
//Establish two single friendship
err = im_mysql_model.InsertToFriend(req.OwnerUid, req.Uid, 1)
if err != nil {
log.Error(req.Token, req.OperationID, "err=%s,create friendship failed", err.Error())
}
err = im_mysql_model.InsertToFriend(req.Uid, req.OwnerUid, 1)
if err != nil {
log.Error(req.Token, req.OperationID, "err=%s,create friendship failed", err.Error())
}
logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{
SendID: req.OwnerUid,
RecvID: req.Uid,
Content: content_struct.NewContentStructString(0, "", " add you as a friend."),
SendTime: utils.GetCurrentTimestampBySecond(),
MsgFrom: constant.UserMsgType, //Notification message identification
ContentType: constant.AcceptFriendApplicationTip, //Add friend flag
SessionType: constant.SingleChatType,
OperationID: req.OperationID,
})
logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{
SendID: req.Uid,
RecvID: req.OwnerUid,
Content: content_struct.NewContentStructString(0, "", " add you as a friend."),
SendTime: utils.GetCurrentTimestampBySecond(),
MsgFrom: constant.UserMsgType, //Notification message identification
ContentType: constant.AcceptFriendApplicationTip, //Add friend flag
SessionType: constant.SingleChatType,
OperationID: req.OperationID,
})
return &pbFriend.CommonResp{}, nil
}

@ -7,7 +7,10 @@ import (
"Open_IM/src/common/db/mysql_model/im_mysql_model"
"Open_IM/src/common/log"
"Open_IM/src/grpc-etcdv3/getcdv3"
pbChat "Open_IM/src/proto/chat"
pbGroup "Open_IM/src/proto/group"
"Open_IM/src/push/content_struct"
"Open_IM/src/push/logic"
"Open_IM/src/utils"
"context"
"google.golang.org/grpc"
@ -82,22 +85,30 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
return &pbGroup.CreateGroupResp{ErrorCode: config.ErrCreateGroup.ErrCode, ErrorMsg: config.ErrCreateGroup.ErrMsg}, nil
}
//Add the group owner to the group first, otherwise the group creation will fail
us, err := im_mysql_model.FindUserByUID(claims.UID)
if err != nil {
log.Error("", req.OperationID, "find userInfo failed", err.Error())
return &pbGroup.CreateGroupResp{ErrorCode: config.ErrCreateGroup.ErrCode, ErrorMsg: config.ErrCreateGroup.ErrMsg}, nil
}
err = im_mysql_model.InsertIntoGroupMember(groupId, claims.UID, us.Name, us.Icon, constant.GroupOwner)
if err != nil {
log.Error("", req.OperationID, "create group chat failed,err=%s", err.Error())
return &pbGroup.CreateGroupResp{ErrorCode: config.ErrCreateGroup.ErrCode, ErrorMsg: config.ErrCreateGroup.ErrMsg}, nil
isMagagerFlag := 0
tokenUid := claims.UID
if tokenUid == config.Config.AppManagerUid {
isMagagerFlag = 1
}
err = db.DB.AddGroupMember(groupId, claims.UID)
if err != nil {
log.Error("", "", "create mongo group member failed, db.DB.AddGroupMember fail [err: %s]", err.Error())
return &pbGroup.CreateGroupResp{ErrorCode: config.ErrCreateGroup.ErrCode, ErrorMsg: config.ErrCreateGroup.ErrMsg}, nil
if isMagagerFlag == 0 {
//Add the group owner to the group first, otherwise the group creation will fail
us, err := im_mysql_model.FindUserByUID(claims.UID)
if err != nil {
log.Error("", req.OperationID, "find userInfo failed", err.Error())
return &pbGroup.CreateGroupResp{ErrorCode: config.ErrCreateGroup.ErrCode, ErrorMsg: config.ErrCreateGroup.ErrMsg}, nil
}
err = im_mysql_model.InsertIntoGroupMember(groupId, claims.UID, us.Name, us.Icon, constant.GroupOwner)
if err != nil {
log.Error("", req.OperationID, "create group chat failed,err=%s", err.Error())
return &pbGroup.CreateGroupResp{ErrorCode: config.ErrCreateGroup.ErrCode, ErrorMsg: config.ErrCreateGroup.ErrMsg}, nil
}
err = db.DB.AddGroupMember(groupId, claims.UID)
if err != nil {
log.Error("", "", "create mongo group member failed, db.DB.AddGroupMember fail [err: %s]", err.Error())
return &pbGroup.CreateGroupResp{ErrorCode: config.ErrCreateGroup.ErrCode, ErrorMsg: config.ErrCreateGroup.ErrMsg}, nil
}
}
//Binding group id and member id
@ -116,17 +127,33 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
log.Error("", "", "add mongo group member failed, db.DB.AddGroupMember fail [err: %s]", err.Error())
}
}
////Push message when create group chat
//logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{
// SendID: claims.UID,
// RecvID: groupId,
// Content: content_struct.NewContentStructString(0, "", req.String()),
// SendTime: utils.GetCurrentTimestampBySecond(),
// MsgFrom: constant.SysMsgType, //Notification message identification
// ContentType: constant.CreateGroupTip, //Add friend flag
// SessionType: constant.GroupChatType,
// OperationID: req.OperationID,
//})
if isMagagerFlag == 1 {
//type NotificationContent struct {
// IsDisplay int32 `json:"isDisplay"`
// DefaultTips string `json:"defaultTips"`
// Detail string `json:"detail"`
//} n := NotificationContent{
// IsDisplay: 1,
// DefaultTips: "You have joined the group chat:" + createGroupResp.Data.GroupName,
// Detail: createGroupResp.Data.GroupId,
// }
////Push message when create group chat
n := content_struct.NotificationContent{1, req.GroupName, groupId}
logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{
SendID: claims.UID,
RecvID: groupId,
Content: n.ContentToString(),
SendTime: utils.GetCurrentTimestampByNano(),
MsgFrom: constant.SysMsgType, //Notification message identification
ContentType: constant.CreateGroupTip, //Add friend flag
SessionType: constant.GroupChatType,
OperationID: req.OperationID,
})
}
log.Info(req.Token, req.OperationID, "rpc create group success return")
return &pbGroup.CreateGroupResp{GroupID: groupId}, nil
}

@ -2,7 +2,12 @@ package group
import (
"Open_IM/src/common/config"
"Open_IM/src/common/constant"
"Open_IM/src/common/db"
pbChat "Open_IM/src/proto/chat"
"Open_IM/src/push/content_struct"
"Open_IM/src/push/logic"
"encoding/json"
imdb "Open_IM/src/common/db/mysql_model/im_mysql_model"
"Open_IM/src/common/log"
@ -59,7 +64,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
}
log.Info(claims.UID, req.OperationID, "recv req: ", req.String())
if !imdb.IsExistGroupMember(req.GroupID, claims.UID) {
if !imdb.IsExistGroupMember(req.GroupID, claims.UID) && claims.UID != config.Config.AppManagerUid {
log.Error(req.Token, req.OperationID, "err= invite user not in group")
return &pbGroup.InviteUserToGroupResp{ErrorCode: config.ErrAccess.ErrCode, ErrorMsg: config.ErrAccess.ErrMsg}, nil
}
@ -94,16 +99,6 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
resp.Id2Result = append(resp.Id2Result, &resultNode)
continue
}
/*
err = imdb.InsertGroupRequest(req.GroupID, fromUserInfo.UID, fromUserInfo.Name, fromUserInfo.Icon, toUserInfo.UID, req.Reason, "invited", 1)
if err != nil {
log.Error(v, req.OperationID, "InsertGroupRequest failed, err: ", err.Error(), "params: ",
req.GroupID, fromUserInfo.UID, fromUserInfo.Name, fromUserInfo.Icon, toUserInfo.UID, req.Reason)
resultNode.Result = -1
resp.Id2Result = append(resp.Id2Result, &resultNode)
continue
}
*/
err = imdb.InsertGroupMember(req.GroupID, toUserInfo.UID, toUserInfo.Name, toUserInfo.Icon, 0)
if err != nil {
@ -122,22 +117,42 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
}
resp.ErrorCode = 0
resp.ErrorMsg = "ok"
/*
var chatMsg pbChat.WSToMsgSvrChatMsg
chatMsg.SendID = claims.UID
chatMsg.RecvID = req.GroupID
content, _ := json.Marshal(req)
chatMsg.Content = string(content)
chatMsg.SendTime = utils.GetCurrentTimestampBySecond()
chatMsg.MsgFrom = constant.UserMsgType
chatMsg.ContentType = constant.InviteUserToGroupTip
chatMsg.SessionType = constant.GroupChatType
logic.SendMsgByWS(&chatMsg)
*/
if claims.UID == config.Config.AppManagerUid {
var iu inviteUserToGroupReq
iu.GroupID = req.GroupID
iu.OperationID = req.OperationID
iu.Reason = req.Reason
iu.UidList = req.UidList
n := content_struct.NotificationContent{1, req.GroupID, iu.ContentToString()}
logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{
SendID: claims.UID,
RecvID: req.GroupID,
Content: n.ContentToString(),
SendTime: utils.GetCurrentTimestampByNano(),
MsgFrom: constant.UserMsgType,
ContentType: constant.InviteUserToGroupTip,
SessionType: constant.GroupChatType,
OperationID: req.OperationID,
})
}
return &resp, nil
}
type inviteUserToGroupReq struct {
GroupID string `json:"groupID"`
UidList []string `json:"uidList"`
Reason string `json:"reason"`
OperationID string `json:"operationID"`
}
func (c *inviteUserToGroupReq) ContentToString() string {
data, _ := json.Marshal(c)
dataString := string(data)
return dataString
}
func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGroupAllMemberReq) (*pbGroup.GetGroupAllMemberResp, error) {
claims, err := utils.ParseToken(req.Token)
if err != nil {
@ -209,6 +224,28 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGr
return &resp, nil
}
type groupMemberFullInfo struct {
GroupId string `json:"groupID"`
UserId string `json:"userId"`
Role int `json:"role"`
JoinTime uint64 `json:"joinTime"`
NickName string `json:"nickName"`
FaceUrl string `json:"faceUrl"`
}
type kickGroupMemberApiReq struct {
GroupID string `json:"groupID"`
UidListInfo []groupMemberFullInfo `json:"uidListInfo"`
Reason string `json:"reason"`
OperationID string `json:"operationID"`
}
func (c *kickGroupMemberApiReq) ContentToString() string {
data, _ := json.Marshal(c)
dataString := string(data)
return dataString
}
func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGroupMemberReq) (*pbGroup.KickGroupMemberResp, error) {
claims, err := utils.ParseToken(req.Token)
if err != nil {
@ -230,6 +267,12 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou
break
}
}
if flag != 1 {
if claims.UID == config.Config.AppManagerUid {
flag = 1
}
}
if flag != 1 {
log.Error(claims.UID, req.OperationID, "no access kick")
return &pbGroup.KickGroupMemberResp{ErrorCode: config.ErrAccess.ErrCode, ErrorMsg: config.ErrAccess.ErrMsg}, nil
@ -262,29 +305,48 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou
}
}
var kq kickGroupMemberApiReq
/*
var chatMsg pbChat.WSToMsgSvrChatMsg
chatMsg.SendID = claims.UID
chatMsg.RecvID = req.GroupID
content, _ := json.Marshal(req)
chatMsg.Content = string(content)
chatMsg.SendTime = utils.GetCurrentTimestampBySecond()
chatMsg.MsgFrom = constant.UserMsgType
chatMsg.ContentType = constant.KickGroupMemberTip
chatMsg.SessionType = constant.GroupChatType
logic.SendMsgByWS(&chatMsg)
for _, v := range req.UidList {
kickChatMsg := chatMsg
kickChatMsg.RecvID = v
kickChatMsg.SendTime = utils.GetCurrentTimestampBySecond()
kickChatMsg.SessionType = constant.SingleChatType
logic.SendMsgByWS(&kickChatMsg)
}
*/
kq.GroupID = req.GroupID
kq.OperationID = req.OperationID
kq.Reason = req.Reason
var gf groupMemberFullInfo
for _, v := range req.UidListInfo {
gf.UserId = v.UserId
gf.GroupId = req.GroupID
kq.UidListInfo = append(kq.UidListInfo, gf)
}
n := content_struct.NotificationContent{1, req.GroupID, kq.ContentToString()}
if claims.UID == config.Config.AppManagerUid {
log.Info("", req.OperationID, claims.UID, req.GroupID)
logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{
SendID: claims.UID,
RecvID: req.GroupID,
Content: n.ContentToString(),
SendTime: utils.GetCurrentTimestampByNano(),
MsgFrom: constant.UserMsgType,
ContentType: constant.KickGroupMemberTip,
SessionType: constant.GroupChatType,
OperationID: req.OperationID,
})
for _, v := range req.UidListInfo {
log.Info("", req.OperationID, claims.UID, v.UserId)
logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{
SendID: claims.UID,
RecvID: v.UserId,
Content: n.ContentToString(),
SendTime: utils.GetCurrentTimestampBySecond(),
MsgFrom: constant.UserMsgType,
ContentType: constant.KickGroupMemberTip,
SessionType: constant.SingleChatType,
OperationID: req.OperationID,
})
}
}
resp.ErrorCode = 0
return &resp, nil
}

@ -0,0 +1,61 @@
/*
** description("").
** copyright('open-im,www.open-im.io').
** author("fg,Gordon@tuoyun.net").
** time(2021/9/15 10:28).
*/
package user
import (
"Open_IM/src/common/config"
"Open_IM/src/common/db/mysql_model/im_mysql_model"
"Open_IM/src/common/log"
pbUser "Open_IM/src/proto/user"
"Open_IM/src/utils"
"context"
)
func (s *userServer) DeleteUsers(_ context.Context, req *pbUser.DeleteUsersReq) (*pbUser.DeleteUsersResp, error) {
log.InfoByKv("rpc DeleteUsers arrived server", req.OperationID, "args", req.String())
var resp pbUser.DeleteUsersResp
c, err := utils.ParseToken(req.Token)
if err != nil {
log.ErrorByKv("parse token failed", req.OperationID, "err", err.Error())
return &pbUser.DeleteUsersResp{CommonResp: &pbUser.CommonResp{ErrorCode: config.ErrParseToken.ErrCode, ErrorMsg: err.Error()}, FailedUidList: req.DeleteUidList}, nil
}
if c.UID != config.Config.AppManagerUid {
log.ErrorByKv(" Authentication failed", req.OperationID, "args", c)
return &pbUser.DeleteUsersResp{CommonResp: &pbUser.CommonResp{ErrorCode: 401, ErrorMsg: "not authorized"}, FailedUidList: req.DeleteUidList}, nil
}
for _, uid := range req.DeleteUidList {
err = im_mysql_model.UserDelete(uid)
if err != nil {
resp.CommonResp.ErrorCode = 201
resp.CommonResp.ErrorMsg = "some uid deleted failed"
resp.FailedUidList = append(resp.FailedUidList, uid)
}
}
return &resp, nil
}
func (s *userServer) GetAllUsersUid(_ context.Context, req *pbUser.GetAllUsersUidReq) (*pbUser.GetAllUsersUidResp, error) {
log.InfoByKv("rpc GetAllUsersUid arrived server", req.OperationID, "args", req.String())
c, err := utils.ParseToken(req.Token)
if err != nil {
log.InfoByKv("parse token failed", req.OperationID, "err", err.Error())
return &pbUser.GetAllUsersUidResp{CommonResp: &pbUser.CommonResp{ErrorCode: config.ErrParseToken.ErrCode, ErrorMsg: err.Error()}}, nil
}
if c.UID != config.Config.AppManagerUid {
log.ErrorByKv(" Authentication failed", req.OperationID, "args", c)
return &pbUser.GetAllUsersUidResp{CommonResp: &pbUser.CommonResp{ErrorCode: 401, ErrorMsg: "not authorized"}}, nil
}
uidList, err := im_mysql_model.SelectAllUID()
if err != nil {
log.ErrorByKv("db get failed", req.OperationID, "err", err.Error())
return &pbUser.GetAllUsersUidResp{CommonResp: &pbUser.CommonResp{ErrorCode: config.ErrMysql.ErrCode, ErrorMsg: err.Error()}}, nil
} else {
return &pbUser.GetAllUsersUidResp{CommonResp: &pbUser.CommonResp{ErrorCode: 0, ErrorMsg: ""}, UidList: uidList}, nil
}
}

@ -22,7 +22,15 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI
log.Error(req.Token, req.OperationID, "err=%s,parse token failed", err.Error())
return &pbUser.CommonResp{ErrorCode: config.ErrParseToken.ErrCode, ErrorMsg: err.Error()}, nil
}
err = im_mysql_model.UpDateUserInfo(claims.UID, req.Name, req.Icon, req.Mobile, req.Birth, req.Email, req.Ex, req.Gender)
ownerUid := ""
if claims.UID == config.Config.AppManagerUid {
ownerUid = req.Uid
} else {
ownerUid = claims.UID
}
err = im_mysql_model.UpDateUserInfo(ownerUid, req.Name, req.Icon, req.Mobile, req.Birth, req.Email, req.Ex, req.Gender)
if err != nil {
log.Error(req.Token, req.OperationID, "update user some attribute failed,err=%s", err.Error())
return &pbUser.CommonResp{ErrorCode: config.ErrModifyUserInfo.ErrCode, ErrorMsg: config.ErrModifyUserInfo.ErrMsg}, nil
@ -43,7 +51,7 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI
log.ErrorByKv("get friend list rpc server failed", req.OperationID, "err", err.Error(), "req", req.String())
}
self, err := im_mysql_model.FindUserByUID(claims.UID)
self, err := im_mysql_model.FindUserByUID(ownerUid)
if err != nil {
log.ErrorByKv("get self info failed", req.OperationID, "err", err.Error(), "req", req.String())
}
@ -53,12 +61,12 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI
}
for _, v := range RpcResp.Data {
logic.SendMsgByWS(&pbChat.WSToMsgSvrChatMsg{
SendID: claims.UID,
SendID: ownerUid,
RecvID: v.Uid,
SenderNickName: name,
SenderFaceURL: faceUrl,
Content: claims.UID + "'s info has changed",
SendTime: utils.GetCurrentTimestampBySecond(),
Content: ownerUid + "'s info has changed",
SendTime: utils.GetCurrentTimestampByNano(),
MsgFrom: constant.SysMsgType,
ContentType: constant.SetSelfInfoTip,
SessionType: constant.SingleChatType,

@ -8,6 +8,7 @@ package utils
import (
"encoding/json"
"math/rand"
"strconv"
)
@ -53,3 +54,11 @@ func JsonStringToStruct(s string, args interface{}) error {
err := json.Unmarshal([]byte(s), args)
return err
}
func GetMsgID(sendID string) string {
t := int64ToString(GetCurrentTimestampByNano())
return Md5(t + sendID + int64ToString(rand.Int63n(GetCurrentTimestampByNano())))
}
func int64ToString(i int64) string {
return strconv.FormatInt(i, 10)
}

Loading…
Cancel
Save