diff options
author | Kegsay <kegan@matrix.org> | 2020-07-15 12:02:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-15 12:02:34 +0100 |
commit | 9dd2ed7f6513e8fa677dee8d7dafa33f9c7afdfc (patch) | |
tree | 5c09582128d156aa2b6629cdaae626b44357b48d /keyserver/internal | |
parent | b4c07995d68dbeffa2161920cb4cd61ea2be8389 (diff) |
Implement key uploads (#1202)
* Add storage layer for postgres/sqlite
* Return OTK counts when inserting new keys
* Hook up the key DB and make a test pass
* Convert postgres queries to be sqlite queries
* Blacklist test due to requiring rejected events
* Unbreak tests
* Update blacklist
Diffstat (limited to 'keyserver/internal')
-rw-r--r-- | keyserver/internal/internal.go | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/keyserver/internal/internal.go b/keyserver/internal/internal.go index ac68fa55..a7b0f93c 100644 --- a/keyserver/internal/internal.go +++ b/keyserver/internal/internal.go @@ -25,7 +25,7 @@ import ( ) type KeyInternalAPI struct { - db storage.Database + DB storage.Database } func (a *KeyInternalAPI) PerformUploadKeys(ctx context.Context, req *api.PerformUploadKeysRequest, res *api.PerformUploadKeysResponse) { @@ -52,7 +52,7 @@ func (a *KeyInternalAPI) uploadDeviceKeys(ctx context.Context, req *api.PerformU } res.KeyError(key.UserID, key.DeviceID, &api.KeyError{ - Error: fmt.Sprintf( + Err: fmt.Sprintf( "user_id or device_id mismatch: users: %s - %s, devices: %s - %s", gotUserID, key.UserID, gotDeviceID, key.DeviceID, ), @@ -66,16 +66,16 @@ func (a *KeyInternalAPI) uploadDeviceKeys(ctx context.Context, req *api.PerformU DeviceID: keysToStore[i].DeviceID, } } - if err := a.db.DeviceKeysJSON(ctx, existingKeys); err != nil { + if err := a.DB.DeviceKeysJSON(ctx, existingKeys); err != nil { res.Error = &api.KeyError{ - Error: fmt.Sprintf("failed to query existing device keys: %s", err.Error()), + Err: fmt.Sprintf("failed to query existing device keys: %s", err.Error()), } return } // store the device keys and emit changes - if err := a.db.StoreDeviceKeys(ctx, keysToStore); err != nil { + if err := a.DB.StoreDeviceKeys(ctx, keysToStore); err != nil { res.Error = &api.KeyError{ - Error: fmt.Sprintf("failed to store device keys: %s", err.Error()), + Err: fmt.Sprintf("failed to store device keys: %s", err.Error()), } return } @@ -91,10 +91,10 @@ func (a *KeyInternalAPI) uploadOneTimeKeys(ctx context.Context, req *api.Perform keyIDsWithAlgorithms[i] = keyIDWithAlgo i++ } - existingKeys, err := a.db.ExistingOneTimeKeys(ctx, key.UserID, key.DeviceID, keyIDsWithAlgorithms) + existingKeys, err := a.DB.ExistingOneTimeKeys(ctx, key.UserID, key.DeviceID, keyIDsWithAlgorithms) if err != nil { res.KeyError(key.UserID, key.DeviceID, &api.KeyError{ - Error: "failed to query existing one-time keys: " + err.Error(), + Err: "failed to query existing one-time keys: " + err.Error(), }) continue } @@ -102,17 +102,21 @@ func (a *KeyInternalAPI) uploadOneTimeKeys(ctx context.Context, req *api.Perform // if keys exist and the JSON doesn't match, error out as the key already exists if !bytes.Equal(existingKeys[keyIDWithAlgo], key.KeyJSON[keyIDWithAlgo]) { res.KeyError(key.UserID, key.DeviceID, &api.KeyError{ - Error: fmt.Sprintf("%s device %s: algorithm / key ID %s one-time key already exists", key.UserID, key.DeviceID, keyIDWithAlgo), + Err: fmt.Sprintf("%s device %s: algorithm / key ID %s one-time key already exists", key.UserID, key.DeviceID, keyIDWithAlgo), }) continue } } // store one-time keys - if err := a.db.StoreOneTimeKeys(ctx, key); err != nil { + counts, err := a.DB.StoreOneTimeKeys(ctx, key) + if err != nil { res.KeyError(key.UserID, key.DeviceID, &api.KeyError{ - Error: fmt.Sprintf("%s device %s : failed to store one-time keys: %s", key.UserID, key.DeviceID, err.Error()), + Err: fmt.Sprintf("%s device %s : failed to store one-time keys: %s", key.UserID, key.DeviceID, err.Error()), }) + continue } + // collect counts + res.OneTimeKeyCounts = append(res.OneTimeKeyCounts, *counts) } } |