mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-06 14:33:10 -06:00
Squashed commit of the following: commitb5c55faf98Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Fri Jul 1 12:00:32 2022 +0100 Version 0.8.9 (#2549) * Version 0.8.9 * Update changelog commitb50a24c666Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Fri Jul 1 10:54:07 2022 +0100 Roomserver producers package (#2546) * Give the roomserver a producers package * Change init point * Populate ACLs API * Fix build issues * `RoomEventProducer` naming commit89cd0e8fc1Author: Till <2353100+S7evinK@users.noreply.github.com> Date: Fri Jul 1 11:49:26 2022 +0200 Try to fix backfilling (#2548) * Try to fix backfilling * Return start/end to not confuse clients * Update GMSL * Update GMSL commit086f182e24Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Fri Jul 1 09:50:06 2022 +0100 Disable WebAssembly builds for now commit54bed4c593Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Fri Jul 1 09:37:54 2022 +0100 Blacklist `Guest users can join guest_access rooms` test until it can be investigated commit561c159ad7Author: Till <2353100+S7evinK@users.noreply.github.com> Date: Thu Jun 30 12:34:37 2022 +0200 Silence presence logs (#2547) commit519bc1124bAuthor: Neil Alexander <neilalexander@users.noreply.github.com> Date: Wed Jun 29 15:29:39 2022 +0100 Add `evacuateUser` endpoint, use it when deactivating accounts (#2545) * Add `evacuateUser` endpoint, use it when deactivating accounts * Populate the API * Clean up user devices when deactivating * Include invites, delete pushers commit2dea466685Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Wed Jun 29 12:32:24 2022 +0100 Return an error if trying to invite a malformed user ID (#2543) commit2086992cafAuthor: Till <2353100+S7evinK@users.noreply.github.com> Date: Wed Jun 29 10:49:12 2022 +0200 Don't return `end` if there are not more messages (#2542) * Be more spec compliant * Move lazyLoadMembers to own method commit920a20821bAuthor: Jean Lucas <jean@4ray.co> Date: Mon Jun 27 04:15:19 2022 -0400 Fix nats.go commit (#2540) Signed-off-by: Jean Lucas <jean@4ray.co> commit7120eb6bc9Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Wed Jun 15 14:27:07 2022 +0100 Add `InputDeviceListUpdate` to the keyserver, remove old input API (#2536) * Add `InputDeviceListUpdate` to the keyserver, remove old input API * Fix copyright * Log more information when a device list update fails commit1b90cc9536Author: Till <2353100+S7evinK@users.noreply.github.com> Date: Wed Jun 15 12:50:02 2022 +0200 Fix rare panic when returning user devices over federation (#2534) commit4c2a10f1a6Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Mon Jun 13 15:11:10 2022 +0100 Handle state before, send history visibility in output (#2532) * Check state before event * Tweaks * Refactor a bit, include in output events * Don't waste time if soft failed either * Tweak control flow, comments, use GMSL history visibility type commitc500958583Author: Emanuele Aliberti <dev@mtka.eu> Date: Mon Jun 13 13:08:46 2022 +0200 generic CaddyFile in front of Dendrite (monolith) (#2531) for Caddy 2.5.x Co-authored-by: emanuele.aliberti <emanuele.aliberti@mtka.eu> commite1136f4d3eAuthor: Till Faelligen <davidf@element.io> Date: Mon Jun 13 11:46:59 2022 +0200 Make the linter happy again commit0a7f7dc716Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Mon Jun 13 10:16:30 2022 +0100 Add `--difference` to `resolve-state` tool commit89d2adadbdAuthor: Neil Alexander <neilalexander@users.noreply.github.com> Date: Fri Jun 10 10:58:04 2022 +0100 Attempt to raise the file descriptor limit at startup (#2527) commit1030072285Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Fri Jun 10 10:18:32 2022 +0100 Rename the page to "Optimise your installation" commit16ed1633b6Author: Neil Alexander <neilalexander@users.noreply.github.com> Date: Fri Jun 10 10:15:14 2022 +0100 Highlighting in docs commite2a64773ceAuthor: Neil Alexander <neilalexander@users.noreply.github.com> Date: Fri Jun 10 10:14:15 2022 +0100 Add new next steps page to the documentation commit660f7839f5Author: Till <2353100+S7evinK@users.noreply.github.com> Date: Thu Jun 9 18:38:07 2022 +0200 Correctly redact events over federation (#2526) * Ensure we check powerlevel/origin before redacting an event * Add passing test * Use pl.UserLevel * Make check more readable, also check for the sender
235 lines
7.4 KiB
Go
235 lines
7.4 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/matrix-org/dendrite/clientapi/jsonerror"
|
|
"github.com/matrix-org/gomatrixserverlib"
|
|
"github.com/matrix-org/util"
|
|
)
|
|
|
|
type PerformErrorCode int
|
|
|
|
type PerformError struct {
|
|
Msg string
|
|
RemoteCode int // remote HTTP status code, for PerformErrRemote
|
|
Code PerformErrorCode
|
|
}
|
|
|
|
func (p *PerformError) Error() string {
|
|
return fmt.Sprintf("%d : %s", p.Code, p.Msg)
|
|
}
|
|
|
|
// JSONResponse maps error codes to suitable HTTP error codes, defaulting to 500.
|
|
func (p *PerformError) JSONResponse() util.JSONResponse {
|
|
switch p.Code {
|
|
case PerformErrorBadRequest:
|
|
return util.JSONResponse{
|
|
Code: http.StatusBadRequest,
|
|
JSON: jsonerror.Unknown(p.Msg),
|
|
}
|
|
case PerformErrorNoRoom:
|
|
return util.JSONResponse{
|
|
Code: http.StatusNotFound,
|
|
JSON: jsonerror.NotFound(p.Msg),
|
|
}
|
|
case PerformErrorNotAllowed:
|
|
return util.JSONResponse{
|
|
Code: http.StatusForbidden,
|
|
JSON: jsonerror.Forbidden(p.Msg),
|
|
}
|
|
case PerformErrorNoOperation:
|
|
return util.JSONResponse{
|
|
Code: http.StatusForbidden,
|
|
JSON: jsonerror.Forbidden(p.Msg),
|
|
}
|
|
case PerformErrRemote:
|
|
// if the code is 0 then something bad happened and it isn't
|
|
// a remote HTTP error being encapsulated, e.g network error to remote.
|
|
if p.RemoteCode == 0 {
|
|
return util.ErrorResponse(fmt.Errorf("%s", p.Msg))
|
|
}
|
|
return util.JSONResponse{
|
|
Code: p.RemoteCode,
|
|
// TODO: Should we assert this is in fact JSON? E.g gjson parse?
|
|
JSON: json.RawMessage(p.Msg),
|
|
}
|
|
default:
|
|
return util.ErrorResponse(p)
|
|
}
|
|
}
|
|
|
|
const (
|
|
// PerformErrorNotAllowed means the user is not allowed to invite/join/etc this room (e.g join_rule:invite or banned)
|
|
PerformErrorNotAllowed PerformErrorCode = 1
|
|
// PerformErrorBadRequest means the request was wrong in some way (invalid user ID, wrong server, etc)
|
|
PerformErrorBadRequest PerformErrorCode = 2
|
|
// PerformErrorNoRoom means that the room being joined doesn't exist.
|
|
PerformErrorNoRoom PerformErrorCode = 3
|
|
// PerformErrorNoOperation means that the request resulted in nothing happening e.g invite->invite or leave->leave.
|
|
PerformErrorNoOperation PerformErrorCode = 4
|
|
// PerformErrRemote means that the request failed and the PerformError.Msg is the raw remote JSON error response
|
|
PerformErrRemote PerformErrorCode = 5
|
|
)
|
|
|
|
type PerformJoinRequest struct {
|
|
RoomIDOrAlias string `json:"room_id_or_alias"`
|
|
UserID string `json:"user_id"`
|
|
Content map[string]interface{} `json:"content"`
|
|
ServerNames []gomatrixserverlib.ServerName `json:"server_names"`
|
|
}
|
|
|
|
type PerformJoinResponse struct {
|
|
// The room ID, populated on success.
|
|
RoomID string `json:"room_id"`
|
|
JoinedVia gomatrixserverlib.ServerName
|
|
// If non-nil, the join request failed. Contains more information why it failed.
|
|
Error *PerformError
|
|
}
|
|
|
|
type PerformLeaveRequest struct {
|
|
RoomID string `json:"room_id"`
|
|
UserID string `json:"user_id"`
|
|
}
|
|
|
|
type PerformLeaveResponse struct {
|
|
Code int `json:"code,omitempty"`
|
|
Message interface{} `json:"message,omitempty"`
|
|
}
|
|
|
|
type PerformInviteRequest struct {
|
|
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
|
|
Event *gomatrixserverlib.HeaderedEvent `json:"event"`
|
|
InviteRoomState []gomatrixserverlib.InviteV2StrippedState `json:"invite_room_state"`
|
|
SendAsServer string `json:"send_as_server"`
|
|
TransactionID *TransactionID `json:"transaction_id"`
|
|
}
|
|
|
|
type PerformInviteResponse struct {
|
|
Error *PerformError
|
|
}
|
|
|
|
type PerformPeekRequest struct {
|
|
RoomIDOrAlias string `json:"room_id_or_alias"`
|
|
UserID string `json:"user_id"`
|
|
DeviceID string `json:"device_id"`
|
|
ServerNames []gomatrixserverlib.ServerName `json:"server_names"`
|
|
}
|
|
|
|
type PerformPeekResponse struct {
|
|
// The room ID, populated on success.
|
|
RoomID string `json:"room_id"`
|
|
// If non-nil, the join request failed. Contains more information why it failed.
|
|
Error *PerformError
|
|
}
|
|
|
|
type PerformUnpeekRequest struct {
|
|
RoomID string `json:"room_id"`
|
|
UserID string `json:"user_id"`
|
|
DeviceID string `json:"device_id"`
|
|
}
|
|
|
|
type PerformUnpeekResponse struct {
|
|
// If non-nil, the join request failed. Contains more information why it failed.
|
|
Error *PerformError
|
|
}
|
|
|
|
// PerformBackfillRequest is a request to PerformBackfill.
|
|
type PerformBackfillRequest struct {
|
|
// The room to backfill
|
|
RoomID string `json:"room_id"`
|
|
// A map of backwards extremity event ID to a list of its prev_event IDs.
|
|
BackwardsExtremities map[string][]string `json:"backwards_extremities"`
|
|
// The maximum number of events to retrieve.
|
|
Limit int `json:"limit"`
|
|
// The server interested in the events.
|
|
ServerName gomatrixserverlib.ServerName `json:"server_name"`
|
|
}
|
|
|
|
// PrevEventIDs returns the prev_event IDs of all backwards extremities, de-duplicated in a lexicographically sorted order.
|
|
func (r *PerformBackfillRequest) PrevEventIDs() []string {
|
|
var prevEventIDs []string
|
|
for _, pes := range r.BackwardsExtremities {
|
|
prevEventIDs = append(prevEventIDs, pes...)
|
|
}
|
|
prevEventIDs = util.UniqueStrings(prevEventIDs)
|
|
return prevEventIDs
|
|
}
|
|
|
|
// PerformBackfillResponse is a response to PerformBackfill.
|
|
type PerformBackfillResponse struct {
|
|
// Missing events, arbritrary order.
|
|
Events []*gomatrixserverlib.HeaderedEvent `json:"events"`
|
|
}
|
|
|
|
type PerformPublishRequest struct {
|
|
RoomID string
|
|
Visibility string
|
|
}
|
|
|
|
type PerformPublishResponse struct {
|
|
// If non-nil, the publish request failed. Contains more information why it failed.
|
|
Error *PerformError
|
|
}
|
|
|
|
type PerformInboundPeekRequest struct {
|
|
UserID string `json:"user_id"`
|
|
RoomID string `json:"room_id"`
|
|
PeekID string `json:"peek_id"`
|
|
ServerName gomatrixserverlib.ServerName `json:"server_name"`
|
|
RenewalInterval int64 `json:"renewal_interval"`
|
|
}
|
|
|
|
type PerformInboundPeekResponse struct {
|
|
// Does the room exist on this roomserver?
|
|
// If the room doesn't exist this will be false and StateEvents will be empty.
|
|
RoomExists bool `json:"room_exists"`
|
|
// The room version of the room.
|
|
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
|
|
// The current state and auth chain events.
|
|
// The lists will be in an arbitrary order.
|
|
StateEvents []*gomatrixserverlib.HeaderedEvent `json:"state_events"`
|
|
AuthChainEvents []*gomatrixserverlib.HeaderedEvent `json:"auth_chain_events"`
|
|
// The event at which this state was captured
|
|
LatestEvent *gomatrixserverlib.HeaderedEvent `json:"latest_event"`
|
|
}
|
|
|
|
// PerformForgetRequest is a request to PerformForget
|
|
type PerformForgetRequest struct {
|
|
RoomID string `json:"room_id"`
|
|
UserID string `json:"user_id"`
|
|
}
|
|
|
|
type PerformForgetResponse struct{}
|
|
|
|
type PerformRoomUpgradeRequest struct {
|
|
RoomID string `json:"room_id"`
|
|
UserID string `json:"user_id"`
|
|
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
|
|
}
|
|
|
|
type PerformRoomUpgradeResponse struct {
|
|
NewRoomID string
|
|
Error *PerformError
|
|
}
|
|
|
|
type PerformAdminEvacuateRoomRequest struct {
|
|
RoomID string `json:"room_id"`
|
|
}
|
|
|
|
type PerformAdminEvacuateRoomResponse struct {
|
|
Affected []string `json:"affected"`
|
|
Error *PerformError
|
|
}
|
|
|
|
type PerformAdminEvacuateUserRequest struct {
|
|
UserID string `json:"user_id"`
|
|
}
|
|
|
|
type PerformAdminEvacuateUserResponse struct {
|
|
Affected []string `json:"affected"`
|
|
Error *PerformError
|
|
}
|