aboutsummaryrefslogtreecommitdiff
path: root/clientapi/routing/membership.go
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-04-24 16:30:25 +0100
committerGitHub <noreply@github.com>2020-04-24 16:30:25 +0100
commit3ab8ebf6b8fbc813bfb3e0e0735e76a69a8ed2dd (patch)
treea5e83730ac7c8e7f8b53b102c4a426a1ce930ba8 /clientapi/routing/membership.go
parentbe558f02aa956cfff51c5dfcf57575b46254b0db (diff)
More invite support (#979)
* Update gomatixserverlib * Try to build invite stripped state if not given to us * SendInvite improvements * Transpose invite_room_state into invite_state.events for sync API * Remove syncapi debugging output * Use RespInviteV2 * Update gomatrixserverlib * Send the invite event as a normal roomserver event too, for incorporating into room (should this be done by the roomserver automatically for invite inputs?) * Federation sender use invite_room_state, room server try to insert membership state * Check supported room versions on the invite endpoint * Prevent roomserver query API from trying to handle requests for stub rooms * Adding a nolint * Replace IsRoomStub with RoomNIDExcludingStubs, fix query API to use that instead * Review comments
Diffstat (limited to 'clientapi/routing/membership.go')
-rw-r--r--clientapi/routing/membership.go42
1 files changed, 30 insertions, 12 deletions
diff --git a/clientapi/routing/membership.go b/clientapi/routing/membership.go
index 9f386b71..c597dd27 100644
--- a/clientapi/routing/membership.go
+++ b/clientapi/routing/membership.go
@@ -40,6 +40,8 @@ var errMissingUserID = errors.New("'user_id' must be supplied")
// SendMembership implements PUT /rooms/{roomID}/(join|kick|ban|unban|leave|invite)
// by building a m.room.member event then sending it to the room server
+// TODO: Can we improve the cyclo count here? Separate code paths for invites?
+// nolint:gocyclo
func SendMembership(
req *http.Request, accountDB accounts.Database, device *authtypes.Device,
roomID string, membership string, cfg *config.Dendrite,
@@ -104,23 +106,39 @@ func SendMembership(
return jsonerror.InternalServerError()
}
- if _, err := producer.SendEvents(
- req.Context(),
- []gomatrixserverlib.HeaderedEvent{(*event).Headered(verRes.RoomVersion)},
- cfg.Matrix.ServerName,
- nil,
- ); err != nil {
- util.GetLogger(req.Context()).WithError(err).Error("producer.SendEvents failed")
- return jsonerror.InternalServerError()
- }
-
var returnData interface{} = struct{}{}
- // The join membership requires the room id to be sent in the response
- if membership == gomatrixserverlib.Join {
+ switch membership {
+ case gomatrixserverlib.Invite:
+ // Invites need to be handled specially
+ err = producer.SendInvite(
+ req.Context(),
+ event.Headered(verRes.RoomVersion),
+ nil, // ask the roomserver to draw up invite room state for us
+ cfg.Matrix.ServerName,
+ nil,
+ )
+ if err != nil {
+ util.GetLogger(req.Context()).WithError(err).Error("producer.SendInvite failed")
+ return jsonerror.InternalServerError()
+ }
+ case gomatrixserverlib.Join:
+ // The join membership requires the room id to be sent in the response
returnData = struct {
RoomID string `json:"room_id"`
}{roomID}
+ default:
+ }
+
+ _, err = producer.SendEvents(
+ req.Context(),
+ []gomatrixserverlib.HeaderedEvent{event.Headered(verRes.RoomVersion)},
+ cfg.Matrix.ServerName,
+ nil,
+ )
+ if err != nil {
+ util.GetLogger(req.Context()).WithError(err).Error("producer.SendEvents failed")
+ return jsonerror.InternalServerError()
}
return util.JSONResponse{