method
handle_options
v7.1.3.4 -
Show latest stable
- Class:
ActionDispatch::Cookies::CookieJar
handle_options(options)private
No documentation available.
# File actionpack/lib/action_dispatch/middleware/cookies.rb, line 435
def handle_options(options)
if options[:expires].respond_to?(:from_now)
options[:expires] = options[:expires].from_now
end
options[:path] ||= "/"
unless options.key?(:same_site)
options[:same_site] = request.cookies_same_site_protection
end
if options[:domain] == :all || options[:domain] == "all"
cookie_domain = ""
dot_splitted_host = request.host.split(".", -1)
# Case where request.host is not an IP address or it's an invalid domain
# (ip confirms to the domain structure we expect so we explicitly check for ip)
if request.host.match?(/^[\d.]+$/) || dot_splitted_host.include?("") || dot_splitted_host.length == 1
options[:domain] = nil
return
end
# If there is a provided tld length then we use it otherwise default domain.
if options[:tld_length].present?
# Case where the tld_length provided is valid
if dot_splitted_host.length >= options[:tld_length]
cookie_domain = dot_splitted_host.last(options[:tld_length]).join(".")
end
# Case where tld_length is not provided
else
# Regular TLDs
if !(/\.[^.]{2,3}\.[^.]{2}\z/.match?(request.host))
cookie_domain = dot_splitted_host.last(2).join(".")
# **.**, ***.** style TLDs like co.uk and com.au
else
cookie_domain = dot_splitted_host.last(3).join(".")
end
end
options[:domain] = if cookie_domain.present?
cookie_domain
end
elsif options[:domain].is_a? Array
# If host matches one of the supplied domains.
options[:domain] = options[:domain].find do |domain|
domain = domain.delete_prefix(".")
request.host == domain || request.host.end_with?(".#{domain}")
end
elsif options[:domain].respond_to?(:call)
options[:domain] = options[:domain].call(request)
end
end