diff --git a/keyserver/api/api.go b/keyserver/api/api.go index 520562e7a..aa6df96f8 100644 --- a/keyserver/api/api.go +++ b/keyserver/api/api.go @@ -160,7 +160,7 @@ type PerformClaimKeysResponse struct { type PerformUploadDeviceKeysRequest struct { gomatrixserverlib.CrossSigningKeys // The user that uploaded the key, should be populated by the clientapi. - UserID string `json:"user_id"` + UserID string } type PerformUploadDeviceKeysResponse struct { @@ -170,7 +170,7 @@ type PerformUploadDeviceKeysResponse struct { type PerformUploadDeviceSignaturesRequest struct { Signatures map[string]map[gomatrixserverlib.KeyID]gomatrixserverlib.CrossSigningForKeyOrDevice // The user that uploaded the sig, should be populated by the clientapi. - UserID string `json:"user_id"` + UserID string } type PerformUploadDeviceSignaturesResponse struct { diff --git a/keyserver/internal/cross_signing.go b/keyserver/internal/cross_signing.go index 7575b6522..28126fbc0 100644 --- a/keyserver/internal/cross_signing.go +++ b/keyserver/internal/cross_signing.go @@ -117,46 +117,11 @@ func (a *KeyInternalAPI) PerformUploadDeviceKeys(ctx context.Context, req *api.P masterKey, hasMasterKey = existingKeys[gomatrixserverlib.CrossSigningKeyPurposeMaster] } - // If the user isn't a local user and we haven't successfully found a key - // through any local means then ask over federation. - if !hasMasterKey { - _, host, err := gomatrixserverlib.SplitID('@', req.UserID) - if err != nil { - res.Error = &api.KeyError{ - Err: "Retrieving cross-signing keys from federation failed: " + err.Error(), - } - return - } - keys, err := a.FedClient.QueryKeys(ctx, host, map[string][]string{ - req.UserID: {}, - }) - if err != nil { - res.Error = &api.KeyError{ - Err: "Retrieving cross-signing keys from federation failed: " + err.Error(), - } - return - } - switch k := keys.MasterKeys[req.UserID].CrossSigningBody.(type) { - case *gomatrixserverlib.CrossSigningKey: - if err := sanityCheckKey(*k, req.UserID, gomatrixserverlib.CrossSigningKeyPurposeMaster); err != nil { - res.Error = &api.KeyError{ - Err: "Master key sanity check failed: " + err.Error(), - } - return - } - default: - res.Error = &api.KeyError{ - Err: "Unexpected type for master key retrieved from federation", - } - return - } - } - // If we still don't have a master key at this point then there's nothing else // we can do - we've checked both the request and the database. if !hasMasterKey { res.Error = &api.KeyError{ - Err: "No master key was found, either in the database or in the request!", + Err: "No master key was found either in the database or in the request!", IsMissingParam: true, } return diff --git a/keyserver/internal/internal.go b/keyserver/internal/internal.go index 28638c294..668587e2a 100644 --- a/keyserver/internal/internal.go +++ b/keyserver/internal/internal.go @@ -372,9 +372,15 @@ func (a *KeyInternalAPI) queryRemoteKeys( domains := map[string]struct{}{} for domain := range domainToDeviceKeys { + if domain == string(a.ThisServer) { + continue + } domains[domain] = struct{}{} } for domain := range domainToCrossSigningKeys { + if domain == string(a.ThisServer) { + continue + } domains[domain] = struct{}{} } wg.Add(len(domains)) @@ -430,8 +436,12 @@ func (a *KeyInternalAPI) queryRemoteKeysOnServer( res *api.QueryKeysResponse, ) { defer wg.Done() - fedCtx, cancel := context.WithTimeout(ctx, timeout) - defer cancel() + fedCtx := ctx + if timeout > 0 { + var cancel context.CancelFunc + fedCtx, cancel = context.WithTimeout(ctx, timeout) + defer cancel() + } // for users who we do not have any knowledge about, try to start doing device list updates for them // by hitting /users/devices - otherwise fallback to /keys/query which has nicer bulk properties but // lack a stream ID. diff --git a/keyserver/inthttp/server.go b/keyserver/inthttp/server.go index ac70e3e55..475544a5b 100644 --- a/keyserver/inthttp/server.go +++ b/keyserver/inthttp/server.go @@ -62,7 +62,7 @@ func AddRoutes(internalAPIMux *mux.Router, s api.KeyInternalAPI) { httputil.MakeInternalAPI("performUploadDeviceKeys", func(req *http.Request) util.JSONResponse { request := api.PerformUploadDeviceKeysRequest{} response := api.PerformUploadDeviceKeysResponse{} - if err := json.NewDecoder(req.Body).Decode(&request.CrossSigningKeys); err != nil { + if err := json.NewDecoder(req.Body).Decode(&request); err != nil { return util.MessageResponse(http.StatusBadRequest, err.Error()) } s.PerformUploadDeviceKeys(req.Context(), &request, &response) @@ -73,7 +73,7 @@ func AddRoutes(internalAPIMux *mux.Router, s api.KeyInternalAPI) { httputil.MakeInternalAPI("performUploadDeviceSignatures", func(req *http.Request) util.JSONResponse { request := api.PerformUploadDeviceSignaturesRequest{} response := api.PerformUploadDeviceSignaturesResponse{} - if err := json.NewDecoder(req.Body).Decode(&request.Signatures); err != nil { + if err := json.NewDecoder(req.Body).Decode(&request); err != nil { return util.MessageResponse(http.StatusBadRequest, err.Error()) } s.PerformUploadDeviceSignatures(req.Context(), &request, &response)