FEATURE: new 'Discourse-Render' HTTP header

This commit is contained in:
Régis Hanol
2019-08-30 20:45:18 +02:00
parent 34ac199be7
commit 75eebc904e
2 changed files with 18 additions and 11 deletions

View File

@ -102,6 +102,13 @@ class ApplicationController < ActionController::Base
end end
def set_layout def set_layout
case request.headers["Discourse-Render"]
when "desktop"
return "application"
when "crawler"
return "crawler"
end
use_crawler_layout? ? 'crawler' : 'application' use_crawler_layout? ? 'crawler' : 'application'
end end

View File

@ -12,9 +12,10 @@ module Middleware
end end
class Helper class Helper
USER_AGENT = "HTTP_USER_AGENT" RACK_SESSION = "rack.session"
RACK_SESSION = "rack.session" USER_AGENT = "HTTP_USER_AGENT"
ACCEPT_ENCODING = "HTTP_ACCEPT_ENCODING" ACCEPT_ENCODING = "HTTP_ACCEPT_ENCODING"
DISCOURSE_RENDER = "HTTP_DISCOURSE_RENDER"
def initialize(env) def initialize(env)
@env = env @env = env
@ -28,7 +29,7 @@ module Middleware
!@request.path.ends_with?('srv/status') && !@request.path.ends_with?('srv/status') &&
@request[Auth::DefaultCurrentUserProvider::API_KEY].nil? && @request[Auth::DefaultCurrentUserProvider::API_KEY].nil? &&
@env[Auth::DefaultCurrentUserProvider::USER_API_KEY].nil? && @env[Auth::DefaultCurrentUserProvider::USER_API_KEY].nil? &&
CrawlerDetection.is_blocked_crawler?(@request.env['HTTP_USER_AGENT']) CrawlerDetection.is_blocked_crawler?(@env[USER_AGENT])
end end
def is_mobile=(val) def is_mobile=(val)
@ -39,12 +40,11 @@ module Middleware
@is_mobile ||= @is_mobile ||=
begin begin
session = @env[RACK_SESSION] session = @env[RACK_SESSION]
# don't initialize params until later otherwise # don't initialize params until later
# you get a broken params on the request # otherwise you get a broken params on the request
params = {} params = {}
user_agent = @env[USER_AGENT]
MobileDetection.resolve_mobile_view!(user_agent, params, session) ? :true : :false MobileDetection.resolve_mobile_view!(@env[USER_AGENT], params, session) ? :true : :false
end end
@is_mobile == :true @is_mobile == :true
@ -62,7 +62,8 @@ module Middleware
@is_crawler ||= @is_crawler ||=
begin begin
user_agent = @env[USER_AGENT] user_agent = @env[USER_AGENT]
if CrawlerDetection.crawler?(user_agent, @env["HTTP_VIA"])
if @env[DISCOURSE_RENDER] == "crawler" || CrawlerDetection.crawler?(user_agent, @env["HTTP_VIA"])
:true :true
else else
user_agent.downcase.include?("discourse") ? :true : :false user_agent.downcase.include?("discourse") ? :true : :false
@ -122,7 +123,7 @@ module Middleware
def logged_in_anon_limiter def logged_in_anon_limiter
@logged_in_anon_limiter ||= RateLimiter.new( @logged_in_anon_limiter ||= RateLimiter.new(
nil, nil,
"logged_in_anon_cache_#{@env["HOST"]}/#{@env["REQUEST_URI"]}", "logged_in_anon_cache_#{@env["HTTP_HOST"]}/#{@env["REQUEST_URI"]}",
GlobalSetting.force_anonymous_min_per_10_seconds, GlobalSetting.force_anonymous_min_per_10_seconds,
10 10
) )
@ -225,7 +226,6 @@ module Middleware
end end
result result
end end
end end