* Fix admin page crashing when trying to block an invalid domain name
Fixes #13880
* Fix trailing and leading spaces not being properly stripped for domain blocks
extend ActiveSupport::Concern
included do
- before_save :normalize_domain
+ before_validation :normalize_domain
end
private
def rule_for(domain)
return if domain.blank?
- uri = Addressable::URI.new.tap { |u| u.host = domain.gsub(/[\/]/, '') }
+ uri = Addressable::URI.new.tap { |u| u.host = domain.strip.gsub(/[\/]/, '') }
segments = uri.normalized_host.split('.')
variants = segments.map.with_index { |_, i| segments[i..-1].join('.') }
where(domain: variants).order(Arel.sql('char_length(domain) desc')).first
+ rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError
+ nil
end
end