From: Tom Hughes Date: Thu, 2 Nov 2023 08:44:43 +0000 (+0000) Subject: Only count new reports as active for rate limits X-Git-Tag: live~926 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/b5995c5175b2fbc6743d4faeb404ad6cefb006ec?hp=0e74b21cb24eb11c7986ccabdcb5ebd0d40fac59 Only count new reports as active for rate limits --- diff --git a/app/models/user.rb b/app/models/user.rb index 638928861..f804f4666 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -376,11 +376,18 @@ class User < ApplicationRecord digest.hexdigest end + def active_reports + issues + .with_status(:open) + .joins(:reports) + .where("reports.updated_at >= COALESCE(issues.resolved_at, '1970-01-01')") + .count + end + def max_messages_per_hour account_age_in_seconds = Time.now.utc - created_at account_age_in_hours = account_age_in_seconds / 3600 recent_messages = messages.where("sent_on >= ?", Time.now.utc - 3600).count - active_reports = issues.with_status(:open).sum(:reports_count) max_messages = account_age_in_hours.ceil + recent_messages - (active_reports * 10) max_messages.clamp(0, Settings.max_messages_per_hour) end @@ -389,7 +396,6 @@ class User < ApplicationRecord account_age_in_seconds = Time.now.utc - created_at account_age_in_hours = account_age_in_seconds / 3600 recent_friends = Friendship.where(:befriendee => self).where("created_at >= ?", Time.now.utc - 3600).count - active_reports = issues.with_status(:open).sum(:reports_count) max_friends = account_age_in_hours.ceil + recent_friends - (active_reports * 10) max_friends.clamp(0, Settings.max_friends_per_hour) end @@ -399,7 +405,6 @@ class User < ApplicationRecord Settings.moderator_changeset_comments_per_hour else previous_comments = changeset_comments.limit(200).count - active_reports = issues.with_status(:open).sum(:reports_count) max_comments = previous_comments / 200.0 * Settings.max_changeset_comments_per_hour max_comments = max_comments.floor.clamp(Settings.initial_changeset_comments_per_hour, Settings.max_changeset_comments_per_hour) max_comments /= 2**active_reports