mirror of
https://github.com/matrix-construct/construct
synced 2024-12-26 15:33:54 +01:00
modules/client/rooms/leave: Override any mismatch between room and user_room.
This commit is contained in:
parent
57da17f7fa
commit
1731ff8bad
1 changed files with 31 additions and 5 deletions
|
@ -23,14 +23,40 @@ post__leave(client &client,
|
|||
};
|
||||
|
||||
if(!room.has("m.room.member", request.user_id))
|
||||
throw m::error
|
||||
{
|
||||
const m::user::room user_room
|
||||
{
|
||||
http::NOT_MODIFIED, "M_TARGET_NOT_IN_ROOM",
|
||||
"The user %s has no membership state in %s",
|
||||
string_view{request.user_id},
|
||||
string_view{room_id},
|
||||
request.user_id
|
||||
};
|
||||
|
||||
// In case the user's user room falls out of sync with the real room
|
||||
// state; we directly set the user's user room state.
|
||||
if(!user_room.has("ircd.member", room_id))
|
||||
throw m::error
|
||||
{
|
||||
http::NOT_MODIFIED, "M_TARGET_NOT_IN_ROOM",
|
||||
"The user %s has no membership state in %s",
|
||||
string_view{request.user_id},
|
||||
string_view{room_id},
|
||||
};
|
||||
|
||||
const auto event_id
|
||||
{
|
||||
send(user_room, request.user_id, "ircd.member", room_id, json::members
|
||||
{
|
||||
{ "membership", "leave" }
|
||||
})
|
||||
};
|
||||
|
||||
return resource::response
|
||||
{
|
||||
client, http::OK, json::members
|
||||
{
|
||||
{ "event_id", event_id }
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
const auto event_id
|
||||
{
|
||||
m::leave(room, request.user_id)
|
||||
|
|
Loading…
Reference in a new issue