aboutsummaryrefslogtreecommitdiff
path: root/roomserver
diff options
context:
space:
mode:
authorkegsay <kegan@matrix.org>2022-05-05 13:17:38 +0100
committerGitHub <noreply@github.com>2022-05-05 13:17:38 +0100
commit506de4bb3d69fef27e60d09d06712a72e588a198 (patch)
treec2e7c0fd25b047cde8e597f9e675ba45a0fe5bab /roomserver
parentd9e71b93b68efb57582d02448883b8a1259205e8 (diff)
Define component interfaces based on consumers (1/2) (#2423)
* Specify interfaces used by appservice, do half of clientapi * convert more deps of clientapi to finer-grained interfaces * Convert mediaapi and rest of clientapi * Somehow this got missed
Diffstat (limited to 'roomserver')
-rw-r--r--roomserver/api/api.go190
-rw-r--r--roomserver/api/wrapper.go42
2 files changed, 128 insertions, 104 deletions
diff --git a/roomserver/api/api.go b/roomserver/api/api.go
index 2e4ec3ff..33c3d157 100644
--- a/roomserver/api/api.go
+++ b/roomserver/api/api.go
@@ -12,7 +12,13 @@ import (
// RoomserverInputAPI is used to write events to the room server.
type RoomserverInternalAPI interface {
+ InputRoomEventsAPI
+ QueryLatestEventsAndStateAPI
+ QueryEventsAPI
+
SyncRoomserverAPI
+ AppserviceRoomserverAPI
+ ClientRoomserverAPI
// needed to avoid chicken and egg scenario when setting up the
// interdependencies between the roomserver and other input APIs
@@ -20,12 +26,6 @@ type RoomserverInternalAPI interface {
SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI)
SetUserAPI(userAPI userapi.UserInternalAPI)
- InputRoomEvents(
- ctx context.Context,
- request *InputRoomEventsRequest,
- response *InputRoomEventsResponse,
- )
-
PerformInvite(
ctx context.Context,
req *PerformInviteRequest,
@@ -68,44 +68,31 @@ type RoomserverInternalAPI interface {
res *PerformInboundPeekResponse,
) error
- PerformAdminEvacuateRoom(
- ctx context.Context,
- req *PerformAdminEvacuateRoomRequest,
- res *PerformAdminEvacuateRoomResponse,
- )
-
QueryPublishedRooms(
ctx context.Context,
req *QueryPublishedRoomsRequest,
res *QueryPublishedRoomsResponse,
) error
- // Query a list of membership events for a room
- QueryMembershipsForRoom(
- ctx context.Context,
- request *QueryMembershipsForRoomRequest,
- response *QueryMembershipsForRoomResponse,
- ) error
-
// Query if we think we're still in a room.
QueryServerJoinedToRoom(
ctx context.Context,
- request *QueryServerJoinedToRoomRequest,
- response *QueryServerJoinedToRoomResponse,
+ req *QueryServerJoinedToRoomRequest,
+ res *QueryServerJoinedToRoomResponse,
) error
// Query whether a server is allowed to see an event
QueryServerAllowedToSeeEvent(
ctx context.Context,
- request *QueryServerAllowedToSeeEventRequest,
- response *QueryServerAllowedToSeeEventResponse,
+ req *QueryServerAllowedToSeeEventRequest,
+ res *QueryServerAllowedToSeeEventResponse,
) error
// Query missing events for a room from roomserver
QueryMissingEvents(
ctx context.Context,
- request *QueryMissingEventsRequest,
- response *QueryMissingEventsResponse,
+ req *QueryMissingEventsRequest,
+ res *QueryMissingEventsResponse,
) error
// Query to get state and auth chain for a (potentially hypothetical) event.
@@ -113,8 +100,8 @@ type RoomserverInternalAPI interface {
// the state and auth chain to return.
QueryStateAndAuthChain(
ctx context.Context,
- request *QueryStateAndAuthChainRequest,
- response *QueryStateAndAuthChainResponse,
+ req *QueryStateAndAuthChainRequest,
+ res *QueryStateAndAuthChainResponse,
) error
// QueryAuthChain returns the entire auth chain for the event IDs given.
@@ -122,112 +109,179 @@ type RoomserverInternalAPI interface {
// Omits without error for any missing auth events. There will be no duplicates.
QueryAuthChain(
ctx context.Context,
- request *QueryAuthChainRequest,
- response *QueryAuthChainResponse,
+ req *QueryAuthChainRequest,
+ res *QueryAuthChainResponse,
) error
- // QueryCurrentState retrieves the requested state events. If state events are not found, they will be missing from
- // the response.
- QueryCurrentState(ctx context.Context, req *QueryCurrentStateRequest, res *QueryCurrentStateResponse) error
// QueryRoomsForUser retrieves a list of room IDs matching the given query.
QueryRoomsForUser(ctx context.Context, req *QueryRoomsForUserRequest, res *QueryRoomsForUserResponse) error
- // QueryKnownUsers returns a list of users that we know about from our joined rooms.
- QueryKnownUsers(ctx context.Context, req *QueryKnownUsersRequest, res *QueryKnownUsersResponse) error
// QueryServerBannedFromRoom returns whether a server is banned from a room by server ACLs.
QueryServerBannedFromRoom(ctx context.Context, req *QueryServerBannedFromRoomRequest, res *QueryServerBannedFromRoomResponse) error
- // PerformForget forgets a rooms history for a specific user
- PerformForget(ctx context.Context, req *PerformForgetRequest, resp *PerformForgetResponse) error
-
// PerformRoomUpgrade upgrades a room to a newer version
PerformRoomUpgrade(ctx context.Context, req *PerformRoomUpgradeRequest, resp *PerformRoomUpgradeResponse)
// Asks for the default room version as preferred by the server.
QueryRoomVersionCapabilities(
ctx context.Context,
- request *QueryRoomVersionCapabilitiesRequest,
- response *QueryRoomVersionCapabilitiesResponse,
+ req *QueryRoomVersionCapabilitiesRequest,
+ res *QueryRoomVersionCapabilitiesResponse,
) error
// Asks for the room version for a given room.
QueryRoomVersionForRoom(
ctx context.Context,
- request *QueryRoomVersionForRoomRequest,
- response *QueryRoomVersionForRoomResponse,
+ req *QueryRoomVersionForRoomRequest,
+ res *QueryRoomVersionForRoomResponse,
) error
// Set a room alias
SetRoomAlias(
ctx context.Context,
req *SetRoomAliasRequest,
- response *SetRoomAliasResponse,
+ res *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,
+ res *GetRoomIDForAliasResponse,
) error
// Get the user ID of the creator of an alias
GetCreatorIDForAlias(
ctx context.Context,
req *GetCreatorIDForAliasRequest,
- response *GetCreatorIDForAliasResponse,
+ res *GetCreatorIDForAliasResponse,
) error
// Remove a room alias
RemoveRoomAlias(
ctx context.Context,
req *RemoveRoomAliasRequest,
- response *RemoveRoomAliasResponse,
+ res *RemoveRoomAliasResponse,
) error
}
-// API functions required by the syncapi
-type SyncRoomserverAPI interface {
- // Query the latest events and state for a room from the room server.
- QueryLatestEventsAndState(
+type InputRoomEventsAPI interface {
+ InputRoomEvents(
ctx context.Context,
- request *QueryLatestEventsAndStateRequest,
- response *QueryLatestEventsAndStateResponse,
- ) error
- // QueryBulkStateContent does a bulk query for state event content in the given rooms.
+ req *InputRoomEventsRequest,
+ res *InputRoomEventsResponse,
+ )
+}
+
+// Query the latest events and state for a room from the room server.
+type QueryLatestEventsAndStateAPI interface {
+ QueryLatestEventsAndState(ctx context.Context, req *QueryLatestEventsAndStateRequest, res *QueryLatestEventsAndStateResponse) error
+}
+
+// QueryBulkStateContent does a bulk query for state event content in the given rooms.
+type QueryBulkStateContentAPI interface {
QueryBulkStateContent(ctx context.Context, req *QueryBulkStateContentRequest, res *QueryBulkStateContentResponse) error
+}
+
+type QueryEventsAPI interface {
+ // Query a list of events by event ID.
+ QueryEventsByID(
+ ctx context.Context,
+ req *QueryEventsByIDRequest,
+ res *QueryEventsByIDResponse,
+ ) error
+ // QueryCurrentState retrieves the requested state events. If state events are not found, they will be missing from
+ // the response.
+ QueryCurrentState(ctx context.Context, req *QueryCurrentStateRequest, res *QueryCurrentStateResponse) error
+}
+
+// API functions required by the syncapi
+type SyncRoomserverAPI interface {
+ QueryLatestEventsAndStateAPI
+ QueryBulkStateContentAPI
// QuerySharedUsers returns a list of users who share at least 1 room in common with the given user.
QuerySharedUsers(ctx context.Context, req *QuerySharedUsersRequest, res *QuerySharedUsersResponse) error
// Query a list of events by event ID.
QueryEventsByID(
ctx context.Context,
- request *QueryEventsByIDRequest,
- response *QueryEventsByIDResponse,
+ req *QueryEventsByIDRequest,
+ res *QueryEventsByIDResponse,
) error
// Query the membership event for an user for a room.
QueryMembershipForUser(
ctx context.Context,
- request *QueryMembershipForUserRequest,
- response *QueryMembershipForUserResponse,
+ req *QueryMembershipForUserRequest,
+ res *QueryMembershipForUserResponse,
) error
// Query the state after a list of events in a room from the room server.
QueryStateAfterEvents(
ctx context.Context,
- request *QueryStateAfterEventsRequest,
- response *QueryStateAfterEventsResponse,
+ req *QueryStateAfterEventsRequest,
+ res *QueryStateAfterEventsResponse,
) error
// Query a given amount (or less) of events prior to a given set of events.
PerformBackfill(
ctx context.Context,
- request *PerformBackfillRequest,
- response *PerformBackfillResponse,
+ req *PerformBackfillRequest,
+ res *PerformBackfillResponse,
) error
}
+
+type AppserviceRoomserverAPI interface {
+ // Query a list of events by event ID.
+ QueryEventsByID(
+ ctx context.Context,
+ req *QueryEventsByIDRequest,
+ res *QueryEventsByIDResponse,
+ ) error
+ // Query a list of membership events for a room
+ QueryMembershipsForRoom(
+ ctx context.Context,
+ req *QueryMembershipsForRoomRequest,
+ res *QueryMembershipsForRoomResponse,
+ ) error
+ // Get all known aliases for a room ID
+ GetAliasesForRoomID(
+ ctx context.Context,
+ req *GetAliasesForRoomIDRequest,
+ res *GetAliasesForRoomIDResponse,
+ ) error
+}
+
+type ClientRoomserverAPI interface {
+ InputRoomEventsAPI
+ QueryLatestEventsAndStateAPI
+ QueryBulkStateContentAPI
+ QueryEventsAPI
+ QueryMembershipForUser(ctx context.Context, req *QueryMembershipForUserRequest, res *QueryMembershipForUserResponse) error
+ QueryMembershipsForRoom(ctx context.Context, req *QueryMembershipsForRoomRequest, res *QueryMembershipsForRoomResponse) error
+ QueryRoomsForUser(ctx context.Context, req *QueryRoomsForUserRequest, res *QueryRoomsForUserResponse) error
+ QueryStateAfterEvents(ctx context.Context, req *QueryStateAfterEventsRequest, res *QueryStateAfterEventsResponse) error
+ // QueryKnownUsers returns a list of users that we know about from our joined rooms.
+ QueryKnownUsers(ctx context.Context, req *QueryKnownUsersRequest, res *QueryKnownUsersResponse) error
+ QueryRoomVersionForRoom(ctx context.Context, req *QueryRoomVersionForRoomRequest, res *QueryRoomVersionForRoomResponse) error
+ QueryPublishedRooms(ctx context.Context, req *QueryPublishedRoomsRequest, res *QueryPublishedRoomsResponse) error
+ QueryRoomVersionCapabilities(ctx context.Context, req *QueryRoomVersionCapabilitiesRequest, res *QueryRoomVersionCapabilitiesResponse) error
+
+ GetRoomIDForAlias(ctx context.Context, req *GetRoomIDForAliasRequest, res *GetRoomIDForAliasResponse) error
+ GetAliasesForRoomID(ctx context.Context, req *GetAliasesForRoomIDRequest, res *GetAliasesForRoomIDResponse) error
+
+ // PerformRoomUpgrade upgrades a room to a newer version
+ PerformRoomUpgrade(ctx context.Context, req *PerformRoomUpgradeRequest, resp *PerformRoomUpgradeResponse)
+ PerformAdminEvacuateRoom(
+ ctx context.Context,
+ req *PerformAdminEvacuateRoomRequest,
+ res *PerformAdminEvacuateRoomResponse,
+ )
+ PerformPeek(ctx context.Context, req *PerformPeekRequest, res *PerformPeekResponse)
+ PerformUnpeek(ctx context.Context, req *PerformUnpeekRequest, res *PerformUnpeekResponse)
+ PerformInvite(ctx context.Context, req *PerformInviteRequest, res *PerformInviteResponse) error
+ PerformJoin(ctx context.Context, req *PerformJoinRequest, res *PerformJoinResponse)
+ PerformLeave(ctx context.Context, req *PerformLeaveRequest, res *PerformLeaveResponse) error
+ PerformPublish(ctx context.Context, req *PerformPublishRequest, res *PerformPublishResponse)
+ // PerformForget forgets a rooms history for a specific user
+ PerformForget(ctx context.Context, req *PerformForgetRequest, resp *PerformForgetResponse) error
+ SetRoomAlias(ctx context.Context, req *SetRoomAliasRequest, res *SetRoomAliasResponse) error
+ RemoveRoomAlias(ctx context.Context, req *RemoveRoomAliasRequest, res *RemoveRoomAliasResponse) error
+}
diff --git a/roomserver/api/wrapper.go b/roomserver/api/wrapper.go
index 5491d36b..9f7a09dd 100644
--- a/roomserver/api/wrapper.go
+++ b/roomserver/api/wrapper.go
@@ -16,7 +16,6 @@ package api
import (
"context"
- "fmt"
"github.com/matrix-org/gomatrixserverlib"
"github.com/matrix-org/util"
@@ -24,7 +23,7 @@ import (
// SendEvents to the roomserver The events are written with KindNew.
func SendEvents(
- ctx context.Context, rsAPI RoomserverInternalAPI,
+ ctx context.Context, rsAPI InputRoomEventsAPI,
kind Kind, events []*gomatrixserverlib.HeaderedEvent,
origin gomatrixserverlib.ServerName,
sendAsServer gomatrixserverlib.ServerName, txnID *TransactionID,
@@ -47,7 +46,7 @@ func SendEvents(
// with the state at the event as KindOutlier before it. Will not send any event that is
// marked as `true` in haveEventIDs.
func SendEventWithState(
- ctx context.Context, rsAPI RoomserverInternalAPI, kind Kind,
+ ctx context.Context, rsAPI InputRoomEventsAPI, kind Kind,
state *gomatrixserverlib.RespState, event *gomatrixserverlib.HeaderedEvent,
origin gomatrixserverlib.ServerName, haveEventIDs map[string]bool, async bool,
) error {
@@ -83,7 +82,7 @@ func SendEventWithState(
// SendInputRoomEvents to the roomserver.
func SendInputRoomEvents(
- ctx context.Context, rsAPI RoomserverInternalAPI,
+ ctx context.Context, rsAPI InputRoomEventsAPI,
ires []InputRoomEvent, async bool,
) error {
request := InputRoomEventsRequest{
@@ -95,37 +94,8 @@ func SendInputRoomEvents(
return response.Err()
}
-// SendInvite event to the roomserver.
-// This should only be needed for invite events that occur outside of a known room.
-// If we are in the room then the event should be sent using the SendEvents method.
-func SendInvite(
- ctx context.Context,
- rsAPI RoomserverInternalAPI, inviteEvent *gomatrixserverlib.HeaderedEvent,
- inviteRoomState []gomatrixserverlib.InviteV2StrippedState,
- sendAsServer gomatrixserverlib.ServerName, txnID *TransactionID,
-) error {
- // Start by sending the invite request into the roomserver. This will
- // trigger the federation request amongst other things if needed.
- request := &PerformInviteRequest{
- Event: inviteEvent,
- InviteRoomState: inviteRoomState,
- RoomVersion: inviteEvent.RoomVersion,
- SendAsServer: string(sendAsServer),
- TransactionID: txnID,
- }
- response := &PerformInviteResponse{}
- if err := rsAPI.PerformInvite(ctx, request, response); err != nil {
- return fmt.Errorf("rsAPI.PerformInvite: %w", err)
- }
- if response.Error != nil {
- return response.Error
- }
-
- return nil
-}
-
// GetEvent returns the event or nil, even on errors.
-func GetEvent(ctx context.Context, rsAPI RoomserverInternalAPI, eventID string) *gomatrixserverlib.HeaderedEvent {
+func GetEvent(ctx context.Context, rsAPI QueryEventsAPI, eventID string) *gomatrixserverlib.HeaderedEvent {
var res QueryEventsByIDResponse
err := rsAPI.QueryEventsByID(ctx, &QueryEventsByIDRequest{
EventIDs: []string{eventID},
@@ -141,7 +111,7 @@ func GetEvent(ctx context.Context, rsAPI RoomserverInternalAPI, eventID string)
}
// GetStateEvent returns the current state event in the room or nil.
-func GetStateEvent(ctx context.Context, rsAPI RoomserverInternalAPI, roomID string, tuple gomatrixserverlib.StateKeyTuple) *gomatrixserverlib.HeaderedEvent {
+func GetStateEvent(ctx context.Context, rsAPI QueryEventsAPI, roomID string, tuple gomatrixserverlib.StateKeyTuple) *gomatrixserverlib.HeaderedEvent {
var res QueryCurrentStateResponse
err := rsAPI.QueryCurrentState(ctx, &QueryCurrentStateRequest{
RoomID: roomID,
@@ -175,7 +145,7 @@ func IsServerBannedFromRoom(ctx context.Context, rsAPI RoomserverInternalAPI, ro
// PopulatePublicRooms extracts PublicRoom information for all the provided room IDs. The IDs are not checked to see if they are visible in the
// published room directory.
// due to lots of switches
-func PopulatePublicRooms(ctx context.Context, roomIDs []string, rsAPI RoomserverInternalAPI) ([]gomatrixserverlib.PublicRoom, error) {
+func PopulatePublicRooms(ctx context.Context, roomIDs []string, rsAPI QueryBulkStateContentAPI) ([]gomatrixserverlib.PublicRoom, error) {
avatarTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.avatar", StateKey: ""}
nameTuple := gomatrixserverlib.StateKeyTuple{EventType: "m.room.name", StateKey: ""}
canonicalTuple := gomatrixserverlib.StateKeyTuple{EventType: gomatrixserverlib.MRoomCanonicalAlias, StateKey: ""}