18231f25b4
* WIP Event rejection * Still send back errors for rejected events Instead, discard them at the federationapi /send layer rather than re-implementing checks at the clientapi/PerformJoin layer. * Implement rejected events Critically, rejected events CAN cause state resolution to happen as it can merge forks in the DAG. This is fine, _provided_ we do not add the rejected event when performing state resolution, which is what this PR does. It also fixes the error handling when NotAllowed happens, as we were checking too early and needlessly handling NotAllowed in more than one place. * Update test to match reality * Modify InputRoomEvents to no longer return an error Errors do not serialise across HTTP boundaries in polylith mode, so instead set fields on the InputRoomEventsResponse. Add `Err()` function to make the API shape basically the same. * Remove redundant returns; linting * Update blacklist
185 lines
5.4 KiB
Go
185 lines
5.4 KiB
Go
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,
|
|
)
|
|
|
|
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
|
|
|
|
PerformPeek(
|
|
ctx context.Context,
|
|
req *PerformPeekRequest,
|
|
res *PerformPeekResponse,
|
|
)
|
|
|
|
PerformPublish(
|
|
ctx context.Context,
|
|
req *PerformPublishRequest,
|
|
res *PerformPublishResponse,
|
|
)
|
|
|
|
QueryPublishedRooms(
|
|
ctx context.Context,
|
|
req *QueryPublishedRoomsRequest,
|
|
res *QueryPublishedRoomsResponse,
|
|
) 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 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
|
|
|
|
// 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
|
|
// QueryBulkStateContent does a bulk query for state event content in the given rooms.
|
|
QueryBulkStateContent(ctx context.Context, req *QueryBulkStateContentRequest, res *QueryBulkStateContentResponse) error
|
|
// 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
|
|
// 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
|
|
|
|
// Query a given amount (or less) of events prior to a given set of events.
|
|
PerformBackfill(
|
|
ctx context.Context,
|
|
request *PerformBackfillRequest,
|
|
response *PerformBackfillResponse,
|
|
) 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
|
|
}
|