mirror of
https://github.com/element-hq/dendrite.git
synced 2025-09-13 21:02:25 +03:00
mas: fix key_crosssigning_test.go
This commit is contained in:
parent
b44f899637
commit
021431c710
2 changed files with 61 additions and 18 deletions
|
@ -10,6 +10,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/element-hq/dendrite/userapi/types"
|
||||||
|
|
||||||
"github.com/element-hq/dendrite/setup/config"
|
"github.com/element-hq/dendrite/setup/config"
|
||||||
"github.com/element-hq/dendrite/test"
|
"github.com/element-hq/dendrite/test"
|
||||||
"github.com/element-hq/dendrite/test/testrig"
|
"github.com/element-hq/dendrite/test/testrig"
|
||||||
|
@ -21,18 +23,27 @@ import (
|
||||||
|
|
||||||
type mockKeyAPI struct {
|
type mockKeyAPI struct {
|
||||||
t *testing.T
|
t *testing.T
|
||||||
userResponses map[string]api.QueryKeysResponse
|
queryKeysData map[string]api.QueryKeysResponse
|
||||||
|
queryMasterKeysData map[string]api.QueryMasterKeysResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m mockKeyAPI) QueryKeys(ctx context.Context, req *api.QueryKeysRequest, res *api.QueryKeysResponse) {
|
func (m mockKeyAPI) QueryKeys(ctx context.Context, req *api.QueryKeysRequest, res *api.QueryKeysResponse) {
|
||||||
res.MasterKeys = m.userResponses[req.UserID].MasterKeys
|
res.MasterKeys = m.queryKeysData[req.UserID].MasterKeys
|
||||||
res.SelfSigningKeys = m.userResponses[req.UserID].SelfSigningKeys
|
res.SelfSigningKeys = m.queryKeysData[req.UserID].SelfSigningKeys
|
||||||
res.UserSigningKeys = m.userResponses[req.UserID].UserSigningKeys
|
res.UserSigningKeys = m.queryKeysData[req.UserID].UserSigningKeys
|
||||||
if m.t != nil {
|
if m.t != nil {
|
||||||
m.t.Logf("QueryKeys: %+v => %+v", req, res)
|
m.t.Logf("QueryKeys: %+v => %+v", req, res)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m mockKeyAPI) QueryMasterKeys(ctx context.Context, req *api.QueryMasterKeysRequest, res *api.QueryMasterKeysResponse) {
|
||||||
|
res.Key = m.queryMasterKeysData[req.UserID].Key
|
||||||
|
res.Error = m.queryMasterKeysData[req.UserID].Error
|
||||||
|
if m.t != nil {
|
||||||
|
m.t.Logf("QueryMasterKeys: %+v => %+v", req, res)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (m mockKeyAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.PerformUploadDeviceKeysRequest, res *api.PerformUploadDeviceKeysResponse) {
|
func (m mockKeyAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.PerformUploadDeviceKeysRequest, res *api.PerformUploadDeviceKeysResponse) {
|
||||||
// Just a dummy upload which always succeeds
|
// Just a dummy upload which always succeeds
|
||||||
}
|
}
|
||||||
|
@ -53,13 +64,19 @@ func Test_UploadCrossSigningDeviceKeys_ValidRequest(t *testing.T) {
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
keyserverAPI := &mockKeyAPI{
|
keyserverAPI := &mockKeyAPI{
|
||||||
userResponses: map[string]api.QueryKeysResponse{
|
queryKeysData: map[string]api.QueryKeysResponse{
|
||||||
|
"@user:example.com": {},
|
||||||
|
},
|
||||||
|
queryMasterKeysData: map[string]api.QueryMasterKeysResponse{
|
||||||
"@user:example.com": {},
|
"@user:example.com": {},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
device := &api.Device{UserID: "@user:example.com", ID: "device"}
|
device := &api.Device{UserID: "@user:example.com", ID: "device"}
|
||||||
cfg := &config.ClientAPI{}
|
cfg := &config.ClientAPI{
|
||||||
|
MSCs: &config.MSCs{
|
||||||
|
MSCs: []string{},
|
||||||
|
},
|
||||||
|
}
|
||||||
res := UploadCrossSigningDeviceKeys(req, keyserverAPI, device, getAccountByPassword, cfg)
|
res := UploadCrossSigningDeviceKeys(req, keyserverAPI, device, getAccountByPassword, cfg)
|
||||||
if res.Code != http.StatusOK {
|
if res.Code != http.StatusOK {
|
||||||
t.Fatalf("expected status %d, got %d", http.StatusOK, res.Code)
|
t.Fatalf("expected status %d, got %d", http.StatusOK, res.Code)
|
||||||
|
@ -101,18 +118,32 @@ func Test_UploadCrossSigningDeviceKeys_Unauthorised(t *testing.T) {
|
||||||
|
|
||||||
keyserverAPI := &mockKeyAPI{
|
keyserverAPI := &mockKeyAPI{
|
||||||
t: t,
|
t: t,
|
||||||
userResponses: map[string]api.QueryKeysResponse{
|
queryKeysData: map[string]api.QueryKeysResponse{
|
||||||
"@user:example.com": {
|
"@user:example.com": {
|
||||||
MasterKeys: map[string]fclient.CrossSigningKey{
|
MasterKeys: map[string]fclient.CrossSigningKey{
|
||||||
"@user:example.com": {UserID: "@user:example.com", Usage: []fclient.CrossSigningKeyPurpose{"master"}, Keys: map[gomatrixserverlib.KeyID]spec.Base64Bytes{"ed25519:1": spec.Base64Bytes("key1")}},
|
"@user:example.com": {
|
||||||
|
UserID: "@user:example.com",
|
||||||
|
Usage: []fclient.CrossSigningKeyPurpose{fclient.CrossSigningKeyPurposeMaster},
|
||||||
|
Keys: map[gomatrixserverlib.KeyID]spec.Base64Bytes{"ed25519:1": spec.Base64Bytes("key1")}},
|
||||||
},
|
},
|
||||||
SelfSigningKeys: nil,
|
SelfSigningKeys: nil,
|
||||||
UserSigningKeys: nil,
|
UserSigningKeys: nil,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
queryMasterKeysData: map[string]api.QueryMasterKeysResponse{
|
||||||
|
"@user:example.com": {
|
||||||
|
Key: &types.CrossSigningKey{
|
||||||
|
KeyData: spec.Base64Bytes("key1"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
device := &api.Device{UserID: "@user:example.com", ID: "device"}
|
device := &api.Device{UserID: "@user:example.com", ID: "device"}
|
||||||
cfg := &config.ClientAPI{}
|
cfg := &config.ClientAPI{
|
||||||
|
MSCs: &config.MSCs{
|
||||||
|
MSCs: []string{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
res := UploadCrossSigningDeviceKeys(req, keyserverAPI, device, getAccountByPassword, cfg)
|
res := UploadCrossSigningDeviceKeys(req, keyserverAPI, device, getAccountByPassword, cfg)
|
||||||
if res.Code != http.StatusUnauthorized {
|
if res.Code != http.StatusUnauthorized {
|
||||||
|
@ -132,8 +163,11 @@ func Test_UploadCrossSigningDeviceKeys_InvalidJSON(t *testing.T) {
|
||||||
|
|
||||||
keyserverAPI := &mockKeyAPI{}
|
keyserverAPI := &mockKeyAPI{}
|
||||||
device := &api.Device{UserID: "@user:example.com", ID: "device"}
|
device := &api.Device{UserID: "@user:example.com", ID: "device"}
|
||||||
cfg := &config.ClientAPI{}
|
cfg := &config.ClientAPI{
|
||||||
|
MSCs: &config.MSCs{
|
||||||
|
MSCs: []string{},
|
||||||
|
},
|
||||||
|
}
|
||||||
res := UploadCrossSigningDeviceKeys(req, keyserverAPI, device, getAccountByPassword, cfg)
|
res := UploadCrossSigningDeviceKeys(req, keyserverAPI, device, getAccountByPassword, cfg)
|
||||||
if res.Code != http.StatusBadRequest {
|
if res.Code != http.StatusBadRequest {
|
||||||
t.Fatalf("expected status %d, got %d", http.StatusBadRequest, res.Code)
|
t.Fatalf("expected status %d, got %d", http.StatusBadRequest, res.Code)
|
||||||
|
@ -151,10 +185,21 @@ func Test_UploadCrossSigningDeviceKeys_ExistingKeysMismatch(t *testing.T) {
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
keyserverAPI := &mockKeyAPI{
|
keyserverAPI := &mockKeyAPI{
|
||||||
userResponses: map[string]api.QueryKeysResponse{
|
queryKeysData: map[string]api.QueryKeysResponse{
|
||||||
"@user:example.com": {
|
"@user:example.com": {
|
||||||
MasterKeys: map[string]fclient.CrossSigningKey{
|
MasterKeys: map[string]fclient.CrossSigningKey{
|
||||||
"@user:example.com": {UserID: "@user:example.com", Usage: []fclient.CrossSigningKeyPurpose{"master"}, Keys: map[gomatrixserverlib.KeyID]spec.Base64Bytes{"ed25519:1": spec.Base64Bytes("different_key")}},
|
"@user:example.com": {
|
||||||
|
UserID: "@user:example.com",
|
||||||
|
Usage: []fclient.CrossSigningKeyPurpose{fclient.CrossSigningKeyPurposeMaster},
|
||||||
|
Keys: map[gomatrixserverlib.KeyID]spec.Base64Bytes{"ed25519:1": spec.Base64Bytes("different_key")},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
queryMasterKeysData: map[string]api.QueryMasterKeysResponse{
|
||||||
|
"@user:example.com": {
|
||||||
|
Key: &types.CrossSigningKey{
|
||||||
|
KeyData: spec.Base64Bytes("different_key"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
import "slices"
|
|
||||||
|
|
||||||
type MSCs struct {
|
type MSCs struct {
|
||||||
Matrix *Global `yaml:"-"`
|
Matrix *Global `yaml:"-"`
|
||||||
|
|
||||||
|
@ -46,7 +44,7 @@ func (c *MSCs) Verify(configErrs *ConfigErrors) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *MSCs) MSC3861Enabled() bool {
|
func (c *MSCs) MSC3861Enabled() bool {
|
||||||
return slices.Contains(c.MSCs, "msc3861") && c.MSC3861 != nil
|
return c.Enabled("msc3861") && c.MSC3861 != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type MSC3861 struct {
|
type MSC3861 struct {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue