aboutsummaryrefslogtreecommitdiff
path: root/userapi/internal/api.go
diff options
context:
space:
mode:
authorkegsay <kegan@matrix.org>2021-07-27 19:29:32 +0100
committerGitHub <noreply@github.com>2021-07-27 19:29:32 +0100
commit32bf14a37c79a02fc5e76a7071d7494bb362be53 (patch)
treea7e8298c3c54999b6d691a8489c63cb890006b78 /userapi/internal/api.go
parentb3754d68fcbe9022eb0bf4f8eda7102b7c27e62d (diff)
Key Backups (3/3) : Implement querying keys and various bugfixes (#1946)
* Add querying device keys Makes a bunch of sytests pass * Apparently only the current version supports uploading keys * Linting
Diffstat (limited to 'userapi/internal/api.go')
-rw-r--r--userapi/internal/api.go28
1 files changed, 23 insertions, 5 deletions
diff --git a/userapi/internal/api.go b/userapi/internal/api.go
index 27e17963..a2bc8ecf 100644
--- a/userapi/internal/api.go
+++ b/userapi/internal/api.go
@@ -475,6 +475,7 @@ func (a *UserInternalAPI) PerformKeyBackup(ctx context.Context, req *api.Perform
if err != nil {
res.Error = fmt.Sprintf("failed to update backup: %s", err)
}
+ res.Exists = err == nil
res.Version = req.Version
return
}
@@ -483,8 +484,8 @@ func (a *UserInternalAPI) PerformKeyBackup(ctx context.Context, req *api.Perform
}
func (a *UserInternalAPI) uploadBackupKeys(ctx context.Context, req *api.PerformKeyBackupRequest, res *api.PerformKeyBackupResponse) {
- // ensure the version metadata exists
- version, _, _, _, deleted, err := a.AccountDB.GetKeyBackup(ctx, req.UserID, req.Version)
+ // you can only upload keys for the CURRENT version
+ version, _, _, _, deleted, err := a.AccountDB.GetKeyBackup(ctx, req.UserID, "")
if err != nil {
res.Error = fmt.Sprintf("failed to query version: %s", err)
return
@@ -493,6 +494,11 @@ func (a *UserInternalAPI) uploadBackupKeys(ctx context.Context, req *api.Perform
res.Error = "backup was deleted"
return
}
+ if version != req.Version {
+ res.BadInput = true
+ res.Error = fmt.Sprintf("%s isn't the current version, %s is.", req.Version, version)
+ return
+ }
res.Exists = true
res.Version = version
@@ -529,9 +535,21 @@ func (a *UserInternalAPI) QueryKeyBackup(ctx context.Context, req *api.QueryKeyB
}
res.Algorithm = algorithm
res.AuthData = authData
+ res.ETag = etag
res.Exists = !deleted
- // TODO:
- res.Count = 0
- res.ETag = etag
+ if !req.ReturnKeys {
+ res.Count, err = a.AccountDB.CountBackupKeys(ctx, version, req.UserID)
+ if err != nil {
+ res.Error = fmt.Sprintf("failed to count keys: %s", err)
+ }
+ return
+ }
+
+ result, err := a.AccountDB.GetBackupKeys(ctx, version, req.UserID, req.KeysForRoomID, req.KeysForSessionID)
+ if err != nil {
+ res.Error = fmt.Sprintf("failed to query keys: %s", err)
+ return
+ }
+ res.Keys = result
}