aboutsummaryrefslogtreecommitdiff
path: root/clientapi/routing/membership.go
diff options
context:
space:
mode:
authorS7evinK <tfaelligen@gmail.com>2020-11-05 11:19:23 +0100
committerGitHub <noreply@github.com>2020-11-05 10:19:23 +0000
commiteccd0d2c1b8bd4b921bafca4585aa09d32ae561f (patch)
tree6a37ea3d0d67785cc9a51b132b25158c941dc899 /clientapi/routing/membership.go
parent2ce2112ddb783ab9a589f2897dc60d24c68e34f0 (diff)
Implement forgetting about rooms (#1572)
* Add basic storage methods * Add internal api handler * Add check for forgotten room * Add /rooms/{roomID}/forget endpoint * Add missing rsAPI method * Remove unused parameters * Add passing tests Signed-off-by: Till Faelligen <tfaelligen@gmail.com> * Add missing file * Add postgres migration * Add sqlite migration * Use Forgetter to forget room * Remove empty line * Update HTTP status codes It looks like the spec calls for these to be 400, rather than 403: https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-rooms-roomid-forget Co-authored-by: Neil Alexander <neilalexander@users.noreply.github.com>
Diffstat (limited to 'clientapi/routing/membership.go')
-rw-r--r--clientapi/routing/membership.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/clientapi/routing/membership.go b/clientapi/routing/membership.go
index fe079557..e471e212 100644
--- a/clientapi/routing/membership.go
+++ b/clientapi/routing/membership.go
@@ -407,3 +407,47 @@ func checkMemberInRoom(ctx context.Context, rsAPI api.RoomserverInternalAPI, use
}
return nil
}
+
+func SendForget(
+ req *http.Request, device *userapi.Device,
+ roomID string, rsAPI roomserverAPI.RoomserverInternalAPI,
+) util.JSONResponse {
+ ctx := req.Context()
+ logger := util.GetLogger(ctx).WithField("roomID", roomID).WithField("userID", device.UserID)
+ var membershipRes api.QueryMembershipForUserResponse
+ membershipReq := api.QueryMembershipForUserRequest{
+ RoomID: roomID,
+ UserID: device.UserID,
+ }
+ err := rsAPI.QueryMembershipForUser(ctx, &membershipReq, &membershipRes)
+ if err != nil {
+ logger.WithError(err).Error("QueryMembershipForUser: could not query membership for user")
+ return jsonerror.InternalServerError()
+ }
+ if membershipRes.IsInRoom {
+ return util.JSONResponse{
+ Code: http.StatusBadRequest,
+ JSON: jsonerror.Forbidden("user is still a member of the room"),
+ }
+ }
+ if !membershipRes.HasBeenInRoom {
+ return util.JSONResponse{
+ Code: http.StatusBadRequest,
+ JSON: jsonerror.Forbidden("user did not belong to room"),
+ }
+ }
+
+ request := api.PerformForgetRequest{
+ RoomID: roomID,
+ UserID: device.UserID,
+ }
+ response := api.PerformForgetResponse{}
+ if err := rsAPI.PerformForget(ctx, &request, &response); err != nil {
+ logger.WithError(err).Error("PerformForget: unable to forget room")
+ return jsonerror.InternalServerError()
+ }
+ return util.JSONResponse{
+ Code: http.StatusOK,
+ JSON: struct{}{},
+ }
+}