Merge branch 'master' into glitch-soc/merge-upstream
Conflicts manually resolved: - app/services/post_status_service.rb - config/locales/simple_form.pl.yml - config/routes.rb - config/webpack/loaders/sass.js - config/webpack/shared.js - package.json - yarn.lock
This commit is contained in:
@@ -2,31 +2,32 @@
|
||||
|
||||
class BlacklistedEmailValidator < ActiveModel::Validator
|
||||
def validate(user)
|
||||
user.errors.add(:email, I18n.t('users.invalid_email')) if blocked_email?(user.email)
|
||||
@email = user.email
|
||||
user.errors.add(:email, I18n.t('users.invalid_email')) if blocked_email?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def blocked_email?(value)
|
||||
on_blacklist?(value) || not_on_whitelist?(value)
|
||||
def blocked_email?
|
||||
on_blacklist? || not_on_whitelist?
|
||||
end
|
||||
|
||||
def on_blacklist?(value)
|
||||
return true if EmailDomainBlock.block?(value)
|
||||
def on_blacklist?
|
||||
return true if EmailDomainBlock.block?(@email)
|
||||
return false if Rails.configuration.x.email_domains_blacklist.blank?
|
||||
|
||||
domains = Rails.configuration.x.email_domains_blacklist.gsub('.', '\.')
|
||||
regexp = Regexp.new("@(.+\\.)?(#{domains})", true)
|
||||
|
||||
value =~ regexp
|
||||
@email =~ regexp
|
||||
end
|
||||
|
||||
def not_on_whitelist?(value)
|
||||
def not_on_whitelist?
|
||||
return false if Rails.configuration.x.email_domains_whitelist.blank?
|
||||
|
||||
domains = Rails.configuration.x.email_domains_whitelist.gsub('.', '\.')
|
||||
regexp = Regexp.new("@(.+\\.)?(#{domains})$", true)
|
||||
|
||||
value !~ regexp
|
||||
@email !~ regexp
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,14 +4,19 @@ class DisallowedHashtagsValidator < ActiveModel::Validator
|
||||
def validate(status)
|
||||
return unless status.local? && !status.reblog?
|
||||
|
||||
tags = Extractor.extract_hashtags(status.text)
|
||||
tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase }
|
||||
@status = status
|
||||
tags = select_tags
|
||||
|
||||
status.errors.add(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) unless tags.empty?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def select_tags
|
||||
tags = Extractor.extract_hashtags(@status.text)
|
||||
tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase }
|
||||
end
|
||||
|
||||
def disallowed_hashtags
|
||||
return @disallowed_hashtags if @disallowed_hashtags
|
||||
|
||||
|
||||
@@ -5,27 +5,29 @@ class StatusLengthValidator < ActiveModel::Validator
|
||||
|
||||
def validate(status)
|
||||
return unless status.local? && !status.reblog?
|
||||
status.errors.add(:text, I18n.t('statuses.over_character_limit', max: MAX_CHARS)) if too_long?(status)
|
||||
|
||||
@status = status
|
||||
status.errors.add(:text, I18n.t('statuses.over_character_limit', max: MAX_CHARS)) if too_long?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def too_long?(status)
|
||||
countable_length(status) > MAX_CHARS
|
||||
def too_long?
|
||||
countable_length > MAX_CHARS
|
||||
end
|
||||
|
||||
def countable_length(status)
|
||||
total_text(status).mb_chars.grapheme_length
|
||||
def countable_length
|
||||
total_text.mb_chars.grapheme_length
|
||||
end
|
||||
|
||||
def total_text(status)
|
||||
[status.spoiler_text, countable_text(status)].join
|
||||
def total_text
|
||||
[@status.spoiler_text, countable_text].join
|
||||
end
|
||||
|
||||
def countable_text(status)
|
||||
return '' if status.text.nil?
|
||||
def countable_text
|
||||
return '' if @status.text.nil?
|
||||
|
||||
status.text.dup.tap do |new_text|
|
||||
@status.text.dup.tap do |new_text|
|
||||
new_text.gsub!(FetchLinkCardService::URL_PATTERN, 'x' * 23)
|
||||
new_text.gsub!(Account::MENTION_RE, '@\2')
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user