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

Conflicts:
- .eslintrc.yml
  Removed, as upstream removed it.
- app/controllers/admin/statuses_controller.rb
  Minor code cleanup when porting one of our features.
- app/models/account.rb
  Note length validation has changed upstream.
  We now use upstream's validation (dropped legacy glitch-soc
  account metadata stuff) but with configurable limit.
- app/services/post_status_service.rb
  Upstream has added support for scheduled toots, refactoring
  the code a bit. Adapted our changes to this refactoring.
- app/views/stream_entries/_detailed_status.html.haml
  Not a real conflict, changes too close.
- app/views/stream_entries/_simple_status.html.haml
  Not a real conflict, changes too close.
This commit is contained in:
Thibaut Girka
2019-01-10 19:12:10 +01:00
239 changed files with 3222 additions and 1433 deletions

View File

@@ -0,0 +1,22 @@
# frozen_string_literal: true
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)
end
private
def too_long?(value)
countable_text(value).mb_chars.grapheme_length > options[:maximum]
end
def countable_text(value)
return '' if value.nil?
value.dup.tap do |new_text|
new_text.gsub!(FetchLinkCardService::URL_PATTERN, 'x' * 23)
new_text.gsub!(Account::MENTION_RE, '@\2')
end
end
end

View File

@@ -2,20 +2,22 @@
class UnreservedUsernameValidator < ActiveModel::Validator
def validate(account)
return if account.username.nil?
account.errors.add(:username, I18n.t('accounts.reserved_username')) if reserved_username?(account.username)
@username = account.username
return if @username.nil?
account.errors.add(:username, I18n.t('accounts.reserved_username')) if reserved_username?
end
private
def pam_controlled?(value)
def pam_controlled?
return false unless Devise.pam_authentication && Devise.pam_controlled_service
Rpam2.account(Devise.pam_controlled_service, value).present?
Rpam2.account(Devise.pam_controlled_service, @username).present?
end
def reserved_username?(value)
return true if pam_controlled?(value)
def reserved_username?
return true if pam_controlled?
return false unless Setting.reserved_usernames
Setting.reserved_usernames.include?(value.downcase)
Setting.reserved_usernames.include?(@username.downcase)
end
end

View File

@@ -8,7 +8,7 @@ class UrlValidator < ActiveModel::EachValidator
private
def compliant?(url)
parsed_url = Addressable::URI.parse(url).normalize
!parsed_url.nil? && %w(http https).include?(parsed_url.scheme) && parsed_url.host
parsed_url = Addressable::URI.parse(url)
parsed_url && %w(http https).include?(parsed_url.scheme) && parsed_url.host
end
end