Fix sytest failures by using only SenderID everywhere for now

This commit is contained in:
Devon Hudson 2023-06-02 10:42:33 -06:00
parent 56448c1c74
commit b479b062c5
No known key found for this signature in database
GPG key ID: CD06B18E77F6A628
15 changed files with 27 additions and 70 deletions

View file

@ -233,17 +233,10 @@ func (s *appserviceState) backoffAndPause(err error) error {
//
// TODO: This should be cached, see https://github.com/matrix-org/dendrite/issues/1682
func (s *OutputRoomEventConsumer) appserviceIsInterestedInEvent(ctx context.Context, event *types.HeaderedEvent, appservice *config.ApplicationService) bool {
userID, err := event.UserID()
if err != nil {
log.WithFields(log.Fields{
"appservice": appservice.ID,
"room_id": event.RoomID(),
}).WithError(err).Errorf("invalid userID")
}
switch {
case appservice.URL == "":
return false
case appservice.IsInterestedInUserID(userID.String()):
case appservice.IsInterestedInUserID(event.SenderID()):
return true
case appservice.IsInterestedInRoomID(event.RoomID()):
return true

View file

@ -76,14 +76,7 @@ func SendRedaction(
// "Users may redact their own events, and any user with a power level greater than or equal
// to the redact power level of the room may redact events there"
// https://matrix.org/docs/spec/client_server/r0.6.1#put-matrix-client-r0-rooms-roomid-redact-eventid-txnid
userID, err := ev.UserID()
if err != nil {
return util.JSONResponse{
Code: 400,
JSON: spec.BadJSON("invalid userID"),
}
}
allowedToRedact := userID.String() == device.UserID
allowedToRedact := ev.SenderID() == device.UserID
if !allowedToRedact {
plEvent := roomserverAPI.GetStateEvent(req.Context(), rsAPI, roomID, gomatrixserverlib.StateKeyTuple{
EventType: spec.MRoomPowerLevels,
@ -126,7 +119,7 @@ func SendRedaction(
Type: spec.MRoomRedaction,
Redacts: eventID,
}
err = proto.SetContent(r)
err := proto.SetContent(r)
if err != nil {
util.GetLogger(req.Context()).WithError(err).Error("proto.SetContent failed")
return util.JSONResponse{

View file

@ -509,7 +509,7 @@ func (r *FederationInternalAPI) SendInvite(
event gomatrixserverlib.PDU,
strippedState []gomatrixserverlib.InviteStrippedState,
) (gomatrixserverlib.PDU, error) {
originUser, err := event.UserID()
_, origin, err := r.cfg.Matrix.SplitLocalID('@', event.SenderID())
if err != nil {
return nil, err
}
@ -542,7 +542,7 @@ func (r *FederationInternalAPI) SendInvite(
return nil, fmt.Errorf("gomatrixserverlib.NewInviteV2Request: %w", err)
}
inviteRes, err := r.federation.SendInviteV2(ctx, originUser.Domain(), destination, inviteReq)
inviteRes, err := r.federation.SendInviteV2(ctx, origin, destination, inviteReq)
if err != nil {
return nil, fmt.Errorf("r.federation.SendInviteV2: failed to send invite: %w", err)
}

View file

@ -224,14 +224,12 @@ func SendLeave(
// the request. By this point we've already asserted that the sender
// and the state key are equal so we don't need to check both.
var serverName spec.ServerName
userID, err := event.UserID()
if err != nil {
if _, serverName, err = gomatrixserverlib.SplitID('@', event.SenderID()); err != nil {
return util.JSONResponse{
Code: http.StatusBadRequest,
Code: http.StatusForbidden,
JSON: spec.Forbidden("The sender of the join is invalid"),
}
}
if userID.Domain() != request.Origin() {
} else if serverName != request.Origin() {
return util.JSONResponse{
Code: http.StatusForbidden,
JSON: spec.Forbidden("The sender does not match the server that originated the request"),

2
go.mod
View file

@ -22,7 +22,7 @@ require (
github.com/matrix-org/dugong v0.0.0-20210921133753-66e6b1c67e2e
github.com/matrix-org/go-sqlite3-js v0.0.0-20220419092513-28aa791a1c91
github.com/matrix-org/gomatrix v0.0.0-20220926102614-ceba4d9f7530
github.com/matrix-org/gomatrixserverlib v0.0.0-20230601235030-c4138953b254
github.com/matrix-org/gomatrixserverlib v0.0.0-20230602163838-69e05dbabdad
github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a
github.com/matrix-org/util v0.0.0-20221111132719-399730281e66
github.com/mattn/go-sqlite3 v1.14.16

4
go.sum
View file

@ -323,8 +323,8 @@ github.com/matrix-org/go-sqlite3-js v0.0.0-20220419092513-28aa791a1c91 h1:s7fexw
github.com/matrix-org/go-sqlite3-js v0.0.0-20220419092513-28aa791a1c91/go.mod h1:e+cg2q7C7yE5QnAXgzo512tgFh1RbQLC0+jozuegKgo=
github.com/matrix-org/gomatrix v0.0.0-20220926102614-ceba4d9f7530 h1:kHKxCOLcHH8r4Fzarl4+Y3K5hjothkVW5z7T1dUM11U=
github.com/matrix-org/gomatrix v0.0.0-20220926102614-ceba4d9f7530/go.mod h1:/gBX06Kw0exX1HrwmoBibFA98yBk/jxKpGVeyQbff+s=
github.com/matrix-org/gomatrixserverlib v0.0.0-20230601235030-c4138953b254 h1:javi7tINJfP86mdYeVg7IzDmeRLeaLA0kRzIbEZlK/I=
github.com/matrix-org/gomatrixserverlib v0.0.0-20230601235030-c4138953b254/go.mod h1:H9V9N3Uqn1bBJqYJNGK1noqtgJTaCEhtTdcH/mp50uU=
github.com/matrix-org/gomatrixserverlib v0.0.0-20230602163838-69e05dbabdad h1:l+mNyh4S3v0z320VOFuTIGZLjCAeTenVjYBiUNTZm/o=
github.com/matrix-org/gomatrixserverlib v0.0.0-20230602163838-69e05dbabdad/go.mod h1:H9V9N3Uqn1bBJqYJNGK1noqtgJTaCEhtTdcH/mp50uU=
github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a h1:awrPDf9LEFySxTLKYBMCiObelNx/cBuv/wzllvCCH3A=
github.com/matrix-org/pinecone v0.11.1-0.20230210171230-8c3b24f2649a/go.mod h1:HchJX9oKMXaT2xYFs0Ha/6Zs06mxLU8k6F1ODnrGkeQ=
github.com/matrix-org/util v0.0.0-20221111132719-399730281e66 h1:6z4KxomXSIGWqhHcfzExgkH3Z3UkIXry4ibJS4Aqz2Y=

View file

@ -173,7 +173,7 @@ func (r *RoomserverInternalAPI) RemoveRoomAlias(
}
sender := request.UserID
if sender != ev.SenderID() {
if request.UserID != ev.SenderID() {
sender = ev.SenderID()
}

View file

@ -128,7 +128,7 @@ func (r *Inputer) processRoomEvent(
if roomInfo == nil && !isCreateEvent {
return fmt.Errorf("room %s does not exist for event %s", event.RoomID(), event.EventID())
}
sender, err := event.UserID()
_, senderDomain, err := gomatrixserverlib.SplitID('@', event.SenderID())
if err != nil {
return fmt.Errorf("event has invalid sender %q", event.SenderID())
}
@ -193,9 +193,9 @@ func (r *Inputer) processRoomEvent(
serverRes.ServerNames = append(serverRes.ServerNames, input.Origin)
delete(servers, input.Origin)
}
if sender.Domain() != input.Origin && sender.Domain() != r.Cfg.Matrix.ServerName {
serverRes.ServerNames = append(serverRes.ServerNames, sender.Domain())
delete(servers, sender.Domain())
if senderDomain != input.Origin && senderDomain != r.Cfg.Matrix.ServerName {
serverRes.ServerNames = append(serverRes.ServerNames, senderDomain)
delete(servers, senderDomain)
}
for server := range servers {
serverRes.ServerNames = append(serverRes.ServerNames, server)
@ -451,7 +451,7 @@ func (r *Inputer) processRoomEvent(
}
// Handle remote room upgrades, e.g. remove published room
if event.Type() == "m.room.tombstone" && event.StateKeyEquals("") && !r.Cfg.Matrix.IsLocalServerName(sender.Domain()) {
if event.Type() == "m.room.tombstone" && event.StateKeyEquals("") && !r.Cfg.Matrix.IsLocalServerName(senderDomain) {
if err = r.handleRemoteRoomUpgrade(ctx, event); err != nil {
return fmt.Errorf("failed to handle remote room upgrade: %w", err)
}

View file

@ -484,11 +484,9 @@ FindSuccessor:
// Store the server names in a temporary map to avoid duplicates.
serverSet := make(map[spec.ServerName]bool)
for _, event := range memberEvents {
sender, err := event.UserID()
if err != nil {
continue
if _, senderDomain, err := gomatrixserverlib.SplitID('@', event.SenderID()); err == nil {
serverSet[senderDomain] = true
}
serverSet[sender.Domain()] = true
}
var servers []spec.ServerName
for server := range serverSet {

View file

@ -125,7 +125,7 @@ func (r *Inviter) PerformInvite(
) error {
event := req.Event
sender, err := event.UserID()
sender, err := spec.NewUserID(event.SenderID(), true)
if err != nil {
return spec.InvalidParam("The user ID is invalid")
}

View file

@ -988,14 +988,8 @@ func (d *EventDatabase) MaybeRedactEvent(
return nil
}
sender1, err := redactedEvent.UserID()
if err != nil {
return err
}
sender2, err := redactionEvent.UserID()
if err != nil {
return err
}
_, sender1, _ := gomatrixserverlib.SplitID('@', redactedEvent.SenderID())
_, sender2, _ := gomatrixserverlib.SplitID('@', redactionEvent.SenderID())
var powerlevels *gomatrixserverlib.PowerLevelContent
powerlevels, err = plResolver.Resolve(ctx, redactionEvent.EventID())
if err != nil {
@ -1005,7 +999,7 @@ func (d *EventDatabase) MaybeRedactEvent(
switch {
case powerlevels.UserLevel(redactionEvent.SenderID()) >= powerlevels.Redact:
// 1. The power level of the redaction events sender is greater than or equal to the redact level.
case sender1.Domain() == sender2.Domain():
case sender1 == sender2:
// 2. The domain of the redaction events sender matches that of the original events sender.
default:
ignoreRedaction = true

View file

@ -195,14 +195,7 @@ func (d *Database) StreamEventsToEvents(device *userapi.Device, in []types.Strea
for i := 0; i < len(in); i++ {
out[i] = in[i].HeaderedEvent
if device != nil && in[i].TransactionID != nil {
userID, err := in[i].UserID()
if err != nil {
logrus.WithFields(logrus.Fields{
"event_id": out[i].EventID(),
}).WithError(err).Warnf("Event has invalid userID")
continue
}
if device.UserID == userID.String() && device.SessionID == in[i].TransactionID.SessionID {
if device.UserID == in[i].SenderID() && device.SessionID == in[i].TransactionID.SessionID {
err := out[i].SetUnsignedField(
"transaction_id", in[i].TransactionID.TransactionID,
)

View file

@ -63,11 +63,7 @@ func (p *InviteStreamProvider) IncrementalSync(
for roomID, inviteEvent := range invites {
// skip ignored user events
userID, err := inviteEvent.UserID()
if err != nil {
continue
}
if _, ok := req.IgnoredUsers.List[userID.String()]; ok {
if _, ok := req.IgnoredUsers.List[inviteEvent.SenderID()]; ok {
continue
}
ir := types.NewInviteResponse(inviteEvent)

View file

@ -57,13 +57,9 @@ func ToClientEvents(serverEvs []gomatrixserverlib.PDU, format ClientEventFormat)
// ToClientEvent converts a single server event to a client event.
func ToClientEvent(se gomatrixserverlib.PDU, format ClientEventFormat) ClientEvent {
sender, err := se.UserID()
if err != nil {
panic("uh oh! userID does not exist...")
}
ce := ClientEvent{
Content: spec.RawJSON(se.Content()),
Sender: sender.String(),
Sender: se.SenderID(),
Type: se.Type(),
StateKey: se.StateKey(),
Unsigned: spec.RawJSON(se.Unsigned()),

View file

@ -615,11 +615,7 @@ func (s *OutputRoomEventConsumer) notifyLocal(ctx context.Context, event *rstype
// evaluatePushRules fetches and evaluates the push rules of a local
// user. Returns actions (including dont_notify).
func (s *OutputRoomEventConsumer) evaluatePushRules(ctx context.Context, event *rstypes.HeaderedEvent, mem *localMembership, roomSize int) ([]*pushrules.Action, error) {
userID, err := event.UserID()
if err != nil {
return nil, err
}
if userID.String() == mem.UserID {
if event.SenderID() == mem.UserID {
// SPEC: Homeservers MUST NOT notify the Push Gateway for
// events that the user has sent themselves.
return nil, nil