mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 07:53:49 +08:00
Improve URL validation to check for a valid host.
Parsing a URL with `URI` is not sufficient as the following cases are considered valid: URI.parse("http://https://google.com") => #<URI::HTTP http://https//google.com>
This commit is contained in:
@ -1,9 +1,15 @@
|
||||
class UrlValidator < ActiveModel::EachValidator
|
||||
def validate_each(record, attribute, value)
|
||||
if value.present?
|
||||
uri = URI.parse(value) rescue nil
|
||||
valid =
|
||||
begin
|
||||
uri = URI.parse(value)
|
||||
uri.is_a?(URI::HTTP) && !uri.host.nil? && uri.host.include?(".")
|
||||
rescue
|
||||
nil
|
||||
end
|
||||
|
||||
unless uri
|
||||
unless valid
|
||||
record.errors[attribute] << (options[:message] || I18n.t('errors.messages.invalid'))
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user