diff options
author | Thibaut Girka <thib@sitedethib.com> | 2018-10-05 15:23:57 +0200 |
---|---|---|
committer | Thibaut Girka <thib@sitedethib.com> | 2018-10-05 15:23:57 +0200 |
commit | 00fcdebed758f031b486ec239fd425fc54a180b3 (patch) | |
tree | 1211e136ba3e886ee8daaa5200babffc42375dd1 /app/validators | |
parent | a9e8f98a9d32c57956d41009bd09a1f33310676e (diff) | |
parent | 028ad4124cf1fdb28f5cf11bd7080e7a63f2f99e (diff) |
Merge branch 'master' into glitch-soc/merge-upstream
Conflicts: db/migrate/20170716191202_add_hide_notifications_to_mute.rb spec/controllers/application_controller_spec.rb Took our version, upstream changes were only minor style linting.
Diffstat (limited to 'app/validators')
-rw-r--r-- | app/validators/follow_limit_validator.rb | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/app/validators/follow_limit_validator.rb b/app/validators/follow_limit_validator.rb new file mode 100644 index 000000000..eb083ed85 --- /dev/null +++ b/app/validators/follow_limit_validator.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +class FollowLimitValidator < ActiveModel::Validator + LIMIT = ENV.fetch('MAX_FOLLOWS_THRESHOLD', 7_500).to_i + RATIO = ENV.fetch('MAX_FOLLOWS_RATIO', 1.1).to_f + + def validate(follow) + return if follow.account.nil? || !follow.account.local? + follow.errors.add(:base, I18n.t('users.follow_limit_reached', limit: self.class.limit_for_account(follow.account))) if limit_reached?(follow.account) + end + + class << self + def limit_for_account(account) + if account.following_count < LIMIT + LIMIT + else + account.followers_count * RATIO + end + end + end + + private + + def limit_reached?(account) + account.following_count >= self.class.limit_for_account(account) + end +end |