firend.go 22.2 KB
Newer Older
W
wenxu12345 已提交
1 2 3
package friend

import (
W
wenxu12345 已提交
4
	chat "Open_IM/internal/rpc/msg"
W
wenxu12345 已提交
5 6 7 8 9 10 11
	"Open_IM/pkg/common/config"
	"Open_IM/pkg/common/constant"
	imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
	"Open_IM/pkg/common/log"
	"Open_IM/pkg/common/token_verify"
	"Open_IM/pkg/grpc-etcdv3/getcdv3"
	pbFriend "Open_IM/pkg/proto/friend"
W
wenxu12345 已提交
12
	sdkws "Open_IM/pkg/proto/sdk_ws"
W
wenxu12345 已提交
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
	"Open_IM/pkg/utils"
	"context"
	"google.golang.org/grpc"
	"net"
	"strconv"
	"strings"
)

type friendServer struct {
	rpcPort         int
	rpcRegisterName string
	etcdSchema      string
	etcdAddr        []string
}

func NewFriendServer(port int) *friendServer {
	log.NewPrivateLog("friend")
	return &friendServer{
		rpcPort:         port,
		rpcRegisterName: config.Config.RpcRegisterName.OpenImFriendName,
		etcdSchema:      config.Config.Etcd.EtcdSchema,
		etcdAddr:        config.Config.Etcd.EtcdAddr,
	}
}

func (s *friendServer) Run() {
W
wenxu12345 已提交
39
	log.NewInfo("0", "friendServer run...")
W
wenxu12345 已提交
40 41 42 43 44 45

	ip := utils.ServerIP
	registerAddress := ip + ":" + strconv.Itoa(s.rpcPort)
	//listener network
	listener, err := net.Listen("tcp", registerAddress)
	if err != nil {
W
wenxu12345 已提交
46
		log.NewError("0", "Listen failed ", err.Error(), registerAddress)
W
wenxu12345 已提交
47 48
		return
	}
W
wenxu12345 已提交
49
	log.NewInfo("0", "listen ok ", registerAddress)
W
wenxu12345 已提交
50 51 52 53 54 55 56 57
	defer listener.Close()
	//grpc server
	srv := grpc.NewServer()
	defer srv.GracefulStop()
	//User friend related services register to etcd
	pbFriend.RegisterFriendServer(srv, s)
	err = getcdv3.RegisterEtcd(s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName, 10)
	if err != nil {
W
wenxu12345 已提交
58
		log.NewError("0", "RegisterEtcd failed ", err.Error(), s.etcdSchema, strings.Join(s.etcdAddr, ","), ip, s.rpcPort, s.rpcRegisterName)
W
wenxu12345 已提交
59 60 61 62
		return
	}
	err = srv.Serve(listener)
	if err != nil {
W
wenxu12345 已提交
63
		log.NewError("0", "Serve failed ", err.Error(), listener)
W
wenxu12345 已提交
64 65 66 67
		return
	}
}

W
wenxu12345 已提交
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
////
//func (s *friendServer) GetFriendsInfo(ctx context.Context, req *pbFriend.GetFriendsInfoReq) (*pbFriend.GetFriendInfoResp, error) {
//	return nil, nil
////	log.NewInfo(req.CommID.OperationID, "GetFriendsInfo args ", req.String())
////	var (
////		isInBlackList int32
////		//	isFriend      int32
////		comment string
////	)
////
////	friendShip, err := imdb.FindFriendRelationshipFromFriend(req.CommID.FromUserID, req.CommID.ToUserID)
////	if err != nil {
////		log.NewError(req.CommID.OperationID, "FindFriendRelationshipFromFriend failed ", err.Error())
////		return &pbFriend.GetFriendInfoResp{ErrCode: constant.ErrSearchUserInfo.ErrCode, ErrMsg: constant.ErrSearchUserInfo.ErrMsg}, nil
////		//	isFriend = constant.FriendFlag
////	}
////	comment = friendShip.Remark
////
////	friendUserInfo, err := imdb.FindUserByUID(req.CommID.ToUserID)
////	if err != nil {
////		log.NewError(req.CommID.OperationID, "FindUserByUID failed ", err.Error())
////		return &pbFriend.GetFriendInfoResp{ErrCode: constant.ErrSearchUserInfo.ErrCode, ErrMsg: constant.ErrSearchUserInfo.ErrMsg}, nil
////	}
////
////	err = imdb.FindRelationshipFromBlackList(req.CommID.FromUserID, req.CommID.ToUserID)
////	if err == nil {
////		isInBlackList = constant.BlackListFlag
////	}
////
////	resp := pbFriend.GetFriendInfoResp{ErrCode: 0, ErrMsg:  "",}
////
////	utils.CopyStructFields(resp.FriendInfoList, friendUserInfo)
////	resp.Data.IsBlack = isInBlackList
////	resp.Data.OwnerUserID = req.CommID.FromUserID
////	resp.Data.Remark = comment
////	resp.Data.CreateTime = friendUserInfo.CreateTime
////
////	log.NewInfo(req.CommID.OperationID, "GetFriendsInfo ok ", resp)
////	return &resp, nil
////
//}

func (s *friendServer) AddBlacklist(ctx context.Context, req *pbFriend.AddBlacklistReq) (*pbFriend.AddBlacklistResp, error) {
W
wenxu12345 已提交
111 112 113
	log.NewInfo(req.CommID.OperationID, "AddBlacklist args ", req.String())
	ok := token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID)
	if !ok {
W
wenxu12345 已提交
114 115
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
		return &pbFriend.AddBlacklistResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
W
wenxu12345 已提交
116
	}
W
wenxu12345 已提交
117
	black := imdb.Black{OwnerUserID: req.CommID.FromUserID, BlockUserID: req.CommID.ToUserID}
W
wenxu12345 已提交
118

W
wenxu12345 已提交
119
	err := imdb.InsertInToUserBlackList(black)
W
wenxu12345 已提交
120 121
	if err != nil {
		log.NewError(req.CommID.OperationID, "InsertInToUserBlackList failed ", err.Error())
W
wenxu12345 已提交
122
		return &pbFriend.AddBlacklistResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
123
	}
W
wenxu12345 已提交
124
	log.NewInfo(req.CommID.OperationID, "AddBlacklist rpc ok ", req.CommID.FromUserID, req.CommID.ToUserID)
W
wenxu12345 已提交
125
	chat.BlackAddedNotification(req)
W
wenxu12345 已提交
126
	return &pbFriend.AddBlacklistResp{CommonResp: &pbFriend.CommonResp{}}, nil
W
wenxu12345 已提交
127 128
}

W
wenxu12345 已提交
129
func (s *friendServer) AddFriend(ctx context.Context, req *pbFriend.AddFriendReq) (*pbFriend.AddFriendResp, error) {
W
wenxu12345 已提交
130 131 132
	log.NewInfo(req.CommID.OperationID, "AddFriend args ", req.String())
	ok := token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID)
	if !ok {
W
wenxu12345 已提交
133 134
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
		return &pbFriend.AddFriendResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
W
wenxu12345 已提交
135 136
	}
	//Cannot add non-existent users
W
wenxu12345 已提交
137 138
	if _, err := imdb.GetUserByUserID(req.CommID.ToUserID); err != nil {
		log.NewError(req.CommID.OperationID, "GetUserByUserID failed ", err.Error(), req.CommID.ToUserID)
W
wenxu12345 已提交
139
		return &pbFriend.AddFriendResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
140 141 142
	}

	//Establish a latest relationship in the friend request table
W
wenxu12345 已提交
143 144 145
	friendRequest := imdb.FriendRequest{ReqMessage: req.ReqMsg}
	utils.CopyStructFields(&friendRequest, req.CommID)
	err := imdb.UpdateFriendApplication(&friendRequest)
W
wenxu12345 已提交
146
	if err != nil {
W
wenxu12345 已提交
147
		log.NewError(req.CommID.OperationID, "UpdateFriendApplication failed ", err.Error(), friendRequest)
W
wenxu12345 已提交
148
		return &pbFriend.AddFriendResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
149 150
	}

W
wenxu12345 已提交
151
	chat.FriendApplicationAddedNotification(req)
W
wenxu12345 已提交
152
	return &pbFriend.AddFriendResp{CommonResp: &pbFriend.CommonResp{}}, nil
W
wenxu12345 已提交
153 154
}

W
wenxu12345 已提交
155
//todo
W
wenxu12345 已提交
156 157 158 159 160 161
func (s *friendServer) ImportFriend(ctx context.Context, req *pbFriend.ImportFriendReq) (*pbFriend.ImportFriendResp, error) {
	log.NewInfo(req.OperationID, "ImportFriend failed ", req.String())
	var resp pbFriend.ImportFriendResp
	var c pbFriend.CommonResp

	if !utils.IsContain(req.OpUserID, config.Config.Manager.AppManagerUid) {
W
wenxu12345 已提交
162
		log.NewError(req.OperationID, "not authorized", req.OpUserID, config.Config.Manager.AppManagerUid)
W
wenxu12345 已提交
163 164 165
		c.ErrCode = constant.ErrAccess.ErrCode
		c.ErrMsg = constant.ErrAccess.ErrMsg
		return &pbFriend.ImportFriendResp{CommonResp: &c, FailedFriendUserIDList: req.FriendUserIDList}, nil
W
wenxu12345 已提交
166
	}
W
wenxu12345 已提交
167
	if _, err := imdb.GetUserByUserID(req.FromUserID); err != nil {
W
wenxu12345 已提交
168
		log.NewError(req.OperationID, "GetUserByUserID failed ", err.Error(), req.FromUserID)
W
wenxu12345 已提交
169
		c.ErrCode = constant.ErrDB.ErrCode
W
wenxu12345 已提交
170
		c.ErrMsg = "this user not exists,cant not add friend"
W
wenxu12345 已提交
171
		return &pbFriend.ImportFriendResp{CommonResp: &c, FailedFriendUserIDList: req.FriendUserIDList}, nil
W
wenxu12345 已提交
172 173 174
	}

	for _, v := range req.FriendUserIDList {
W
wenxu12345 已提交
175
		if _, fErr := imdb.GetUserByUserID(v); fErr != nil {
W
wenxu12345 已提交
176 177
			c.ErrMsg = "some uid establish failed"
			c.ErrCode = 408
W
wenxu12345 已提交
178
			resp.FailedFriendUserIDList = append(resp.FailedFriendUserIDList, v)
W
wenxu12345 已提交
179
		} else {
W
wenxu12345 已提交
180
			if _, err := imdb.GetFriendRelationshipFromFriend(req.FromUserID, v); err != nil {
W
wenxu12345 已提交
181
				//Establish two single friendship
W
wenxu12345 已提交
182 183
				toInsertFollow := imdb.Friend{OwnerUserID: req.FromUserID, FriendUserID: v}
				err1 := imdb.InsertToFriend(&toInsertFollow)
W
wenxu12345 已提交
184
				if err1 != nil {
W
wenxu12345 已提交
185
					resp.FailedFriendUserIDList = append(resp.FailedFriendUserIDList, v)
W
wenxu12345 已提交
186 187 188 189 190
					log.NewError(req.OperationID, "InsertToFriend failed", req.FromUserID, v, err1.Error())
					c.ErrMsg = "some uid establish failed"
					c.ErrCode = 408
					continue
				}
W
wenxu12345 已提交
191 192
				toInsertFollow = imdb.Friend{OwnerUserID: v, FriendUserID: req.FromUserID}
				err2 := imdb.InsertToFriend(&toInsertFollow)
W
wenxu12345 已提交
193
				if err2 != nil {
W
wenxu12345 已提交
194
					resp.FailedFriendUserIDList = append(resp.FailedFriendUserIDList, v)
W
wenxu12345 已提交
195 196 197 198 199
					log.NewError(req.OperationID, "InsertToFriend failed", v, req.FromUserID, err2.Error())
					c.ErrMsg = "some uid establish failed"
					c.ErrCode = 408
					continue
				}
W
wenxu12345 已提交
200 201 202
				for _, v := range req.FriendUserIDList {
					chat.FriendAddedNotification(req.OperationID, req.OpUserID, req.FromUserID, v)
				}
W
wenxu12345 已提交
203 204 205 206 207 208 209 210
			}
		}
	}
	resp.CommonResp = &c
	log.NewInfo(req.OperationID, "ImportFriend rpc ok ", resp)
	return &resp, nil
}

W
wenxu12345 已提交
211
//process Friend application
W
wenxu12345 已提交
212
func (s *friendServer) AddFriendResponse(ctx context.Context, req *pbFriend.AddFriendResponseReq) (*pbFriend.AddFriendResponseResp, error) {
W
wenxu12345 已提交
213 214
	log.NewInfo(req.CommID.OperationID, "AddFriendResponse args ", req.String())

W
wenxu12345 已提交
215 216
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
217
		return &pbFriend.AddFriendResponseResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
W
wenxu12345 已提交
218 219 220 221
	}

	//Check there application before agreeing or refuse to a friend's application
	//req.CommID.FromUserID process req.CommID.ToUserID
W
wenxu12345 已提交
222 223 224
	friendRequest, err := imdb.GetFriendApplicationByBothUserID(req.CommID.ToUserID, req.CommID.FromUserID)
	if err != nil {
		log.NewError(req.CommID.OperationID, "GetFriendApplicationByBothUserID failed ", err.Error(), req.CommID.ToUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
225
		return &pbFriend.AddFriendResponseResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
226
	}
W
wenxu12345 已提交
227
	friendRequest.HandleResult = req.Flag
W
wenxu12345 已提交
228 229 230
	friendRequest.HandleTime = time.Now()
	friendRequest.HandleMsg = req.HandleMsg
	friendRequest.HandlerUserID = req.CommID.OpUserID
W
wenxu12345 已提交
231
	err = imdb.UpdateFriendApplication(friendRequest)
W
wenxu12345 已提交
232
	if err != nil {
W
wenxu12345 已提交
233
		log.NewError(req.CommID.OperationID, "UpdateFriendApplication failed ", err.Error(), friendRequest)
W
wenxu12345 已提交
234
		return &pbFriend.AddFriendResponseResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
235
	}
W
wenxu12345 已提交
236

W
wenxu12345 已提交
237 238 239
	//Change the status of the friend request form
	if req.Flag == constant.FriendFlag {
		//Establish friendship after find friend relationship not exists
W
wenxu12345 已提交
240
		_, err := imdb.GetFriendRelationshipFromFriend(req.CommID.FromUserID, req.CommID.ToUserID)
W
wenxu12345 已提交
241
		if err == nil {
W
wenxu12345 已提交
242
			log.NewWarn(req.CommID.OperationID, "GetFriendRelationshipFromFriend exist", req.CommID.FromUserID, req.CommID.ToUserID)
W
wenxu12345 已提交
243 244
		} else {
			//Establish two single friendship
W
wenxu12345 已提交
245 246
			toInsertFollow := imdb.Friend{OwnerUserID: req.CommID.FromUserID, FriendUserID: req.CommID.ToUserID, OperatorUserID: req.CommID.OpUserID}
			err = imdb.InsertToFriend(&toInsertFollow)
W
wenxu12345 已提交
247
			if err != nil {
W
wenxu12345 已提交
248
				log.NewError(req.CommID.OperationID, "InsertToFriend failed ", err.Error(), toInsertFollow)
W
wenxu12345 已提交
249
				return &pbFriend.AddFriendResponseResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
250 251 252
			}
		}

W
wenxu12345 已提交
253
		_, err = imdb.GetFriendRelationshipFromFriend(req.CommID.ToUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
254 255 256
		if err == nil {
			log.NewWarn(req.CommID.OperationID, "FindFriendRelationshipFromFriend exist", req.CommID.ToUserID, req.CommID.FromUserID)
		}
W
wenxu12345 已提交
257 258
		toInsertFollow := imdb.Friend{OwnerUserID: req.CommID.ToUserID, FriendUserID: req.CommID.FromUserID, OperatorUserID: req.CommID.OpUserID}
		err = imdb.InsertToFriend(&toInsertFollow)
W
wenxu12345 已提交
259
		if err != nil {
W
wenxu12345 已提交
260
			log.NewError(req.CommID.OperationID, "InsertToFriend failed ", err.Error(), toInsertFollow)
W
wenxu12345 已提交
261
			return &pbFriend.AddFriendResponseResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
262
		}
W
wenxu12345 已提交
263
		chat.FriendAddedNotification(req.CommID.OperationID, req.CommID.OpUserID, req.CommID.FromUserID, req.CommID.ToUserID)
W
wenxu12345 已提交
264 265
	}

W
wenxu12345 已提交
266
	chat.FriendApplicationProcessedNotification(req)
W
wenxu12345 已提交
267
	log.NewInfo(req.CommID.OperationID, "rpc AddFriendResponse ok")
W
wenxu12345 已提交
268
	return &pbFriend.AddFriendResponseResp{CommonResp: &pbFriend.CommonResp{}}, nil
W
wenxu12345 已提交
269 270
}

W
wenxu12345 已提交
271
func (s *friendServer) DeleteFriend(ctx context.Context, req *pbFriend.DeleteFriendReq) (*pbFriend.DeleteFriendResp, error) {
W
wenxu12345 已提交
272 273 274 275
	log.NewInfo(req.CommID.OperationID, "DeleteFriend args ", req.String())
	//Parse token, to find current user information
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
276
		return &pbFriend.DeleteFriendResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
W
wenxu12345 已提交
277 278 279 280 281
	}

	err := imdb.DeleteSingleFriendInfo(req.CommID.FromUserID, req.CommID.ToUserID)
	if err != nil {
		log.NewError(req.CommID.OperationID, "DeleteSingleFriendInfo failed", err.Error(), req.CommID.FromUserID, req.CommID.ToUserID)
W
wenxu12345 已提交
282
		return &pbFriend.DeleteFriendResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
W
wenxu12345 已提交
283 284
	}
	log.NewInfo(req.CommID.OperationID, "DeleteFriend rpc ok")
W
wenxu12345 已提交
285
	chat.FriendDeletedNotification(req)
W
wenxu12345 已提交
286
	return &pbFriend.DeleteFriendResp{CommonResp: &pbFriend.CommonResp{}}, nil
W
wenxu12345 已提交
287 288 289 290 291 292 293
}

func (s *friendServer) GetBlacklist(ctx context.Context, req *pbFriend.GetBlacklistReq) (*pbFriend.GetBlacklistResp, error) {
	log.NewInfo(req.CommID.OperationID, "GetBlacklist args ", req.String())

	//Parse token, to find current user information
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
W
wenxu12345 已提交
294
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
295
		return &pbFriend.GetBlacklistResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
W
wenxu12345 已提交
296 297
	}

W
wenxu12345 已提交
298
	blackListInfo, err := imdb.GetBlackListByUserID(req.CommID.FromUserID)
W
wenxu12345 已提交
299 300
	if err != nil {
		log.NewError(req.CommID.OperationID, "GetBlackListByUID failed ", err.Error(), req.CommID.FromUserID)
W
wenxu12345 已提交
301
		return &pbFriend.GetBlacklistResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
W
wenxu12345 已提交
302 303 304
	}

	var (
W
wenxu12345 已提交
305
		userInfoList []*sdkws.PublicUserInfo
W
wenxu12345 已提交
306 307
	)
	for _, blackUser := range blackListInfo {
W
wenxu12345 已提交
308
		var blackUserInfo sdkws.PublicUserInfo
W
wenxu12345 已提交
309
		//Find black user information
W
wenxu12345 已提交
310
		us, err := imdb.GetUserByUserID(blackUser.BlockUserID)
W
wenxu12345 已提交
311
		if err != nil {
W
wenxu12345 已提交
312
			log.NewError(req.CommID.OperationID, "GetUserByUserID failed ", err.Error(), blackUser.BlockUserID)
W
wenxu12345 已提交
313 314 315 316 317
			continue
		}
		utils.CopyStructFields(&blackUserInfo, us)
		userInfoList = append(userInfoList, &blackUserInfo)
	}
W
wenxu12345 已提交
318
	log.NewInfo(req.CommID.OperationID, "rpc GetBlacklist ok ", pbFriend.GetBlacklistResp{BlackUserInfoList: userInfoList})
W
wenxu12345 已提交
319
	return &pbFriend.GetBlacklistResp{BlackUserInfoList: userInfoList}, nil
W
wenxu12345 已提交
320 321
}

W
wenxu12345 已提交
322
func (s *friendServer) SetFriendComment(ctx context.Context, req *pbFriend.SetFriendCommentReq) (*pbFriend.SetFriendCommentResp, error) {
W
wenxu12345 已提交
323 324 325
	log.NewInfo(req.CommID.OperationID, "SetFriendComment args ", req.String())
	//Parse token, to find current user information
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
W
wenxu12345 已提交
326
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
327
		return &pbFriend.SetFriendCommentResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
W
wenxu12345 已提交
328 329
	}

W
wenxu12345 已提交
330
	err := imdb.UpdateFriendComment(req.CommID.FromUserID, req.CommID.ToUserID, req.Remark)
W
wenxu12345 已提交
331
	if err != nil {
W
wenxu12345 已提交
332
		log.NewError(req.CommID.OperationID, "UpdateFriendComment failed ", req.CommID.FromUserID, req.CommID.ToUserID, req.Remark)
W
wenxu12345 已提交
333
		return &pbFriend.SetFriendCommentResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
W
wenxu12345 已提交
334 335
	}
	log.NewInfo(req.CommID.OperationID, "rpc SetFriendComment ok")
W
wenxu12345 已提交
336
	chat.FriendInfoChangedNotification(req.CommID.OperationID, req.CommID.OpUserID, req.CommID.FromUserID, req.CommID.ToUserID)
W
wenxu12345 已提交
337
	return &pbFriend.SetFriendCommentResp{CommonResp: &pbFriend.CommonResp{}}, nil
W
wenxu12345 已提交
338 339
}

W
wenxu12345 已提交
340
func (s *friendServer) RemoveBlacklist(ctx context.Context, req *pbFriend.RemoveBlacklistReq) (*pbFriend.RemoveBlacklistResp, error) {
W
wenxu12345 已提交
341 342 343
	log.NewInfo(req.CommID.OperationID, "RemoveBlacklist args ", req.String())
	//Parse token, to find current user information
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
W
wenxu12345 已提交
344
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
345
		return &pbFriend.RemoveBlacklistResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
W
wenxu12345 已提交
346 347 348 349
	}
	err := imdb.RemoveBlackList(req.CommID.FromUserID, req.CommID.ToUserID)
	if err != nil {
		log.NewError(req.CommID.OperationID, "RemoveBlackList failed", err.Error(), req.CommID.FromUserID, req.CommID.ToUserID)
W
wenxu12345 已提交
350 351
		return &pbFriend.RemoveBlacklistResp{CommonResp: &pbFriend.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil

W
wenxu12345 已提交
352
	}
W
wenxu12345 已提交
353
	log.NewInfo(req.CommID.OperationID, "rpc RemoveBlacklist ok ")
W
wenxu12345 已提交
354
	chat.BlackDeletedNotification(req)
W
wenxu12345 已提交
355
	return &pbFriend.RemoveBlacklistResp{CommonResp: &pbFriend.CommonResp{}}, nil
W
wenxu12345 已提交
356 357 358 359 360
}

func (s *friendServer) IsInBlackList(ctx context.Context, req *pbFriend.IsInBlackListReq) (*pbFriend.IsInBlackListResp, error) {
	log.NewInfo("IsInBlackList args ", req.String())
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
W
wenxu12345 已提交
361
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
362
		return &pbFriend.IsInBlackListResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
W
wenxu12345 已提交
363 364 365
	}

	var isInBlacklist = false
W
wenxu12345 已提交
366
	err := imdb.CheckBlack(req.CommID.FromUserID, req.CommID.ToUserID)
W
wenxu12345 已提交
367 368 369
	if err == nil {
		isInBlacklist = true
	}
W
wenxu12345 已提交
370
	log.NewInfo(req.CommID.OperationID, "IsInBlackList rpc ok ", pbFriend.IsInBlackListResp{Response: isInBlacklist})
W
wenxu12345 已提交
371 372 373 374 375
	return &pbFriend.IsInBlackListResp{Response: isInBlacklist}, nil
}

func (s *friendServer) IsFriend(ctx context.Context, req *pbFriend.IsFriendReq) (*pbFriend.IsFriendResp, error) {
	log.NewInfo("IsFriend args ", req.String())
W
wenxu12345 已提交
376
	var isFriend bool
W
wenxu12345 已提交
377 378
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
379
		return &pbFriend.IsFriendResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
W
wenxu12345 已提交
380
	}
W
wenxu12345 已提交
381
	_, err := imdb.GetFriendRelationshipFromFriend(req.CommID.FromUserID, req.CommID.ToUserID)
W
wenxu12345 已提交
382
	if err == nil {
W
wenxu12345 已提交
383
		isFriend = true
W
wenxu12345 已提交
384
	} else {
W
wenxu12345 已提交
385
		isFriend = false
W
wenxu12345 已提交
386
	}
W
wenxu12345 已提交
387
	log.NewInfo("IsFriend rpc ok ", pbFriend.IsFriendResp{Response: isFriend})
W
wenxu12345 已提交
388
	return &pbFriend.IsFriendResp{Response: isFriend}, nil
W
wenxu12345 已提交
389 390 391 392 393 394
}

func (s *friendServer) GetFriendList(ctx context.Context, req *pbFriend.GetFriendListReq) (*pbFriend.GetFriendListResp, error) {
	log.NewInfo("GetFriendList args ", req.String())
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
395
		return &pbFriend.GetFriendListResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
W
wenxu12345 已提交
396 397
	}

W
wenxu12345 已提交
398
	friends, err := imdb.GetFriendListByUserID(req.CommID.FromUserID)
W
wenxu12345 已提交
399
	if err != nil {
W
wenxu12345 已提交
400
		log.NewError(req.CommID.OperationID, "FindUserInfoFromFriend failed ", err.Error(), req.CommID.FromUserID)
W
wenxu12345 已提交
401
		return &pbFriend.GetFriendListResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
W
wenxu12345 已提交
402
	}
W
wenxu12345 已提交
403
	var userInfoList []*sdkws.FriendInfo
W
wenxu12345 已提交
404
	for _, friendUser := range friends {
W
wenxu12345 已提交
405

W
wenxu12345 已提交
406
		var friendUserInfo sdkws.FriendInfo
W
wenxu12345 已提交
407
		utils.CopyStructFields(&friendUserInfo, friendUser)
W
wenxu12345 已提交
408 409
		userInfoList = append(userInfoList, &friendUserInfo)
	}
W
wenxu12345 已提交
410 411
	log.NewInfo(req.CommID.OperationID, "rpc GetFriendList ok", pbFriend.GetFriendListResp{FriendInfoList: userInfoList})
	return &pbFriend.GetFriendListResp{FriendInfoList: userInfoList}, nil
W
wenxu12345 已提交
412 413
}

W
wenxu12345 已提交
414
//received
W
wenxu12345 已提交
415
func (s *friendServer) GetFriendApplyList(ctx context.Context, req *pbFriend.GetFriendApplyListReq) (*pbFriend.GetFriendApplyListResp, error) {
W
wenxu12345 已提交
416 417 418 419
	log.NewInfo(req.CommID.OperationID, "GetFriendApplyList args ", req.String())
	//Parse token, to find current user information
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
420
		return &pbFriend.GetFriendApplyListResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
W
wenxu12345 已提交
421 422
	}
	//	Find the  current user friend applications received
W
wenxu12345 已提交
423
	ApplyUsersInfo, err := imdb.GetReceivedFriendsApplicationListByUserID(req.CommID.FromUserID)
W
wenxu12345 已提交
424
	if err != nil {
W
wenxu12345 已提交
425
		log.NewError(req.CommID.OperationID, "GetReceivedFriendsApplicationListByUserID ", err.Error(), req.CommID.FromUserID)
W
wenxu12345 已提交
426
		return &pbFriend.GetFriendApplyListResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
W
wenxu12345 已提交
427 428
	}

W
wenxu12345 已提交
429
	var appleUserList []*sdkws.FriendRequest
W
wenxu12345 已提交
430
	for _, applyUserInfo := range ApplyUsersInfo {
W
wenxu12345 已提交
431 432
		var userInfo sdkws.FriendRequest
		utils.CopyStructFields(&userInfo, applyUserInfo)
W
wenxu12345 已提交
433 434 435
		appleUserList = append(appleUserList, &userInfo)

	}
W
wenxu12345 已提交
436 437
	log.NewInfo(req.CommID.OperationID, "rpc GetFriendApplyList ok", pbFriend.GetFriendApplyListResp{FriendRequestList: appleUserList})
	return &pbFriend.GetFriendApplyListResp{FriendRequestList: appleUserList}, nil
W
wenxu12345 已提交
438 439
}

W
wenxu12345 已提交
440
func (s *friendServer) GetSelfApplyList(ctx context.Context, req *pbFriend.GetSelfApplyListReq) (*pbFriend.GetSelfApplyListResp, error) {
W
wenxu12345 已提交
441
	log.NewInfo(req.CommID.OperationID, "GetSelfApplyList args ", req.String())
W
wenxu12345 已提交
442

W
wenxu12345 已提交
443 444 445
	//Parse token, to find current user information
	if !token_verify.CheckAccess(req.CommID.OpUserID, req.CommID.FromUserID) {
		log.NewError(req.CommID.OperationID, "CheckAccess false ", req.CommID.OpUserID, req.CommID.FromUserID)
W
wenxu12345 已提交
446
		return &pbFriend.GetSelfApplyListResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}, nil
W
wenxu12345 已提交
447 448
	}
	//	Find the self add other userinfo
W
wenxu12345 已提交
449
	usersInfo, err := imdb.GetSendFriendApplicationListByUserID(req.CommID.FromUserID)
W
wenxu12345 已提交
450
	if err != nil {
W
wenxu12345 已提交
451
		log.NewError(req.CommID.OperationID, "GetSendFriendApplicationListByUserID failed ", err.Error(), req.CommID.FromUserID)
W
wenxu12345 已提交
452
		return &pbFriend.GetSelfApplyListResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, nil
W
wenxu12345 已提交
453
	}
W
wenxu12345 已提交
454
	var selfApplyOtherUserList []*sdkws.FriendRequest
W
wenxu12345 已提交
455
	for _, selfApplyOtherUserInfo := range usersInfo {
W
wenxu12345 已提交
456 457
		var userInfo sdkws.FriendRequest // pbFriend.ApplyUserInfo
		utils.CopyStructFields(&userInfo, selfApplyOtherUserInfo)
W
wenxu12345 已提交
458 459
		selfApplyOtherUserList = append(selfApplyOtherUserList, &userInfo)
	}
W
wenxu12345 已提交
460 461
	log.NewInfo(req.CommID.OperationID, "rpc GetSelfApplyList ok", pbFriend.GetSelfApplyListResp{FriendRequestList: selfApplyOtherUserList})
	return &pbFriend.GetSelfApplyListResp{FriendRequestList: selfApplyOtherUserList}, nil
W
wenxu12345 已提交
462
}