Merge branch 'main' into glitch-soc/merge-upstream

Conflicts:
- `app/validators/status_length_validator.rb`:
  Upstream changes too close to glitch-soc MAX_CHARS changes, but not a real
  conflict.
  Applied upstream changes.
- `package.json`:
  glitch-soc-only dependency textually too close to a dependency updated
  upstream, not a real conflict.
  Applied upstream changes.
This commit is contained in:
Claire
2021-03-02 12:06:58 +01:00
44 changed files with 915 additions and 741 deletions

View File

@ -2,11 +2,11 @@
class BlacklistedEmailValidator < ActiveModel::Validator
def validate(user)
return if user.valid_invitation?
return if user.valid_invitation? || user.email.blank?
@email = user.email
user.errors.add(:email, I18n.t('users.blocked_email_provider')) if blocked_email?
user.errors.add(:email, :blocked) if blocked_email?
end
private

View File

@ -4,16 +4,19 @@ require 'resolv'
class EmailMxValidator < ActiveModel::Validator
def validate(user)
return if user.email.blank?
domain = get_domain(user.email)
if domain.nil?
user.errors.add(:email, I18n.t('users.invalid_email'))
if domain.blank?
user.errors.add(:email, :invalid)
else
ips, hostnames = resolve_mx(domain)
if ips.empty?
user.errors.add(:email, I18n.t('users.invalid_email_mx'))
user.errors.add(:email, :unreachable)
elsif on_blacklist?(hostnames + ips)
user.errors.add(:email, I18n.t('users.blocked_email_provider'))
user.errors.add(:email, :blocked)
end
end
end

View File

@ -2,7 +2,7 @@
class NoteLengthValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.errors.add(attribute, I18n.t('statuses.over_character_limit', max: options[:maximum])) if too_long?(value)
record.errors.add(attribute, :too_long, message: I18n.t('statuses.over_character_limit', max: options[:maximum]), count: options[:maximum]) if too_long?(value)
end
private

View File

@ -2,6 +2,13 @@
class StatusLengthValidator < ActiveModel::Validator
MAX_CHARS = (ENV['MAX_TOOT_CHARS'] || 500).to_i
URL_PATTERN = %r{
(?:
(#{Twitter::TwitterText::Regex[:valid_url_preceding_chars]})
(#{FetchLinkCardService::URL_PATTERN})
)
}iox
URL_PLACEHOLDER = "\1#{'x' * 23}"
def validate(status)
return unless status.local? && !status.reblog?
@ -28,7 +35,7 @@ class StatusLengthValidator < ActiveModel::Validator
return '' if @status.text.nil?
@status.text.dup.tap do |new_text|
new_text.gsub!(FetchLinkCardService::URL_PATTERN, 'x' * 23)
new_text.gsub!(URL_PATTERN, URL_PLACEHOLDER)
new_text.gsub!(Account::MENTION_RE, '@\2')
end
end

View File

@ -4,7 +4,7 @@
class UniqueUsernameValidator < ActiveModel::Validator
def validate(account)
return if account.username.nil?
return if account.username.blank?
normalized_username = account.username.downcase
normalized_domain = account.domain&.downcase

View File

@ -3,9 +3,10 @@
class UnreservedUsernameValidator < ActiveModel::Validator
def validate(account)
@username = account.username
return if @username.nil?
account.errors.add(:username, I18n.t('accounts.reserved_username')) if reserved_username?
return if @username.blank?
account.errors.add(:username, :reserved) if reserved_username?
end
private