Merge commit 'f877aa9d70d0d600961989b8e97c0e0ce3ac1db6' into glitch-soc/merge-upstream
Conflicts: - `.github/dependabot.yml`: Upstream made changes, but we had removed it. Discarded upstream changes. - `.rubocop_todo.yml`: Upstream regenerated the file, we had some glitch-soc-specific ignores. - `app/models/account_statuses_filter.rb`: Minor upstream code style change where glitch-soc had slightly different code due to handling of local-only posts. Updated to match upstream's code style. - `app/models/status.rb`: Upstream moved ActiveRecord callback definitions, glitch-soc had an extra one. Moved the definitions as upstream did. - `app/services/backup_service.rb`: Upstream rewrote a lot of the backup service, glitch-soc had changes because of exporting local-only posts. Took upstream changes and added back code to deal with local-only posts. - `config/routes.rb`: Upstream split the file into different files, while glitch-soc had a few extra routes. Extra routes added to `config/routes/settings.rb`, `config/routes/api.rb` and `config/routes/admin.rb` - `db/schema.rb`: Upstream has new migrations, while glitch-soc had an extra migration. Updated the expected serial number to match upstream's. - `lib/mastodon/version.rb`: Upstream added support to set version tags from environment variables, while glitch-soc has an extra `+glitch` tag. Changed the code to support upstream's feature but prepending a `+glitch`. - `spec/lib/activitypub/activity/create_spec.rb`: Minor code style change upstream, while glitch-soc has extra tests due to `directMessage` handling. Applied upstream's changes while keeping glitch-soc's extra tests. - `spec/models/concerns/account_interactions_spec.rb`: Minor code style change upstream, while glitch-soc has extra tests. Applied upstream's changes while keeping glitch-soc's extra tests.
This commit is contained in:
@@ -8,9 +8,7 @@ class EmailMxValidator < ActiveModel::Validator
|
||||
|
||||
domain = get_domain(user.email)
|
||||
|
||||
if domain.blank?
|
||||
user.errors.add(:email, :invalid)
|
||||
elsif domain.include?('..')
|
||||
if domain.blank? || domain.include?('..')
|
||||
user.errors.add(:email, :invalid)
|
||||
elsif !on_allowlist?(domain)
|
||||
resolved_ips, resolved_domains = resolve_mx(domain)
|
||||
|
@@ -1,46 +0,0 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'csv'
|
||||
|
||||
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
|
||||
rescue CSV::MalformedCSVError
|
||||
import.errors.add(:data, :malformed)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def validate_following_import(import, row_count)
|
||||
base_limit = FollowLimitValidator.limit_for_account(import.account)
|
||||
|
||||
limit = if import.overwrite?
|
||||
base_limit
|
||||
else
|
||||
base_limit - import.account.following_count
|
||||
end
|
||||
|
||||
import.errors.add(:data, I18n.t('users.follow_limit_reached', limit: base_limit)) if row_count > limit
|
||||
end
|
||||
end
|
@@ -6,15 +6,23 @@ class VoteValidator < ActiveModel::Validator
|
||||
|
||||
vote.errors.add(:base, I18n.t('polls.errors.invalid_choice')) if invalid_choice?(vote)
|
||||
|
||||
if vote.poll_multiple? && already_voted_for_same_choice_on_multiple_poll?(vote)
|
||||
vote.errors.add(:base, I18n.t('polls.errors.already_voted'))
|
||||
elsif !vote.poll_multiple? && already_voted_on_non_multiple_poll?(vote)
|
||||
vote.errors.add(:base, I18n.t('polls.errors.already_voted'))
|
||||
end
|
||||
vote.errors.add(:base, I18n.t('polls.errors.already_voted')) if additional_voting_not_allowed?(vote)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def additional_voting_not_allowed?(vote)
|
||||
poll_multiple_and_already_voted?(vote) || poll_non_multiple_and_already_voted?(vote)
|
||||
end
|
||||
|
||||
def poll_multiple_and_already_voted?(vote)
|
||||
vote.poll_multiple? && already_voted_for_same_choice_on_multiple_poll?(vote)
|
||||
end
|
||||
|
||||
def poll_non_multiple_and_already_voted?(vote)
|
||||
!vote.poll_multiple? && already_voted_on_non_multiple_poll?(vote)
|
||||
end
|
||||
|
||||
def invalid_choice?(vote)
|
||||
vote.choice.negative? || vote.choice >= vote.poll.options.size
|
||||
end
|
||||
|
Reference in New Issue
Block a user