diff --git a/roomserver/internal/perform/perform_admin.go b/roomserver/internal/perform/perform_admin.go index 4dd3684d8..d3fb71099 100644 --- a/roomserver/internal/perform/perform_admin.go +++ b/roomserver/internal/perform/perform_admin.go @@ -16,6 +16,7 @@ package perform import ( "context" + "database/sql" "encoding/json" "fmt" "time" @@ -184,7 +185,7 @@ func (r *Admin) PerformAdminEvacuateUser( } roomIDs, err := r.DB.GetRoomsByMembership(ctx, req.UserID, gomatrixserverlib.Join) - if err != nil { + if err != nil && err != sql.ErrNoRows { res.Error = &api.PerformError{ Code: api.PerformErrorBadRequest, Msg: fmt.Sprintf("r.DB.GetRoomsByMembership: %s", err), @@ -192,7 +193,16 @@ func (r *Admin) PerformAdminEvacuateUser( return } - for _, roomID := range roomIDs { + inviteRoomIDs, err := r.DB.GetRoomsByMembership(ctx, req.UserID, gomatrixserverlib.Invite) + if err != nil && err != sql.ErrNoRows { + res.Error = &api.PerformError{ + Code: api.PerformErrorBadRequest, + Msg: fmt.Sprintf("r.DB.GetRoomsByMembership: %s", err), + } + return + } + + for _, roomID := range append(roomIDs, inviteRoomIDs...) { leaveReq := &api.PerformLeaveRequest{ RoomID: roomID, UserID: req.UserID, diff --git a/userapi/internal/api.go b/userapi/internal/api.go index 9a8af1faa..27ed15a01 100644 --- a/userapi/internal/api.go +++ b/userapi/internal/api.go @@ -471,6 +471,13 @@ func (a *UserInternalAPI) PerformAccountDeactivation(ctx context.Context, req *a return err } + pusherReq := &api.PerformPusherDeletionRequest{ + Localpart: req.Localpart, + } + if err := a.PerformPusherDeletion(ctx, pusherReq, &struct{}{}); err != nil { + return err + } + err := a.DB.DeactivateAccount(ctx, req.Localpart) res.AccountDeactivated = err == nil return err