Room upgrade tweaks

Squashed commit of the following:

commit 7a1568c716866594af6d0b1d561c58c96de29b20
Author: Neil Alexander <neilalexander@users.noreply.github.com>
Date:   Mon Jun 6 15:17:49 2022 +0100

    Make errors more useful

commit 64befe7c9a901b00650442171660c2dc4ea575fa
Author: Neil Alexander <neilalexander@users.noreply.github.com>
Date:   Mon Jun 6 15:02:40 2022 +0100

    Tweak ordering a bit
This commit is contained in:
Neil Alexander 2022-06-06 15:18:02 +01:00
parent 02597f15f0
commit 2cb609c428
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944

View File

@ -105,13 +105,13 @@ func (r *Upgrader) performRoomUpgrade(
return "", pErr return "", pErr
} }
// 5. Send the tombstone event to the old room (must do this before we set the new canonical_alias) // Send the setup events to the new room
if pErr = r.sendHeaderedEvent(ctx, tombstoneEvent); pErr != nil { if pErr = r.sendInitialEvents(ctx, evTime, userID, newRoomID, string(req.RoomVersion), eventsToMake); pErr != nil {
return "", pErr return "", pErr
} }
// Send the setup events to the new room // 5. Send the tombstone event to the old room
if pErr = r.sendInitialEvents(ctx, evTime, userID, newRoomID, string(req.RoomVersion), eventsToMake); pErr != nil { if pErr = r.sendHeaderedEvent(ctx, tombstoneEvent); pErr != nil {
return "", pErr return "", pErr
} }
@ -147,7 +147,7 @@ func (r *Upgrader) getRoomPowerLevels(ctx context.Context, roomID string) (*goma
if err != nil { if err != nil {
util.GetLogger(ctx).WithError(err).Error() util.GetLogger(ctx).WithError(err).Error()
return nil, &api.PerformError{ return nil, &api.PerformError{
Msg: "powerLevel event was not actually a power level event", Msg: "Power level event was invalid or malformed",
} }
} }
return powerLevelContent, nil return powerLevelContent, nil
@ -198,7 +198,7 @@ func moveLocalAliases(ctx context.Context,
aliasRes := api.GetAliasesForRoomIDResponse{} aliasRes := api.GetAliasesForRoomIDResponse{}
if err = URSAPI.GetAliasesForRoomID(ctx, &aliasReq, &aliasRes); err != nil { if err = URSAPI.GetAliasesForRoomID(ctx, &aliasReq, &aliasRes); err != nil {
return &api.PerformError{ return &api.PerformError{
Msg: "Could not get aliases for old room", Msg: fmt.Sprintf("Failed to get old room aliases: %s", err),
} }
} }
@ -207,7 +207,7 @@ func moveLocalAliases(ctx context.Context,
removeAliasRes := api.RemoveRoomAliasResponse{} removeAliasRes := api.RemoveRoomAliasResponse{}
if err = URSAPI.RemoveRoomAlias(ctx, &removeAliasReq, &removeAliasRes); err != nil { if err = URSAPI.RemoveRoomAlias(ctx, &removeAliasReq, &removeAliasRes); err != nil {
return &api.PerformError{ return &api.PerformError{
Msg: "api.RemoveRoomAlias failed", Msg: fmt.Sprintf("Failed to remove old room alias: %s", err),
} }
} }
@ -215,7 +215,7 @@ func moveLocalAliases(ctx context.Context,
setAliasRes := api.SetRoomAliasResponse{} setAliasRes := api.SetRoomAliasResponse{}
if err = URSAPI.SetRoomAlias(ctx, &setAliasReq, &setAliasRes); err != nil { if err = URSAPI.SetRoomAlias(ctx, &setAliasReq, &setAliasRes); err != nil {
return &api.PerformError{ return &api.PerformError{
Msg: "api.SetRoomAlias failed", Msg: fmt.Sprintf("Failed to set new room alias: %s", err),
} }
} }
} }
@ -509,7 +509,7 @@ func (r *Upgrader) sendInitialEvents(ctx context.Context, evTime time.Time, user
err = builder.SetContent(e.Content) err = builder.SetContent(e.Content)
if err != nil { if err != nil {
return &api.PerformError{ return &api.PerformError{
Msg: "builder.SetContent failed", Msg: fmt.Sprintf("Failed to set content of new %q event: %s", builder.Type, err),
} }
} }
if i > 0 { if i > 0 {
@ -519,13 +519,13 @@ func (r *Upgrader) sendInitialEvents(ctx context.Context, evTime time.Time, user
event, err = r.buildEvent(&builder, &authEvents, evTime, gomatrixserverlib.RoomVersion(newVersion)) event, err = r.buildEvent(&builder, &authEvents, evTime, gomatrixserverlib.RoomVersion(newVersion))
if err != nil { if err != nil {
return &api.PerformError{ return &api.PerformError{
Msg: "buildEvent failed", Msg: fmt.Sprintf("Failed to build new %q event: %s", builder.Type, err),
} }
} }
if err = gomatrixserverlib.Allowed(event, &authEvents); err != nil { if err = gomatrixserverlib.Allowed(event, &authEvents); err != nil {
return &api.PerformError{ return &api.PerformError{
Msg: "gomatrixserverlib.Allowed failed", Msg: fmt.Sprintf("Failed to auth new %q event: %s", builder.Type, err),
} }
} }
@ -534,7 +534,7 @@ func (r *Upgrader) sendInitialEvents(ctx context.Context, evTime time.Time, user
err = authEvents.AddEvent(event) err = authEvents.AddEvent(event)
if err != nil { if err != nil {
return &api.PerformError{ return &api.PerformError{
Msg: "authEvents.AddEvent failed", Msg: fmt.Sprintf("Failed to add new %q event to auth set: %s", builder.Type, err),
} }
} }
} }
@ -550,7 +550,7 @@ func (r *Upgrader) sendInitialEvents(ctx context.Context, evTime time.Time, user
} }
if err = api.SendInputRoomEvents(ctx, r.URSAPI, inputs, false); err != nil { if err = api.SendInputRoomEvents(ctx, r.URSAPI, inputs, false); err != nil {
return &api.PerformError{ return &api.PerformError{
Msg: "api.SendInputRoomEvents failed", Msg: fmt.Sprintf("Failed to send new room %q to roomserver: %s", newRoomID, err),
} }
} }
return nil return nil
@ -582,7 +582,7 @@ func (r *Upgrader) makeHeaderedEvent(ctx context.Context, evTime time.Time, user
err := builder.SetContent(event.Content) err := builder.SetContent(event.Content)
if err != nil { if err != nil {
return nil, &api.PerformError{ return nil, &api.PerformError{
Msg: "builder.SetContent failed", Msg: fmt.Sprintf("Failed to set new %q event content: %s", builder.Type, err),
} }
} }
var queryRes api.QueryLatestEventsAndStateResponse var queryRes api.QueryLatestEventsAndStateResponse
@ -607,7 +607,7 @@ func (r *Upgrader) makeHeaderedEvent(ctx context.Context, evTime time.Time, user
} }
} else if err != nil { } else if err != nil {
return nil, &api.PerformError{ return nil, &api.PerformError{
Msg: "eventutil.BuildEvent failed", Msg: fmt.Sprintf("Failed to build new %q event: %s", builder.Type, err),
} }
} }
// check to see if this user can perform this operation // check to see if this user can perform this operation
@ -619,7 +619,7 @@ func (r *Upgrader) makeHeaderedEvent(ctx context.Context, evTime time.Time, user
if err = gomatrixserverlib.Allowed(headeredEvent.Event, &provider); err != nil { if err = gomatrixserverlib.Allowed(headeredEvent.Event, &provider); err != nil {
return nil, &api.PerformError{ return nil, &api.PerformError{
Code: api.PerformErrorNotAllowed, Code: api.PerformErrorNotAllowed,
Msg: err.Error(), // TODO: Is this error string comprehensible to the client? Msg: fmt.Sprintf("Failed to auth new %q event: %s", builder.Type, err), // TODO: Is this error string comprehensible to the client?
} }
} }
@ -676,7 +676,7 @@ func (r *Upgrader) sendHeaderedEvent(
}) })
if err := api.SendInputRoomEvents(ctx, r.URSAPI, inputs, false); err != nil { if err := api.SendInputRoomEvents(ctx, r.URSAPI, inputs, false); err != nil {
return &api.PerformError{ return &api.PerformError{
Msg: "api.SendInputRoomEvents failed", Msg: fmt.Sprintf("Failed to send new %q event to roomserver: %s", headeredEvent.Type(), err),
} }
} }
@ -703,7 +703,7 @@ func (r *Upgrader) buildEvent(
r.Cfg.Matrix.PrivateKey, roomVersion, r.Cfg.Matrix.PrivateKey, roomVersion,
) )
if err != nil { if err != nil {
return nil, fmt.Errorf("cannot build event %s : Builder failed to build. %w", builder.Type, err) return nil, err
} }
return event, nil return event, nil
} }