element-hq / element-hq/synapse
The error responses from /leave do not conform to the spec.
- 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
Assessment
This issue has not been assessed yet.