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 sender.CanonicalID != "" || sender.PlatformID != "" {
|
||||||
if !c.IsAllowedSender(sender) {
|
if !c.IsAllowedSender(sender) {
|
||||||
|
// Backward-compatible fallback for channels that already resolved sender
|
||||||
|
// via a legacy identifier before publishing.
|
||||||
|
if !c.IsAllowed(senderID) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if !c.IsAllowed(senderID) {
|
if !c.IsAllowed(senderID) {
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,9 @@ func (c *QQChannel) resolveAllowedSender(primaryOpenID, legacyID string) (bus.Se
|
||||||
PlatformID: legacyID,
|
PlatformID: legacyID,
|
||||||
}
|
}
|
||||||
if c.IsAllowedSender(legacy) {
|
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
|
metadata["legacy_account_id"] = legacyAuthorID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
allowCheckSenderID := senderID
|
||||||
|
if usedLegacyFallback && legacyAuthorID != "" {
|
||||||
|
allowCheckSenderID = legacyAuthorID
|
||||||
|
}
|
||||||
|
|
||||||
c.HandleMessage(c.ctx,
|
c.HandleMessage(c.ctx,
|
||||||
bus.Peer{Kind: "direct", ID: chatID},
|
bus.Peer{Kind: "direct", ID: chatID},
|
||||||
data.ID,
|
data.ID,
|
||||||
senderID,
|
allowCheckSenderID,
|
||||||
chatID,
|
chatID,
|
||||||
content,
|
content,
|
||||||
mediaPaths,
|
mediaPaths,
|
||||||
|
|
@ -897,10 +904,15 @@ func (c *QQChannel) handleGroupATMessage() event.GroupATMessageEventHandler {
|
||||||
metadata["legacy_account_id"] = legacyMemberID
|
metadata["legacy_account_id"] = legacyMemberID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
allowCheckSenderID := senderID
|
||||||
|
if usedLegacyFallback && legacyMemberID != "" {
|
||||||
|
allowCheckSenderID = legacyMemberID
|
||||||
|
}
|
||||||
|
|
||||||
c.HandleMessage(c.ctx,
|
c.HandleMessage(c.ctx,
|
||||||
bus.Peer{Kind: "group", ID: chatID},
|
bus.Peer{Kind: "group", ID: chatID},
|
||||||
data.ID,
|
data.ID,
|
||||||
senderID,
|
allowCheckSenderID,
|
||||||
chatID,
|
chatID,
|
||||||
content,
|
content,
|
||||||
mediaPaths,
|
mediaPaths,
|
||||||
|
|
|
||||||
|
|
@ -115,8 +115,14 @@ func TestHandleC2CMessage_AllowListFallsBackToLegacyID(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
inbound := waitInboundMessage(t, messageBus)
|
inbound := waitInboundMessage(t, messageBus)
|
||||||
if inbound.SenderID != "user-openid-123" {
|
if inbound.SenderID != "qq:user-openid-123" {
|
||||||
t.Fatalf("inbound.SenderID = %q, want %q", inbound.SenderID, "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" {
|
if inbound.Metadata["account_id"] != "user-openid-123" {
|
||||||
t.Fatalf("account_id metadata = %q, want %q", 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)
|
inbound := waitInboundMessage(t, messageBus)
|
||||||
if inbound.SenderID != "member-openid-xyz" {
|
if inbound.SenderID != "qq:member-openid-xyz" {
|
||||||
t.Fatalf("inbound.SenderID = %q, want %q", inbound.SenderID, "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" {
|
if inbound.Metadata["account_id"] != "member-openid-xyz" {
|
||||||
t.Fatalf("account_id metadata = %q, want %q", 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