From c46f7d63165fabcb6ca21d4ee663f4b9da8ae36a Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Tue, 27 Jul 2021 18:30:38 +0100 Subject: [PATCH] Apparently only the current version supports uploading keys --- sytest-whitelist | 1 + userapi/internal/api.go | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/sytest-whitelist b/sytest-whitelist index d9efa8264..6bb3d770a 100644 --- a/sytest-whitelist +++ b/sytest-whitelist @@ -546,6 +546,7 @@ Responds correctly when backup is empty Can backup keys Can update keys with better versions Will not update keys with worse versions +Will not back up to an old backup version Can create more than 10 backup versions Can delete backup Deleted & recreated backups are empty diff --git a/userapi/internal/api.go b/userapi/internal/api.go index 006e1eff1..cd760e41c 100644 --- a/userapi/internal/api.go +++ b/userapi/internal/api.go @@ -444,10 +444,6 @@ func (a *UserInternalAPI) QueryOpenIDToken(ctx context.Context, req *api.QueryOp } func (a *UserInternalAPI) PerformKeyBackup(ctx context.Context, req *api.PerformKeyBackupRequest, res *api.PerformKeyBackupResponse) { - logrus.Infof("PerformKeyBackup REQ= %+v", *req) - defer func() { - logrus.Infof("PerformKeyBackup RESP= %+v", *res) - }() // Delete metadata if req.DeleteBackup { if req.Version == "" { @@ -488,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 @@ -498,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