aboutsummaryrefslogtreecommitdiff
path: root/roomserver
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-05-01 10:48:17 +0100
committerGitHub <noreply@github.com>2020-05-01 10:48:17 +0100
commite15f6676ac3f76ec2ef679c2df300d6a8e7e668f (patch)
tree0b82339939e8932d46e1ca2cf6024ab55dc7602f /roomserver
parentebbfc125920beb321713e28a2a137d768406fa15 (diff)
Consolidation of roomserver APIs (#994)
* Consolidation of roomserver APIs * Comment out alias tests for now, they are broken * Wire AS API into roomserver again * Roomserver didn't take asAPI param before so return to that * Prevent roomserver asking AS API for alias info * Rename some files * Remove alias_test, incoherent tests and unwanted appservice integration * Remove FS API inject on syncapi component
Diffstat (limited to 'roomserver')
-rw-r--r--roomserver/alias/alias_test.go209
-rw-r--r--roomserver/api/alias.go64
-rw-r--r--roomserver/api/api.go141
-rw-r--r--roomserver/api/http.go41
-rw-r--r--roomserver/api/input.go41
-rw-r--r--roomserver/api/query.go131
-rw-r--r--roomserver/internal/alias.go (renamed from roomserver/alias/alias.go)186
-rw-r--r--roomserver/internal/api.go287
-rw-r--r--roomserver/internal/input.go (renamed from roomserver/input/input.go)46
-rw-r--r--roomserver/internal/input_authevents.go (renamed from roomserver/input/authevents.go)2
-rw-r--r--roomserver/internal/input_authevents_test.go (renamed from roomserver/input/authevents_test.go)2
-rw-r--r--roomserver/internal/input_events.go (renamed from roomserver/input/events.go)2
-rw-r--r--roomserver/internal/input_latest_events.go (renamed from roomserver/input/latest_events.go)2
-rw-r--r--roomserver/internal/input_membership.go (renamed from roomserver/input/membership.go)2
-rw-r--r--roomserver/internal/query.go (renamed from roomserver/query/query.go)250
-rw-r--r--roomserver/internal/query_backfill.go (renamed from roomserver/query/backfill.go)2
-rw-r--r--roomserver/internal/query_test.go (renamed from roomserver/query/query_test.go)6
-rw-r--r--roomserver/roomserver.go46
18 files changed, 597 insertions, 863 deletions
diff --git a/roomserver/alias/alias_test.go b/roomserver/alias/alias_test.go
deleted file mode 100644
index 0aefa19d..00000000
--- a/roomserver/alias/alias_test.go
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2019 Serra Allgood
-//
-// 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 alias
-
-import (
- "context"
- "fmt"
- "strings"
- "testing"
-
- appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
- roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
- "github.com/matrix-org/gomatrixserverlib"
-)
-
-type MockRoomserverAliasAPIDatabase struct {
- mode string
- attempts int
-}
-
-// These methods can be essentially noop
-func (db MockRoomserverAliasAPIDatabase) SetRoomAlias(ctx context.Context, alias string, roomID string, creatorUserID string) error {
- return nil
-}
-
-func (db MockRoomserverAliasAPIDatabase) GetAliasesForRoomID(ctx context.Context, roomID string) ([]string, error) {
- aliases := make([]string, 0)
- return aliases, nil
-}
-
-func (db MockRoomserverAliasAPIDatabase) RemoveRoomAlias(ctx context.Context, alias string) error {
- return nil
-}
-
-func (db *MockRoomserverAliasAPIDatabase) GetCreatorIDForAlias(
- ctx context.Context, alias string,
-) (string, error) {
- return "", nil
-}
-
-func (db *MockRoomserverAliasAPIDatabase) GetRoomVersionForRoom(
- ctx context.Context, roomID string,
-) (gomatrixserverlib.RoomVersion, error) {
- return gomatrixserverlib.RoomVersionV1, nil
-}
-
-// This method needs to change depending on test case
-func (db *MockRoomserverAliasAPIDatabase) GetRoomIDForAlias(
- ctx context.Context,
- alias string,
-) (string, error) {
- switch db.mode {
- case "empty":
- return "", nil
- case "error":
- return "", fmt.Errorf("found an error from GetRoomIDForAlias")
- case "found":
- return "123", nil
- case "emptyFound":
- switch db.attempts {
- case 0:
- db.attempts = 1
- return "", nil
- case 1:
- db.attempts = 0
- return "123", nil
- default:
- return "", nil
- }
- default:
- return "", fmt.Errorf("unknown option used")
- }
-}
-
-type MockAppServiceQueryAPI struct {
- mode string
-}
-
-// This method can be noop
-func (q MockAppServiceQueryAPI) UserIDExists(
- ctx context.Context,
- req *appserviceAPI.UserIDExistsRequest,
- resp *appserviceAPI.UserIDExistsResponse,
-) error {
- return nil
-}
-
-func (q MockAppServiceQueryAPI) RoomAliasExists(
- ctx context.Context,
- req *appserviceAPI.RoomAliasExistsRequest,
- resp *appserviceAPI.RoomAliasExistsResponse,
-) error {
- switch q.mode {
- case "error":
- return fmt.Errorf("found an error from RoomAliasExists")
- case "found":
- resp.AliasExists = true
- return nil
- case "empty":
- resp.AliasExists = false
- return nil
- default:
- return fmt.Errorf("Unknown option used")
- }
-}
-
-func TestGetRoomIDForAlias(t *testing.T) {
- type arguments struct {
- ctx context.Context
- request *roomserverAPI.GetRoomIDForAliasRequest
- response *roomserverAPI.GetRoomIDForAliasResponse
- }
- args := arguments{
- context.Background(),
- &roomserverAPI.GetRoomIDForAliasRequest{},
- &roomserverAPI.GetRoomIDForAliasResponse{},
- }
- type testCase struct {
- name string
- dbMode string
- queryMode string
- wantError bool
- errorMsg string
- want string
- }
- tt := []testCase{
- {
- "found local alias",
- "found",
- "error",
- false,
- "",
- "123",
- },
- {
- "found appservice alias",
- "emptyFound",
- "found",
- false,
- "",
- "123",
- },
- {
- "error returned from DB",
- "error",
- "",
- true,
- "GetRoomIDForAlias",
- "",
- },
- {
- "error returned from appserviceAPI",
- "empty",
- "error",
- true,
- "RoomAliasExists",
- "",
- },
- {
- "no errors but no alias",
- "empty",
- "empty",
- false,
- "",
- "",
- },
- }
-
- setup := func(dbMode, queryMode string) *RoomserverAliasAPI {
- mockAliasAPIDB := &MockRoomserverAliasAPIDatabase{dbMode, 0}
- mockAppServiceQueryAPI := MockAppServiceQueryAPI{queryMode}
-
- return &RoomserverAliasAPI{
- DB: mockAliasAPIDB,
- AppserviceAPI: mockAppServiceQueryAPI,
- }
- }
-
- for _, tc := range tt {
- t.Run(tc.name, func(t *testing.T) {
- aliasAPI := setup(tc.dbMode, tc.queryMode)
-
- err := aliasAPI.GetRoomIDForAlias(args.ctx, args.request, args.response)
- if tc.wantError {
- if err == nil {
- t.Fatalf("Got no error; wanted error from %s", tc.errorMsg)
- } else if !strings.Contains(err.Error(), tc.errorMsg) {
- t.Fatalf("Got %s; wanted error from %s", err, tc.errorMsg)
- }
- } else if err != nil {
- t.Fatalf("Got %s; wanted no error", err)
- } else if args.response.RoomID != tc.want {
- t.Errorf("Got '%s'; wanted '%s'", args.response.RoomID, tc.want)
- }
- })
- }
-}
diff --git a/roomserver/api/alias.go b/roomserver/api/alias.go
index ad375a83..488e99ab 100644
--- a/roomserver/api/alias.go
+++ b/roomserver/api/alias.go
@@ -16,8 +16,6 @@ package api
import (
"context"
- "errors"
- "net/http"
commonHTTP "github.com/matrix-org/dendrite/common/http"
opentracing "github.com/opentracing/opentracing-go"
@@ -86,44 +84,6 @@ type RemoveRoomAliasRequest struct {
// RemoveRoomAliasResponse is a response to RemoveRoomAlias
type RemoveRoomAliasResponse struct{}
-// RoomserverAliasAPI is used to save, lookup or remove a room alias
-type RoomserverAliasAPI interface {
- // Set a room alias
- SetRoomAlias(
- ctx context.Context,
- req *SetRoomAliasRequest,
- response *SetRoomAliasResponse,
- ) error
-
- // Get the room ID for an alias
- GetRoomIDForAlias(
- ctx context.Context,
- req *GetRoomIDForAliasRequest,
- response *GetRoomIDForAliasResponse,
- ) error
-
- // Get all known aliases for a room ID
- GetAliasesForRoomID(
- ctx context.Context,
- req *GetAliasesForRoomIDRequest,
- response *GetAliasesForRoomIDResponse,
- ) error
-
- // Get the user ID of the creator of an alias
- GetCreatorIDForAlias(
- ctx context.Context,
- req *GetCreatorIDForAliasRequest,
- response *GetCreatorIDForAliasResponse,
- ) error
-
- // Remove a room alias
- RemoveRoomAlias(
- ctx context.Context,
- req *RemoveRoomAliasRequest,
- response *RemoveRoomAliasResponse,
- ) error
-}
-
// RoomserverSetRoomAliasPath is the HTTP path for the SetRoomAlias API.
const RoomserverSetRoomAliasPath = "/api/roomserver/setRoomAlias"
@@ -139,22 +99,8 @@ const RoomserverGetCreatorIDForAliasPath = "/api/roomserver/GetCreatorIDForAlias
// RoomserverRemoveRoomAliasPath is the HTTP path for the RemoveRoomAlias API.
const RoomserverRemoveRoomAliasPath = "/api/roomserver/removeRoomAlias"
-// NewRoomserverAliasAPIHTTP creates a RoomserverAliasAPI implemented by talking to a HTTP POST API.
-// If httpClient is nil an error is returned
-func NewRoomserverAliasAPIHTTP(roomserverURL string, httpClient *http.Client) (RoomserverAliasAPI, error) {
- if httpClient == nil {
- return nil, errors.New("NewRoomserverAliasAPIHTTP: httpClient is <nil>")
- }
- return &httpRoomserverAliasAPI{roomserverURL, httpClient}, nil
-}
-
-type httpRoomserverAliasAPI struct {
- roomserverURL string
- httpClient *http.Client
-}
-
// SetRoomAlias implements RoomserverAliasAPI
-func (h *httpRoomserverAliasAPI) SetRoomAlias(
+func (h *httpRoomserverInternalAPI) SetRoomAlias(
ctx context.Context,
request *SetRoomAliasRequest,
response *SetRoomAliasResponse,
@@ -167,7 +113,7 @@ func (h *httpRoomserverAliasAPI) SetRoomAlias(
}
// GetRoomIDForAlias implements RoomserverAliasAPI
-func (h *httpRoomserverAliasAPI) GetRoomIDForAlias(
+func (h *httpRoomserverInternalAPI) GetRoomIDForAlias(
ctx context.Context,
request *GetRoomIDForAliasRequest,
response *GetRoomIDForAliasResponse,
@@ -180,7 +126,7 @@ func (h *httpRoomserverAliasAPI) GetRoomIDForAlias(
}
// GetAliasesForRoomID implements RoomserverAliasAPI
-func (h *httpRoomserverAliasAPI) GetAliasesForRoomID(
+func (h *httpRoomserverInternalAPI) GetAliasesForRoomID(
ctx context.Context,
request *GetAliasesForRoomIDRequest,
response *GetAliasesForRoomIDResponse,
@@ -193,7 +139,7 @@ func (h *httpRoomserverAliasAPI) GetAliasesForRoomID(
}
// GetCreatorIDForAlias implements RoomserverAliasAPI
-func (h *httpRoomserverAliasAPI) GetCreatorIDForAlias(
+func (h *httpRoomserverInternalAPI) GetCreatorIDForAlias(
ctx context.Context,
request *GetCreatorIDForAliasRequest,
response *GetCreatorIDForAliasResponse,
@@ -206,7 +152,7 @@ func (h *httpRoomserverAliasAPI) GetCreatorIDForAlias(
}
// RemoveRoomAlias implements RoomserverAliasAPI
-func (h *httpRoomserverAliasAPI) RemoveRoomAlias(
+func (h *httpRoomserverInternalAPI) RemoveRoomAlias(
ctx context.Context,
request *RemoveRoomAliasRequest,
response *RemoveRoomAliasResponse,
diff --git a/roomserver/api/api.go b/roomserver/api/api.go
new file mode 100644
index 00000000..c12dbddd
--- /dev/null
+++ b/roomserver/api/api.go
@@ -0,0 +1,141 @@
+package api
+
+import (
+ "context"
+
+ fsAPI "github.com/matrix-org/dendrite/federationsender/api"
+)
+
+// RoomserverInputAPI is used to write events to the room server.
+type RoomserverInternalAPI interface {
+ // needed to avoid chicken and egg scenario when setting up the
+ // interdependencies between the roomserver and other input APIs
+ SetFederationSenderAPI(fsAPI fsAPI.FederationSenderInternalAPI)
+
+ InputRoomEvents(
+ ctx context.Context,
+ request *InputRoomEventsRequest,
+ response *InputRoomEventsResponse,
+ ) error
+
+ // Query the latest events and state for a room from the room server.
+ QueryLatestEventsAndState(
+ ctx context.Context,
+ request *QueryLatestEventsAndStateRequest,
+ response *QueryLatestEventsAndStateResponse,
+ ) error
+
+ // Query the state after a list of events in a room from the room server.
+ QueryStateAfterEvents(
+ ctx context.Context,
+ request *QueryStateAfterEventsRequest,
+ response *QueryStateAfterEventsResponse,
+ ) error
+
+ // Query a list of events by event ID.
+ QueryEventsByID(
+ ctx context.Context,
+ request *QueryEventsByIDRequest,
+ response *QueryEventsByIDResponse,
+ ) error
+
+ // Query the membership event for an user for a room.
+ QueryMembershipForUser(
+ ctx context.Context,
+ request *QueryMembershipForUserRequest,
+ response *QueryMembershipForUserResponse,
+ ) error
+
+ // Query a list of membership events for a room
+ QueryMembershipsForRoom(
+ ctx context.Context,
+ request *QueryMembershipsForRoomRequest,
+ response *QueryMembershipsForRoomResponse,
+ ) error
+
+ // Query a list of invite event senders for a user in a room.
+ QueryInvitesForUser(
+ ctx context.Context,
+ request *QueryInvitesForUserRequest,
+ response *QueryInvitesForUserResponse,
+ ) error
+
+ // Query whether a server is allowed to see an event
+ QueryServerAllowedToSeeEvent(
+ ctx context.Context,
+ request *QueryServerAllowedToSeeEventRequest,
+ response *QueryServerAllowedToSeeEventResponse,
+ ) error
+
+ // Query missing events for a room from roomserver
+ QueryMissingEvents(
+ ctx context.Context,
+ request *QueryMissingEventsRequest,
+ response *QueryMissingEventsResponse,
+ ) error
+
+ // Query to get state and auth chain for a (potentially hypothetical) event.
+ // Takes lists of PrevEventIDs and AuthEventsIDs and uses them to calculate
+ // the state and auth chain to return.
+ QueryStateAndAuthChain(
+ ctx context.Context,
+ request *QueryStateAndAuthChainRequest,
+ response *QueryStateAndAuthChainResponse,
+ ) error
+
+ // Query a given amount (or less) of events prior to a given set of events.
+ QueryBackfill(
+ ctx context.Context,
+ request *QueryBackfillRequest,
+ response *QueryBackfillResponse,
+ ) error
+
+ // Asks for the default room version as preferred by the server.
+ QueryRoomVersionCapabilities(
+ ctx context.Context,
+ request *QueryRoomVersionCapabilitiesRequest,
+ response *QueryRoomVersionCapabilitiesResponse,
+ ) error
+
+ // Asks for the room version for a given room.
+ QueryRoomVersionForRoom(
+ ctx context.Context,
+ request *QueryRoomVersionForRoomRequest,
+ response *QueryRoomVersionForRoomResponse,
+ ) error
+
+ // Set a room alias
+ SetRoomAlias(
+ ctx context.Context,
+ req *SetRoomAliasRequest,
+ response *SetRoomAliasResponse,
+ ) error
+
+ // Get the room ID for an alias
+ GetRoomIDForAlias(
+ ctx context.Context,
+ req *GetRoomIDForAliasRequest,
+ response *GetRoomIDForAliasResponse,
+ ) error
+
+ // Get all known aliases for a room ID
+ GetAliasesForRoomID(
+ ctx context.Context,
+ req *GetAliasesForRoomIDRequest,
+ response *GetAliasesForRoomIDResponse,
+ ) error
+
+ // Get the user ID of the creator of an alias
+ GetCreatorIDForAlias(
+ ctx context.Context,
+ req *GetCreatorIDForAliasRequest,
+ response *GetCreatorIDForAliasResponse,
+ ) error
+
+ // Remove a room alias
+ RemoveRoomAlias(
+ ctx context.Context,
+ req *RemoveRoomAliasRequest,
+ response *RemoveRoomAliasResponse,
+ ) error
+}
diff --git a/roomserver/api/http.go b/roomserver/api/http.go
new file mode 100644
index 00000000..d643526b
--- /dev/null
+++ b/roomserver/api/http.go
@@ -0,0 +1,41 @@
+package api
+
+import (
+ "errors"
+ "net/http"
+
+ "github.com/matrix-org/dendrite/common/caching"
+ fsInputAPI "github.com/matrix-org/dendrite/federationsender/api"
+)
+
+type httpRoomserverInternalAPI struct {
+ roomserverURL string
+ httpClient *http.Client
+ fsAPI fsInputAPI.FederationSenderInternalAPI
+ immutableCache caching.ImmutableCache
+}
+
+// NewRoomserverInputAPIHTTP creates a RoomserverInputAPI implemented by talking to a HTTP POST API.
+// If httpClient is nil an error is returned
+func NewRoomserverInternalAPIHTTP(
+ roomserverURL string,
+ httpClient *http.Client,
+ //fsInputAPI fsAPI.FederationSenderInternalAPI,
+ immutableCache caching.ImmutableCache,
+) (RoomserverInternalAPI, error) {
+ if httpClient == nil {
+ return nil, errors.New("NewRoomserverInternalAPIHTTP: httpClient is <nil>")
+ }
+ return &httpRoomserverInternalAPI{
+ roomserverURL: roomserverURL,
+ httpClient: httpClient,
+ immutableCache: immutableCache,
+ }, nil
+}
+
+// SetFederationSenderInputAPI passes in a federation sender input API reference
+// so that we can avoid the chicken-and-egg problem of both the roomserver input API
+// and the federation sender input API being interdependent.
+func (h *httpRoomserverInternalAPI) SetFederationSenderAPI(fsAPI fsInputAPI.FederationSenderInternalAPI) {
+ h.fsAPI = fsAPI
+}
diff --git a/roomserver/api/input.go b/roomserver/api/input.go
index d9cffad2..8e8fdae4 100644
--- a/roomserver/api/input.go
+++ b/roomserver/api/input.go
@@ -17,11 +17,8 @@ package api
import (
"context"
- "errors"
- "net/http"
commonHTTP "github.com/matrix-org/dendrite/common/http"
- fsAPI "github.com/matrix-org/dendrite/federationsender/api"
"github.com/matrix-org/gomatrixserverlib"
opentracing "github.com/opentracing/opentracing-go"
)
@@ -105,47 +102,11 @@ type InputRoomEventsResponse struct {
EventID string `json:"event_id"`
}
-// RoomserverInputAPI is used to write events to the room server.
-type RoomserverInputAPI interface {
- // needed to avoid chicken and egg scenario when setting up the
- // interdependencies between the roomserver and the FS input API
- SetFederationSenderAPI(fsInputAPI fsAPI.FederationSenderInternalAPI)
- InputRoomEvents(
- ctx context.Context,
- request *InputRoomEventsRequest,
- response *InputRoomEventsResponse,
- ) error
-}
-
// RoomserverInputRoomEventsPath is the HTTP path for the InputRoomEvents API.
const RoomserverInputRoomEventsPath = "/api/roomserver/inputRoomEvents"
-// NewRoomserverInputAPIHTTP creates a RoomserverInputAPI implemented by talking to a HTTP POST API.
-// If httpClient is nil an error is returned
-func NewRoomserverInputAPIHTTP(roomserverURL string, httpClient *http.Client) (RoomserverInputAPI, error) {
- if httpClient == nil {
- return nil, errors.New("NewRoomserverInputAPIHTTP: httpClient is <nil>")
- }
- return &httpRoomserverInputAPI{roomserverURL, httpClient, nil}, nil
-}
-
-type httpRoomserverInputAPI struct {
- roomserverURL string
- httpClient *http.Client
- // The federation sender API allows us to send federation
- // requests from the new perform input requests, still TODO.
- fsInputAPI fsAPI.FederationSenderInternalAPI
-}
-
-// SetFederationSenderInputAPI passes in a federation sender input API reference
-// so that we can avoid the chicken-and-egg problem of both the roomserver input API
-// and the federation sender input API being interdependent.
-func (h *httpRoomserverInputAPI) SetFederationSenderAPI(fsInputAPI fsAPI.FederationSenderInternalAPI) {
- h.fsInputAPI = fsInputAPI
-}
-
// InputRoomEvents implements RoomserverInputAPI
-func (h *httpRoomserverInputAPI) InputRoomEvents(
+func (h *httpRoomserverInternalAPI) InputRoomEvents(
ctx context.Context,
request *InputRoomEventsRequest,
response *InputRoomEventsResponse,
diff --git a/roomserver/api/query.go b/roomserver/api/query.go
index 11fa5c9c..cb7cbb86 100644
--- a/roomserver/api/query.go
+++ b/roomserver/api/query.go
@@ -18,10 +18,7 @@ package api
import (
"context"
- "errors"
- "net/http"
- "github.com/matrix-org/dendrite/common/caching"
commonHTTP "github.com/matrix-org/dendrite/common/http"
"github.com/matrix-org/gomatrixserverlib"
opentracing "github.com/opentracing/opentracing-go"
@@ -264,95 +261,6 @@ type QueryRoomVersionForRoomResponse struct {
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
}
-// RoomserverQueryAPI is used to query information from the room server.
-type RoomserverQueryAPI interface {
- // Query the latest events and state for a room from the room server.
- QueryLatestEventsAndState(
- ctx context.Context,
- request *QueryLatestEventsAndStateRequest,
- response *QueryLatestEventsAndStateResponse,
- ) error
-
- // Query the state after a list of events in a room from the room server.
- QueryStateAfterEvents(
- ctx context.Context,
- request *QueryStateAfterEventsRequest,
- response *QueryStateAfterEventsResponse,
- ) error
-
- // Query a list of events by event ID.
- QueryEventsByID(
- ctx context.Context,
- request *QueryEventsByIDRequest,
- response *QueryEventsByIDResponse,
- ) error
-
- // Query the membership event for an user for a room.
- QueryMembershipForUser(
- ctx context.Context,
- request *QueryMembershipForUserRequest,
- response *QueryMembershipForUserResponse,
- ) error
-
- // Query a list of membership events for a room
- QueryMembershipsForRoom(
- ctx context.Context,
- request *QueryMembershipsForRoomRequest,
- response *QueryMembershipsForRoomResponse,
- ) error
-
- // Query a list of invite event senders for a user in a room.
- QueryInvitesForUser(
- ctx context.Context,
- request *QueryInvitesForUserRequest,
- response *QueryInvitesForUserResponse,
- ) error
-
- // Query whether a server is allowed to see an event
- QueryServerAllowedToSeeEvent(
- ctx context.Context,
- request *QueryServerAllowedToSeeEventRequest,
- response *QueryServerAllowedToSeeEventResponse,
- ) error
-
- // Query missing events for a room from roomserver
- QueryMissingEvents(
- ctx context.Context,
- request *QueryMissingEventsRequest,
- response *QueryMissingEventsResponse,
- ) error
-
- // Query to get state and auth chain for a (potentially hypothetical) event.
- // Takes lists of PrevEventIDs and AuthEventsIDs and uses them to calculate
- // the state and auth chain to return.
- QueryStateAndAuthChain(
- ctx context.Context,
- request *QueryStateAndAuthChainRequest,
- response *QueryStateAndAuthChainResponse,
- ) error
-
- // Query a given amount (or less) of events prior to a given set of events.
- QueryBackfill(
- ctx context.Context,
- request *QueryBackfillRequest,
- response *QueryBackfillResponse,
- ) error
-
- // Asks for the default room version as preferred by the server.
- QueryRoomVersionCapabilities(
- ctx context.Context,
- request *QueryRoomVersionCapabilitiesRequest,
- response *QueryRoomVersionCapabilitiesResponse,
- ) error
-
- // Asks for the room version for a given room.
- QueryRoomVersionForRoom(
- ctx context.Context,
- request *QueryRoomVersionForRoomRequest,
- response *QueryRoomVersionForRoomResponse,
- ) error
-}
-
// RoomserverQueryLatestEventsAndStatePath is the HTTP path for the QueryLatestEventsAndState API.
const RoomserverQueryLatestEventsAndStatePath = "/api/roomserver/queryLatestEventsAndState"
@@ -389,23 +297,8 @@ const RoomserverQueryRoomVersionCapabilitiesPath = "/api/roomserver/queryRoomVer
// RoomserverQueryRoomVersionForRoomPath is the HTTP path for the QueryRoomVersionForRoom API
const RoomserverQueryRoomVersionForRoomPath = "/api/roomserver/queryRoomVersionForRoom"
-// NewRoomserverQueryAPIHTTP creates a RoomserverQueryAPI implemented by talking to a HTTP POST API.
-// If httpClient is nil an error is returned
-func NewRoomserverQueryAPIHTTP(roomserverURL string, httpClient *http.Client, cache caching.ImmutableCache) (RoomserverQueryAPI, error) {
- if httpClient == nil {
- return nil, errors.New("NewRoomserverQueryAPIHTTP: httpClient is <nil>")
- }
- return &httpRoomserverQueryAPI{roomserverURL, httpClient, cache}, nil
-}
-
-type httpRoomserverQueryAPI struct {
- roomserverURL string
- httpClient *http.Client
- immutableCache caching.ImmutableCache
-}
-
// QueryLatestEventsAndState implements RoomserverQueryAPI
-func (h *httpRoomserverQueryAPI) QueryLatestEventsAndState(
+func (h *httpRoomserverInternalAPI) QueryLatestEventsAndState(
ctx context.Context,
request *QueryLatestEventsAndStateRequest,
response *QueryLatestEventsAndStateResponse,
@@ -418,7 +311,7 @@ func (h *httpRoomserverQueryAPI) QueryLatestEventsAndState(
}
// QueryStateAfterEvents implements RoomserverQueryAPI
-func (h *httpRoomserverQueryAPI) QueryStateAfterEvents(
+func (h *httpRoomserverInternalAPI) QueryStateAfterEvents(
ctx context.Context,
request *QueryStateAfterEventsRequest,
response *QueryStateAfterEventsResponse,
@@ -431,7 +324,7 @@ func (h *httpRoomserverQueryAPI) QueryStateAfterEvents(
}
// QueryEventsByID implements RoomserverQueryAPI
-func (h *httpRoomserverQueryAPI) QueryEventsByID(
+func (h *httpRoomserverInternalAPI) QueryEventsByID(
ctx context.Context,
request *QueryEventsByIDRequest,
response *QueryEventsByIDResponse,
@@ -444,7 +337,7 @@ func (h *httpRoomserverQueryAPI) QueryEventsByID(
}
// QueryMembershipForUser implements RoomserverQueryAPI
-func (h *httpRoomserverQueryAPI) QueryMembershipForUser(
+func (h *httpRoomserverInternalAPI) QueryMembershipForUser(
ctx context.Context,
request *QueryMembershipForUserRequest,
response *QueryMembershipForUserResponse,
@@ -457,7 +350,7 @@ func (h *httpRoomserverQueryAPI) QueryMembershipForUser(
}
// QueryMembershipsForRoom implements RoomserverQueryAPI
-func (h *httpRoomserverQueryAPI) QueryMembershipsForRoom(
+func (h *httpRoomserverInternalAPI) QueryMembershipsForRoom(
ctx context.Context,
request *QueryMembershipsForRoomRequest,
response *QueryMembershipsForRoomResponse,
@@ -470,7 +363,7 @@ func (h *httpRoomserverQueryAPI) QueryMembershipsForRoom(
}
// QueryInvitesForUser implements RoomserverQueryAPI
-func (h *httpRoomserverQueryAPI) QueryInvitesForUser(
+func (h *httpRoomserverInternalAPI) QueryInvitesForUser(
ctx context.Context,
request *QueryInvitesForUserRequest,
response *QueryInvitesForUserResponse,
@@ -483,7 +376,7 @@ func (h *httpRoomserverQueryAPI) QueryInvitesForUser(
}
// QueryServerAllowedToSeeEvent implements RoomserverQueryAPI
-func (h *httpRoomserverQueryAPI) QueryServerAllowedToSeeEvent(
+func (h *httpRoomserverInternalAPI) QueryServerAllowedToSeeEvent(
ctx context.Context,
request *QueryServerAllowedToSeeEventRequest,
response *QueryServerAllowedToSeeEventResponse,
@@ -496,7 +389,7 @@ func (h *httpRoomserverQueryAPI) QueryServerAllowedToSeeEvent(
}
// QueryMissingEvents implements RoomServerQueryAPI
-func (h *httpRoomserverQueryAPI) QueryMissingEvents(
+func (h *httpRoomserverInternalAPI) QueryMissingEvents(
ctx context.Context,
request *QueryMissingEventsRequest,
response *QueryMissingEventsResponse,
@@ -509,7 +402,7 @@ func (h *httpRoomserverQueryAPI) QueryMissingEvents(
}
// QueryStateAndAuthChain implements RoomserverQueryAPI
-func (h *httpRoomserverQueryAPI) QueryStateAndAuthChain(
+func (h *httpRoomserverInternalAPI) QueryStateAndAuthChain(
ctx context.Context,
request *QueryStateAndAuthChainRequest,
response *QueryStateAndAuthChainResponse,
@@ -522,7 +415,7 @@ func (h *httpRoomserverQueryAPI) QueryStateAndAuthChain(
}
// QueryBackfill implements RoomServerQueryAPI
-func (h *httpRoomserverQueryAPI) QueryBackfill(
+func (h *httpRoomserverInternalAPI) QueryBackfill(
ctx context.Context,
request *QueryBackfillRequest,
response *QueryBackfillResponse,
@@ -535,7 +428,7 @@ func (h *httpRoomserverQueryAPI) QueryBackfill(
}
// QueryRoomVersionCapabilities implements RoomServerQueryAPI
-func (h *httpRoomserverQueryAPI) QueryRoomVersionCapabilities(
+func (h *httpRoomserverInternalAPI) QueryRoomVersionCapabilities(
ctx context.Context,
request *QueryRoomVersionCapabilitiesRequest,
response *QueryRoomVersionCapabilitiesResponse,
@@ -548,7 +441,7 @@ func (h *httpRoomserverQueryAPI) QueryRoomVersionCapabilities(
}
// QueryRoomVersionForRoom implements RoomServerQueryAPI
-func (h *httpRoomserverQueryAPI) QueryRoomVersionForRoom(
+func (h *httpRoomserverInternalAPI) QueryRoomVersionForRoom(
ctx context.Context,
request *QueryRoomVersionForRoomRequest,
response *QueryRoomVersionForRoomResponse,
diff --git a/roomserver/alias/alias.go b/roomserver/internal/alias.go
index eb606e5c..4139582b 100644
--- a/roomserver/alias/alias.go
+++ b/roomserver/internal/alias.go
@@ -12,25 +12,20 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package alias
+package internal
import (
"context"
"encoding/json"
"errors"
- "net/http"
"time"
- appserviceAPI "github.com/matrix-org/dendrite/appservice/api"
- "github.com/matrix-org/dendrite/common"
- "github.com/matrix-org/dendrite/common/config"
- roomserverAPI "github.com/matrix-org/dendrite/roomserver/api"
+ "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/gomatrixserverlib"
- "github.com/matrix-org/util"
)
-// RoomserverAliasAPIDatabase has the storage APIs needed to implement the alias API.
-type RoomserverAliasAPIDatabase interface {
+// RoomserverInternalAPIDatabase has the storage APIs needed to implement the alias API.
+type RoomserverInternalAPIDatabase interface {
// Save a given room alias with the room ID it refers to.
// Returns an error if there was a problem talking to the database.
SetRoomAlias(ctx context.Context, alias string, roomID string, creatorUserID string) error
@@ -52,20 +47,11 @@ type RoomserverAliasAPIDatabase interface {
) (gomatrixserverlib.RoomVersion, error)
}
-// RoomserverAliasAPI is an implementation of alias.RoomserverAliasAPI
-type RoomserverAliasAPI struct {
- DB RoomserverAliasAPIDatabase
- Cfg *config.Dendrite
- InputAPI roomserverAPI.RoomserverInputAPI
- QueryAPI roomserverAPI.RoomserverQueryAPI
- AppserviceAPI appserviceAPI.AppServiceQueryAPI
-}
-
-// SetRoomAlias implements alias.RoomserverAliasAPI
-func (r *RoomserverAliasAPI) SetRoomAlias(
+// SetRoomAlias implements alias.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) SetRoomAlias(
ctx context.Context,
- request *roomserverAPI.SetRoomAliasRequest,
- response *roomserverAPI.SetRoomAliasResponse,
+ request *api.SetRoomAliasRequest,
+ response *api.SetRoomAliasResponse,
) error {
// Check if the alias isn't already referring to a room
roomID, err := r.DB.GetRoomIDForAlias(ctx, request.Alias)
@@ -91,11 +77,11 @@ func (r *RoomserverAliasAPI) SetRoomAlias(
return r.sendUpdatedAliasesEvent(context.TODO(), request.UserID, request.RoomID)
}
-// GetRoomIDForAlias implements alias.RoomserverAliasAPI
-func (r *RoomserverAliasAPI) GetRoomIDForAlias(
+// GetRoomIDForAlias implements alias.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) GetRoomIDForAlias(
ctx context.Context,
- request *roomserverAPI.GetRoomIDForAliasRequest,
- response *roomserverAPI.GetRoomIDForAliasResponse,
+ request *api.GetRoomIDForAliasRequest,
+ response *api.GetRoomIDForAliasResponse,
) error {
// Look up the room ID in the database
roomID, err := r.DB.GetRoomIDForAlias(ctx, request.Alias)
@@ -103,32 +89,38 @@ func (r *RoomserverAliasAPI) GetRoomIDForAlias(
return err
}
- if roomID == "" {
- // No room found locally, try our application services by making a call to
- // the appservice component
- aliasReq := appserviceAPI.RoomAliasExistsRequest{Alias: request.Alias}
- var aliasResp appserviceAPI.RoomAliasExistsResponse
- if err = r.AppserviceAPI.RoomAliasExists(ctx, &aliasReq, &aliasResp); err != nil {
- return err
- }
+ /*
+ TODO: Why is this here? It creates an unnecessary dependency
+ from the roomserver to the appservice component, which should be
+ altogether optional.
- if aliasResp.AliasExists {
- roomID, err = r.DB.GetRoomIDForAlias(ctx, request.Alias)
- if err != nil {
+ if roomID == "" {
+ // No room found locally, try our application services by making a call to
+ // the appservice component
+ aliasReq := appserviceAPI.RoomAliasExistsRequest{Alias: request.Alias}
+ var aliasResp appserviceAPI.RoomAliasExistsResponse
+ if err = r.AppserviceAPI.RoomAliasExists(ctx, &aliasReq, &aliasResp); err != nil {
return err
}
+
+ if aliasResp.AliasExists {
+ roomID, err = r.DB.GetRoomIDForAlias(ctx, request.Alias)
+ if err != nil {
+ return err
+ }
+ }
}
- }
+ */
response.RoomID = roomID
return nil
}
-// GetAliasesForRoomID implements alias.RoomserverAliasAPI
-func (r *RoomserverAliasAPI) GetAliasesForRoomID(
+// GetAliasesForRoomID implements alias.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) GetAliasesForRoomID(
ctx context.Context,
- request *roomserverAPI.GetAliasesForRoomIDRequest,
- response *roomserverAPI.GetAliasesForRoomIDResponse,
+ request *api.GetAliasesForRoomIDRequest,
+ response *api.GetAliasesForRoomIDResponse,
) error {
// Look up the aliases in the database for the given RoomID
aliases, err := r.DB.GetAliasesForRoomID(ctx, request.RoomID)
@@ -140,11 +132,11 @@ func (r *RoomserverAliasAPI) GetAliasesForRoomID(
return nil
}
-// GetCreatorIDForAlias implements alias.RoomserverAliasAPI
-func (r *RoomserverAliasAPI) GetCreatorIDForAlias(
+// GetCreatorIDForAlias implements alias.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) GetCreatorIDForAlias(
ctx context.Context,
- request *roomserverAPI.GetCreatorIDForAliasRequest,
- response *roomserverAPI.GetCreatorIDForAliasResponse,
+ request *api.GetCreatorIDForAliasRequest,
+ response *api.GetCreatorIDForAliasResponse,
) error {
// Look up the aliases in the database for the given RoomID
creatorID, err := r.DB.GetCreatorIDForAlias(ctx, request.Alias)
@@ -156,11 +148,11 @@ func (r *RoomserverAliasAPI) GetCreatorIDForAlias(
return nil
}
-// RemoveRoomAlias implements alias.RoomserverAliasAPI
-func (r *RoomserverAliasAPI) RemoveRoomAlias(
+// RemoveRoomAlias implements alias.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) RemoveRoomAlias(
ctx context.Context,
- request *roomserverAPI.RemoveRoomAliasRequest,
- response *roomserverAPI.RemoveRoomAliasResponse,
+ request *api.RemoveRoomAliasRequest,
+ response *api.RemoveRoomAliasResponse,
) error {
// Look up the room ID in the database
roomID, err := r.DB.GetRoomIDForAlias(ctx, request.Alias)
@@ -186,7 +178,7 @@ type roomAliasesContent struct {
// Build the updated m.room.aliases event to send to the room after addition or
// removal of an alias
-func (r *RoomserverAliasAPI) sendUpdatedAliasesEvent(
+func (r *RoomserverInternalAPI) sendUpdatedAliasesEvent(
ctx context.Context, userID string, roomID string,
) error {
serverName := string(r.Cfg.Matrix.ServerName)
@@ -222,12 +214,12 @@ func (r *RoomserverAliasAPI) sendUpdatedAliasesEvent(
if len(eventsNeeded.Tuples()) == 0 {
return errors.New("expecting state tuples for event builder, got none")
}
- req := roomserverAPI.QueryLatestEventsAndStateRequest{
+ req := api.QueryLatestEventsAndStateRequest{
RoomID: roomID,
StateToFetch: eventsNeeded.Tuples(),
}
- var res roomserverAPI.QueryLatestEventsAndStateResponse
- if err = r.QueryAPI.QueryLatestEventsAndState(ctx, &req, &res); err != nil {
+ var res api.QueryLatestEventsAndStateResponse
+ if err = r.QueryLatestEventsAndState(ctx, &req, &res); err != nil {
return err
}
builder.Depth = res.Depth
@@ -263,91 +255,17 @@ func (r *RoomserverAliasAPI) sendUpdatedAliasesEvent(
}
// Create the request
- ire := roomserverAPI.InputRoomEvent{
- Kind: roomserverAPI.KindNew,
+ ire := api.InputRoomEvent{
+ Kind: api.KindNew,
Event: event.Headered(roomVersion),
AuthEventIDs: event.AuthEventIDs(),
SendAsServer: serverName,
}
- inputReq := roomserverAPI.InputRoomEventsRequest{
- InputRoomEvents: []roomserverAPI.InputRoomEvent{ire},
+ inputReq := api.InputRoomEventsRequest{
+ InputRoomEvents: []api.InputRoomEvent{ire},
}
- var inputRes roomserverAPI.InputRoomEventsResponse
+ var inputRes api.InputRoomEventsResponse
// Send the request
- return r.InputAPI.InputRoomEvents(ctx, &inputReq, &inputRes)
-}
-
-// SetupHTTP adds the RoomserverAliasAPI handlers to the http.ServeMux.
-func (r *RoomserverAliasAPI) SetupHTTP(servMux *http.ServeMux) {
- servMux.Handle(
- roomserverAPI.RoomserverSetRoomAliasPath,
- common.MakeInternalAPI("setRoomAlias", func(req *http.Request) util.JSONResponse {
- var request roomserverAPI.SetRoomAliasRequest
- var response roomserverAPI.SetRoomAliasResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.SetRoomAlias(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- roomserverAPI.RoomserverGetRoomIDForAliasPath,
- common.MakeInternalAPI("GetRoomIDForAlias", func(req *http.Request) util.JSONResponse {
- var request roomserverAPI.GetRoomIDForAliasRequest
- var response roomserverAPI.GetRoomIDForAliasResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.GetRoomIDForAlias(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- roomserverAPI.RoomserverGetCreatorIDForAliasPath,
- common.MakeInternalAPI("GetCreatorIDForAlias", func(req *http.Request) util.JSONResponse {
- var request roomserverAPI.GetCreatorIDForAliasRequest
- var response roomserverAPI.GetCreatorIDForAliasResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.GetCreatorIDForAlias(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- roomserverAPI.RoomserverGetAliasesForRoomIDPath,
- common.MakeInternalAPI("getAliasesForRoomID", func(req *http.Request) util.JSONResponse {
- var request roomserverAPI.GetAliasesForRoomIDRequest
- var response roomserverAPI.GetAliasesForRoomIDResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.GetAliasesForRoomID(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- roomserverAPI.RoomserverRemoveRoomAliasPath,
- common.MakeInternalAPI("removeRoomAlias", func(req *http.Request) util.JSONResponse {
- var request roomserverAPI.RemoveRoomAliasRequest
- var response roomserverAPI.RemoveRoomAliasResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.RemoveRoomAlias(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
+ return r.InputRoomEvents(ctx, &inputReq, &inputRes)
}
diff --git a/roomserver/internal/api.go b/roomserver/internal/api.go
new file mode 100644
index 00000000..d1c443f2
--- /dev/null
+++ b/roomserver/internal/api.go
@@ -0,0 +1,287 @@
+package internal
+
+import (
+ "encoding/json"
+ "net/http"
+ "sync"
+
+ "github.com/Shopify/sarama"
+ "github.com/matrix-org/dendrite/common"
+ "github.com/matrix-org/dendrite/common/caching"
+ "github.com/matrix-org/dendrite/common/config"
+ fsAPI "github.com/matrix-org/dendrite/federationsender/api"
+ "github.com/matrix-org/dendrite/roomserver/api"
+ "github.com/matrix-org/dendrite/roomserver/storage"
+ "github.com/matrix-org/gomatrixserverlib"
+ "github.com/matrix-org/util"
+)
+
+// RoomserverInternalAPI is an implementation of api.RoomserverInternalAPI
+type RoomserverInternalAPI struct {
+ DB storage.Database
+ Cfg *config.Dendrite
+ Producer sarama.SyncProducer
+ ImmutableCache caching.ImmutableCache
+ ServerName gomatrixserverlib.ServerName
+ KeyRing gomatrixserverlib.JSONVerifier
+ FedClient *gomatrixserverlib.FederationClient
+ OutputRoomEventTopic string // Kafka topic for new output room events
+ mutex sync.Mutex // Protects calls to processRoomEvent
+ fsAPI fsAPI.FederationSenderInternalAPI
+}
+
+// SetupHTTP adds the RoomserverInternalAPI handlers to the http.ServeMux.
+// nolint: gocyclo
+func (r *RoomserverInternalAPI) SetupHTTP(servMux *http.ServeMux) {
+ servMux.Handle(api.RoomserverInputRoomEventsPath,
+ common.MakeInternalAPI("inputRoomEvents", func(req *http.Request) util.JSONResponse {
+ var request api.InputRoomEventsRequest
+ var response api.InputRoomEventsResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.MessageResponse(http.StatusBadRequest, err.Error())
+ }
+ if err := r.InputRoomEvents(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryLatestEventsAndStatePath,
+ common.MakeInternalAPI("queryLatestEventsAndState", func(req *http.Request) util.JSONResponse {
+ var request api.QueryLatestEventsAndStateRequest
+ var response api.QueryLatestEventsAndStateResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryLatestEventsAndState(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryStateAfterEventsPath,
+ common.MakeInternalAPI("queryStateAfterEvents", func(req *http.Request) util.JSONResponse {
+ var request api.QueryStateAfterEventsRequest
+ var response api.QueryStateAfterEventsResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryStateAfterEvents(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryEventsByIDPath,
+ common.MakeInternalAPI("queryEventsByID", func(req *http.Request) util.JSONResponse {
+ var request api.QueryEventsByIDRequest
+ var response api.QueryEventsByIDResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryEventsByID(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryMembershipForUserPath,
+ common.MakeInternalAPI("QueryMembershipForUser", func(req *http.Request) util.JSONResponse {
+ var request api.QueryMembershipForUserRequest
+ var response api.QueryMembershipForUserResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryMembershipForUser(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryMembershipsForRoomPath,
+ common.MakeInternalAPI("queryMembershipsForRoom", func(req *http.Request) util.JSONResponse {
+ var request api.QueryMembershipsForRoomRequest
+ var response api.QueryMembershipsForRoomResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryMembershipsForRoom(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryInvitesForUserPath,
+ common.MakeInternalAPI("queryInvitesForUser", func(req *http.Request) util.JSONResponse {
+ var request api.QueryInvitesForUserRequest
+ var response api.QueryInvitesForUserResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryInvitesForUser(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryServerAllowedToSeeEventPath,
+ common.MakeInternalAPI("queryServerAllowedToSeeEvent", func(req *http.Request) util.JSONResponse {
+ var request api.QueryServerAllowedToSeeEventRequest
+ var response api.QueryServerAllowedToSeeEventResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryServerAllowedToSeeEvent(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryMissingEventsPath,
+ common.MakeInternalAPI("queryMissingEvents", func(req *http.Request) util.JSONResponse {
+ var request api.QueryMissingEventsRequest
+ var response api.QueryMissingEventsResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryMissingEvents(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryStateAndAuthChainPath,
+ common.MakeInternalAPI("queryStateAndAuthChain", func(req *http.Request) util.JSONResponse {
+ var request api.QueryStateAndAuthChainRequest
+ var response api.QueryStateAndAuthChainResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryStateAndAuthChain(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryBackfillPath,
+ common.MakeInternalAPI("QueryBackfill", func(req *http.Request) util.JSONResponse {
+ var request api.QueryBackfillRequest
+ var response api.QueryBackfillResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryBackfill(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryRoomVersionCapabilitiesPath,
+ common.MakeInternalAPI("QueryRoomVersionCapabilities", func(req *http.Request) util.JSONResponse {
+ var request api.QueryRoomVersionCapabilitiesRequest
+ var response api.QueryRoomVersionCapabilitiesResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryRoomVersionCapabilities(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverQueryRoomVersionForRoomPath,
+ common.MakeInternalAPI("QueryRoomVersionForRoom", func(req *http.Request) util.JSONResponse {
+ var request api.QueryRoomVersionForRoomRequest
+ var response api.QueryRoomVersionForRoomResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.QueryRoomVersionForRoom(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverSetRoomAliasPath,
+ common.MakeInternalAPI("setRoomAlias", func(req *http.Request) util.JSONResponse {
+ var request api.SetRoomAliasRequest
+ var response api.SetRoomAliasResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.SetRoomAlias(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverGetRoomIDForAliasPath,
+ common.MakeInternalAPI("GetRoomIDForAlias", func(req *http.Request) util.JSONResponse {
+ var request api.GetRoomIDForAliasRequest
+ var response api.GetRoomIDForAliasResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.GetRoomIDForAlias(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverGetCreatorIDForAliasPath,
+ common.MakeInternalAPI("GetCreatorIDForAlias", func(req *http.Request) util.JSONResponse {
+ var request api.GetCreatorIDForAliasRequest
+ var response api.GetCreatorIDForAliasResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.GetCreatorIDForAlias(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverGetAliasesForRoomIDPath,
+ common.MakeInternalAPI("getAliasesForRoomID", func(req *http.Request) util.JSONResponse {
+ var request api.GetAliasesForRoomIDRequest
+ var response api.GetAliasesForRoomIDResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.GetAliasesForRoomID(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+ servMux.Handle(
+ api.RoomserverRemoveRoomAliasPath,
+ common.MakeInternalAPI("removeRoomAlias", func(req *http.Request) util.JSONResponse {
+ var request api.RemoveRoomAliasRequest
+ var response api.RemoveRoomAliasResponse
+ if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
+ return util.ErrorResponse(err)
+ }
+ if err := r.RemoveRoomAlias(req.Context(), &request, &response); err != nil {
+ return util.ErrorResponse(err)
+ }
+ return util.JSONResponse{Code: http.StatusOK, JSON: &response}
+ }),
+ )
+}
diff --git a/roomserver/input/input.go b/roomserver/internal/input.go
index 20b6afc4..19ebea66 100644
--- a/roomserver/input/input.go
+++ b/roomserver/internal/input.go
@@ -13,46 +13,27 @@
// limitations under the License.
// Package input contains the code processes new room events
-package input
+package internal
import (
"context"
"encoding/json"
- "net/http"
- "sync"
"github.com/Shopify/sarama"
- "github.com/matrix-org/dendrite/common"
"github.com/matrix-org/dendrite/roomserver/api"
- "github.com/matrix-org/dendrite/roomserver/storage"
- "github.com/matrix-org/util"
fsAPI "github.com/matrix-org/dendrite/federationsender/api"
)
-// RoomserverInputAPI implements api.RoomserverInputAPI
-type RoomserverInputAPI struct {
- DB storage.Database
- Producer sarama.SyncProducer
- // The kafkaesque topic to output new room events to.
- // This is the name used in kafka to identify the stream to write events to.
- OutputRoomEventTopic string
- // Protects calls to processRoomEvent
- mutex sync.Mutex
- // The federation sender API allows us to send federation
- // requests from the new perform input requests, still TODO.
- fsAPI fsAPI.FederationSenderInternalAPI
-}
-
// SetFederationSenderInputAPI passes in a federation sender input API reference
// so that we can avoid the chicken-and-egg problem of both the roomserver input API
// and the federation sender input API being interdependent.
-func (r *RoomserverInputAPI) SetFederationSenderAPI(fsAPI fsAPI.FederationSenderInternalAPI) {
+func (r *RoomserverInternalAPI) SetFederationSenderAPI(fsAPI fsAPI.FederationSenderInternalAPI) {
r.fsAPI = fsAPI
}
// WriteOutputEvents implements OutputRoomEventWriter
-func (r *RoomserverInputAPI) WriteOutputEvents(roomID string, updates []api.OutputEvent) error {
+func (r *RoomserverInternalAPI) WriteOutputEvents(roomID string, updates []api.OutputEvent) error {
messages := make([]*sarama.ProducerMessage, len(updates))
for i := range updates {
value, err := json.Marshal(updates[i])
@@ -68,8 +49,8 @@ func (r *RoomserverInputAPI) WriteOutputEvents(roomID string, updates []api.Outp
return r.Producer.SendMessages(messages)
}
-// InputRoomEvents implements api.RoomserverInputAPI
-func (r *RoomserverInputAPI) InputRoomEvents(
+// InputRoomEvents implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) InputRoomEvents(
ctx context.Context,
request *api.InputRoomEventsRequest,
response *api.InputRoomEventsResponse,
@@ -89,20 +70,3 @@ func (r *RoomserverInputAPI) InputRoomEvents(
}
return nil
}
-
-// SetupHTTP adds the RoomserverInputAPI handlers to the http.ServeMux.
-func (r *RoomserverInputAPI) SetupHTTP(servMux *http.ServeMux) {
- servMux.Handle(api.RoomserverInputRoomEventsPath,
- common.MakeInternalAPI("inputRoomEvents", func(req *http.Request) util.JSONResponse {
- var request api.InputRoomEventsRequest
- var response api.InputRoomEventsResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.MessageResponse(http.StatusBadRequest, err.Error())
- }
- if err := r.InputRoomEvents(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
-}
diff --git a/roomserver/input/authevents.go b/roomserver/internal/input_authevents.go
index 2c2e14b3..e3828f56 100644
--- a/roomserver/input/authevents.go
+++ b/roomserver/internal/input_authevents.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package input
+package internal
import (
"context"
diff --git a/roomserver/input/authevents_test.go b/roomserver/internal/input_authevents_test.go
index 0621a084..6b981571 100644
--- a/roomserver/input/authevents_test.go
+++ b/roomserver/internal/input_authevents_test.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package input
+package internal
import (
"testing"
diff --git a/roomserver/input/events.go b/roomserver/internal/input_events.go
index 69828d9f..6da63716 100644
--- a/roomserver/input/events.go
+++ b/roomserver/internal/input_events.go
@@ -14,7 +14,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package input
+package internal
import (
"context"
diff --git a/roomserver/input/latest_events.go b/roomserver/internal/input_latest_events.go
index cac3968d..42be0f40 100644
--- a/roomserver/input/latest_events.go
+++ b/roomserver/internal/input_latest_events.go
@@ -14,7 +14,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package input
+package internal
import (
"bytes"
diff --git a/roomserver/input/membership.go b/roomserver/internal/input_membership.go
index 351e63d6..cba75b4f 100644
--- a/roomserver/input/membership.go
+++ b/roomserver/internal/input_membership.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package input
+package internal
import (
"context"
diff --git a/roomserver/query/query.go b/roomserver/internal/query.go
index 6778ac28..98adc24b 100644
--- a/roomserver/query/query.go
+++ b/roomserver/internal/query.go
@@ -14,16 +14,12 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package query
+package internal
import (
"context"
- "encoding/json"
"fmt"
- "net/http"
- "github.com/matrix-org/dendrite/common"
- "github.com/matrix-org/dendrite/common/caching"
"github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/dendrite/roomserver/auth"
"github.com/matrix-org/dendrite/roomserver/state"
@@ -35,17 +31,8 @@ import (
"github.com/sirupsen/logrus"
)
-// RoomserverQueryAPI is an implementation of api.RoomserverQueryAPI
-type RoomserverQueryAPI struct {
- DB storage.Database
- ImmutableCache caching.ImmutableCache
- ServerName gomatrixserverlib.ServerName
- KeyRing gomatrixserverlib.JSONVerifier
- FedClient *gomatrixserverlib.FederationClient
-}
-
-// QueryLatestEventsAndState implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryLatestEventsAndState(
+// QueryLatestEventsAndState implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryLatestEventsAndState(
ctx context.Context,
request *api.QueryLatestEventsAndStateRequest,
response *api.QueryLatestEventsAndStateResponse,
@@ -104,8 +91,8 @@ func (r *RoomserverQueryAPI) QueryLatestEventsAndState(
return nil
}
-// QueryStateAfterEvents implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryStateAfterEvents(
+// QueryStateAfterEvents implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryStateAfterEvents(
ctx context.Context,
request *api.QueryStateAfterEventsRequest,
response *api.QueryStateAfterEventsResponse,
@@ -160,8 +147,8 @@ func (r *RoomserverQueryAPI) QueryStateAfterEvents(
return nil
}
-// QueryEventsByID implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryEventsByID(
+// QueryEventsByID implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryEventsByID(
ctx context.Context,
request *api.QueryEventsByIDRequest,
response *api.QueryEventsByIDResponse,
@@ -195,7 +182,7 @@ func (r *RoomserverQueryAPI) QueryEventsByID(
return nil
}
-func (r *RoomserverQueryAPI) loadStateEvents(
+func (r *RoomserverInternalAPI) loadStateEvents(
ctx context.Context, stateEntries []types.StateEntry,
) ([]gomatrixserverlib.Event, error) {
eventNIDs := make([]types.EventNID, len(stateEntries))
@@ -205,7 +192,7 @@ func (r *RoomserverQueryAPI) loadStateEvents(
return r.loadEvents(ctx, eventNIDs)
}
-func (r *RoomserverQueryAPI) loadEvents(
+func (r *RoomserverInternalAPI) loadEvents(
ctx context.Context, eventNIDs []types.EventNID,
) ([]gomatrixserverlib.Event, error) {
stateEvents, err := r.DB.Events(ctx, eventNIDs)
@@ -220,8 +207,8 @@ func (r *RoomserverQueryAPI) loadEvents(
return result, nil
}
-// QueryMembershipForUser implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryMembershipForUser(
+// QueryMembershipForUser implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryMembershipForUser(
ctx context.Context,
request *api.QueryMembershipForUserRequest,
response *api.QueryMembershipForUserResponse,
@@ -251,8 +238,8 @@ func (r *RoomserverQueryAPI) QueryMembershipForUser(
return nil
}
-// QueryMembershipsForRoom implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryMembershipsForRoom(
+// QueryMembershipsForRoom implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryMembershipsForRoom(
ctx context.Context,
request *api.QueryMembershipsForRoomRequest,
response *api.QueryMembershipsForRoomResponse,
@@ -366,8 +353,8 @@ func getMembershipsAtState(
return events, nil
}
-// QueryInvitesForUser implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryInvitesForUser(
+// QueryInvitesForUser implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryInvitesForUser(
ctx context.Context,
request *api.QueryInvitesForUserRequest,
response *api.QueryInvitesForUserResponse,
@@ -400,8 +387,8 @@ func (r *RoomserverQueryAPI) QueryInvitesForUser(
return nil
}
-// QueryServerAllowedToSeeEvent implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryServerAllowedToSeeEvent(
+// QueryServerAllowedToSeeEvent implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryServerAllowedToSeeEvent(
ctx context.Context,
request *api.QueryServerAllowedToSeeEventRequest,
response *api.QueryServerAllowedToSeeEventResponse,
@@ -424,7 +411,7 @@ func (r *RoomserverQueryAPI) QueryServerAllowedToSeeEvent(
return
}
-func (r *RoomserverQueryAPI) checkServerAllowedToSeeEvent(
+func (r *RoomserverInternalAPI) checkServerAllowedToSeeEvent(
ctx context.Context, eventID string, serverName gomatrixserverlib.ServerName, isServerInRoom bool,
) (bool, error) {
roomState := state.NewStateResolution(r.DB)
@@ -443,8 +430,8 @@ func (r *RoomserverQueryAPI) checkServerAllowedToSeeEvent(
return auth.IsServerAllowed(serverName, isServerInRoom, stateAtEvent), nil
}
-// QueryMissingEvents implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryMissingEvents(
+// QueryMissingEvents implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryMissingEvents(
ctx context.Context,
request *api.QueryMissingEventsRequest,
response *api.QueryMissingEventsResponse,
@@ -489,7 +476,7 @@ func (r *RoomserverQueryAPI) QueryMissingEvents(
}
// QueryBackfill implements api.RoomServerQueryAPI
-func (r *RoomserverQueryAPI) QueryBackfill(
+func (r *RoomserverInternalAPI) QueryBackfill(
ctx context.Context,
request *api.QueryBackfillRequest,
response *api.QueryBackfillResponse,
@@ -542,7 +529,7 @@ func (r *RoomserverQueryAPI) QueryBackfill(
return err
}
-func (r *RoomserverQueryAPI) backfillViaFederation(ctx context.Context, req *api.QueryBackfillRequest, res *api.QueryBackfillResponse) error {
+func (r *RoomserverInternalAPI) backfillViaFederation(ctx context.Context, req *api.QueryBackfillRequest, res *api.QueryBackfillResponse) error {
roomVer, err := r.DB.GetRoomVersionForRoom(ctx, req.RoomID)
if err != nil {
return fmt.Errorf("backfillViaFederation: unknown room version for room %s : %w", req.RoomID, err)
@@ -600,7 +587,7 @@ func (r *RoomserverQueryAPI) backfillViaFederation(ctx context.Context, req *api
return nil
}
-func (r *RoomserverQueryAPI) isServerCurrentlyInRoom(ctx context.Context, serverName gomatrixserverlib.ServerName, roomID string) (bool, error) {
+func (r *RoomserverInternalAPI) isServerCurrentlyInRoom(ctx context.Context, serverName gomatrixserverlib.ServerName, roomID string) (bool, error) {
roomNID, err := r.DB.RoomNID(ctx, roomID)
if err != nil {
return false, err
@@ -624,7 +611,7 @@ func (r *RoomserverQueryAPI) isServerCurrentlyInRoom(ctx context.Context, server
// fetchAndStoreMissingEvents does a best-effort fetch and store of missing events specified in stateIDs. Returns no error as it is just
// best effort.
-func (r *RoomserverQueryAPI) fetchAndStoreMissingEvents(ctx context.Context, roomVer gomatrixserverlib.RoomVersion,
+func (r *RoomserverInternalAPI) fetchAndStoreMissingEvents(ctx context.Context, roomVer gomatrixserverlib.RoomVersion,
backfillRequester *backfillRequester, stateIDs []string) {
servers := backfillRequester.servers
@@ -684,7 +671,7 @@ func (r *RoomserverQueryAPI) fetchAndStoreMissingEvents(ctx context.Context, roo
// TODO: Remove this when we have tests to assert correctness of this function
// nolint:gocyclo
-func (r *RoomserverQueryAPI) scanEventTree(
+func (r *RoomserverInternalAPI) scanEventTree(
ctx context.Context, front []string, visited map[string]bool, limit int,
serverName gomatrixserverlib.ServerName,
) ([]types.EventNID, error) {
@@ -777,8 +764,8 @@ BFSLoop:
return resultNIDs, err
}
-// QueryStateAndAuthChain implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryStateAndAuthChain(
+// QueryStateAndAuthChain implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryStateAndAuthChain(
ctx context.Context,
request *api.QueryStateAndAuthChainRequest,
response *api.QueryStateAndAuthChainResponse,
@@ -837,7 +824,7 @@ func (r *RoomserverQueryAPI) QueryStateAndAuthChain(
return err
}
-func (r *RoomserverQueryAPI) loadStateAtEventIDs(ctx context.Context, eventIDs []string) ([]gomatrixserverlib.Event, error) {
+func (r *RoomserverInternalAPI) loadStateAtEventIDs(ctx context.Context, eventIDs []string) ([]gomatrixserverlib.Event, error) {
roomState := state.NewStateResolution(r.DB)
prevStates, err := r.DB.StateAtEventIDs(ctx, eventIDs)
if err != nil {
@@ -942,8 +929,8 @@ func persistEvents(ctx context.Context, db storage.Database, events []gomatrixse
return roomNID, backfilledEventMap
}
-// QueryRoomVersionCapabilities implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryRoomVersionCapabilities(
+// QueryRoomVersionCapabilities implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryRoomVersionCapabilities(
ctx context.Context,
request *api.QueryRoomVersionCapabilitiesRequest,
response *api.QueryRoomVersionCapabilitiesResponse,
@@ -960,8 +947,8 @@ func (r *RoomserverQueryAPI) QueryRoomVersionCapabilities(
return nil
}
-// QueryRoomVersionCapabilities implements api.RoomserverQueryAPI
-func (r *RoomserverQueryAPI) QueryRoomVersionForRoom(
+// QueryRoomVersionCapabilities implements api.RoomserverInternalAPI
+func (r *RoomserverInternalAPI) QueryRoomVersionForRoom(
ctx context.Context,
request *api.QueryRoomVersionForRoomRequest,
response *api.QueryRoomVersionForRoomResponse,
@@ -979,176 +966,3 @@ func (r *RoomserverQueryAPI) QueryRoomVersionForRoom(
r.ImmutableCache.StoreRoomVersion(request.RoomID, response.RoomVersion)
return nil
}
-
-// SetupHTTP adds the RoomserverQueryAPI handlers to the http.ServeMux.
-// nolint: gocyclo
-func (r *RoomserverQueryAPI) SetupHTTP(servMux *http.ServeMux) {
- servMux.Handle(
- api.RoomserverQueryLatestEventsAndStatePath,
- common.MakeInternalAPI("queryLatestEventsAndState", func(req *http.Request) util.JSONResponse {
- var request api.QueryLatestEventsAndStateRequest
- var response api.QueryLatestEventsAndStateResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryLatestEventsAndState(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryStateAfterEventsPath,
- common.MakeInternalAPI("queryStateAfterEvents", func(req *http.Request) util.JSONResponse {
- var request api.QueryStateAfterEventsRequest
- var response api.QueryStateAfterEventsResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryStateAfterEvents(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryEventsByIDPath,
- common.MakeInternalAPI("queryEventsByID", func(req *http.Request) util.JSONResponse {
- var request api.QueryEventsByIDRequest
- var response api.QueryEventsByIDResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryEventsByID(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryMembershipForUserPath,
- common.MakeInternalAPI("QueryMembershipForUser", func(req *http.Request) util.JSONResponse {
- var request api.QueryMembershipForUserRequest
- var response api.QueryMembershipForUserResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryMembershipForUser(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryMembershipsForRoomPath,
- common.MakeInternalAPI("queryMembershipsForRoom", func(req *http.Request) util.JSONResponse {
- var request api.QueryMembershipsForRoomRequest
- var response api.QueryMembershipsForRoomResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryMembershipsForRoom(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryInvitesForUserPath,
- common.MakeInternalAPI("queryInvitesForUser", func(req *http.Request) util.JSONResponse {
- var request api.QueryInvitesForUserRequest
- var response api.QueryInvitesForUserResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryInvitesForUser(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryServerAllowedToSeeEventPath,
- common.MakeInternalAPI("queryServerAllowedToSeeEvent", func(req *http.Request) util.JSONResponse {
- var request api.QueryServerAllowedToSeeEventRequest
- var response api.QueryServerAllowedToSeeEventResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryServerAllowedToSeeEvent(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryMissingEventsPath,
- common.MakeInternalAPI("queryMissingEvents", func(req *http.Request) util.JSONResponse {
- var request api.QueryMissingEventsRequest
- var response api.QueryMissingEventsResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryMissingEvents(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryStateAndAuthChainPath,
- common.MakeInternalAPI("queryStateAndAuthChain", func(req *http.Request) util.JSONResponse {
- var request api.QueryStateAndAuthChainRequest
- var response api.QueryStateAndAuthChainResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryStateAndAuthChain(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryBackfillPath,
- common.MakeInternalAPI("QueryBackfill", func(req *http.Request) util.JSONResponse {
- var request api.QueryBackfillRequest
- var response api.QueryBackfillResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryBackfill(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryRoomVersionCapabilitiesPath,
- common.MakeInternalAPI("QueryRoomVersionCapabilities", func(req *http.Request) util.JSONResponse {
- var request api.QueryRoomVersionCapabilitiesRequest
- var response api.QueryRoomVersionCapabilitiesResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryRoomVersionCapabilities(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
- servMux.Handle(
- api.RoomserverQueryRoomVersionForRoomPath,
- common.MakeInternalAPI("QueryRoomVersionForRoom", func(req *http.Request) util.JSONResponse {
- var request api.QueryRoomVersionForRoomRequest
- var response api.QueryRoomVersionForRoomResponse
- if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
- return util.ErrorResponse(err)
- }
- if err := r.QueryRoomVersionForRoom(req.Context(), &request, &response); err != nil {
- return util.ErrorResponse(err)
- }
- return util.JSONResponse{Code: http.StatusOK, JSON: &response}
- }),
- )
-}
diff --git a/roomserver/query/backfill.go b/roomserver/internal/query_backfill.go
index f518de3e..d42038e7 100644
--- a/roomserver/query/backfill.go
+++ b/roomserver/internal/query_backfill.go
@@ -1,4 +1,4 @@
-package query
+package internal
import (
"context"
diff --git a/roomserver/query/query_test.go b/roomserver/internal/query_test.go
index 8fb6a082..211ab508 100644
--- a/roomserver/query/query_test.go
+++ b/roomserver/internal/query_test.go
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-package query
+package internal
import (
"context"
@@ -24,7 +24,7 @@ import (
"github.com/matrix-org/gomatrixserverlib"
)
-// used to implement RoomserverQueryAPIEventDB to test getAuthChain
+// used to implement RoomserverInternalAPIEventDB to test getAuthChain
type getEventDB struct {
eventMap map[string]gomatrixserverlib.Event
}
@@ -79,7 +79,7 @@ func (db *getEventDB) addFakeEvents(graph map[string][]string) error {
return nil
}
-// EventsFromIDs implements RoomserverQueryAPIEventDB
+// EventsFromIDs implements RoomserverInternalAPIEventDB
func (db *getEventDB) EventsFromIDs(ctx context.Context, eventIDs []string) (res []types.Event, err error) {
for _, evID := range eventIDs {
res = append(res, types.Event{
diff --git a/roomserver/roomserver.go b/roomserver/roomserver.go
index 6fb2caff..916e25fb 100644
--- a/roomserver/roomserver.go
+++ b/roomserver/roomserver.go
@@ -20,12 +20,8 @@ import (
"github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/gomatrixserverlib"
- asQuery "github.com/matrix-org/dendrite/appservice/query"
-
"github.com/matrix-org/dendrite/common/basecomponent"
- "github.com/matrix-org/dendrite/roomserver/alias"
- "github.com/matrix-org/dendrite/roomserver/input"
- "github.com/matrix-org/dendrite/roomserver/query"
+ "github.com/matrix-org/dendrite/roomserver/internal"
"github.com/matrix-org/dendrite/roomserver/storage"
"github.com/sirupsen/logrus"
)
@@ -35,45 +31,27 @@ import (
// allowing other components running in the same process to hit the query the
// APIs directly instead of having to use HTTP.
func SetupRoomServerComponent(
- base *basecomponent.BaseDendrite, keyRing gomatrixserverlib.JSONVerifier,
+ base *basecomponent.BaseDendrite,
+ keyRing gomatrixserverlib.JSONVerifier,
fedClient *gomatrixserverlib.FederationClient,
-) (api.RoomserverAliasAPI, api.RoomserverInputAPI, api.RoomserverQueryAPI) {
+) api.RoomserverInternalAPI {
roomserverDB, err := storage.Open(string(base.Cfg.Database.RoomServer))
if err != nil {
logrus.WithError(err).Panicf("failed to connect to room server db")
}
- inputAPI := input.RoomserverInputAPI{
+ internalAPI := internal.RoomserverInternalAPI{
DB: roomserverDB,
+ Cfg: base.Cfg,
Producer: base.KafkaProducer,
OutputRoomEventTopic: string(base.Cfg.Kafka.Topics.OutputRoomEvent),
+ ImmutableCache: base.ImmutableCache,
+ ServerName: base.Cfg.Matrix.ServerName,
+ FedClient: fedClient,
+ KeyRing: keyRing,
}
- inputAPI.SetupHTTP(http.DefaultServeMux)
-
- queryAPI := query.RoomserverQueryAPI{
- DB: roomserverDB,
- ImmutableCache: base.ImmutableCache,
- ServerName: base.Cfg.Matrix.ServerName,
- FedClient: fedClient,
- // TODO: We should have a key server so we don't keep adding components
- // which talk to the same DB.
- KeyRing: keyRing,
- }
-
- queryAPI.SetupHTTP(http.DefaultServeMux)
-
- asAPI := asQuery.AppServiceQueryAPI{Cfg: base.Cfg}
-
- aliasAPI := alias.RoomserverAliasAPI{
- DB: roomserverDB,
- Cfg: base.Cfg,
- InputAPI: &inputAPI,
- QueryAPI: &queryAPI,
- AppserviceAPI: &asAPI,
- }
-
- aliasAPI.SetupHTTP(http.DefaultServeMux)
+ internalAPI.SetupHTTP(http.DefaultServeMux)
- return &aliasAPI, &inputAPI, &queryAPI
+ return &internalAPI
}