aboutsummaryrefslogtreecommitdiff
path: root/roomserver/api
diff options
context:
space:
mode:
authorNeil <neilalexanderr@gmail.com>2023-01-19 20:02:32 +0000
committerGitHub <noreply@github.com>2023-01-19 21:02:32 +0100
commit738686ae686004c5efa9fe2096502cdc426c6dd8 (patch)
treee5c8e31aea47167be61aa326982ad9db1a00c15e /roomserver/api
parent67f5c5bc1e837bbdee14d7d3388984ed8960528a (diff)
Add `/_dendrite/admin/purgeRoom/{roomID}` (#2662)
This adds a new admin endpoint `/_dendrite/admin/purgeRoom/{roomID}`. It completely erases all database entries for a given room ID. The roomserver will start by clearing all data for that room and then will generate an output event to notify downstream components (i.e. the sync API and federation API) to do the same. It does not currently clear media and it is currently not implemented for SQLite since it relies on SQL array operations right now. Co-authored-by: Neil Alexander <neilalexander@users.noreply.github.com> Co-authored-by: Till Faelligen <2353100+S7evinK@users.noreply.github.com>
Diffstat (limited to 'roomserver/api')
-rw-r--r--roomserver/api/api.go1
-rw-r--r--roomserver/api/api_trace.go10
-rw-r--r--roomserver/api/output.go8
-rw-r--r--roomserver/api/perform.go8
4 files changed, 27 insertions, 0 deletions
diff --git a/roomserver/api/api.go b/roomserver/api/api.go
index 420ef278..a8228ae8 100644
--- a/roomserver/api/api.go
+++ b/roomserver/api/api.go
@@ -151,6 +151,7 @@ type ClientRoomserverAPI interface {
PerformRoomUpgrade(ctx context.Context, req *PerformRoomUpgradeRequest, resp *PerformRoomUpgradeResponse) error
PerformAdminEvacuateRoom(ctx context.Context, req *PerformAdminEvacuateRoomRequest, res *PerformAdminEvacuateRoomResponse) error
PerformAdminEvacuateUser(ctx context.Context, req *PerformAdminEvacuateUserRequest, res *PerformAdminEvacuateUserResponse) error
+ PerformAdminPurgeRoom(ctx context.Context, req *PerformAdminPurgeRoomRequest, res *PerformAdminPurgeRoomResponse) error
PerformAdminDownloadState(ctx context.Context, req *PerformAdminDownloadStateRequest, res *PerformAdminDownloadStateResponse) error
PerformPeek(ctx context.Context, req *PerformPeekRequest, res *PerformPeekResponse) error
PerformUnpeek(ctx context.Context, req *PerformUnpeekRequest, res *PerformUnpeekResponse) error
diff --git a/roomserver/api/api_trace.go b/roomserver/api/api_trace.go
index b23263d1..166b651a 100644
--- a/roomserver/api/api_trace.go
+++ b/roomserver/api/api_trace.go
@@ -137,6 +137,16 @@ func (t *RoomserverInternalAPITrace) PerformAdminEvacuateUser(
return err
}
+func (t *RoomserverInternalAPITrace) PerformAdminPurgeRoom(
+ ctx context.Context,
+ req *PerformAdminPurgeRoomRequest,
+ res *PerformAdminPurgeRoomResponse,
+) error {
+ err := t.Impl.PerformAdminPurgeRoom(ctx, req, res)
+ util.GetLogger(ctx).WithError(err).Infof("PerformAdminPurgeRoom req=%+v res=%+v", js(req), js(res))
+ return err
+}
+
func (t *RoomserverInternalAPITrace) PerformAdminDownloadState(
ctx context.Context,
req *PerformAdminDownloadStateRequest,
diff --git a/roomserver/api/output.go b/roomserver/api/output.go
index 36d0625c..0c0f52c4 100644
--- a/roomserver/api/output.go
+++ b/roomserver/api/output.go
@@ -55,6 +55,8 @@ const (
OutputTypeNewInboundPeek OutputType = "new_inbound_peek"
// OutputTypeRetirePeek indicates that the kafka event is an OutputRetirePeek
OutputTypeRetirePeek OutputType = "retire_peek"
+ // OutputTypePurgeRoom indicates the event is an OutputPurgeRoom
+ OutputTypePurgeRoom OutputType = "purge_room"
)
// An OutputEvent is an entry in the roomserver output kafka log.
@@ -78,6 +80,8 @@ type OutputEvent struct {
NewInboundPeek *OutputNewInboundPeek `json:"new_inbound_peek,omitempty"`
// The content of event with type OutputTypeRetirePeek
RetirePeek *OutputRetirePeek `json:"retire_peek,omitempty"`
+ // The content of the event with type OutputPurgeRoom
+ PurgeRoom *OutputPurgeRoom `json:"purge_room,omitempty"`
}
// Type of the OutputNewRoomEvent.
@@ -257,3 +261,7 @@ type OutputRetirePeek struct {
UserID string
DeviceID string
}
+
+type OutputPurgeRoom struct {
+ RoomID string
+}
diff --git a/roomserver/api/perform.go b/roomserver/api/perform.go
index e789b956..83cb0460 100644
--- a/roomserver/api/perform.go
+++ b/roomserver/api/perform.go
@@ -241,6 +241,14 @@ type PerformAdminEvacuateUserResponse struct {
Error *PerformError
}
+type PerformAdminPurgeRoomRequest struct {
+ RoomID string `json:"room_id"`
+}
+
+type PerformAdminPurgeRoomResponse struct {
+ Error *PerformError `json:"error,omitempty"`
+}
+
type PerformAdminDownloadStateRequest struct {
RoomID string `json:"room_id"`
UserID string `json:"user_id"`