routing

package
v0.3.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 9, 2020 License: Apache-2.0 Imports: 46 Imported by: 4

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddCompletedSessionStage

func AddCompletedSessionStage(sessionID string, stage authtypes.LoginType)

AddCompletedSessionStage records that a session has completed an auth stage.

func AuthFallback

func AuthFallback(
	w http.ResponseWriter, req *http.Request, authType string,
	cfg *config.ClientAPI,
) *util.JSONResponse

AuthFallback implements GET and POST /auth/{authType}/fallback/web?session={sessionID}

func CheckAndSave3PIDAssociation

func CheckAndSave3PIDAssociation(
	req *http.Request, accountDB accounts.Database, device *api.Device,
	cfg *config.ClientAPI,
) util.JSONResponse

CheckAndSave3PIDAssociation implements POST /account/3pid

func ClaimKeys

func ClaimKeys(req *http.Request, keyAPI api.KeyInternalAPI) util.JSONResponse

func CreateRoom

CreateRoom implements /createRoom

func Deactivate

func Deactivate(
	req *http.Request,
	userInteractiveAuth *auth.UserInteractive,
	userAPI api.UserInternalAPI,
	deviceAPI *api.Device,
) util.JSONResponse

Deactivate handles POST requests to /account/deactivate

func DeleteDeviceById

func DeleteDeviceById(
	req *http.Request, userInteractiveAuth *auth.UserInteractive, userAPI api.UserInternalAPI, device *api.Device,
	deviceID string,
) util.JSONResponse

DeleteDeviceById handles DELETE requests to /devices/{deviceId}

func DeleteDevices

func DeleteDevices(
	req *http.Request, userAPI api.UserInternalAPI, device *api.Device,
) util.JSONResponse

DeleteDevices handles POST requests to /delete_devices

func DeleteTag

func DeleteTag(
	req *http.Request,
	userAPI api.UserInternalAPI,
	device *api.Device,
	userID string,
	roomID string,
	tag string,
	syncProducer *producers.SyncAPIProducer,
) util.JSONResponse

DeleteTag implements DELETE /_matrix/client/r0/user/{userID}/rooms/{roomID}/tags/{tag} Delete functionality works by obtaining the saved tags, removing the intended tag from the "map" and then saving the new "map" in the DB

func DirectoryRoom

DirectoryRoom looks up a room alias

func Forget3PID

func Forget3PID(req *http.Request, accountDB accounts.Database) util.JSONResponse

Forget3PID implements POST /account/3pid/delete

func GetAccountData

func GetAccountData(
	req *http.Request, userAPI api.UserInternalAPI, device *api.Device,
	userID string, roomID string, dataType string,
) util.JSONResponse

GetAccountData implements GET /user/{userId}/[rooms/{roomid}/]account_data/{type}

func GetAdminWhois added in v0.3.1

func GetAdminWhois(
	req *http.Request, userAPI api.UserInternalAPI, device *api.Device,
	userID string,
) util.JSONResponse

GetAdminWhois implements GET /admin/whois/{userId}

func GetAssociated3PIDs

func GetAssociated3PIDs(
	req *http.Request, accountDB accounts.Database, device *api.Device,
) util.JSONResponse

GetAssociated3PIDs implements GET /account/3pid

func GetAvatarURL

func GetAvatarURL(
	req *http.Request, accountDB accounts.Database, cfg *config.ClientAPI,
	userID string, asAPI appserviceAPI.AppServiceQueryAPI,
	federation *gomatrixserverlib.FederationClient,
) util.JSONResponse

GetAvatarURL implements GET /profile/{userID}/avatar_url

func GetCapabilities

func GetCapabilities(
	req *http.Request, rsAPI roomserverAPI.RoomserverInternalAPI,
) util.JSONResponse

GetCapabilities returns information about the server's supported feature set and other relevant capabilities to an authenticated user.

func GetDeviceByID

func GetDeviceByID(
	req *http.Request, userAPI userapi.UserInternalAPI, device *api.Device,
	deviceID string,
) util.JSONResponse

GetDeviceByID handles /devices/{deviceID}

func GetDevicesByLocalpart

func GetDevicesByLocalpart(
	req *http.Request, userAPI userapi.UserInternalAPI, device *api.Device,
) util.JSONResponse

GetDevicesByLocalpart handles /devices

func GetDisplayName

func GetDisplayName(
	req *http.Request, accountDB accounts.Database, cfg *config.ClientAPI,
	userID string, asAPI appserviceAPI.AppServiceQueryAPI,
	federation *gomatrixserverlib.FederationClient,
) util.JSONResponse

GetDisplayName implements GET /profile/{userID}/displayname

func GetEvent

func GetEvent(
	req *http.Request,
	device *userapi.Device,
	roomID string,
	eventID string,
	cfg *config.ClientAPI,
	rsAPI api.RoomserverInternalAPI,
	federation *gomatrixserverlib.FederationClient,
) util.JSONResponse

GetEvent implements GET /_matrix/client/r0/rooms/{roomId}/event/{eventId} https://matrix.org/docs/spec/client_server/r0.4.0.html#get-matrix-client-r0-rooms-roomid-event-eventid

func GetJoinedRooms

func GetJoinedRooms(
	req *http.Request,
	device *userapi.Device,
	rsAPI api.RoomserverInternalAPI,
) util.JSONResponse

func GetMemberships

func GetMemberships(
	req *http.Request, device *userapi.Device, roomID string, joinedOnly bool,
	_ *config.ClientAPI,
	rsAPI api.RoomserverInternalAPI,
) util.JSONResponse

GetMemberships implements GET /rooms/{roomId}/members

func GetPostPublicRooms

GetPostPublicRooms implements GET and POST /publicRooms

func GetProfile

GetProfile implements GET /profile/{userID}

func GetTags

func GetTags(
	req *http.Request,
	userAPI api.UserInternalAPI,
	device *api.Device,
	userID string,
	roomID string,
	syncProducer *producers.SyncAPIProducer,
) util.JSONResponse

GetTags implements GET /_matrix/client/r0/user/{userID}/rooms/{roomID}/tags

func GetVisibility

func GetVisibility(
	req *http.Request, rsAPI roomserverAPI.RoomserverInternalAPI,
	roomID string,
) util.JSONResponse

GetVisibility implements GET /directory/list/room/{roomID}

func JoinRoomByIDOrAlias

func JoinRoomByIDOrAlias(
	req *http.Request,
	device *api.Device,
	rsAPI roomserverAPI.RoomserverInternalAPI,
	accountDB accounts.Database,
	roomIDOrAlias string,
) util.JSONResponse

func LeaveRoomByID

func LeaveRoomByID(
	req *http.Request,
	device *api.Device,
	rsAPI roomserverAPI.RoomserverInternalAPI,
	roomID string,
) util.JSONResponse

func LegacyRegister

func LegacyRegister(
	req *http.Request,
	userAPI userapi.UserInternalAPI,
	cfg *config.ClientAPI,
) util.JSONResponse

LegacyRegister process register requests from the legacy v1 API

func Login

func Login(
	req *http.Request, accountDB accounts.Database, userAPI userapi.UserInternalAPI,
	cfg *config.ClientAPI,
) util.JSONResponse

Login implements GET and POST /login

func Logout

func Logout(
	req *http.Request, userAPI userapi.UserInternalAPI, device *api.Device,
) util.JSONResponse

Logout handles POST /logout

func LogoutAll

func LogoutAll(
	req *http.Request, userAPI userapi.UserInternalAPI, device *api.Device,
) util.JSONResponse

LogoutAll handles POST /logout/all

func OnIncomingStateRequest

func OnIncomingStateRequest(ctx context.Context, device *userapi.Device, rsAPI api.RoomserverInternalAPI, roomID string) util.JSONResponse

OnIncomingStateRequest is called when a client makes a /rooms/{roomID}/state request. It will fetch all the state events from the specified room and will append the necessary keys to them if applicable before returning them. Returns an error if something went wrong in the process. TODO: Check if the user is in the room. If not, check if the room's history is publicly visible. Current behaviour is returning an empty array if the user cannot see the room's history.

func OnIncomingStateTypeRequest

func OnIncomingStateTypeRequest(
	ctx context.Context, device *userapi.Device, rsAPI api.RoomserverInternalAPI,
	roomID, evType, stateKey string, eventFormat bool,
) util.JSONResponse

OnIncomingStateTypeRequest is called when a client makes a /rooms/{roomID}/state/{type}/{statekey} request. It will look in current state to see if there is an event with that type and state key, if there is then (by default) we return the content, otherwise a 404. If eventFormat=true, sends the whole event else just the content. nolint:gocyclo

func Password

func Password(
	req *http.Request,
	userAPI userapi.UserInternalAPI,
	accountDB accounts.Database,
	device *api.Device,
	cfg *config.ClientAPI,
) util.JSONResponse

func PeekRoomByIDOrAlias

func PeekRoomByIDOrAlias(
	req *http.Request,
	device *api.Device,
	rsAPI roomserverAPI.RoomserverInternalAPI,
	accountDB accounts.Database,
	roomIDOrAlias string,
) util.JSONResponse

func PutTag

func PutTag(
	req *http.Request,
	userAPI api.UserInternalAPI,
	device *api.Device,
	userID string,
	roomID string,
	tag string,
	syncProducer *producers.SyncAPIProducer,
) util.JSONResponse

PutTag implements PUT /_matrix/client/r0/user/{userID}/rooms/{roomID}/tags/{tag} Put functionality works by getting existing data from the DB (if any), adding the tag to the "map" and saving the new "map" to the DB

func QueryKeys

func QueryKeys(req *http.Request, keyAPI api.KeyInternalAPI) util.JSONResponse

func RegisterAvailable

func RegisterAvailable(
	req *http.Request,
	cfg *config.ClientAPI,
	accountDB accounts.Database,
) util.JSONResponse

RegisterAvailable checks if the username is already taken or invalid.

func RemoveLocalAlias

func RemoveLocalAlias(
	req *http.Request,
	device *api.Device,
	alias string,
	aliasAPI roomserverAPI.RoomserverInternalAPI,
) util.JSONResponse

RemoveLocalAlias implements DELETE /directory/room/{roomAlias}

func RequestEmailToken

func RequestEmailToken(req *http.Request, accountDB accounts.Database, cfg *config.ClientAPI) util.JSONResponse

RequestEmailToken implements:

POST /account/3pid/email/requestToken
POST /register/email/requestToken

func RequestTurnServer

func RequestTurnServer(req *http.Request, device *api.Device, cfg *config.ClientAPI) util.JSONResponse

RequestTurnServer implements:

GET /voip/turnServer

func SaveAccountData

func SaveAccountData(
	req *http.Request, userAPI api.UserInternalAPI, device *api.Device,
	userID string, roomID string, dataType string, syncProducer *producers.SyncAPIProducer,
) util.JSONResponse

SaveAccountData implements PUT /user/{userId}/[rooms/{roomId}/]account_data/{type}

func SaveReadMarker added in v0.2.0

func SaveReadMarker(
	req *http.Request,
	userAPI api.UserInternalAPI, rsAPI roomserverAPI.RoomserverInternalAPI, eduAPI eduserverAPI.EDUServerInputAPI,
	syncProducer *producers.SyncAPIProducer, device *api.Device, roomID string,
) util.JSONResponse

SaveReadMarker implements POST /rooms/{roomId}/read_markers

func SearchUserDirectory

func SearchUserDirectory(
	ctx context.Context,
	device *userapi.Device,
	userAPI userapi.UserInternalAPI,
	rsAPI api.RoomserverInternalAPI,
	serverName gomatrixserverlib.ServerName,
	searchString string,
	limit int,
) *util.JSONResponse

func SendEvent

func SendEvent(
	req *http.Request,
	device *userapi.Device,
	roomID, eventType string, txnID, stateKey *string,
	cfg *config.ClientAPI,
	rsAPI api.RoomserverInternalAPI,
	txnCache *transactions.Cache,
) util.JSONResponse

SendEvent implements:

/rooms/{roomID}/send/{eventType}
/rooms/{roomID}/send/{eventType}/{txnID}
/rooms/{roomID}/state/{eventType}/{stateKey}

func SendForget added in v0.3.0

func SendForget(
	req *http.Request, device *userapi.Device,
	roomID string, rsAPI roomserverAPI.RoomserverInternalAPI,
) util.JSONResponse

func SendRedaction

func SendRedaction(
	req *http.Request, device *userapi.Device, roomID, eventID string, cfg *config.ClientAPI,
	rsAPI roomserverAPI.RoomserverInternalAPI,
) util.JSONResponse

func SendToDevice

func SendToDevice(
	req *http.Request, device *userapi.Device,
	eduAPI api.EDUServerInputAPI,
	txnCache *transactions.Cache,
	eventType string, txnID *string,
) util.JSONResponse

SendToDevice handles PUT /_matrix/client/r0/sendToDevice/{eventType}/{txnId} sends the device events to the EDU Server

func SendTyping

func SendTyping(
	req *http.Request, device *userapi.Device, roomID string,
	userID string, accountDB accounts.Database,
	eduAPI api.EDUServerInputAPI,
	rsAPI roomserverAPI.RoomserverInternalAPI,
) util.JSONResponse

SendTyping handles PUT /rooms/{roomID}/typing/{userID} sends the typing events to client API typingProducer

func SetAvatarURL

func SetAvatarURL(
	req *http.Request, accountDB accounts.Database,
	device *userapi.Device, userID string, cfg *config.ClientAPI, rsAPI api.RoomserverInternalAPI,
) util.JSONResponse

SetAvatarURL implements PUT /profile/{userID}/avatar_url nolint:gocyclo

func SetDisplayName

func SetDisplayName(
	req *http.Request, accountDB accounts.Database,
	device *userapi.Device, userID string, cfg *config.ClientAPI, rsAPI api.RoomserverInternalAPI,
) util.JSONResponse

SetDisplayName implements PUT /profile/{userID}/displayname nolint:gocyclo

func SetLocalAlias

func SetLocalAlias(
	req *http.Request,
	device *api.Device,
	alias string,
	cfg *config.ClientAPI,
	aliasAPI roomserverAPI.RoomserverInternalAPI,
) util.JSONResponse

SetLocalAlias implements PUT /directory/room/{roomAlias} TODO: Check if the user has the power level to set an alias

func SetReceipt added in v0.3.0

func SetReceipt(req *http.Request, eduAPI api.EDUServerInputAPI, device *userapi.Device, roomId, receiptType, eventId string) util.JSONResponse

func SetVisibility

func SetVisibility(
	req *http.Request, rsAPI roomserverAPI.RoomserverInternalAPI, dev *userapi.Device,
	roomID string,
) util.JSONResponse

SetVisibility implements PUT /directory/list/room/{roomID} TODO: Allow admin users to edit the room visibility

func Setup

Setup registers HTTP handlers with the given ServeMux. It also supplies the given http.Client to clients which need to make outbound HTTP requests.

Due to Setup being used to call many other functions, a gocyclo nolint is applied: nolint: gocyclo

func UnpeekRoomByID added in v0.3.3

func UnpeekRoomByID(
	req *http.Request,
	device *api.Device,
	rsAPI roomserverAPI.RoomserverInternalAPI,
	accountDB accounts.Database,
	roomID string,
) util.JSONResponse

func UpdateDeviceByID

func UpdateDeviceByID(
	req *http.Request, userAPI api.UserInternalAPI, device *api.Device,
	deviceID string,
) util.JSONResponse

UpdateDeviceByID handles PUT on /devices/{deviceID}

func UploadKeys

func UploadKeys(req *http.Request, keyAPI api.KeyInternalAPI, device *userapi.Device) util.JSONResponse

func UserIDIsWithinApplicationServiceNamespace

func UserIDIsWithinApplicationServiceNamespace(
	cfg *config.ClientAPI,
	userID string,
	appservice *config.ApplicationService,
) bool

UserIDIsWithinApplicationServiceNamespace checks to see if a given userID falls within any of the namespaces of a given Application Service. If no Application Service is given, it will check to see if it matches any Application Service's namespace.

func UsernameMatchesExclusiveNamespaces

func UsernameMatchesExclusiveNamespaces(
	cfg *config.ClientAPI,
	username string,
) bool

UsernameMatchesExclusiveNamespaces will check if a given username matches any application service's exclusive users namespace

func UsernameMatchesMultipleExclusiveNamespaces

func UsernameMatchesMultipleExclusiveNamespaces(
	cfg *config.ClientAPI,
	username string,
) bool

UsernameMatchesMultipleExclusiveNamespaces will check if a given username matches more than one exclusive namespace. More than one is not allowed

func Whoami

func Whoami(req *http.Request, device *api.Device) util.JSONResponse

Whoami implements `/account/whoami` which enables client to query their account user id. https://matrix.org/docs/spec/client_server/r0.3.0.html#get-matrix-client-r0-account-whoami

Types

type PublicRoomReq

type PublicRoomReq struct {
	Since  string `json:"since,omitempty"`
	Limit  int16  `json:"limit,omitempty"`
	Filter filter `json:"filter,omitempty"`
	Server string `json:"server,omitempty"`
}

type UserDirectoryResponse

type UserDirectoryResponse struct {
	Results []authtypes.FullyQualifiedProfile `json:"results"`
	Limited bool                              `json:"limited"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL