2018-06-27 12:20:23 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2018-06-01 07:43:53 -04:00
|
|
|
# PublicUrlValidator
|
|
|
|
#
|
2019-04-11 02:29:07 -04:00
|
|
|
# Custom validator for URLs. This validator works like AddressableUrlValidator but
|
2018-06-01 07:43:53 -04:00
|
|
|
# it blocks by default urls pointing to localhost or the local network.
|
|
|
|
#
|
|
|
|
# This validator accepts the same params UrlValidator does.
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
#
|
|
|
|
# class User < ActiveRecord::Base
|
|
|
|
# validates :personal_url, public_url: true
|
|
|
|
#
|
2019-04-11 02:29:07 -04:00
|
|
|
# validates :ftp_url, public_url: { schemes: %w(ftp) }
|
2018-06-01 07:43:53 -04:00
|
|
|
#
|
|
|
|
# validates :git_url, public_url: { allow_localhost: true, allow_local_network: true}
|
|
|
|
# end
|
|
|
|
#
|
2019-04-11 02:29:07 -04:00
|
|
|
class PublicUrlValidator < AddressableUrlValidator
|
|
|
|
DEFAULT_OPTIONS = {
|
|
|
|
allow_localhost: false,
|
|
|
|
allow_local_network: false
|
|
|
|
}.freeze
|
2018-06-01 07:43:53 -04:00
|
|
|
|
2019-04-11 02:29:07 -04:00
|
|
|
def initialize(options)
|
|
|
|
options.reverse_merge!(DEFAULT_OPTIONS)
|
|
|
|
|
|
|
|
super(options)
|
2018-06-01 07:43:53 -04:00
|
|
|
end
|
|
|
|
end
|