1
0
Fork 0
mirror of https://gitlab.com/famedly/conduit.git synced 2025-09-05 18:41:00 +00:00

fix: Respond with HTTP code 413, when request size is too big

This commit is contained in:
Jakub Pieńkowski 2025-07-03 19:23:03 +00:00
parent 5c8b030c1e
commit 617ea3614e
4 changed files with 12 additions and 1 deletions

1
Cargo.lock generated
View file

@ -510,6 +510,7 @@ dependencies = [
"hickory-resolver", "hickory-resolver",
"hmac", "hmac",
"http", "http",
"http-body-util",
"humantime", "humantime",
"humantime-serde", "humantime-serde",
"hyper", "hyper",

View file

@ -152,6 +152,7 @@ tikv-jemallocator = { version = "0.6", features = [
], optional = true } ], optional = true }
sd-notify = { version = "0.4", optional = true } sd-notify = { version = "0.4", optional = true }
http-body-util = "0.1.3"
# Used for matrix spec type definitions and helpers # Used for matrix spec type definitions and helpers
[dependencies.ruma] [dependencies.ruma]

View file

@ -59,7 +59,15 @@ where
.unwrap_or(usize::MAX), .unwrap_or(usize::MAX),
) )
.await .await
.map_err(|_| Error::BadRequest(ErrorKind::MissingToken, "Missing token."))?; .map_err(|err| {
if std::error::Error::source(&err).as_ref().and_then(|err| std::error::Error::source(err)).is_some() {
Error::BadRequest(
ErrorKind::ResourceLimitExceeded{ admin_contact: String::default() },
"Reached maximum request size")
} else {
Error::BadRequest(ErrorKind::Unknown, "An unknown error has occurred")
}
})?;
(parts, body) (parts, body)
}; };

View file

@ -123,6 +123,7 @@ impl Error {
Unauthorized | UnknownToken { .. } | MissingToken => StatusCode::UNAUTHORIZED, Unauthorized | UnknownToken { .. } | MissingToken => StatusCode::UNAUTHORIZED,
NotFound | Unrecognized => StatusCode::NOT_FOUND, NotFound | Unrecognized => StatusCode::NOT_FOUND,
LimitExceeded { .. } => StatusCode::TOO_MANY_REQUESTS, LimitExceeded { .. } => StatusCode::TOO_MANY_REQUESTS,
ResourceLimitExceeded { .. } => StatusCode::PAYLOAD_TOO_LARGE,
UserDeactivated => StatusCode::FORBIDDEN, UserDeactivated => StatusCode::FORBIDDEN,
TooLarge => StatusCode::PAYLOAD_TOO_LARGE, TooLarge => StatusCode::PAYLOAD_TOO_LARGE,
ConnectionTimeout => StatusCode::GATEWAY_TIMEOUT, ConnectionTimeout => StatusCode::GATEWAY_TIMEOUT,