Fix follow limit preventing re-following of a moved account (#14207)
parent
941ff04b03
commit
eb35be0431
@ -0,0 +1,44 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
class ImportValidator < ActiveModel::Validator |
||||||
|
KNOWN_HEADERS = [ |
||||||
|
'Account address', |
||||||
|
'#domain', |
||||||
|
'#uri', |
||||||
|
].freeze |
||||||
|
|
||||||
|
def validate(import) |
||||||
|
return if import.type.blank? || import.data.blank? |
||||||
|
|
||||||
|
# We parse because newlines could be part of individual rows. This |
||||||
|
# runs on create so we should be reading the local file here before |
||||||
|
# it is uploaded to object storage or moved anywhere... |
||||||
|
csv_data = CSV.parse(import.data.queued_for_write[:original].read) |
||||||
|
|
||||||
|
row_count = csv_data.size |
||||||
|
row_count -= 1 if KNOWN_HEADERS.include?(csv_data.first&.first) |
||||||
|
|
||||||
|
import.errors.add(:data, I18n.t('imports.errors.over_rows_processing_limit', count: ImportService::ROWS_PROCESSING_LIMIT)) if row_count > ImportService::ROWS_PROCESSING_LIMIT |
||||||
|
|
||||||
|
case import.type |
||||||
|
when 'following' |
||||||
|
validate_following_import(import, row_count) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
private |
||||||
|
|
||||||
|
def validate_following_import(import, row_count) |
||||||
|
base_limit = FollowLimitValidator.limit_for_account(import.account) |
||||||
|
|
||||||
|
limit = begin |
||||||
|
if import.overwrite? |
||||||
|
base_limit |
||||||
|
else |
||||||
|
base_limit - import.account.following_count |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
import.errors.add(:data, I18n.t('users.follow_limit_reached', limit: base_limit)) if row_count > limit |
||||||
|
end |
||||||
|
end |
Loading…
Reference in new issue