Skip to content

Commit 5c609d6

Browse files
author
Tobias Weiß
committed
fix: correct rate limiting interval calculation in UIxMailEditor
The rate limiting check was using messageSubmissionBlockInterval (block duration) instead of maximumSubmissionInterval (rate limit window) to determine if message submission should be blocked. Configuration example: SOGoMaximumMessageSubmissionCount: 5 messages SOGoMaximumRecipientCount: 100 recipients SOGoMaximumSubmissionInterval: 30 seconds (rate limit window) SOGoMessageSubmissionBlockInterval: 300 seconds (how long to block after violation) Previous incorrect behavior: Code checked: delta <= block_time (<= 300s) Result: 5th message blocked even if sent AFTER 30s had elapsed Correct behavior now: Code checks: delta < maximumSubmissionInterval (< 30s) Result: Only blocks if 5 messages sent WITHIN the 30s window This also simplifies the counter reset logic - reset when the submission interval has elapsed AND we're within limits.
1 parent 5e1e5a8 commit 5c609d6

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

UI/MailerUI/UIxMailEditor.m

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -875,8 +875,12 @@ - (WOResponse *) sendAction
875875
messages_count = [[messageSubmissions objectForKey: @"MessagesCount"] intValue];
876876
recipients_count = [[messageSubmissions objectForKey: @"RecipientsCount"] intValue];
877877

878+
//
879+
// Rate limit check: block if limits exceeded within the submission interval
880+
// (not the block interval - that's for how long to block after a violation)
881+
//
878882
if ((messages_count >= [dd maximumMessageSubmissionCount] || recipients_count >= [dd maximumRecipientCount]) &&
879-
delta <= block_time)
883+
delta < [dd maximumSubmissionInterval])
880884
{
881885
jsonResponse = [NSDictionary dictionaryWithObjectsAndKeys:
882886
@"failure", @"status",
@@ -887,8 +891,12 @@ - (WOResponse *) sendAction
887891
andString: [jsonResponse jsonRepresentation]];
888892
}
889893

890-
if (delta > block_time ||
891-
(delta >= [dd maximumSubmissionInterval] && messages_count < [dd maximumMessageSubmissionCount] && recipients_count < [dd maximumRecipientCount]))
894+
//
895+
// Reset counters if the submission interval has elapsed AND we're within limits
896+
//
897+
if (delta >= [dd maximumSubmissionInterval] &&
898+
messages_count < [dd maximumMessageSubmissionCount] &&
899+
recipients_count < [dd maximumRecipientCount])
892900
{
893901
[[SOGoCache sharedCache] setMessageSubmissionsCount: 0
894902
recipientsCount: 0

0 commit comments

Comments
 (0)