Add a rate limit for inbound message bytes for a given account

This commit is contained in:
Jon Chambers
2023-07-14 15:16:33 -04:00
committed by Jon Chambers
parent e38a713ccc
commit e87468fbe0
4 changed files with 18 additions and 5 deletions

View File

@@ -186,9 +186,7 @@ public class MessageController {
@PathParam("destination") UUID destinationUuid,
@QueryParam("story") boolean isStory,
@NotNull @Valid IncomingMessageList messages,
@Context ContainerRequestContext context
)
throws RateLimitExceededException {
@Context ContainerRequestContext context) throws RateLimitExceededException {
if (source.isEmpty() && accessKey.isEmpty() && !isStory) {
throw new WebApplicationException(Response.Status.UNAUTHORIZED);
@@ -213,8 +211,9 @@ public class MessageController {
spamReportToken = Optional.empty();
}
for (final IncomingMessage message : messages.messages()) {
int totalContentLength = 0;
for (final IncomingMessage message : messages.messages()) {
int contentLength = 0;
if (!Util.isEmpty(message.content())) {
@@ -223,8 +222,12 @@ public class MessageController {
validateContentLength(contentLength, userAgent);
validateEnvelopeType(message.type(), userAgent);
totalContentLength += contentLength;
}
rateLimiters.getInboundMessageBytes().validate(destinationUuid, totalContentLength);
try {
boolean isSyncMessage = source.isPresent() && source.get().getAccount().isIdentifiedBy(destinationUuid);