fix(channels): ensure OpenID consistency and fix legacy auth fallback

This commit is contained in:
Sakurapainting 2026-03-27 23:40:46 +08:00
parent 028c4bf71d
commit 7ea4f4d8e2
3 changed files with 36 additions and 8 deletions

View file

@ -259,8 +259,12 @@ func (c *BaseChannel) HandleMessage(
}
if sender.CanonicalID != "" || sender.PlatformID != "" {
if !c.IsAllowedSender(sender) {
// Backward-compatible fallback for channels that already resolved sender
// via a legacy identifier before publishing.
if !c.IsAllowed(senderID) {
return
}
}
} else {
if !c.IsAllowed(senderID) {
return

View file

@ -130,7 +130,9 @@ func (c *QQChannel) resolveAllowedSender(primaryOpenID, legacyID string) (bus.Se
PlatformID: legacyID,
}
if c.IsAllowedSender(legacy) {
return legacy, true, true
// Keep openid/canonical sender identity in published messages,
// while recording that allow_from matched via legacy fallback.
return primary, true, true
}
}
@ -781,10 +783,15 @@ func (c *QQChannel) handleC2CMessage() event.C2CMessageEventHandler {
metadata["legacy_account_id"] = legacyAuthorID
}
allowCheckSenderID := senderID
if usedLegacyFallback && legacyAuthorID != "" {
allowCheckSenderID = legacyAuthorID
}
c.HandleMessage(c.ctx,
bus.Peer{Kind: "direct", ID: chatID},
data.ID,
senderID,
allowCheckSenderID,
chatID,
content,
mediaPaths,
@ -897,10 +904,15 @@ func (c *QQChannel) handleGroupATMessage() event.GroupATMessageEventHandler {
metadata["legacy_account_id"] = legacyMemberID
}
allowCheckSenderID := senderID
if usedLegacyFallback && legacyMemberID != "" {
allowCheckSenderID = legacyMemberID
}
c.HandleMessage(c.ctx,
bus.Peer{Kind: "group", ID: chatID},
data.ID,
senderID,
allowCheckSenderID,
chatID,
content,
mediaPaths,

View file

@ -115,8 +115,14 @@ func TestHandleC2CMessage_AllowListFallsBackToLegacyID(t *testing.T) {
}
inbound := waitInboundMessage(t, messageBus)
if inbound.SenderID != "user-openid-123" {
t.Fatalf("inbound.SenderID = %q, want %q", inbound.SenderID, "user-openid-123")
if inbound.SenderID != "qq:user-openid-123" {
t.Fatalf("inbound.SenderID = %q, want %q", inbound.SenderID, "qq:user-openid-123")
}
if inbound.Sender.PlatformID != "user-openid-123" {
t.Fatalf("inbound.Sender.PlatformID = %q, want %q", inbound.Sender.PlatformID, "user-openid-123")
}
if inbound.Sender.CanonicalID != "qq:user-openid-123" {
t.Fatalf("inbound.Sender.CanonicalID = %q, want %q", inbound.Sender.CanonicalID, "qq:user-openid-123")
}
if inbound.Metadata["account_id"] != "user-openid-123" {
t.Fatalf("account_id metadata = %q, want %q", inbound.Metadata["account_id"], "user-openid-123")
@ -183,8 +189,14 @@ func TestHandleGroupATMessage_AllowListFallsBackToLegacyMemberID(t *testing.T) {
}
inbound := waitInboundMessage(t, messageBus)
if inbound.SenderID != "member-openid-xyz" {
t.Fatalf("inbound.SenderID = %q, want %q", inbound.SenderID, "member-openid-xyz")
if inbound.SenderID != "qq:member-openid-xyz" {
t.Fatalf("inbound.SenderID = %q, want %q", inbound.SenderID, "qq:member-openid-xyz")
}
if inbound.Sender.PlatformID != "member-openid-xyz" {
t.Fatalf("inbound.Sender.PlatformID = %q, want %q", inbound.Sender.PlatformID, "member-openid-xyz")
}
if inbound.Sender.CanonicalID != "qq:member-openid-xyz" {
t.Fatalf("inbound.Sender.CanonicalID = %q, want %q", inbound.Sender.CanonicalID, "qq:member-openid-xyz")
}
if inbound.Metadata["account_id"] != "member-openid-xyz" {
t.Fatalf("account_id metadata = %q, want %q", inbound.Metadata["account_id"], "member-openid-xyz")