MCPcopy Create free account
hub / github.com/daodst/chat / PerformDeviceDeletion

Method PerformDeviceDeletion

userapi/internal/api.go:167–203  ·  view source on GitHub ↗
(ctx context.Context, req *api.PerformDeviceDeletionRequest, res *api.PerformDeviceDeletionResponse)

Source from the content-addressed store, hash-verified

165}
166
167func (a *UserInternalAPI) PerformDeviceDeletion(ctx context.Context, req *api.PerformDeviceDeletionRequest, res *api.PerformDeviceDeletionResponse) error {
168 util.GetLogger(ctx).WithField("user_id", req.UserID).WithField("devices", req.DeviceIDs).Info("PerformDeviceDeletion")
169 local, domain, err := gomatrixserverlib.SplitID('@', req.UserID)
170 if err != nil {
171 return err
172 }
173 if domain != a.ServerName {
174 return fmt.Errorf("cannot PerformDeviceDeletion of remote users: got %s want %s", domain, a.ServerName)
175 }
176 deletedDeviceIDs := req.DeviceIDs
177 if len(req.DeviceIDs) == 0 {
178 var devices []api.Device
179 devices, err = a.DB.RemoveAllDevices(ctx, local, req.ExceptDeviceID)
180 for _, d := range devices {
181 deletedDeviceIDs = append(deletedDeviceIDs, d.ID)
182 }
183 } else {
184 err = a.DB.RemoveDevices(ctx, local, req.DeviceIDs)
185 }
186 if err != nil {
187 return err
188 }
189 // Ask the keyserver to delete device keys and signatures for those devices
190 deleteReq := &keyapi.PerformDeleteKeysRequest{
191 UserID: req.UserID,
192 }
193 for _, keyID := range req.DeviceIDs {
194 deleteReq.KeyIDs = append(deleteReq.KeyIDs, gomatrixserverlib.KeyID(keyID))
195 }
196 deleteRes := &keyapi.PerformDeleteKeysResponse{}
197 a.KeyAPI.PerformDeleteKeys(ctx, deleteReq, deleteRes)
198 if err := deleteRes.Error; err != nil {
199 return fmt.Errorf("a.KeyAPI.PerformDeleteKeys: %w", err)
200 }
201 // create empty device keys and upload them to delete what was once there and trigger device list changes
202 return a.deviceListUpdate(req.UserID, deletedDeviceIDs)
203}
204
205func (a *UserInternalAPI) deviceListUpdate(userID string, deviceIDs []string) error {
206 deviceKeys := make([]keyapi.DeviceKeys, len(deviceIDs))

Callers 1

Calls 2

deviceListUpdateMethod · 0.95
PerformDeleteKeysMethod · 0.65

Tested by

no test coverage detected