]> git.openstreetmap.org Git - rails.git/blobdiff - app/models/user.rb
Fix calculation of friendship rate limit
[rails.git] / app / models / user.rb
index 9cc8b7d8361cb62a64f7f089a8256d6d6a80ee03..3dbaa688c966643a92707cd2ae7cf48586713068 100644 (file)
@@ -104,6 +104,8 @@ class User < ApplicationRecord
   validates :preferred_editor, :inclusion => Editors::ALL_EDITORS, :allow_nil => true
   validates :auth_uid, :unless => proc { |u| u.auth_provider.nil? },
                        :uniqueness => { :scope => :auth_provider }
+  validates :avatar, :if => proc { |u| u.attachment_changes["avatar"] },
+                     :image => true
 
   validates_email_format_of :email, :if => proc { |u| u.email_changed? }
   validates_email_format_of :new_email, :allow_blank => true, :if => proc { |u| u.new_email_changed? }
@@ -294,6 +296,24 @@ 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
+
+  def max_friends_per_hour
+    account_age_in_seconds = Time.now.utc - creation_time
+    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
+
   private
 
   def set_defaults