From 9e1b98743f49485d48795f996569024fabaaf3bb Mon Sep 17 00:00:00 2001 From: AndrewZuo01 <59896149+AndrewZuo01@users.noreply.github.com> Date: Tue, 28 Nov 2023 16:59:19 +0800 Subject: [PATCH 1/7] Update .env --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 6e7c337be..98ab6aff8 100644 --- a/.env +++ b/.env @@ -30,7 +30,7 @@ MINIO_ENDPOINT=http://172.28.0.1:10005 # Base URL for the application programming interface (API). # Default: API_URL=http://172.28.0.1:10002 -API_URL=http://125.124.195.201:10002 +API_URL=http://172.28.0.1:10002 # Directory path for storing data files or related information. # Default: DATA_DIR=./ From 1eb23d9874984114c490d683867ce1f863b89eaf Mon Sep 17 00:00:00 2001 From: AndrewZuo01 <59896149+AndrewZuo01@users.noreply.github.com> Date: Tue, 28 Nov 2023 17:00:47 +0800 Subject: [PATCH 2/7] Update .env --- .env | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.env b/.env index 98ab6aff8..9a86c940e 100644 --- a/.env +++ b/.env @@ -34,7 +34,7 @@ API_URL=http://172.28.0.1:10002 # Directory path for storing data files or related information. # Default: DATA_DIR=./ -DATA_DIR=/root/open-im-server +DATA_DIR=./ # Choose the appropriate image address, the default is GITHUB image, # you can choose docker hub, for Chinese users can choose Ali Cloud @@ -225,8 +225,8 @@ PROMETHEUS_PORT=19090 GRAFANA_ADDRESS=172.28.0.12 # Port on which Grafana service is running. -# Default: GRAFANA_PORT=13000 -GRAFANA_PORT=13000 +# Default: GRAFANA_PORT=3000 +GRAFANA_PORT=3000 # ====================================== # ============ OpenIM Web =============== From aafb6a18da9035ecf49ef20541051b9a6ae03fc8 Mon Sep 17 00:00:00 2001 From: AndrewZuo01 <59896149+AndrewZuo01@users.noreply.github.com> Date: Tue, 28 Nov 2023 17:03:00 +0800 Subject: [PATCH 3/7] Update callback.go --- internal/rpc/group/callback.go | 105 +++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/internal/rpc/group/callback.go b/internal/rpc/group/callback.go index 33b880aac..f2c4ae1eb 100644 --- a/internal/rpc/group/callback.go +++ b/internal/rpc/group/callback.go @@ -192,5 +192,110 @@ func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *group.SetGroupMe if resp.Ex != nil { req.Ex = wrapperspb.String(*resp.Ex) } +func CallbackAfterSetGroupMemberInfo(ctx context.Context, req *group.SetGroupMemberInfo) (err error) { + if !config.Config.Callback.CallbackBeforeSetGroupMemberInfo.Enable { + return nil + } + callbackReq := callbackstruct.CallbackAfterSetGroupMemberInfoReq{ + CallbackCommand: callbackstruct.CallbackBeforeSetGroupMemberInfoCommand, + GroupID: req.GroupID, + UserID: req.UserID, + } + if req.Nickname != nil { + callbackReq.Nickname = &req.Nickname.Value + } + if req.FaceURL != nil { + callbackReq.FaceURL = &req.FaceURL.Value + } + if req.RoleLevel != nil { + callbackReq.RoleLevel = &req.RoleLevel.Value + } + if req.Ex != nil { + callbackReq.Ex = &req.Ex.Value + } + resp := &callbackstruct.CallbackAfterSetGroupMemberInfoResp{} + if err = http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, callbackReq, resp, config.Config.Callback.CallbackBeforeSetGroupMemberInfo); err != nil { + return err + } + return nil +} + +func CallbackQuitGroup(ctx context.Context, req *group.QuitGroupReq) (err error) { + if !config.Config.Callback.CallbackQuitGroup.Enable { + return nil + } + cbReq := &callbackstruct.CallbackQuitGroupReq{ + CallbackCommand: callbackstruct.CallbackQuitGroupCommand, + GroupID: req.GroupID, + UserID: req.UserID, + } + resp := &callbackstruct.CallbackQuitGroupResp{} + if err = http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, cbReq, resp, config.Config.Callback.CallbackQuitGroup); err != nil { + return err + } + return nil +} + +func CallbackKillGroupMember(ctx context.Context, req *pbgroup.KickGroupMemberReq) (err error) { + if !config.Config.Callback.CallbackKillGroupMember.Enable { + return nil + } + cbReq := &callbackstruct.CallbackKillGroupMemberReq{ + CallbackCommand: callbackstruct.CallbackKillGroupCommand, + GroupID: req.GroupID, + KickedUserIDs: req.KickedUserIDs, + } + resp := &callbackstruct.CallbackKillGroupMemberResp{} + if err = http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, cbReq, resp, config.Config.Callback.CallbackQuitGroup); err != nil { + return err + } + return nil +} + +func CallbackDismissGroup(ctx context.Context, req *callbackstruct.CallbackDisMissGroupReq) (err error) { + if !config.Config.Callback.CallbackDismissGroup.Enable { + return nil + } + req.CallbackCommand = callbackstruct.CallbackDisMissGroupCommand + resp := &callbackstruct.CallbackDisMissGroupResp{} + if err = http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackQuitGroup); err != nil { + return err + } + return nil +} + +func CallbackApplyJoinGroupBefore(ctx context.Context, req *callbackstruct.CallbackJoinGroupReq) (err error) { + if !config.Config.Callback.CallbackBeforeJoinGroup.Enable { + return nil + } + + req.CallbackCommand = callbackstruct.CallbackBeforeJoinGroupCommand + + resp := &callbackstruct.CallbackJoinGroupResp{} + if err = http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackBeforeJoinGroup); err != nil { + return err + } + + return nil +} + +func CallbackTransferGroupOwnerAfter(ctx context.Context, req *pbgroup.TransferGroupOwnerReq) (err error) { + if !config.Config.Callback.CallbackTransferGroupOwnerAfter.Enable { + return nil + } + + cbReq := &callbackstruct.CallbackTransferGroupOwnerReq{ + CallbackCommand: callbackstruct.CallbackTransferGroupOwnerAfter, + GroupID: req.GroupID, + OldOwnerUserID: req.OldOwnerUserID, + NewOwnerUserID: req.NewOwnerUserID, + } + + resp := &callbackstruct.CallbackTransferGroupOwnerResp{} + if err = http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, cbReq, resp, config.Config.Callback.CallbackBeforeJoinGroup); err != nil { + return err + } + return nil +} return nil } From f916f6bec1a2c7a9a308ca28ef6a1930ee021608 Mon Sep 17 00:00:00 2001 From: AndrewZuo01 <59896149+AndrewZuo01@users.noreply.github.com> Date: Tue, 28 Nov 2023 17:03:33 +0800 Subject: [PATCH 4/7] Update callback.go --- internal/rpc/msg/callback.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index b35aa0815..3371bf7a7 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -163,3 +163,29 @@ func callbackMsgModify(ctx context.Context, msg *pbchat.SendMsgReq) error { log.ZDebug(ctx, "callbackMsgModify", "msg", msg.MsgData) return nil } +func CallbackGroupMsgRead(ctx context.Context, req *cbapi.CallbackGroupMsgReadReq) error { + if !config.Config.Callback.CallbackGroupMsgRead.Enable || req.ContentType != constant.Text { + return nil + } + req.CallbackCommand = cbapi.CallbackGroupMsgReadCommand + + resp := &cbapi.CallbackGroupMsgReadResp{} + if err := http.CallBackPostReturn(ctx, cbURL(), req, resp, config.Config.Callback.CallbackMsgModify); err != nil { + return err + } + return nil +} + +func CallbackSingleMsgRead(ctx context.Context, req *cbapi.CallbackSingleMsgReadReq) error { + if !config.Config.Callback.CallbackSingleMsgRead.Enable || req.ContentType != constant.Text { + return nil + } + req.CallbackCommand = cbapi.CallbackSingleMsgRead + + resp := &cbapi.CallbackGroupMsgReadResp{} + + if err := http.CallBackPostReturn(ctx, cbURL(), req, resp, config.Config.Callback.CallbackMsgModify); err != nil { + return err + } + return nil +} From 15729e8b5e44b0a0c752afe5c68837ddb01f7c63 Mon Sep 17 00:00:00 2001 From: AndrewZuo01 <59896149+AndrewZuo01@users.noreply.github.com> Date: Tue, 28 Nov 2023 17:15:08 +0800 Subject: [PATCH 5/7] Update .env --- .env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env b/.env index 9a86c940e..518cad3db 100644 --- a/.env +++ b/.env @@ -108,8 +108,8 @@ NODE_EXPORTER_NETWORK_ADDRESS=172.28.0.13 OPENIM_ADMIN_FRONT_NETWORK_ADDRESS=172.28.0.14 # Address or hostname for the alertmanager network. -# Default: ALERT_MANAGER_NETWORK_ADDRESS=172.28.0.15 -ALERT_MANAGER_NETWORK_ADDRESS=172.28.0.15 +# Default: ALERT_MANAGER_NETWORK_ADDRESS=172.28.0.14 +ALERT_MANAGER_NETWORK_ADDRESS=172.28.0.14 # =============================================== # = Component Extension Configuration = # =============================================== From 57fe356414b9abb29cd45f9cbf36e82a3f094451 Mon Sep 17 00:00:00 2001 From: AndrewZuo01 <59896149+AndrewZuo01@users.noreply.github.com> Date: Tue, 28 Nov 2023 17:16:11 +0800 Subject: [PATCH 6/7] Update .env --- .env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env b/.env index 518cad3db..8213b9e3c 100644 --- a/.env +++ b/.env @@ -303,8 +303,8 @@ NODE_EXPORTER_PORT=19100 PROMETHEUS_PORT=19090 # Port for the grafana. -# Default: GRAFANA_PORT=13000 -GRAFANA_PORT=13000 +# Default: GRAFANA_PORT=3000 +GRAFANA_PORT=3000 # Port for the admin front. # Default: OPENIM_ADMIN_FRONT_PORT=11002 From 54db5c6fd473197eef6dd23dd6c95a0054bad6e0 Mon Sep 17 00:00:00 2001 From: AndrewZuo01 Date: Tue, 28 Nov 2023 17:49:03 +0800 Subject: [PATCH 7/7] fix: merge --- deployments/templates/openim.yaml | 20 ++--- internal/rpc/group/callback.go | 142 ++++++++++++++++++++++++++++++ internal/rpc/msg/callback.go | 24 ++++- pkg/callbackstruct/friend.go | 11 --- pkg/callbackstruct/group.go | 27 ------ 5 files changed, 173 insertions(+), 51 deletions(-) diff --git a/deployments/templates/openim.yaml b/deployments/templates/openim.yaml index 70ec5843b..824754df4 100644 --- a/deployments/templates/openim.yaml +++ b/deployments/templates/openim.yaml @@ -434,37 +434,37 @@ callback: timeout: ${CALLBACK_TIMEOUT} failedContinue: ${CALLBACK_FAILED_CONTINUE} afterGroupMsgRead: - enable: false - timeout: 5 - failedContinue: true + enable: ${CALLBACK_ENABLE} + timeout: ${CALLBACK_TIMEOUT} + failedContinue: ${CALLBACK_FAILED_CONTINUE} afterGroupMsgRevoke: - enable: false + enable: ${CALLBACK_ENABLE} timeout: 5 failedContinue: true afterJoinGroup: - enable: false + enable: ${CALLBACK_ENABLE} timeout: 5 failedContinue: true beforeInviteUserToGroup: - enable: false + enable: ${CALLBACK_ENABLE} timeout: 5 failedContinue: true joinGroupAfter: - enable: false + enable: ${CALLBACK_ENABLE} timeout: 5 failedContinue: true ##TODO CALLBACK setGroupInfoAfter: - enable: false + enable: ${CALLBACK_ENABLE} timeout: 5 failedContinue: true setGroupInfoBefore: - enable: false + enable: ${CALLBACK_ENABLE} timeout: 5 failedContinue: true revokeMsgAfter: - enable: false + enable: ${CALLBACK_ENABLE} timeout: 5 failedContinue: true addBlackBefore: diff --git a/internal/rpc/group/callback.go b/internal/rpc/group/callback.go index f2c4ae1eb..aae871284 100644 --- a/internal/rpc/group/callback.go +++ b/internal/rpc/group/callback.go @@ -16,6 +16,7 @@ package group import ( "context" + "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/log" "time" @@ -192,6 +193,8 @@ func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *group.SetGroupMe if resp.Ex != nil { req.Ex = wrapperspb.String(*resp.Ex) } + return nil +} func CallbackAfterSetGroupMemberInfo(ctx context.Context, req *group.SetGroupMemberInfo) (err error) { if !config.Config.Callback.CallbackBeforeSetGroupMemberInfo.Enable { return nil @@ -297,5 +300,144 @@ func CallbackTransferGroupOwnerAfter(ctx context.Context, req *pbgroup.TransferG } return nil } +func CallbackBeforeInviteUserToGroup(ctx context.Context, req *group.InviteUserToGroupReq) (err error) { + if !config.Config.Callback.CallbackBeforeInviteUserToGroup.Enable { + return nil + } + + callbackReq := &callbackstruct.CallbackBeforeInviteUserToGroupReq{ + CallbackCommand: callbackstruct.CallbackBeforeInviteJoinGroupCommand, + OperationID: mcontext.GetOperationID(ctx), + GroupID: req.GroupID, + Reason: req.Reason, + InvitedUserIDs: req.InvitedUserIDs, + } + + resp := &callbackstruct.CallbackBeforeInviteUserToGroupResp{} + err = http.CallBackPostReturn( + ctx, + config.Config.Callback.CallbackUrl, + callbackReq, + resp, + config.Config.Callback.CallbackBeforeInviteUserToGroup, + ) + + if err != nil { + return err + } + + if len(resp.RefusedMembersAccount) > 0 { + // Handle the scenario where certain members are refused + // You might want to update the req.Members list or handle it as per your business logic + } + utils.StructFieldNotNilReplace(req, resp) + + return nil +} + +func CallbackAfterJoinGroup(ctx context.Context, req *group.JoinGroupReq) error { + if !config.Config.Callback.CallbackAfterJoinGroup.Enable { + return nil + } + callbackReq := &callbackstruct.CallbackAfterJoinGroupReq{ + CallbackCommand: callbackstruct.CallbackAfterJoinGroupCommand, + OperationID: mcontext.GetOperationID(ctx), + GroupID: req.GroupID, + ReqMessage: req.ReqMessage, + JoinSource: req.JoinSource, + InviterUserID: req.InviterUserID, + } + resp := &callbackstruct.CallbackAfterJoinGroupResp{} + if err := http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, callbackReq, resp, config.Config.Callback.CallbackAfterJoinGroup); err != nil { + if err == errs.ErrCallbackContinue { + return nil + } + return err + } + return nil +} + +func CallbackBeforeSetGroupInfo(ctx context.Context, req *group.SetGroupInfoReq) error { + if !config.Config.Callback.CallbackBeforeSetGroupInfo.Enable { + return nil + } + callbackReq := &callbackstruct.CallbackBeforeSetGroupInfoReq{ + CallbackCommand: callbackstruct.CallbackBeforeSetGroupInfoCommand, + GroupID: req.GroupInfoForSet.GroupID, + Notification: req.GroupInfoForSet.Notification, + Introduction: req.GroupInfoForSet.Introduction, + FaceURL: req.GroupInfoForSet.FaceURL, + GroupName: req.GroupInfoForSet.GroupName, + } + + if req.GroupInfoForSet.Ex != nil { + callbackReq.Ex = req.GroupInfoForSet.Ex.Value + } + log.ZDebug(ctx, "debug CallbackBeforeSetGroupInfo", callbackReq.Ex) + if req.GroupInfoForSet.NeedVerification != nil { + callbackReq.NeedVerification = req.GroupInfoForSet.NeedVerification.Value + } + if req.GroupInfoForSet.LookMemberInfo != nil { + callbackReq.LookMemberInfo = req.GroupInfoForSet.LookMemberInfo.Value + } + if req.GroupInfoForSet.ApplyMemberFriend != nil { + callbackReq.ApplyMemberFriend = req.GroupInfoForSet.ApplyMemberFriend.Value + } + resp := &callbackstruct.CallbackBeforeSetGroupInfoResp{} + + if err := http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, callbackReq, resp, config.Config.Callback.CallbackBeforeSetGroupInfo); err != nil { + if err == errs.ErrCallbackContinue { + return nil + } + return err + } + + if resp.Ex != nil { + req.GroupInfoForSet.Ex = wrapperspb.String(*resp.Ex) + } + if resp.NeedVerification != nil { + req.GroupInfoForSet.NeedVerification = wrapperspb.Int32(*resp.NeedVerification) + } + if resp.LookMemberInfo != nil { + req.GroupInfoForSet.LookMemberInfo = wrapperspb.Int32(*resp.LookMemberInfo) + } + if resp.ApplyMemberFriend != nil { + req.GroupInfoForSet.ApplyMemberFriend = wrapperspb.Int32(*resp.ApplyMemberFriend) + } + utils.StructFieldNotNilReplace(req, resp) + return nil +} +func CallbackAfterSetGroupInfo(ctx context.Context, req *group.SetGroupInfoReq) error { + if !config.Config.Callback.CallbackAfterSetGroupInfo.Enable { + return nil + } + callbackReq := &callbackstruct.CallbackAfterSetGroupInfoReq{ + CallbackCommand: callbackstruct.CallbackAfterSetGroupInfoCommand, + GroupID: req.GroupInfoForSet.GroupID, + Notification: req.GroupInfoForSet.Notification, + Introduction: req.GroupInfoForSet.Introduction, + FaceURL: req.GroupInfoForSet.FaceURL, + GroupName: req.GroupInfoForSet.GroupName, + } + if req.GroupInfoForSet.Ex != nil { + callbackReq.Ex = &req.GroupInfoForSet.Ex.Value + } + if req.GroupInfoForSet.NeedVerification != nil { + callbackReq.NeedVerification = &req.GroupInfoForSet.NeedVerification.Value + } + if req.GroupInfoForSet.LookMemberInfo != nil { + callbackReq.LookMemberInfo = &req.GroupInfoForSet.LookMemberInfo.Value + } + if req.GroupInfoForSet.ApplyMemberFriend != nil { + callbackReq.ApplyMemberFriend = &req.GroupInfoForSet.ApplyMemberFriend.Value + } + resp := &callbackstruct.CallbackAfterSetGroupInfoResp{} + if err := http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, callbackReq, resp, config.Config.Callback.CallbackAfterSetGroupInfo); err != nil { + if err == errs.ErrCallbackContinue { + return nil + } + return err + } + utils.StructFieldNotNilReplace(req, resp) return nil } diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index 3371bf7a7..8cdba0add 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -17,16 +17,14 @@ package msg import ( "context" "github.com/OpenIMSDK/protocol/sdkws" + "github.com/OpenIMSDK/tools/errs" "google.golang.org/protobuf/proto" "github.com/OpenIMSDK/protocol/constant" pbchat "github.com/OpenIMSDK/protocol/msg" - "github.com/OpenIMSDK/tools/errs" "github.com/OpenIMSDK/tools/log" "github.com/OpenIMSDK/tools/mcontext" "github.com/OpenIMSDK/tools/utils" - "google.golang.org/protobuf/proto" - cbapi "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct" "github.com/openimsdk/open-im-server/v3/pkg/common/config" @@ -189,3 +187,23 @@ func CallbackSingleMsgRead(ctx context.Context, req *cbapi.CallbackSingleMsgRead } return nil } +func CallbackAfterRevokeMsg(ctx context.Context, req *pbchat.RevokeMsgReq) error { + if !config.Config.Callback.CallbackAfterRevokeMsg.Enable { + return nil + } + callbackReq := &cbapi.CallbackAfterRevokeMsgReq{ + CallbackCommand: cbapi.CallbackAfterRevokeMsgCommand, + ConversationID: req.ConversationID, + Seq: req.Seq, + UserID: req.UserID, + } + resp := &cbapi.CallbackAfterSendGroupMsgResp{} + if err := http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, callbackReq, resp, config.Config.Callback.CallbackAfterSetGroupInfo); err != nil { + if err == errs.ErrCallbackContinue { + return nil + } + return err + } + utils.StructFieldNotNilReplace(req, resp) + return nil +} diff --git a/pkg/callbackstruct/friend.go b/pkg/callbackstruct/friend.go index 4c88d928a..a15e96913 100644 --- a/pkg/callbackstruct/friend.go +++ b/pkg/callbackstruct/friend.go @@ -35,17 +35,6 @@ type CallBackAddFriendReplyBeforeResp struct { CommonCallbackResp } -type CallbackAfterAddFriendReq struct { - CallbackCommand `json:"callbackCommand"` - FromUserID string `json:"fromUserID" ` - ToUserID string `json:"toUserID"` - ReqMsg string `json:"reqMsg"` -} - -type CallbackAfterAddFriendResp struct { - CommonCallbackResp -} - type CallbackBeforeSetFriendRemarkReq struct { CallbackCommand `json:"callbackCommand"` OwnerUserID string `json:"ownerUserID"` diff --git a/pkg/callbackstruct/group.go b/pkg/callbackstruct/group.go index 65d9b62c6..fa7ad7f1a 100644 --- a/pkg/callbackstruct/group.go +++ b/pkg/callbackstruct/group.go @@ -132,33 +132,6 @@ type CallbackAfterUngroupReq struct { type CallbackAfterUngroupResp struct { CommonCallbackResp } - -type CallbackAfterSetGroupInfoReq struct { - CallbackCommand `json:"callbackCommand"` - GroupID string `json:"groupID"` - GroupType *int32 `json:"groupType"` - UserID string `json:"userID"` - Name string `json:"name"` - Notification string `json:"notification"` - GroupUrl string `json:"groupUrl"` -} - -type CallbackAfterSetGroupInfoResp struct { - CommonCallbackResp -} - -type CallbackAfterRevokeMsgReq struct { - CallbackCommand `json:"callbackCommand"` - GroupID string `json:"groupID"` - GroupType *int32 `json:"groupType"` - UserID string `json:"userID"` - Content string `json:"content"` -} - -type CallbackAfterRevokeMsgResp struct { - CommonCallbackResp -} - type CallbackQuitGroupReq struct { CallbackCommand `json:"callbackCommand"` GroupID string `json:"groupID"`