aboutsummaryrefslogtreecommitdiff
path: root/clientapi
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2022-06-29 15:29:39 +0100
committerGitHub <noreply@github.com>2022-06-29 15:29:39 +0100
commit519bc1124b051273019aae9b11617ebd796e962f (patch)
tree63445e1384d880e2ab94a1847f6a11553f822547 /clientapi
parent2dea466685d0d4ab74d4cbd84af16b621d1269b3 (diff)
Add `evacuateUser` endpoint, use it when deactivating accounts (#2545)
* Add `evacuateUser` endpoint, use it when deactivating accounts * Populate the API * Clean up user devices when deactivating * Include invites, delete pushers
Diffstat (limited to 'clientapi')
-rw-r--r--clientapi/routing/admin.go37
-rw-r--r--clientapi/routing/routing.go6
2 files changed, 43 insertions, 0 deletions
diff --git a/clientapi/routing/admin.go b/clientapi/routing/admin.go
index 125b3847..523b88c9 100644
--- a/clientapi/routing/admin.go
+++ b/clientapi/routing/admin.go
@@ -47,3 +47,40 @@ func AdminEvacuateRoom(req *http.Request, device *userapi.Device, rsAPI roomserv
},
}
}
+
+func AdminEvacuateUser(req *http.Request, device *userapi.Device, rsAPI roomserverAPI.ClientRoomserverAPI) util.JSONResponse {
+ if device.AccountType != userapi.AccountTypeAdmin {
+ return util.JSONResponse{
+ Code: http.StatusForbidden,
+ JSON: jsonerror.Forbidden("This API can only be used by admin users."),
+ }
+ }
+ vars, err := httputil.URLDecodeMapValues(mux.Vars(req))
+ if err != nil {
+ return util.ErrorResponse(err)
+ }
+ userID, ok := vars["userID"]
+ if !ok {
+ return util.JSONResponse{
+ Code: http.StatusBadRequest,
+ JSON: jsonerror.MissingArgument("Expecting user ID."),
+ }
+ }
+ res := &roomserverAPI.PerformAdminEvacuateUserResponse{}
+ rsAPI.PerformAdminEvacuateUser(
+ req.Context(),
+ &roomserverAPI.PerformAdminEvacuateUserRequest{
+ UserID: userID,
+ },
+ res,
+ )
+ if err := res.Error; err != nil {
+ return err.JSONResponse()
+ }
+ return util.JSONResponse{
+ Code: 200,
+ JSON: map[string]interface{}{
+ "affected": res.Affected,
+ },
+ }
+}
diff --git a/clientapi/routing/routing.go b/clientapi/routing/routing.go
index aa4b5a23..0460850e 100644
--- a/clientapi/routing/routing.go
+++ b/clientapi/routing/routing.go
@@ -129,6 +129,12 @@ func Setup(
}),
).Methods(http.MethodGet, http.MethodOptions)
+ dendriteAdminRouter.Handle("/admin/evacuateUser/{userID}",
+ httputil.MakeAuthAPI("admin_evacuate_user", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
+ return AdminEvacuateUser(req, device, rsAPI)
+ }),
+ ).Methods(http.MethodGet, http.MethodOptions)
+
// server notifications
if cfg.Matrix.ServerNotices.Enabled {
logrus.Info("Enabling server notices at /_synapse/admin/v1/send_server_notice")