mirror of
https://github.com/matrix-construct/construct
synced 2024-11-16 15:00:51 +01:00
modules/federation: Employ check_id() at endpoints claiming event_id path param.
This commit is contained in:
parent
639b132250
commit
9d5edac0b9
3 changed files with 15 additions and 37 deletions
|
@ -86,37 +86,15 @@ put__invite(client &client,
|
||||||
request["event"], event_id
|
request["event"], event_id
|
||||||
};
|
};
|
||||||
|
|
||||||
char check_buf[48];
|
if(!json::get<"event_id"_>(event))
|
||||||
m::event::id check_id; switch(hash(room_version))
|
if(room_version == "1" || room_version == "2")
|
||||||
{
|
json::get<"event_id"_>(event) = event_id;
|
||||||
case "1"_:
|
|
||||||
case "2"_:
|
|
||||||
check_id = json::get<"event_id"_>(event)?
|
|
||||||
m::event::id{json::get<"event_id"_>(event)}:
|
|
||||||
event_id;
|
|
||||||
|
|
||||||
// put back the event_id that synapse stripped
|
if(!check_id(event, room_version))
|
||||||
json::get<"event_id"_>(event) = check_id;
|
|
||||||
assert(json::get<"event_id"_>(event) == check_id);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "3"_:
|
|
||||||
check_id = m::event::id::v3{check_buf, event};
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "4"_:
|
|
||||||
case "5"_:
|
|
||||||
default:
|
|
||||||
check_id = m::event::id::v4{check_buf, event};
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!check_id || event_id != check_id)
|
|
||||||
throw m::BAD_REQUEST
|
throw m::BAD_REQUEST
|
||||||
{
|
{
|
||||||
"Claimed event_id %s does not match %s",
|
"Claimed event_id %s is incorrect.",
|
||||||
string_view{event_id},
|
string_view{event_id},
|
||||||
string_view{check_id},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if(at<"room_id"_>(event) != room_id)
|
if(at<"room_id"_>(event) != room_id)
|
||||||
|
|
|
@ -63,14 +63,14 @@ put__send_join(client &client,
|
||||||
|
|
||||||
const m::event event
|
const m::event event
|
||||||
{
|
{
|
||||||
request
|
request, event_id
|
||||||
};
|
};
|
||||||
|
|
||||||
if(at<"event_id"_>(event) != event_id)
|
if(!check_id(event))
|
||||||
throw m::error
|
throw m::BAD_REQUEST
|
||||||
{
|
{
|
||||||
http::NOT_MODIFIED, "M_MISMATCH_EVENT_ID",
|
"ID of event in request does not match path parameter %s",
|
||||||
"ID of event in request body does not match path parameter."
|
string_view{event_id},
|
||||||
};
|
};
|
||||||
|
|
||||||
if(at<"room_id"_>(event) != room_id)
|
if(at<"room_id"_>(event) != room_id)
|
||||||
|
|
|
@ -63,14 +63,14 @@ put__send_leave(client &client,
|
||||||
|
|
||||||
const m::event event
|
const m::event event
|
||||||
{
|
{
|
||||||
request
|
request, event_id
|
||||||
};
|
};
|
||||||
|
|
||||||
if(at<"event_id"_>(event) != event_id)
|
if(!check_id(event))
|
||||||
throw m::error
|
throw m::BAD_REQUEST
|
||||||
{
|
{
|
||||||
http::NOT_MODIFIED, "M_MISMATCH_EVENT_ID",
|
"ID of event in request does not match path parameter %s",
|
||||||
"ID of event in request body does not match path parameter."
|
string_view{event_id},
|
||||||
};
|
};
|
||||||
|
|
||||||
if(at<"room_id"_>(event) != room_id)
|
if(at<"room_id"_>(event) != room_id)
|
||||||
|
|
Loading…
Reference in a new issue