2020-05-01 04:48:17 -05:00
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
|
2022-02-18 09:05:03 -06:00
|
|
|
"github.com/matrix-org/gomatrixserverlib"
|
|
|
|
|
2020-12-18 07:33:28 -06:00
|
|
|
asAPI "github.com/matrix-org/dendrite/appservice/api"
|
2021-11-24 04:45:23 -06:00
|
|
|
fsAPI "github.com/matrix-org/dendrite/federationapi/api"
|
2022-02-18 09:05:03 -06:00
|
|
|
userapi "github.com/matrix-org/dendrite/userapi/api"
|
2020-05-01 04:48:17 -05:00
|
|
|
)
|
|
|
|
|
|
|
|
// RoomserverInputAPI is used to write events to the room server.
|
|
|
|
type RoomserverInternalAPI interface {
|
2022-05-05 07:17:38 -05:00
|
|
|
InputRoomEventsAPI
|
|
|
|
QueryLatestEventsAndStateAPI
|
|
|
|
QueryEventsAPI
|
|
|
|
|
2022-05-05 03:56:03 -05:00
|
|
|
SyncRoomserverAPI
|
2022-05-05 07:17:38 -05:00
|
|
|
AppserviceRoomserverAPI
|
|
|
|
ClientRoomserverAPI
|
2022-05-05 03:56:03 -05:00
|
|
|
|
2020-05-01 04:48:17 -05:00
|
|
|
// needed to avoid chicken and egg scenario when setting up the
|
|
|
|
// interdependencies between the roomserver and other input APIs
|
2021-12-13 07:24:49 -06:00
|
|
|
SetFederationAPI(fsAPI fsAPI.FederationInternalAPI, keyRing *gomatrixserverlib.KeyRing)
|
2020-12-18 07:33:28 -06:00
|
|
|
SetAppserviceAPI(asAPI asAPI.AppServiceQueryAPI)
|
2022-02-18 09:05:03 -06:00
|
|
|
SetUserAPI(userAPI userapi.UserInternalAPI)
|
2020-05-01 04:48:17 -05:00
|
|
|
|
2020-06-24 09:06:14 -05:00
|
|
|
PerformInvite(
|
|
|
|
ctx context.Context,
|
|
|
|
req *PerformInviteRequest,
|
|
|
|
res *PerformInviteResponse,
|
2020-08-17 05:40:49 -05:00
|
|
|
) error
|
2020-06-24 09:06:14 -05:00
|
|
|
|
2020-05-04 07:53:47 -05:00
|
|
|
PerformJoin(
|
|
|
|
ctx context.Context,
|
|
|
|
req *PerformJoinRequest,
|
|
|
|
res *PerformJoinResponse,
|
2020-06-24 09:06:14 -05:00
|
|
|
)
|
2020-05-04 07:53:47 -05:00
|
|
|
|
2020-05-04 12:34:09 -05:00
|
|
|
PerformLeave(
|
|
|
|
ctx context.Context,
|
|
|
|
req *PerformLeaveRequest,
|
|
|
|
res *PerformLeaveResponse,
|
|
|
|
) error
|
|
|
|
|
2020-09-10 08:39:18 -05:00
|
|
|
PerformPeek(
|
|
|
|
ctx context.Context,
|
|
|
|
req *PerformPeekRequest,
|
|
|
|
res *PerformPeekResponse,
|
|
|
|
)
|
|
|
|
|
2020-12-03 05:11:46 -06:00
|
|
|
PerformUnpeek(
|
|
|
|
ctx context.Context,
|
|
|
|
req *PerformUnpeekRequest,
|
|
|
|
res *PerformUnpeekResponse,
|
|
|
|
)
|
|
|
|
|
2020-07-02 09:41:18 -05:00
|
|
|
PerformPublish(
|
|
|
|
ctx context.Context,
|
|
|
|
req *PerformPublishRequest,
|
|
|
|
res *PerformPublishResponse,
|
|
|
|
)
|
|
|
|
|
2021-01-22 08:55:08 -06:00
|
|
|
PerformInboundPeek(
|
|
|
|
ctx context.Context,
|
|
|
|
req *PerformInboundPeekRequest,
|
|
|
|
res *PerformInboundPeekResponse,
|
|
|
|
) error
|
|
|
|
|
2020-07-02 09:41:18 -05:00
|
|
|
QueryPublishedRooms(
|
|
|
|
ctx context.Context,
|
|
|
|
req *QueryPublishedRoomsRequest,
|
|
|
|
res *QueryPublishedRoomsResponse,
|
|
|
|
) error
|
|
|
|
|
2020-09-24 10:18:13 -05:00
|
|
|
// Query if we think we're still in a room.
|
|
|
|
QueryServerJoinedToRoom(
|
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryServerJoinedToRoomRequest,
|
|
|
|
res *QueryServerJoinedToRoomResponse,
|
2020-09-24 10:18:13 -05:00
|
|
|
) error
|
|
|
|
|
2020-05-01 04:48:17 -05:00
|
|
|
// Query whether a server is allowed to see an event
|
|
|
|
QueryServerAllowedToSeeEvent(
|
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryServerAllowedToSeeEventRequest,
|
|
|
|
res *QueryServerAllowedToSeeEventResponse,
|
2020-05-01 04:48:17 -05:00
|
|
|
) error
|
|
|
|
|
|
|
|
// Query missing events for a room from roomserver
|
|
|
|
QueryMissingEvents(
|
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryMissingEventsRequest,
|
|
|
|
res *QueryMissingEventsResponse,
|
2020-05-01 04:48:17 -05:00
|
|
|
) 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,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryStateAndAuthChainRequest,
|
|
|
|
res *QueryStateAndAuthChainResponse,
|
2020-05-01 04:48:17 -05:00
|
|
|
) error
|
|
|
|
|
2020-12-04 08:11:01 -06:00
|
|
|
// QueryAuthChain returns the entire auth chain for the event IDs given.
|
|
|
|
// The response includes the events in the request.
|
|
|
|
// Omits without error for any missing auth events. There will be no duplicates.
|
|
|
|
QueryAuthChain(
|
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryAuthChainRequest,
|
|
|
|
res *QueryAuthChainResponse,
|
2020-12-04 08:11:01 -06:00
|
|
|
) error
|
|
|
|
|
2020-09-03 11:20:54 -05:00
|
|
|
// QueryRoomsForUser retrieves a list of room IDs matching the given query.
|
|
|
|
QueryRoomsForUser(ctx context.Context, req *QueryRoomsForUserRequest, res *QueryRoomsForUserResponse) error
|
|
|
|
// QueryServerBannedFromRoom returns whether a server is banned from a room by server ACLs.
|
|
|
|
QueryServerBannedFromRoom(ctx context.Context, req *QueryServerBannedFromRoomRequest, res *QueryServerBannedFromRoomResponse) error
|
|
|
|
|
2022-04-05 04:04:08 -05:00
|
|
|
// PerformRoomUpgrade upgrades a room to a newer version
|
|
|
|
PerformRoomUpgrade(ctx context.Context, req *PerformRoomUpgradeRequest, resp *PerformRoomUpgradeResponse)
|
|
|
|
|
2020-05-01 04:48:17 -05:00
|
|
|
// Asks for the default room version as preferred by the server.
|
|
|
|
QueryRoomVersionCapabilities(
|
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryRoomVersionCapabilitiesRequest,
|
|
|
|
res *QueryRoomVersionCapabilitiesResponse,
|
2020-05-01 04:48:17 -05:00
|
|
|
) error
|
|
|
|
|
|
|
|
// Asks for the room version for a given room.
|
|
|
|
QueryRoomVersionForRoom(
|
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryRoomVersionForRoomRequest,
|
|
|
|
res *QueryRoomVersionForRoomResponse,
|
2020-05-01 04:48:17 -05:00
|
|
|
) error
|
|
|
|
|
|
|
|
// Set a room alias
|
|
|
|
SetRoomAlias(
|
|
|
|
ctx context.Context,
|
|
|
|
req *SetRoomAliasRequest,
|
2022-05-05 07:17:38 -05:00
|
|
|
res *SetRoomAliasResponse,
|
2020-05-01 04:48:17 -05:00
|
|
|
) error
|
|
|
|
|
|
|
|
// Get the room ID for an alias
|
|
|
|
GetRoomIDForAlias(
|
|
|
|
ctx context.Context,
|
|
|
|
req *GetRoomIDForAliasRequest,
|
2022-05-05 07:17:38 -05:00
|
|
|
res *GetRoomIDForAliasResponse,
|
2020-05-01 04:48:17 -05:00
|
|
|
) error
|
|
|
|
|
|
|
|
// Get the user ID of the creator of an alias
|
|
|
|
GetCreatorIDForAlias(
|
|
|
|
ctx context.Context,
|
|
|
|
req *GetCreatorIDForAliasRequest,
|
2022-05-05 07:17:38 -05:00
|
|
|
res *GetCreatorIDForAliasResponse,
|
2020-05-01 04:48:17 -05:00
|
|
|
) error
|
|
|
|
|
|
|
|
// Remove a room alias
|
|
|
|
RemoveRoomAlias(
|
|
|
|
ctx context.Context,
|
|
|
|
req *RemoveRoomAliasRequest,
|
2022-05-05 07:17:38 -05:00
|
|
|
res *RemoveRoomAliasResponse,
|
2020-05-01 04:48:17 -05:00
|
|
|
) error
|
|
|
|
}
|
2022-05-05 03:56:03 -05:00
|
|
|
|
2022-05-05 07:17:38 -05:00
|
|
|
type InputRoomEventsAPI interface {
|
|
|
|
InputRoomEvents(
|
2022-05-05 03:56:03 -05:00
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
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 {
|
2022-05-05 03:56:03 -05:00
|
|
|
QueryBulkStateContent(ctx context.Context, req *QueryBulkStateContentRequest, res *QueryBulkStateContentResponse) error
|
2022-05-05 07:17:38 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
2022-05-05 03:56:03 -05:00
|
|
|
// 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,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryEventsByIDRequest,
|
|
|
|
res *QueryEventsByIDResponse,
|
2022-05-05 03:56:03 -05:00
|
|
|
) error
|
|
|
|
// Query the membership event for an user for a room.
|
|
|
|
QueryMembershipForUser(
|
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryMembershipForUserRequest,
|
|
|
|
res *QueryMembershipForUserResponse,
|
2022-05-05 03:56:03 -05:00
|
|
|
) error
|
|
|
|
|
|
|
|
// Query the state after a list of events in a room from the room server.
|
|
|
|
QueryStateAfterEvents(
|
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *QueryStateAfterEventsRequest,
|
|
|
|
res *QueryStateAfterEventsResponse,
|
2022-05-05 03:56:03 -05:00
|
|
|
) error
|
|
|
|
|
|
|
|
// Query a given amount (or less) of events prior to a given set of events.
|
|
|
|
PerformBackfill(
|
|
|
|
ctx context.Context,
|
2022-05-05 07:17:38 -05:00
|
|
|
req *PerformBackfillRequest,
|
|
|
|
res *PerformBackfillResponse,
|
2022-05-05 03:56:03 -05:00
|
|
|
) error
|
|
|
|
}
|
2022-05-05 07:17:38 -05:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|