fix: link group invitations to join requests
This commit is contained in:
+16
-5
@@ -5297,12 +5297,12 @@ func serveIMGroupInvitations(wrt http.ResponseWriter, req *http.Request, topic s
|
||||
return
|
||||
}
|
||||
access := selfSub.ModeGiven & selfSub.ModeWant
|
||||
settings, err := store.GroupBusiness.GetSettings(principal.TenantID, topic)
|
||||
if err != nil {
|
||||
writeIMRelationError(wrt, req, err)
|
||||
return
|
||||
}
|
||||
if !access.IsAdmin() {
|
||||
settings, err := store.GroupBusiness.GetSettings(principal.TenantID, topic)
|
||||
if err != nil {
|
||||
writeIMRelationError(wrt, req, err)
|
||||
return
|
||||
}
|
||||
if settings == nil || !settings.MemberInvite {
|
||||
writeIMError(wrt, req, http.StatusForbidden, 30005, imReasonPermissionDenied, "member invitation is disabled", nil)
|
||||
return
|
||||
@@ -5351,6 +5351,10 @@ func serveIMGroupInvitations(wrt http.ResponseWriter, req *http.Request, topic s
|
||||
} else {
|
||||
idempotencyKey = invitationID
|
||||
}
|
||||
joinRequestID := ""
|
||||
if settings != nil && settings.JoinApproval {
|
||||
joinRequestID = "gjr_" + store.Store.GetUidString()
|
||||
}
|
||||
inv, err := store.GroupBusiness.CreateInvitation(principal.TenantID, &types.GroupInvitation{
|
||||
InvitationID: invitationID,
|
||||
Topic: topic,
|
||||
@@ -5359,6 +5363,7 @@ func serveIMGroupInvitations(wrt http.ResponseWriter, req *http.Request, topic s
|
||||
Message: strings.TrimSpace(body.Message),
|
||||
Status: types.GroupInvitationStatusPending,
|
||||
Result: "",
|
||||
JoinRequestID: joinRequestID,
|
||||
IdempotencyKey: idempotencyKey,
|
||||
ExpiresAt: now.Add(7 * 24 * time.Hour),
|
||||
CreatedAt: now,
|
||||
@@ -5373,6 +5378,9 @@ func serveIMGroupInvitations(wrt http.ResponseWriter, req *http.Request, topic s
|
||||
item["invitation_id"] = inv.InvitationID
|
||||
item["status"] = inv.Status
|
||||
item["expires_at"] = inv.ExpiresAt.Format(time.RFC3339Nano)
|
||||
if inv.JoinRequestID != "" {
|
||||
item["join_request_id"] = inv.JoinRequestID
|
||||
}
|
||||
if imReliableHTTPEventsEnabled(req) {
|
||||
publishIMConversationSystemNotice(principal.TenantID, principal.Uid.P2PName(uid),
|
||||
"system_action", "group_invitation_created", "邀请你加入群聊。",
|
||||
@@ -7109,6 +7117,9 @@ func groupInvitationPayload(inv *types.GroupInvitation) map[string]any {
|
||||
"result": inv.Result,
|
||||
"expires_at": inv.ExpiresAt.Format(time.RFC3339Nano),
|
||||
}
|
||||
if inv.JoinRequestID != "" {
|
||||
data["join_request_id"] = inv.JoinRequestID
|
||||
}
|
||||
if inv.HandledAt != nil {
|
||||
data["handled_at"] = inv.HandledAt.Format(time.RFC3339Nano)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user