Add additional limits on sending messages
Additional limits apply to new accounts and accounts with unresolved issues reported against them. Fixes #3135
This commit is contained in:
parent
41f95466fa
commit
25510b6616
3 changed files with 11 additions and 2 deletions
|
@ -26,7 +26,7 @@ class MessagesController < ApplicationController
|
|||
@message.sender = current_user
|
||||
@message.sent_on = Time.now.getutc
|
||||
|
||||
if current_user.sent_messages.where("sent_on >= ?", Time.now.getutc - 1.hour).count >= Settings.max_messages_per_hour
|
||||
if current_user.sent_messages.where("sent_on >= ?", Time.now.getutc - 1.hour).count >= current_user.max_messages_per_hour
|
||||
flash.now[:error] = t ".limit_exceeded"
|
||||
render :action => "new"
|
||||
elsif @message.save
|
||||
|
|
|
@ -46,7 +46,7 @@ class Issue < ApplicationRecord
|
|||
|
||||
before_validation :set_reported_user
|
||||
|
||||
scope :with_status, ->(issue_status) { where(:status => statuses[issue_status]) }
|
||||
scope :with_status, ->(issue_status) { where(:status => issue_status) }
|
||||
scope :visible_to, ->(user) { where(:assigned_role => user.roles.map(&:role)) }
|
||||
|
||||
def read_reports
|
||||
|
|
|
@ -296,6 +296,15 @@ class User < ApplicationRecord
|
|||
digest.hexdigest
|
||||
end
|
||||
|
||||
def max_messages_per_hour
|
||||
account_age_in_seconds = Time.now.utc - creation_time
|
||||
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
|
||||
|
||||
private
|
||||
|
||||
def set_defaults
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue