Merge branch 'v2.3.0release' of github.com:OpenIMSDK/Open-IM-Server into v2.3.0release

This commit is contained in:
wangchuxiao 2022-09-27 15:35:50 +08:00
commit 79999edcea
27 changed files with 556 additions and 618 deletions

2
go.mod
View File

@ -24,7 +24,7 @@ require (
github.com/go-playground/validator/v10 v10.11.0 github.com/go-playground/validator/v10 v10.11.0
github.com/go-redis/redis/v8 v8.11.5 github.com/go-redis/redis/v8 v8.11.5
github.com/gogo/protobuf v1.3.2 github.com/gogo/protobuf v1.3.2
github.com/golang-jwt/jwt/v4 v4.1.0 github.com/golang-jwt/jwt/v4 v4.4.2
github.com/golang/protobuf v1.5.2 github.com/golang/protobuf v1.5.2
github.com/gorilla/websocket v1.4.2 github.com/gorilla/websocket v1.4.2
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0

4
go.sum
View File

@ -249,8 +249,8 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v4 v4.1.0 h1:XUgk2Ex5veyVFVeLm0xhusUTQybEbexJXrvPNOKkSY0= github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs=
github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=

View File

@ -80,7 +80,7 @@ func SendMsg(c *gin.Context) {
} }
client := pbChat.NewMsgClient(etcdConn) client := pbChat.NewMsgClient(etcdConn)
log.Info("", "", "api SendMsg call, api call rpc...") log.Info(params.OperationID, "", "api SendMsg call, api call rpc...")
reply, err := client.SendMsg(context.Background(), pbData) reply, err := client.SendMsg(context.Background(), pbData)
if err != nil { if err != nil {

View File

@ -62,7 +62,7 @@ func callbackOfflinePush(operationID string, userIDList []string, msg *commonPb.
func callbackOnlinePush(operationID string, userIDList []string, msg *commonPb.MsgData) cbApi.CommonCallbackResp { func callbackOnlinePush(operationID string, userIDList []string, msg *commonPb.MsgData) cbApi.CommonCallbackResp {
callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
if !config.Config.Callback.CallbackOnlinePush.Enable { if !config.Config.Callback.CallbackOnlinePush.Enable || utils.IsContain(msg.SendID, userIDList) {
return callbackResp return callbackResp
} }
req := cbApi.CallbackBeforePushReq{ req := cbApi.CallbackBeforePushReq{
@ -96,6 +96,11 @@ func callbackOnlinePush(operationID string, userIDList []string, msg *commonPb.M
return callbackResp return callbackResp
} }
} }
if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow {
if resp.OfflinePushInfo != nil {
msg.OfflinePushInfo = resp.OfflinePushInfo
}
}
return callbackResp return callbackResp
} }
@ -133,8 +138,13 @@ func callbackBeforeSuperGroupOnlinePush(operationID string, groupID string, msg
return callbackResp return callbackResp
} }
} }
if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow && len(resp.UserIDList) != 0 { if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow {
*pushToUserList = resp.UserIDList if len(resp.UserIDList) != 0 {
*pushToUserList = resp.UserIDList
}
if resp.OfflinePushInfo != nil {
msg.OfflinePushInfo = resp.OfflinePushInfo
}
} }
log.NewDebug(operationID, utils.GetSelfFuncName(), pushToUserList, resp.UserIDList) log.NewDebug(operationID, utils.GetSelfFuncName(), pushToUserList, resp.UserIDList)
return callbackResp return callbackResp

View File

@ -56,6 +56,19 @@ func (rpc *rpcAuth) UserToken(_ context.Context, req *pbAuth.UserTokenReq) (*pbA
return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil return &pbAuth.UserTokenResp{CommonResp: &pbAuth.CommonResp{}, Token: tokens, ExpiredTime: expTime}, nil
} }
func (rpc *rpcAuth) ParseToken(_ context.Context, req *pbAuth.ParseTokenReq) (*pbAuth.ParseTokenResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String())
claims, err := token_verify.ParseToken(req.Token, req.OperationID)
if err != nil {
errMsg := "ParseToken failed " + err.Error() + req.OperationID + " token " + req.Token
log.Error(req.OperationID, errMsg, "token:", req.Token)
return &pbAuth.ParseTokenResp{CommonResp: &pbAuth.CommonResp{ErrCode: 4001, ErrMsg: errMsg}}, nil
}
resp := pbAuth.ParseTokenResp{CommonResp: &pbAuth.CommonResp{}, UserID: claims.UID, Platform: claims.Platform, ExpireTimeSeconds: uint32(claims.ExpiresAt.Unix())}
log.Info(req.OperationID, utils.GetSelfFuncName(), " rpc return ", resp.String())
return &resp, nil
}
func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) { func (rpc *rpcAuth) ForceLogout(_ context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String()) log.NewInfo(req.OperationID, utils.GetSelfFuncName(), " rpc args ", req.String())
if !token_verify.IsManagerUserID(req.OpUserID) { if !token_verify.IsManagerUserID(req.OpUserID) {

View File

@ -1 +0,0 @@
package auth

View File

@ -933,6 +933,7 @@ func Notification(n *NotificationMsg) {
log.NewError(req.OperationID, "SendMsg rpc failed, ", req.String(), reply.ErrCode, reply.ErrMsg) log.NewError(req.OperationID, "SendMsg rpc failed, ", req.String(), reply.ErrCode, reply.ErrMsg)
} }
} }
func getOnlineAndOfflineUserIDList(memberList []string, m map[string][]string, operationID string) { func getOnlineAndOfflineUserIDList(memberList []string, m map[string][]string, operationID string) {
var onllUserIDList, offlUserIDList []string var onllUserIDList, offlUserIDList []string
var wsResult []*pbRelay.GetUsersOnlineStatusResp_SuccessResult var wsResult []*pbRelay.GetUsersOnlineStatusResp_SuccessResult

View File

@ -34,5 +34,6 @@ type CallbackBeforeSuperGroupOnlinePushReq struct {
type CallbackBeforeSuperGroupOnlinePushResp struct { type CallbackBeforeSuperGroupOnlinePushResp struct {
*CommonCallbackResp *CommonCallbackResp
UserIDList []string `json:"userIDList"` UserIDList []string `json:"userIDList"`
OfflinePushInfo *commonPb.OfflinePushInfo `json:"offlinePushInfo"`
} }

View File

@ -98,7 +98,7 @@ func init() {
fmt.Println("send_id", "-send_time", "index create failed", err.Error()) fmt.Println("send_id", "-send_time", "index create failed", err.Error())
panic(err.Error()) panic(err.Error())
} }
if err := createMongoIndex(mongoClient, cChat, true, "uid"); err != nil { if err := createMongoIndex(mongoClient, cChat, false, "uid"); err != nil {
fmt.Println("uid", " index create failed", err.Error()) fmt.Println("uid", " index create failed", err.Error())
panic(err.Error()) panic(err.Error())
} }

View File

@ -179,19 +179,6 @@ func ParseTokenGetUserID(token string, operationID string) (error, string) {
func ParseToken(tokensString, operationID string) (claims *Claims, err error) { func ParseToken(tokensString, operationID string) (claims *Claims, err error) {
claims, err = GetClaimFromToken(tokensString) claims, err = GetClaimFromToken(tokensString)
if err != nil { if err != nil {
//if errors.Is(err, constant.ErrTokenUnknown) {
// errMsg := "GetClaimFromToken failed ErrTokenUnknown " + err.Error()
// log.Error(operationID, errMsg)
//}
//info := err.(constant.ErrInfo)
//log.Error(operationID, "detail info , ", info.ErrCode, info.ErrMsg)
//
//e := errors.Unwrap(err)
//if errors.Is(e, constant.ErrTokenUnknown) {
// errMsg := "ParseToken failed ErrTokenUnknown " + e.Error()
// log.Error(operationID, errMsg)
//}
return nil, utils.Wrap(err, "") return nil, utils.Wrap(err, "")
} }

View File

@ -1,6 +1,6 @@
syntax = "proto3"; syntax = "proto3";
option go_package = "./admin_cms;admin_cms"; option go_package = "Open_IM/pkg/proto/admin_cms;admin_cms";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
package admin_cms; package admin_cms;

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
package pbAuth; package pbAuth;
option go_package = "./auth;pbAuth"; option go_package = "Open_IM/pkg/proto/auth;pbAuth";
message CommonResp{ message CommonResp{
int32 errCode = 1; int32 errCode = 1;
@ -42,6 +42,18 @@ message ForceLogoutResp {
CommonResp CommonResp = 1; CommonResp CommonResp = 1;
} }
message ParseTokenReq{
string token = 1;
string operationID = 2;
}
message ParseTokenResp{
string userID = 1;
string platform = 2;
CommonResp commonResp = 3;
uint32 expireTimeSeconds = 4;
}
@ -50,4 +62,7 @@ service Auth {
rpc UserRegister(UserRegisterReq) returns(UserRegisterResp); rpc UserRegister(UserRegisterReq) returns(UserRegisterResp);
rpc UserToken(UserTokenReq) returns(UserTokenResp); rpc UserToken(UserTokenReq) returns(UserTokenResp);
rpc ForceLogout(ForceLogoutReq) returns(ForceLogoutResp); rpc ForceLogout(ForceLogoutReq) returns(ForceLogoutResp);
rpc ParseToken(ParseTokenReq)returns(ParseTokenResp);
} }

View File

@ -6,12 +6,25 @@ for ((i = 0; i < ${#all_proto[*]}; i++)); do
proto=${all_proto[$i]} proto=${all_proto[$i]}
protoc -I ../../../ -I ./ --go_out=plugins=grpc:. $proto protoc -I ../../../ -I ./ --go_out=plugins=grpc:. $proto
s=`echo $proto | sed 's/ //g'`
v=${s//proto/pb.go}
protoc-go-inject-tag -input=./$v
echo "protoc --go_out=plugins=grpc:." $proto echo "protoc --go_out=plugins=grpc:." $proto
done done
echo "proto file generate success..." echo "proto file generate success"
j=0
for file in $(find ./Open_IM -name "*.go"); do # Not recommended, will break on whitespace
filelist[j]=$file
j=`expr $j + 1`
done
for ((i = 0; i < ${#filelist[*]}; i++)); do
proto=${filelist[$i]}
cp $proto ${proto#*./Open_IM/pkg/proto/}
done
rm Open_IM -rf
#find ./ -type f -path "*.pb.go"|xargs sed -i 's/\".\/sdk_ws\"/\"Open_IM\/pkg\/proto\/sdk_ws\"/g'
find ./ -type f -path "*.pb.go"|xargs sed -i 's/\".\/sdk_ws\"/\"Open_IM\/pkg\/proto\/sdk_ws\"/g'

View File

@ -1,6 +1,5 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; option go_package = "Open_IM/pkg/proto/cache;cache";
option go_package = "./cache;cache";
package cache; package cache;
message CommonResp{ message CommonResp{

View File

@ -1,5 +1,5 @@
syntax = "proto3"; syntax = "proto3";
option go_package = "./conversation;conversation"; option go_package = "Open_IM/pkg/proto/conversation;conversation";
package conversation; package conversation;
message CommonResp{ message CommonResp{

View File

@ -1,6 +1,6 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
option go_package = "./friend;friend"; option go_package = "Open_IM/pkg/proto/friend;friend";
package friend; package friend;
message CommonResp{ message CommonResp{
@ -167,6 +167,6 @@ service friend{
rpc setFriendRemark(SetFriendRemarkReq) returns(SetFriendRemarkResp); rpc setFriendRemark(SetFriendRemarkReq) returns(SetFriendRemarkResp);
rpc importFriend(ImportFriendReq) returns(ImportFriendResp); rpc importFriend(ImportFriendReq) returns(ImportFriendResp);
rpc CheckFriendFromCache(IsFriendReq) returns(IsFriendResp); // rpc CheckFriendFromCache(IsFriendReq) returns(IsFriendResp);
rpc CheckBlockFromCache(IsInBlackListReq) returns(IsFriendResp); // rpc CheckBlockFromCache(IsInBlackListReq) returns(IsFriendResp);
} }

View File

@ -1,7 +1,7 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
import "Open_IM/pkg/proto/sdk_ws/wrappers.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/wrappers.proto";
option go_package = "./group;group"; option go_package = "Open_IM/pkg/proto/group;group";
package group; package group;
message CommonResp{ message CommonResp{

View File

@ -1,6 +1,6 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
option go_package = "./msg;msg"; option go_package = "Open_IM/pkg/proto/msg;msg";
package msg; package msg;
message MsgDataToMQ{ message MsgDataToMQ{
@ -131,6 +131,9 @@ message DelSuperGroupMsgResp{
int32 errCode = 1; int32 errCode = 1;
string errMsg = 2; string errMsg = 2;
} }
service msg { service msg {
rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp); rpc GetMaxAndMinSeq(server_api_params.GetMaxAndMinSeqReq) returns(server_api_params.GetMaxAndMinSeqResp);
rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp); rpc PullMessageBySeqList(server_api_params.PullMessageBySeqListReq) returns(server_api_params.PullMessageBySeqListResp);
@ -141,4 +144,5 @@ service msg {
rpc SetMsgMinSeq(SetMsgMinSeqReq) returns(SetMsgMinSeqResp); rpc SetMsgMinSeq(SetMsgMinSeqReq) returns(SetMsgMinSeqResp);
rpc SetSendMsgStatus(SetSendMsgStatusReq) returns(SetSendMsgStatusResp); rpc SetSendMsgStatus(SetSendMsgStatusReq) returns(SetSendMsgStatusResp);
rpc GetSendMsgStatus(GetSendMsgStatusReq) returns(GetSendMsgStatusResp); rpc GetSendMsgStatus(GetSendMsgStatusReq) returns(GetSendMsgStatusResp);
} }

View File

@ -1,6 +1,6 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
option go_package = "./office;office"; option go_package = "Open_IM/pkg/proto/office;office";
package office; package office;
message CommonResp{ message CommonResp{

View File

@ -1,6 +1,6 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
option go_package = "./organization;organization"; option go_package = "Open_IM/pkg/proto/organization;organization";
package organization; package organization;

View File

@ -8,9 +8,12 @@ all_proto=(
group/group.proto group/group.proto
user/user.proto user/user.proto
rtc/rtc.proto rtc/rtc.proto
chat/chat.proto msg/msg.proto
push/push.proto push/push.proto
relay/relay.proto relay/relay.proto
sdk_ws/ws.proto sdk_ws/ws.proto
conversation/conversation.proto conversation/conversation.proto
office/office.proto
cache/cache.proto
organization/organization.proto
) )

View File

@ -1,6 +1,6 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
option go_package = "./push;pbPush"; option go_package = "Open_IM/pkg/proto/push;pbPush";
package push; package push;
message PushMsgReq { message PushMsgReq {

View File

@ -1,6 +1,6 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
option go_package = "./relay;pbRelay"; option go_package = "Open_IM/pkg/proto/relay;pbRelay";
package relay; package relay;
message OnlinePushMsgReq { message OnlinePushMsgReq {

View File

@ -1,5 +1,5 @@
syntax = "proto3"; syntax = "proto3";
option go_package = "./rtc;rtc"; option go_package = "Open_IM/pkg/proto/rtc;rtc";
package proto; package proto;
message CommonResp{ message CommonResp{

View File

@ -1,6 +1,6 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/wrappers.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/wrappers.proto";
option go_package = "./sdk_ws;server_api_params"; option go_package = "Open_IM/pkg/proto/sdk_ws;server_api_params";
package server_api_params; package server_api_params;

View File

@ -1,7 +1,7 @@
syntax = "proto3"; syntax = "proto3";
import "Open_IM/pkg/proto/sdk_ws/ws.proto"; import "Open-IM-Server/pkg/proto/sdk_ws/ws.proto";
import "Open_IM/pkg/proto/conversation/conversation.proto"; import "Open-IM-Server/pkg/proto/conversation/conversation.proto";
option go_package = "./user;user"; option go_package = "Open_IM/pkg/proto/user;user";
package user; package user;
message CommonResp{ message CommonResp{