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

Function GetBackupKeys

clientapi/routing/key_backup.go:232–299  ·  view source on GitHub ↗

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,
)

Source from the content-addressed store, hash-verified

230
231// Get keys from a given backup version. Response returned varies depending on if roomID and sessionID are set.
232func 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 }

Callers 1

SetupFunction · 0.85

Calls 2

ContextMethod · 0.80
QueryKeyBackupMethod · 0.65

Tested by

no test coverage detected