Get keys from a given backup version. Response returned varies depending on if roomID and sessionID are set.
( req *http.Request, userAPI userapi.ClientUserAPI, device *userapi.Device, version, roomID, sessionID string, )
| 230 | |
| 231 | // Get keys from a given backup version. Response returned varies depending on if roomID and sessionID are set. |
| 232 | func GetBackupKeys( |
| 233 | req *http.Request, userAPI userapi.ClientUserAPI, device *userapi.Device, version, roomID, sessionID string, |
| 234 | ) util.JSONResponse { |
| 235 | var queryResp userapi.QueryKeyBackupResponse |
| 236 | userAPI.QueryKeyBackup(req.Context(), &userapi.QueryKeyBackupRequest{ |
| 237 | UserID: device.UserID, |
| 238 | Version: version, |
| 239 | ReturnKeys: true, |
| 240 | KeysForRoomID: roomID, |
| 241 | KeysForSessionID: sessionID, |
| 242 | }, &queryResp) |
| 243 | if queryResp.Error != "" { |
| 244 | return util.ErrorResponse(fmt.Errorf("QueryKeyBackup: %s", queryResp.Error)) |
| 245 | } |
| 246 | if !queryResp.Exists { |
| 247 | return util.JSONResponse{ |
| 248 | Code: 404, |
| 249 | JSON: jsonerror.NotFound("version not found"), |
| 250 | } |
| 251 | } |
| 252 | if sessionID != "" { |
| 253 | // return the key itself if it was found |
| 254 | roomData, ok := queryResp.Keys[roomID] |
| 255 | if ok { |
| 256 | key, ok := roomData[sessionID] |
| 257 | if ok { |
| 258 | return util.JSONResponse{ |
| 259 | Code: 200, |
| 260 | JSON: key, |
| 261 | } |
| 262 | } |
| 263 | } |
| 264 | } else if roomID != "" { |
| 265 | roomData, ok := queryResp.Keys[roomID] |
| 266 | if ok { |
| 267 | // wrap response in "sessions" |
| 268 | return util.JSONResponse{ |
| 269 | Code: 200, |
| 270 | JSON: struct { |
| 271 | Sessions map[string]userapi.KeyBackupSession `json:"sessions"` |
| 272 | }{ |
| 273 | Sessions: roomData, |
| 274 | }, |
| 275 | } |
| 276 | } |
| 277 | } else { |
| 278 | // response is the same as the upload request |
| 279 | var resp keyBackupSessionRequest |
| 280 | resp.Rooms = make(map[string]struct { |
| 281 | Sessions map[string]userapi.KeyBackupSession `json:"sessions"` |
| 282 | }) |
| 283 | for roomID, roomData := range queryResp.Keys { |
| 284 | resp.Rooms[roomID] = struct { |
| 285 | Sessions map[string]userapi.KeyBackupSession `json:"sessions"` |
| 286 | }{ |
| 287 | Sessions: roomData, |
| 288 | } |
| 289 | } |
no test coverage detected