fix: link group invitations to join requests

This commit is contained in:
richjohnrambo
2026-09-11 17:26:05 +08:00
parent 367bed2940
commit cfab33f45a
3 changed files with 138 additions and 7 deletions
+16 -5
View File
@@ -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)
}