aboutsummaryrefslogtreecommitdiff
path: root/federationapi/routing/routing.go
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-09-22 14:40:54 +0100
committerGitHub <noreply@github.com>2020-09-22 14:40:54 +0100
commita14b29b52617c06a548145a18b4d7cee6e529b79 (patch)
tree813e96e05884248ac97959d64b0458eba69e0665 /federationapi/routing/routing.go
parenta7563ede3d61efa626095b8b9069af9f16e7dd3d (diff)
Initial notary support (#1436)
* Initial work on notary support * Somewhat working (but not properly filtered) notary support, other tweaks * Update gomatrixserverlib
Diffstat (limited to 'federationapi/routing/routing.go')
-rw-r--r--federationapi/routing/routing.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/federationapi/routing/routing.go b/federationapi/routing/routing.go
index 71a09d42..06ed57af 100644
--- a/federationapi/routing/routing.go
+++ b/federationapi/routing/routing.go
@@ -61,6 +61,26 @@ func Setup(
return LocalKeys(cfg)
})
+ notaryKeys := httputil.MakeExternalAPI("notarykeys", func(req *http.Request) util.JSONResponse {
+ vars, err := httputil.URLDecodeMapValues(mux.Vars(req))
+ if err != nil {
+ return util.ErrorResponse(err)
+ }
+ var pkReq *gomatrixserverlib.PublicKeyNotaryLookupRequest
+ serverName := gomatrixserverlib.ServerName(vars["serverName"])
+ keyID := gomatrixserverlib.KeyID(vars["keyID"])
+ if serverName != "" && keyID != "" {
+ pkReq = &gomatrixserverlib.PublicKeyNotaryLookupRequest{
+ ServerKeys: map[gomatrixserverlib.ServerName]map[gomatrixserverlib.KeyID]gomatrixserverlib.PublicKeyNotaryQueryCriteria{
+ serverName: {
+ keyID: gomatrixserverlib.PublicKeyNotaryQueryCriteria{},
+ },
+ },
+ }
+ }
+ return NotaryKeys(req, cfg, fsAPI, pkReq)
+ })
+
// Ignore the {keyID} argument as we only have a single server key so we always
// return that key.
// Even if we had more than one server key, we would probably still ignore the
@@ -68,6 +88,8 @@ func Setup(
v2keysmux.Handle("/server/{keyID}", localKeys).Methods(http.MethodGet)
v2keysmux.Handle("/server/", localKeys).Methods(http.MethodGet)
v2keysmux.Handle("/server", localKeys).Methods(http.MethodGet)
+ v2keysmux.Handle("/query", notaryKeys).Methods(http.MethodPost)
+ v2keysmux.Handle("/query/{serverName}/{keyID}", notaryKeys).Methods(http.MethodGet)
v1fedmux.Handle("/send/{txnID}", httputil.MakeFedAPI(
"federation_send", cfg.Matrix.ServerName, keys, wakeup,