element-hq / element-hq/synapse

The error responses from /leave do not conform to the spec.

Open
#13,360 0 comments 0 reactions 0 assignees View on GitHub
A-Leave A-Spec-Compliance S-Minor T-Defect
Dominant language
Python
Stars
4.6k
Forks
600
Avg merge
5d 22h
Merged PRs (30d)
51

Description

This issue has been migrated from [#13360](https://github.com/matrix-org/synapse/issues/13360).

---

### Description

The spec (https://spec.matrix.org/v1.3/client-server-api/#post_matrixclientv3roomsroomidleave) only allows two possible responses from a call to /leave. A 200 if the room was left, or 429 if the request was rate limited.

However, Synapse will return different responses depending on your, and your homeservers state in the room:

1. Leaving a room that doesn't exist on the host returns "M_UNKNOWN" (Not a known room)
2. Leaving a room on the host that I was never in (but the host is still joined to via another user) will result in a M_FORBIDDEN.
3. Leaving a room that I was previously in will always no-op with a 200.

The spec is unfortunately doesn't define the behaviour for trying to leave a room when you were never part of it, but my feeling is that it should no-op in a similar fashion to reinviting users, or rejoining a room also no-op.

### Steps to reproduce

For case 1:

- Try to `/leave` a random roomID that you totally made up.
- Observe the error

For case 2:
- Create a room your homeserver
- Try to /leave that room from another user who was never joined to it.
- Observe the error

For case 3:
- Create a room.
- Leave the room.
- Leave the room (and repeat as much as you like)
- Observe a 200 response with an empty body.

### Homeserver

half-shot.uk

### Synapse Version

1.60.0

### Installation Method

pip (from PyPI)

### Platform

Probably not relevant

### Relevant log output

```shell
Ditto
```

### Anything else that would be useful to know?

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.