fix(channels): ensure OpenID consistency and fix legacy auth fallback
This commit is contained in:
parent
028c4bf71d
commit
7ea4f4d8e2
3 changed files with 36 additions and 8 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue