aboutsummaryrefslogtreecommitdiff
path: root/clientapi
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-07-30 18:00:56 +0100
committerGitHub <noreply@github.com>2020-07-30 18:00:56 +0100
commita7e67e65a8662387f1a5ba6860698743f9dbd60f (patch)
tree90714c83c20fee10ee3c758f3ba00b7f9eee6d1c /clientapi
parent292a9ddd82a7cfc64ed43b70454040fb009601a7 (diff)
Notify clients when devices are deleted (#1233)
* Recheck device lists when join/leave events come in * Add PerformDeviceDeletion * Notify clients when devices are deleted * Unbreak things * Remove debug logging
Diffstat (limited to 'clientapi')
-rw-r--r--clientapi/routing/device.go28
-rw-r--r--clientapi/routing/routing.go4
2 files changed, 17 insertions, 15 deletions
diff --git a/clientapi/routing/device.go b/clientapi/routing/device.go
index 01310400..11c6c782 100644
--- a/clientapi/routing/device.go
+++ b/clientapi/routing/device.go
@@ -165,7 +165,7 @@ func UpdateDeviceByID(
// DeleteDeviceById handles DELETE requests to /devices/{deviceId}
func DeleteDeviceById(
- req *http.Request, userInteractiveAuth *auth.UserInteractive, deviceDB devices.Database, device *api.Device,
+ req *http.Request, userInteractiveAuth *auth.UserInteractive, userAPI api.UserInternalAPI, device *api.Device,
deviceID string,
) util.JSONResponse {
ctx := req.Context()
@@ -197,8 +197,12 @@ func DeleteDeviceById(
}
}
- if err := deviceDB.RemoveDevice(ctx, deviceID, localpart); err != nil {
- util.GetLogger(ctx).WithError(err).Error("deviceDB.RemoveDevice failed")
+ var res api.PerformDeviceDeletionResponse
+ if err := userAPI.PerformDeviceDeletion(ctx, &api.PerformDeviceDeletionRequest{
+ UserID: device.UserID,
+ DeviceIDs: []string{deviceID},
+ }, &res); err != nil {
+ util.GetLogger(ctx).WithError(err).Error("userAPI.PerformDeviceDeletion failed")
return jsonerror.InternalServerError()
}
@@ -210,26 +214,24 @@ func DeleteDeviceById(
// DeleteDevices handles POST requests to /delete_devices
func DeleteDevices(
- req *http.Request, deviceDB devices.Database, device *api.Device,
+ req *http.Request, userAPI api.UserInternalAPI, device *api.Device,
) util.JSONResponse {
- localpart, _, err := gomatrixserverlib.SplitID('@', device.UserID)
- if err != nil {
- util.GetLogger(req.Context()).WithError(err).Error("gomatrixserverlib.SplitID failed")
- return jsonerror.InternalServerError()
- }
-
ctx := req.Context()
payload := devicesDeleteJSON{}
if err := json.NewDecoder(req.Body).Decode(&payload); err != nil {
- util.GetLogger(req.Context()).WithError(err).Error("json.NewDecoder.Decode failed")
+ util.GetLogger(ctx).WithError(err).Error("json.NewDecoder.Decode failed")
return jsonerror.InternalServerError()
}
defer req.Body.Close() // nolint: errcheck
- if err := deviceDB.RemoveDevices(ctx, localpart, payload.Devices); err != nil {
- util.GetLogger(req.Context()).WithError(err).Error("deviceDB.RemoveDevices failed")
+ var res api.PerformDeviceDeletionResponse
+ if err := userAPI.PerformDeviceDeletion(ctx, &api.PerformDeviceDeletionRequest{
+ UserID: device.UserID,
+ DeviceIDs: payload.Devices,
+ }, &res); err != nil {
+ util.GetLogger(ctx).WithError(err).Error("userAPI.PerformDeviceDeletion failed")
return jsonerror.InternalServerError()
}
diff --git a/clientapi/routing/routing.go b/clientapi/routing/routing.go
index ebb141ef..6c40db86 100644
--- a/clientapi/routing/routing.go
+++ b/clientapi/routing/routing.go
@@ -654,13 +654,13 @@ func Setup(
if err != nil {
return util.ErrorResponse(err)
}
- return DeleteDeviceById(req, userInteractiveAuth, deviceDB, device, vars["deviceID"])
+ return DeleteDeviceById(req, userInteractiveAuth, userAPI, device, vars["deviceID"])
}),
).Methods(http.MethodDelete, http.MethodOptions)
r0mux.Handle("/delete_devices",
httputil.MakeAuthAPI("delete_devices", userAPI, func(req *http.Request, device *userapi.Device) util.JSONResponse {
- return DeleteDevices(req, deviceDB, device)
+ return DeleteDevices(req, userAPI, device)
}),
).Methods(http.MethodPost, http.MethodOptions)