mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-04-21 03:03:40 +00:00
Some groundwork
This commit is contained in:
parent
39d66ed9d6
commit
78ab127ced
4 changed files with 71 additions and 49 deletions
2
go.mod
2
go.mod
|
@ -31,7 +31,7 @@ require (
|
||||||
github.com/matrix-org/go-http-js-libp2p v0.0.0-20200518170932-783164aeeda4
|
github.com/matrix-org/go-http-js-libp2p v0.0.0-20200518170932-783164aeeda4
|
||||||
github.com/matrix-org/go-sqlite3-js v0.0.0-20210709140738-b0d1ba599a6d
|
github.com/matrix-org/go-sqlite3-js v0.0.0-20210709140738-b0d1ba599a6d
|
||||||
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16
|
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16
|
||||||
github.com/matrix-org/gomatrixserverlib v0.0.0-20210729144422-16ebeb5d0788
|
github.com/matrix-org/gomatrixserverlib v0.0.0-20210729170648-dadeeff7cf48
|
||||||
github.com/matrix-org/naffka v0.0.0-20210623111924-14ff508b58e0
|
github.com/matrix-org/naffka v0.0.0-20210623111924-14ff508b58e0
|
||||||
github.com/matrix-org/pinecone v0.0.0-20210623102758-74f885644c1b
|
github.com/matrix-org/pinecone v0.0.0-20210623102758-74f885644c1b
|
||||||
github.com/matrix-org/util v0.0.0-20200807132607-55161520e1d4
|
github.com/matrix-org/util v0.0.0-20200807132607-55161520e1d4
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -1027,8 +1027,8 @@ github.com/matrix-org/go-sqlite3-js v0.0.0-20210709140738-b0d1ba599a6d/go.mod h1
|
||||||
github.com/matrix-org/gomatrix v0.0.0-20190528120928-7df988a63f26/go.mod h1:3fxX6gUjWyI/2Bt7J1OLhpCzOfO/bB3AiX0cJtEKud0=
|
github.com/matrix-org/gomatrix v0.0.0-20190528120928-7df988a63f26/go.mod h1:3fxX6gUjWyI/2Bt7J1OLhpCzOfO/bB3AiX0cJtEKud0=
|
||||||
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16 h1:ZtO5uywdd5dLDCud4r0r55eP4j9FuUNpl60Gmntcop4=
|
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16 h1:ZtO5uywdd5dLDCud4r0r55eP4j9FuUNpl60Gmntcop4=
|
||||||
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16/go.mod h1:/gBX06Kw0exX1HrwmoBibFA98yBk/jxKpGVeyQbff+s=
|
github.com/matrix-org/gomatrix v0.0.0-20210324163249-be2af5ef2e16/go.mod h1:/gBX06Kw0exX1HrwmoBibFA98yBk/jxKpGVeyQbff+s=
|
||||||
github.com/matrix-org/gomatrixserverlib v0.0.0-20210729144422-16ebeb5d0788 h1:wnMa7rHryaAQMke++Y9rJtrVIvRbFzbPxPYimpctx6Y=
|
github.com/matrix-org/gomatrixserverlib v0.0.0-20210729170648-dadeeff7cf48 h1:taDey9UlU14gutpcGW2A17PxsoWmcAuIexbcQUQs6NE=
|
||||||
github.com/matrix-org/gomatrixserverlib v0.0.0-20210729144422-16ebeb5d0788/go.mod h1:JsAzE1Ll3+gDWS9JSUHPJiiyAksvOOnGWF2nXdg4ZzU=
|
github.com/matrix-org/gomatrixserverlib v0.0.0-20210729170648-dadeeff7cf48/go.mod h1:JsAzE1Ll3+gDWS9JSUHPJiiyAksvOOnGWF2nXdg4ZzU=
|
||||||
github.com/matrix-org/naffka v0.0.0-20210623111924-14ff508b58e0 h1:HZCzy4oVzz55e+cOMiX/JtSF2UOY1evBl2raaE7ACcU=
|
github.com/matrix-org/naffka v0.0.0-20210623111924-14ff508b58e0 h1:HZCzy4oVzz55e+cOMiX/JtSF2UOY1evBl2raaE7ACcU=
|
||||||
github.com/matrix-org/naffka v0.0.0-20210623111924-14ff508b58e0/go.mod h1:sjyPyRxKM5uw1nD2cJ6O2OxI6GOqyVBfNXqKjBZTBZE=
|
github.com/matrix-org/naffka v0.0.0-20210623111924-14ff508b58e0/go.mod h1:sjyPyRxKM5uw1nD2cJ6O2OxI6GOqyVBfNXqKjBZTBZE=
|
||||||
github.com/matrix-org/pinecone v0.0.0-20210623102758-74f885644c1b h1:5X5vdWQ13xrNkJVqaJHPsrt7rKkMJH5iac0EtfOuxSg=
|
github.com/matrix-org/pinecone v0.0.0-20210623102758-74f885644c1b h1:5X5vdWQ13xrNkJVqaJHPsrt7rKkMJH5iac0EtfOuxSg=
|
||||||
|
|
|
@ -174,7 +174,7 @@ type PerformUploadDeviceKeysResponse struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type PerformUploadDeviceSignaturesRequest struct {
|
type PerformUploadDeviceSignaturesRequest struct {
|
||||||
Signatures map[string]map[gomatrixserverlib.KeyID]json.RawMessage
|
Signatures map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice
|
||||||
// The user that uploaded the sig, should be populated by the clientapi.
|
// The user that uploaded the sig, should be populated by the clientapi.
|
||||||
UserID string `json:"user_id"`
|
UserID string `json:"user_id"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,62 +160,84 @@ func (a *KeyInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.P
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *KeyInternalAPI) PerformUploadDeviceSignatures(ctx context.Context, req *api.PerformUploadDeviceSignaturesRequest, res *api.PerformUploadDeviceSignaturesResponse) {
|
func (a *KeyInternalAPI) PerformUploadDeviceSignatures(ctx context.Context, req *api.PerformUploadDeviceSignaturesRequest, res *api.PerformUploadDeviceSignaturesResponse) {
|
||||||
/*
|
selfSignatures := map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice{}
|
||||||
for targetUserID, forTarget := range req.Signatures {
|
otherSignatures := map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice{}
|
||||||
for targetID, signable := range forTarget {
|
|
||||||
// Work out which type of thingy it is.
|
|
||||||
|
|
||||||
|
for userID, forUserID := range req.Signatures {
|
||||||
switch obj := signable.(type) {
|
for keyID, keyOrDevice := range forUserID {
|
||||||
case *gomatrixserverlib.CrossSigningForKey: // signing a key
|
switch key := keyOrDevice.CrossSigningBody.(type) {
|
||||||
// Check to see if we know about the target user ID and key ID. If we
|
case *gomatrixserverlib.CrossSigningForKey:
|
||||||
// don't then we'll just drop the signatures.
|
if key.UserID == req.UserID {
|
||||||
keys, err := a.DB.CrossSigningKeysForUser(ctx, targetUserID)
|
if _, ok := selfSignatures[userID]; !ok {
|
||||||
if err != nil {
|
selfSignatures[userID] = map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice{}
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
foundMatchingKey := false
|
selfSignatures[userID][keyID] = keyOrDevice
|
||||||
for _, key := range keys {
|
} else {
|
||||||
if key.Encode() == targetID {
|
if _, ok := selfSignatures[userID]; !ok {
|
||||||
foundMatchingKey = true
|
otherSignatures[userID] = map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice{}
|
||||||
}
|
}
|
||||||
}
|
otherSignatures[userID][keyID] = keyOrDevice
|
||||||
if !foundMatchingKey {
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for originUserID, forOriginUserID := range obj.Signatures {
|
case *gomatrixserverlib.CrossSigningForDevice:
|
||||||
for originKeyID, signature := range forOriginUserID {
|
if key.UserID == req.UserID {
|
||||||
// TODO: check signatures
|
if _, ok := selfSignatures[userID]; !ok {
|
||||||
|
selfSignatures[userID] = map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice{}
|
||||||
err := a.DB.StoreCrossSigningSigsForTarget(ctx, originUserID, originKeyID, targetUserID, gomatrixserverlib.KeyID(targetID), signature)
|
|
||||||
if err != nil {
|
|
||||||
res.Error = &api.KeyError{
|
|
||||||
Err: "Failed to store cross-signing keys for target: " + err.Error(),
|
|
||||||
}
|
}
|
||||||
return
|
selfSignatures[userID][keyID] = keyOrDevice
|
||||||
|
} else {
|
||||||
|
if _, ok := selfSignatures[userID]; !ok {
|
||||||
|
otherSignatures[userID] = map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice{}
|
||||||
}
|
}
|
||||||
|
otherSignatures[userID][keyID] = keyOrDevice
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
case *gomatrixserverlib.CrossSigningForDevice: // signing a device
|
|
||||||
// TODO: signatures for devices
|
|
||||||
continue
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := a.processSelfSignatures(ctx, req.UserID, selfSignatures); err != nil {
|
||||||
res.Error = &api.KeyError{
|
res.Error = &api.KeyError{
|
||||||
Err: "Found an unexpected item type",
|
Err: fmt.Sprintf("a.processSelfSignatures: %s", err),
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := a.processOtherSignatures(ctx, req.UserID, otherSignatures); err != nil {
|
||||||
|
res.Error = &api.KeyError{
|
||||||
|
Err: fmt.Sprintf("a.processOtherSignatures: %s", err),
|
||||||
}
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
res.Error = &api.KeyError{
|
res.Error = &api.KeyError{
|
||||||
Err: "Not supported yet",
|
Err: "Not supported yet",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *KeyInternalAPI) processSelfSignatures(
|
||||||
|
ctx context.Context, userID string,
|
||||||
|
signatures map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice,
|
||||||
|
) error {
|
||||||
|
// Here we will process:
|
||||||
|
// * The user signing their own devices using their self-signing key
|
||||||
|
// * The user signing their master key using one of their devices
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *KeyInternalAPI) processOtherSignatures(
|
||||||
|
ctx context.Context, userID string,
|
||||||
|
signatures map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice,
|
||||||
|
) error {
|
||||||
|
// Here we will process:
|
||||||
|
// * A user signing someone else's master keys using their user-signing keys
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (a *KeyInternalAPI) crossSigningKeys(
|
func (a *KeyInternalAPI) crossSigningKeys(
|
||||||
ctx context.Context, req *api.QueryKeysRequest, res *api.QueryKeysResponse,
|
ctx context.Context, req *api.QueryKeysRequest, res *api.QueryKeysResponse,
|
||||||
) error {
|
) error {
|
||||||
|
|
Loading…
Reference in a new issue