aboutsummaryrefslogtreecommitdiff
path: root/federationapi
diff options
context:
space:
mode:
authorTill Faelligen <2353100+S7evinK@users.noreply.github.com>2023-07-14 08:04:25 +0200
committerTill Faelligen <2353100+S7evinK@users.noreply.github.com>2023-07-14 08:04:25 +0200
commit3e314e028e5b580d0ddaa7a46d862c5a8ac351a6 (patch)
tree5c5f8255ee56ef75005e515da1870e915b992a6e /federationapi
parent5267cc0f54db37b8a71a4caa7148e1dff7ae27c1 (diff)
Avoid panic due to being unable to query the userID
Diffstat (limited to 'federationapi')
-rw-r--r--federationapi/consumers/roomserver.go19
1 files changed, 17 insertions, 2 deletions
diff --git a/federationapi/consumers/roomserver.go b/federationapi/consumers/roomserver.go
index 6dd2fd34..6c058032 100644
--- a/federationapi/consumers/roomserver.go
+++ b/federationapi/consumers/roomserver.go
@@ -16,7 +16,9 @@ package consumers
import (
"context"
+ "encoding/base64"
"encoding/json"
+ "errors"
"fmt"
"strconv"
"time"
@@ -411,13 +413,26 @@ func JoinedHostsFromEvents(ctx context.Context, evs []gomatrixserverlib.PDU, rsA
if err != nil {
return nil, err
}
+ var domain spec.ServerName
userID, err := rsAPI.QueryUserIDForSender(ctx, *validRoomID, spec.SenderID(*ev.StateKey()))
if err != nil {
- return nil, err
+ if errors.As(err, new(base64.CorruptInputError)) {
+ // Fallback to using the "old" way of getting the user domain, avoids
+ // "illegal base64 data at input byte 0" errors
+ // FIXME: we should do this in QueryUserIDForSender instead
+ _, domain, err = gomatrixserverlib.SplitID('@', *ev.StateKey())
+ if err != nil {
+ return nil, err
+ }
+ } else {
+ return nil, err
+ }
+ } else {
+ domain = userID.Domain()
}
joinedHosts = append(joinedHosts, types.JoinedHost{
- MemberEventID: ev.EventID(), ServerName: userID.Domain(),
+ MemberEventID: ev.EventID(), ServerName: domain,
})
}
return joinedHosts, nil