aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-05-14 14:05:14 +0100
committerGitHub <noreply@github.com>2020-05-14 14:05:14 +0100
commit8adc128225127f6e600e12987dd4767cbb681703 (patch)
tree46daa515b962b014f6eba3415adc507c97745cb0
parent9ed68a3125d9024f52bf89810abf3b203f4b25b7 (diff)
Keyserver skeleton (#1032)
* Keyserver skeleton * Indentation
-rw-r--r--cmd/dendrite-key-server/main.go34
-rw-r--r--cmd/dendrite-monolith-server/main.go4
-rw-r--r--common/config/config.go2
-rw-r--r--dendrite-config.yaml1
-rw-r--r--docker/docker-compose.yml10
-rw-r--r--docker/services/key-server.sh5
-rw-r--r--keyserver/keyserver.go32
-rw-r--r--keyserver/routing/keys.go33
-rw-r--r--keyserver/routing/routing.go56
9 files changed, 177 insertions, 0 deletions
diff --git a/cmd/dendrite-key-server/main.go b/cmd/dendrite-key-server/main.go
new file mode 100644
index 00000000..5b2166d9
--- /dev/null
+++ b/cmd/dendrite-key-server/main.go
@@ -0,0 +1,34 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package main
+
+import (
+ "github.com/matrix-org/dendrite/common/basecomponent"
+ "github.com/matrix-org/dendrite/keyserver"
+)
+
+func main() {
+ cfg := basecomponent.ParseFlags()
+ base := basecomponent.NewBaseDendrite(cfg, "KeyServer")
+ defer base.Close() // nolint: errcheck
+
+ accountDB := base.CreateAccountsDB()
+ deviceDB := base.CreateDeviceDB()
+
+ keyserver.SetupKeyServerComponent(base, deviceDB, accountDB)
+
+ base.SetupAndServeHTTP(string(base.Cfg.Bind.KeyServer), string(base.Cfg.Listen.KeyServer))
+
+}
diff --git a/cmd/dendrite-monolith-server/main.go b/cmd/dendrite-monolith-server/main.go
index e004bc12..f2261061 100644
--- a/cmd/dendrite-monolith-server/main.go
+++ b/cmd/dendrite-monolith-server/main.go
@@ -29,6 +29,7 @@ import (
"github.com/matrix-org/dendrite/eduserver/cache"
"github.com/matrix-org/dendrite/federationapi"
"github.com/matrix-org/dendrite/federationsender"
+ "github.com/matrix-org/dendrite/keyserver"
"github.com/matrix-org/dendrite/mediaapi"
"github.com/matrix-org/dendrite/publicroomsapi"
"github.com/matrix-org/dendrite/publicroomsapi/storage"
@@ -76,6 +77,9 @@ func main() {
federation, &keyRing, rsAPI,
eduInputAPI, asAPI, transactions.New(), fsAPI,
)
+ keyserver.SetupKeyServerComponent(
+ base, deviceDB, accountDB,
+ )
eduProducer := producers.NewEDUServerProducer(eduInputAPI)
federationapi.SetupFederationAPIComponent(base, accountDB, deviceDB, federation, &keyRing, rsAPI, asAPI, fsAPI, eduProducer)
mediaapi.SetupMediaAPIComponent(base, deviceDB)
diff --git a/common/config/config.go b/common/config/config.go
index 9a29186a..e1e96f9d 100644
--- a/common/config/config.go
+++ b/common/config/config.go
@@ -229,6 +229,7 @@ type Dendrite struct {
FederationSender Address `yaml:"federation_sender"`
PublicRoomsAPI Address `yaml:"public_rooms_api"`
EDUServer Address `yaml:"edu_server"`
+ KeyServer Address `yaml:"key_server"`
} `yaml:"bind"`
// The addresses for talking to other microservices.
@@ -242,6 +243,7 @@ type Dendrite struct {
FederationSender Address `yaml:"federation_sender"`
PublicRoomsAPI Address `yaml:"public_rooms_api"`
EDUServer Address `yaml:"edu_server"`
+ KeyServer Address `yaml:"key_server"`
} `yaml:"listen"`
// The config for tracing the dendrite servers.
diff --git a/dendrite-config.yaml b/dendrite-config.yaml
index 536b0f42..2616d74d 100644
--- a/dendrite-config.yaml
+++ b/dendrite-config.yaml
@@ -137,6 +137,7 @@ listen:
federation_sender: "localhost:7776"
appservice_api: "localhost:7777"
edu_server: "localhost:7778"
+ key_server: "localhost:7779"
# The configuration for tracing the dendrite components.
tracing:
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 957c3bf3..c6bb4581 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -153,6 +153,16 @@ services:
- postgres
networks:
- internal
+
+ key_server:
+ container_name: dendrite_key_server
+ hostname: key_server
+ entrypoint: ["bash", "./docker/services/key-server.sh"]
+ build: ./
+ volumes:
+ - ..:/build
+ networks:
+ - internal
postgres:
container_name: dendrite_postgres
diff --git a/docker/services/key-server.sh b/docker/services/key-server.sh
new file mode 100644
index 00000000..965fa854
--- /dev/null
+++ b/docker/services/key-server.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+bash ./docker/build.sh
+
+./bin/dendrite-key-server --config dendrite.yaml
diff --git a/keyserver/keyserver.go b/keyserver/keyserver.go
new file mode 100644
index 00000000..1e0d5cb4
--- /dev/null
+++ b/keyserver/keyserver.go
@@ -0,0 +1,32 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package keyserver
+
+import (
+ "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts"
+ "github.com/matrix-org/dendrite/clientapi/auth/storage/devices"
+ "github.com/matrix-org/dendrite/common/basecomponent"
+ "github.com/matrix-org/dendrite/keyserver/routing"
+)
+
+// SetupFederationSenderComponent sets up and registers HTTP handlers for the
+// FederationSender component.
+func SetupKeyServerComponent(
+ base *basecomponent.BaseDendrite,
+ deviceDB devices.Database,
+ accountsDB accounts.Database,
+) {
+ routing.Setup(base.APIMux, base.Cfg, accountsDB, deviceDB)
+}
diff --git a/keyserver/routing/keys.go b/keyserver/routing/keys.go
new file mode 100644
index 00000000..a279a747
--- /dev/null
+++ b/keyserver/routing/keys.go
@@ -0,0 +1,33 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package routing
+
+import (
+ "net/http"
+
+ "github.com/matrix-org/util"
+)
+
+func QueryKeys(
+ req *http.Request,
+) util.JSONResponse {
+ return util.JSONResponse{
+ Code: http.StatusOK,
+ JSON: map[string]interface{}{
+ "failures": map[string]interface{}{},
+ "device_keys": map[string]interface{}{},
+ },
+ }
+}
diff --git a/keyserver/routing/routing.go b/keyserver/routing/routing.go
new file mode 100644
index 00000000..d79ce6d4
--- /dev/null
+++ b/keyserver/routing/routing.go
@@ -0,0 +1,56 @@
+// Copyright 2020 The Matrix.org Foundation C.I.C.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package routing
+
+import (
+ "net/http"
+
+ "github.com/gorilla/mux"
+ "github.com/matrix-org/dendrite/clientapi/auth"
+ "github.com/matrix-org/dendrite/clientapi/auth/authtypes"
+ "github.com/matrix-org/dendrite/clientapi/auth/storage/accounts"
+ "github.com/matrix-org/dendrite/clientapi/auth/storage/devices"
+ "github.com/matrix-org/dendrite/common"
+ "github.com/matrix-org/dendrite/common/config"
+ "github.com/matrix-org/util"
+)
+
+const pathPrefixR0 = "/_matrix/client/r0"
+
+// Setup registers HTTP handlers with the given ServeMux. It also supplies the given http.Client
+// to clients which need to make outbound HTTP requests.
+//
+// Due to Setup being used to call many other functions, a gocyclo nolint is
+// applied:
+// nolint: gocyclo
+func Setup(
+ apiMux *mux.Router, cfg *config.Dendrite,
+ accountDB accounts.Database,
+ deviceDB devices.Database,
+) {
+ r0mux := apiMux.PathPrefix(pathPrefixR0).Subrouter()
+
+ authData := auth.Data{
+ AccountDB: accountDB,
+ DeviceDB: deviceDB,
+ AppServices: cfg.Derived.ApplicationServices,
+ }
+
+ r0mux.Handle("/keys/query",
+ common.MakeAuthAPI("queryKeys", authData, func(req *http.Request, device *authtypes.Device) util.JSONResponse {
+ return QueryKeys(req)
+ }),
+ ).Methods(http.MethodPost, http.MethodOptions)
+}