Fix response to /rooms/{roomId}/join v2
Continuation of but merged-forward.
Also did a little code cleanup and added a new, passing test to the testfile.
MODIFY
clientapi/routing/membership.go
clientapi/routing/membership.go
@@ -58,27 +58,12 @@ func SendMembership(
}
}
- inviteStored, err := threepid.CheckAndProcessInvite(
- req.Context(), device, &body, cfg, queryAPI, accountDB, producer,
+ inviteStored, jsonErrResp := checkAndProcessThreepid(
+ req, device, &body, cfg, queryAPI, accountDB, producer,
membership, roomID, evTime,
)
- if err == threepid.ErrMissingParameter {
- return util.JSONResponse{
- Code: http.StatusBadRequest,
- JSON: jsonerror.BadJSON(err.Error()),
- }
- } else if err == threepid.ErrNotTrusted {
- return util.JSONResponse{
- Code: http.StatusBadRequest,
- JSON: jsonerror.NotTrusted(body.IDServer),
- }
- } else if err == common.ErrRoomNoExists {
- return util.JSONResponse{
- Code: http.StatusNotFound,
- JSON: jsonerror.NotFound(err.Error()),
- }
- } else if err != nil {
- return httputil.LogThenError(req, err)
+ if jsonErrResp != nil {
+ return *jsonErrResp
}
// If an invite has been stored on an identity server, it means that a
@@ -114,9 +99,18 @@ func SendMembership(
return httputil.LogThenError(req, err)
}
+ var returnData interface{} = struct{}{}
+
+ // The join membership requires the room id to be sent in the response
+ if membership == "join" {
+ returnData = struct {
+ RoomID string `json:"room_id"`
+ }{roomID}
+ }
+
return util.JSONResponse{
Code: http.StatusOK,
- JSON: struct{}{},
+ JSON: returnData,
}
}
@@ -215,3 +209,41 @@ func getMembershipStateKey(
return
}
+
+func checkAndProcessThreepid(
+ req *http.Request,
+ device *authtypes.Device,
+ body *threepid.MembershipRequest,
+ cfg config.Dendrite,
+ queryAPI roomserverAPI.RoomserverQueryAPI,
+ accountDB *accounts.Database,
+ producer *producers.RoomserverProducer,
+ membership, roomID string,
+ evTime time.Time,
+) (inviteStored bool, errRes *util.JSONResponse) {
+
+ inviteStored, err := threepid.CheckAndProcessInvite(
+ req.Context(), device, body, cfg, queryAPI, accountDB, producer,
+ membership, roomID, evTime,
+ )
+ if err == threepid.ErrMissingParameter {
+ return inviteStored, &util.JSONResponse{
+ Code: http.StatusBadRequest,
+ JSON: jsonerror.BadJSON(err.Error()),
+ }
+ } else if err == threepid.ErrNotTrusted {
+ return inviteStored, &util.JSONResponse{
+ Code: http.StatusBadRequest,
+ JSON: jsonerror.NotTrusted(body.IDServer),
+ }
+ } else if err == common.ErrRoomNoExists {
+ return inviteStored, &util.JSONResponse{
+ Code: http.StatusNotFound,
+ JSON: jsonerror.NotFound(err.Error()),
+ }
+ } else if err != nil {
+ er := httputil.LogThenError(req, err)
+ return inviteStored, &er
+ }
+ return
+}

MODIFY
testfile
testfile
@@ -42,6 +42,7 @@ POST /join/:room_alias can join a room
POST /join/:room_id can join a room
POST /join/:room_id can join a room with custom content
POST /join/:room_alias can join a room with custom content
+POST /rooms/:room_id/join can join a room
POST /rooms/:room_id/leave can leave a room
POST /rooms/:room_id/invite can send an invite
POST /rooms/:room_id/ban can ban a user

Fix response to /rooms/{roomId}/join v2 (#734)

Continuation of #684 but merged-forward.

Also did a little code cleanup and added a new, passing test to the testfile.