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:
Thibaut Girka
2019-01-02 13:45:18 +01:00
180 changed files with 3933 additions and 3622 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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