correct specs, ensure crawler layout only applies to html

This commit is contained in:
Sam 2018-01-16 16:28:11 +11:00
parent 7b562d2f46
commit d7657d8e47
3 changed files with 16 additions and 3 deletions

View File

@ -60,7 +60,11 @@ class ApplicationController < ActionController::Base
end end
def use_crawler_layout? def use_crawler_layout?
@use_crawler_layout ||= (has_escaped_fragment? || CrawlerDetection.crawler?(request.user_agent) || params.key?("print")) @use_crawler_layout ||=
request.user_agent &&
(request.content_type.blank? || request.content_type.include?('html')) &&
!['json', 'rss'].include?(params[:format]) &&
(has_escaped_fragment? || CrawlerDetection.crawler?(request.user_agent) || params.key?("print"))
end end
def add_readonly_header def add_readonly_header

View File

@ -1,16 +1,24 @@
module CrawlerDetection module CrawlerDetection
def self.to_matcher(string) def self.to_matcher(string, type: nil)
escaped = string.split('|').map { |agent| Regexp.escape(agent) }.join('|') escaped = string.split('|').map { |agent| Regexp.escape(agent) }.join('|')
if type == :real && Rails.env == "test"
# we need this bypass so we properly render views
escaped << "|Rails Testing"
end
Regexp.new(escaped, Regexp::IGNORECASE) Regexp.new(escaped, Regexp::IGNORECASE)
end end
def self.crawler?(user_agent) def self.crawler?(user_agent)
return true if user_agent.nil?
# this is done to avoid regenerating regexes # this is done to avoid regenerating regexes
@non_crawler_matchers ||= {} @non_crawler_matchers ||= {}
@matchers ||= {} @matchers ||= {}
possibly_real = (@non_crawler_matchers[SiteSetting.non_crawler_user_agents] ||= to_matcher(SiteSetting.non_crawler_user_agents)) possibly_real = (@non_crawler_matchers[SiteSetting.non_crawler_user_agents] ||= to_matcher(SiteSetting.non_crawler_user_agents, type: :real))
if user_agent.match?(possibly_real) if user_agent.match?(possibly_real)
known_bots = (@matchers[SiteSetting.crawler_user_agents] ||= to_matcher(SiteSetting.crawler_user_agents)) known_bots = (@matchers[SiteSetting.crawler_user_agents] ||= to_matcher(SiteSetting.crawler_user_agents))

View File

@ -6,6 +6,7 @@ describe Middleware::RequestTracker do
def env(opts = {}) def env(opts = {})
{ {
"HTTP_HOST" => "http://test.com", "HTTP_HOST" => "http://test.com",
"HTTP_USER_AGENT" => "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
"REQUEST_URI" => "/path?bla=1", "REQUEST_URI" => "/path?bla=1",
"REQUEST_METHOD" => "GET", "REQUEST_METHOD" => "GET",
"rack.input" => "" "rack.input" => ""