aboutsummaryrefslogtreecommitdiff
path: root/syncapi
diff options
context:
space:
mode:
authorkegsay <kegan@matrix.org>2022-05-11 11:29:23 +0100
committerGitHub <noreply@github.com>2022-05-11 11:29:23 +0100
commitc15bfefd0dbbd9619c2606b59b784f2a7926ca20 (patch)
tree528579b85f7c504430d4e2d05485d02a9fbc4b4d /syncapi
parent6db08b2874307c516b10ef9c9e996807fbfdb1ff (diff)
Add RoomExists flag to QueryMembershipForUser (#2450)
Fixes https://github.com/matrix-org/complement/pull/369
Diffstat (limited to 'syncapi')
-rw-r--r--syncapi/routing/context.go6
-rw-r--r--syncapi/routing/messages.go14
2 files changed, 16 insertions, 4 deletions
diff --git a/syncapi/routing/context.go b/syncapi/routing/context.go
index 87cc2aae..96438e18 100644
--- a/syncapi/routing/context.go
+++ b/syncapi/routing/context.go
@@ -73,6 +73,12 @@ func Context(
logrus.WithError(err).Error("unable to query membership")
return jsonerror.InternalServerError()
}
+ if !membershipRes.RoomExists {
+ return util.JSONResponse{
+ Code: http.StatusForbidden,
+ JSON: jsonerror.Forbidden("room does not exist"),
+ }
+ }
stateFilter := gomatrixserverlib.StateFilter{
Limit: 100,
diff --git a/syncapi/routing/messages.go b/syncapi/routing/messages.go
index b0c990ec..e55c661d 100644
--- a/syncapi/routing/messages.go
+++ b/syncapi/routing/messages.go
@@ -68,10 +68,16 @@ func OnIncomingMessagesRequest(
var err error
// check if the user has already forgotten about this room
- isForgotten, err := checkIsRoomForgotten(req.Context(), roomID, device.UserID, rsAPI)
+ isForgotten, roomExists, err := checkIsRoomForgotten(req.Context(), roomID, device.UserID, rsAPI)
if err != nil {
return jsonerror.InternalServerError()
}
+ if !roomExists {
+ return util.JSONResponse{
+ Code: http.StatusForbidden,
+ JSON: jsonerror.Forbidden("room does not exist"),
+ }
+ }
if isForgotten {
return util.JSONResponse{
@@ -244,17 +250,17 @@ func OnIncomingMessagesRequest(
}
}
-func checkIsRoomForgotten(ctx context.Context, roomID, userID string, rsAPI api.SyncRoomserverAPI) (bool, error) {
+func checkIsRoomForgotten(ctx context.Context, roomID, userID string, rsAPI api.SyncRoomserverAPI) (forgotten bool, exists bool, err error) {
req := api.QueryMembershipForUserRequest{
RoomID: roomID,
UserID: userID,
}
resp := api.QueryMembershipForUserResponse{}
if err := rsAPI.QueryMembershipForUser(ctx, &req, &resp); err != nil {
- return false, err
+ return false, false, err
}
- return resp.IsRoomForgotten, nil
+ return resp.IsRoomForgotten, resp.RoomExists, nil
}
// retrieveEvents retrieves events from the local database for a request on