mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-16 18:43:10 -06:00
Remove PerformError from AdminEvacuateRoom
This commit is contained in:
parent
ed19efc5d7
commit
f93b005bef
|
|
@ -9,6 +9,7 @@ import (
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/matrix-org/dendrite/internal"
|
"github.com/matrix-org/dendrite/internal"
|
||||||
|
"github.com/matrix-org/dendrite/internal/eventutil"
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
"github.com/matrix-org/gomatrixserverlib/spec"
|
"github.com/matrix-org/gomatrixserverlib/spec"
|
||||||
"github.com/matrix-org/util"
|
"github.com/matrix-org/util"
|
||||||
|
|
@ -28,23 +29,23 @@ func AdminEvacuateRoom(req *http.Request, rsAPI roomserverAPI.ClientRoomserverAP
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return util.ErrorResponse(err)
|
return util.ErrorResponse(err)
|
||||||
}
|
}
|
||||||
res := &roomserverAPI.PerformAdminEvacuateRoomResponse{}
|
|
||||||
if err := rsAPI.PerformAdminEvacuateRoom(
|
affected, err := rsAPI.PerformAdminEvacuateRoom(req.Context(), vars["roomID"])
|
||||||
req.Context(),
|
switch err {
|
||||||
&roomserverAPI.PerformAdminEvacuateRoomRequest{
|
case nil:
|
||||||
RoomID: vars["roomID"],
|
case eventutil.ErrRoomNoExists:
|
||||||
},
|
return util.JSONResponse{
|
||||||
res,
|
Code: http.StatusNotFound,
|
||||||
); err != nil {
|
JSON: jsonerror.NotFound(err.Error()),
|
||||||
return util.ErrorResponse(err)
|
|
||||||
}
|
}
|
||||||
if err := res.Error; err != nil {
|
default:
|
||||||
return err.JSONResponse()
|
logrus.WithError(err).WithField("roomID", vars["roomID"]).Error("Failed to evacuate room")
|
||||||
|
return jsonerror.InternalServerError()
|
||||||
}
|
}
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: 200,
|
Code: 200,
|
||||||
JSON: map[string]interface{}{
|
JSON: map[string]interface{}{
|
||||||
"affected": res.Affected,
|
"affected": affected,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,7 @@ type ClientRoomserverAPI interface {
|
||||||
|
|
||||||
// PerformRoomUpgrade upgrades a room to a newer version
|
// PerformRoomUpgrade upgrades a room to a newer version
|
||||||
PerformRoomUpgrade(ctx context.Context, req *PerformRoomUpgradeRequest, resp *PerformRoomUpgradeResponse) error
|
PerformRoomUpgrade(ctx context.Context, req *PerformRoomUpgradeRequest, resp *PerformRoomUpgradeResponse) error
|
||||||
PerformAdminEvacuateRoom(ctx context.Context, req *PerformAdminEvacuateRoomRequest, res *PerformAdminEvacuateRoomResponse) error
|
PerformAdminEvacuateRoom(ctx context.Context, roomID string) (affected []string, err error)
|
||||||
PerformAdminEvacuateUser(ctx context.Context, req *PerformAdminEvacuateUserRequest, res *PerformAdminEvacuateUserResponse) error
|
PerformAdminEvacuateUser(ctx context.Context, req *PerformAdminEvacuateUserRequest, res *PerformAdminEvacuateUserResponse) error
|
||||||
PerformAdminPurgeRoom(ctx context.Context, req *PerformAdminPurgeRoomRequest, res *PerformAdminPurgeRoomResponse) error
|
PerformAdminPurgeRoom(ctx context.Context, req *PerformAdminPurgeRoomRequest, res *PerformAdminPurgeRoomResponse) error
|
||||||
PerformAdminDownloadState(ctx context.Context, req *PerformAdminDownloadStateRequest, res *PerformAdminDownloadStateResponse) error
|
PerformAdminDownloadState(ctx context.Context, req *PerformAdminDownloadStateRequest, res *PerformAdminDownloadStateResponse) error
|
||||||
|
|
|
||||||
|
|
@ -43,55 +43,34 @@ type Admin struct {
|
||||||
// PerformEvacuateRoom will remove all local users from the given room.
|
// PerformEvacuateRoom will remove all local users from the given room.
|
||||||
func (r *Admin) PerformAdminEvacuateRoom(
|
func (r *Admin) PerformAdminEvacuateRoom(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
req *api.PerformAdminEvacuateRoomRequest,
|
roomID string,
|
||||||
res *api.PerformAdminEvacuateRoomResponse,
|
) (affected []string, err error) {
|
||||||
) error {
|
roomInfo, err := r.DB.RoomInfo(ctx, roomID)
|
||||||
roomInfo, err := r.DB.RoomInfo(ctx, req.RoomID)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res.Error = &api.PerformError{
|
return nil, err
|
||||||
Code: api.PerformErrorBadRequest,
|
|
||||||
Msg: fmt.Sprintf("r.DB.RoomInfo: %s", err),
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
if roomInfo == nil || roomInfo.IsStub() {
|
if roomInfo == nil || roomInfo.IsStub() {
|
||||||
res.Error = &api.PerformError{
|
return nil, eventutil.ErrRoomNoExists
|
||||||
Code: api.PerformErrorNoRoom,
|
|
||||||
Msg: fmt.Sprintf("Room %s not found", req.RoomID),
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
memberNIDs, err := r.DB.GetMembershipEventNIDsForRoom(ctx, roomInfo.RoomNID, true, true)
|
memberNIDs, err := r.DB.GetMembershipEventNIDsForRoom(ctx, roomInfo.RoomNID, true, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res.Error = &api.PerformError{
|
return nil, err
|
||||||
Code: api.PerformErrorBadRequest,
|
|
||||||
Msg: fmt.Sprintf("r.DB.GetMembershipEventNIDsForRoom: %s", err),
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
memberEvents, err := r.DB.Events(ctx, roomInfo, memberNIDs)
|
memberEvents, err := r.DB.Events(ctx, roomInfo, memberNIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res.Error = &api.PerformError{
|
return nil, err
|
||||||
Code: api.PerformErrorBadRequest,
|
|
||||||
Msg: fmt.Sprintf("r.DB.Events: %s", err),
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inputEvents := make([]api.InputRoomEvent, 0, len(memberEvents))
|
inputEvents := make([]api.InputRoomEvent, 0, len(memberEvents))
|
||||||
res.Affected = make([]string, 0, len(memberEvents))
|
affected = make([]string, 0, len(memberEvents))
|
||||||
latestReq := &api.QueryLatestEventsAndStateRequest{
|
latestReq := &api.QueryLatestEventsAndStateRequest{
|
||||||
RoomID: req.RoomID,
|
RoomID: roomID,
|
||||||
}
|
}
|
||||||
latestRes := &api.QueryLatestEventsAndStateResponse{}
|
latestRes := &api.QueryLatestEventsAndStateResponse{}
|
||||||
if err = r.Queryer.QueryLatestEventsAndState(ctx, latestReq, latestRes); err != nil {
|
if err = r.Queryer.QueryLatestEventsAndState(ctx, latestReq, latestRes); err != nil {
|
||||||
res.Error = &api.PerformError{
|
return nil, err
|
||||||
Code: api.PerformErrorBadRequest,
|
|
||||||
Msg: fmt.Sprintf("r.Queryer.QueryLatestEventsAndState: %s", err),
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prevEvents := latestRes.LatestEvents
|
prevEvents := latestRes.LatestEvents
|
||||||
|
|
@ -102,17 +81,13 @@ func (r *Admin) PerformAdminEvacuateRoom(
|
||||||
|
|
||||||
var memberContent gomatrixserverlib.MemberContent
|
var memberContent gomatrixserverlib.MemberContent
|
||||||
if err = json.Unmarshal(memberEvent.Content(), &memberContent); err != nil {
|
if err = json.Unmarshal(memberEvent.Content(), &memberContent); err != nil {
|
||||||
res.Error = &api.PerformError{
|
return nil, err
|
||||||
Code: api.PerformErrorBadRequest,
|
|
||||||
Msg: fmt.Sprintf("json.Unmarshal: %s", err),
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
memberContent.Membership = spec.Leave
|
memberContent.Membership = spec.Leave
|
||||||
|
|
||||||
stateKey := *memberEvent.StateKey()
|
stateKey := *memberEvent.StateKey()
|
||||||
fledglingEvent := &gomatrixserverlib.EventBuilder{
|
fledglingEvent := &gomatrixserverlib.EventBuilder{
|
||||||
RoomID: req.RoomID,
|
RoomID: roomID,
|
||||||
Type: spec.MRoomMember,
|
Type: spec.MRoomMember,
|
||||||
StateKey: &stateKey,
|
StateKey: &stateKey,
|
||||||
Sender: stateKey,
|
Sender: stateKey,
|
||||||
|
|
@ -125,20 +100,12 @@ func (r *Admin) PerformAdminEvacuateRoom(
|
||||||
}
|
}
|
||||||
|
|
||||||
if fledglingEvent.Content, err = json.Marshal(memberContent); err != nil {
|
if fledglingEvent.Content, err = json.Marshal(memberContent); err != nil {
|
||||||
res.Error = &api.PerformError{
|
return nil, err
|
||||||
Code: api.PerformErrorBadRequest,
|
|
||||||
Msg: fmt.Sprintf("json.Marshal: %s", err),
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
eventsNeeded, err := gomatrixserverlib.StateNeededForEventBuilder(fledglingEvent)
|
eventsNeeded, err := gomatrixserverlib.StateNeededForEventBuilder(fledglingEvent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res.Error = &api.PerformError{
|
return nil, err
|
||||||
Code: api.PerformErrorBadRequest,
|
|
||||||
Msg: fmt.Sprintf("gomatrixserverlib.StateNeededForEventBuilder: %s", err),
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
identity, err := r.Cfg.Matrix.SigningIdentityFor(senderDomain)
|
identity, err := r.Cfg.Matrix.SigningIdentityFor(senderDomain)
|
||||||
|
|
@ -148,11 +115,7 @@ func (r *Admin) PerformAdminEvacuateRoom(
|
||||||
|
|
||||||
event, err := eventutil.BuildEvent(ctx, fledglingEvent, r.Cfg.Matrix, identity, time.Now(), &eventsNeeded, latestRes)
|
event, err := eventutil.BuildEvent(ctx, fledglingEvent, r.Cfg.Matrix, identity, time.Now(), &eventsNeeded, latestRes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
res.Error = &api.PerformError{
|
return nil, err
|
||||||
Code: api.PerformErrorBadRequest,
|
|
||||||
Msg: fmt.Sprintf("eventutil.BuildEvent: %s", err),
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inputEvents = append(inputEvents, api.InputRoomEvent{
|
inputEvents = append(inputEvents, api.InputRoomEvent{
|
||||||
|
|
@ -161,7 +124,7 @@ func (r *Admin) PerformAdminEvacuateRoom(
|
||||||
Origin: senderDomain,
|
Origin: senderDomain,
|
||||||
SendAsServer: string(senderDomain),
|
SendAsServer: string(senderDomain),
|
||||||
})
|
})
|
||||||
res.Affected = append(res.Affected, stateKey)
|
affected = append(affected, stateKey)
|
||||||
prevEvents = []gomatrixserverlib.EventReference{
|
prevEvents = []gomatrixserverlib.EventReference{
|
||||||
event.EventReference(),
|
event.EventReference(),
|
||||||
}
|
}
|
||||||
|
|
@ -172,7 +135,8 @@ func (r *Admin) PerformAdminEvacuateRoom(
|
||||||
Asynchronous: true,
|
Asynchronous: true,
|
||||||
}
|
}
|
||||||
inputRes := &api.InputRoomEventsResponse{}
|
inputRes := &api.InputRoomEventsResponse{}
|
||||||
return r.Inputer.InputRoomEvents(ctx, inputReq, inputRes)
|
err = r.Inputer.InputRoomEvents(ctx, inputReq, inputRes)
|
||||||
|
return affected, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Admin) PerformAdminEvacuateUser(
|
func (r *Admin) PerformAdminEvacuateUser(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue