mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 07:53:49 +08:00
DEV: Apply syntax_tree formatting to app/*
This commit is contained in:
@ -2,26 +2,41 @@
|
||||
|
||||
class StaticController < ApplicationController
|
||||
skip_before_action :check_xhr, :redirect_to_login_if_required
|
||||
skip_before_action :verify_authenticity_token, only: [:brotli_asset, :cdn_asset, :enter, :favicon, :service_worker_asset]
|
||||
skip_before_action :preload_json, only: [:brotli_asset, :cdn_asset, :enter, :favicon, :service_worker_asset]
|
||||
skip_before_action :handle_theme, only: [:brotli_asset, :cdn_asset, :enter, :favicon, :service_worker_asset]
|
||||
skip_before_action :verify_authenticity_token,
|
||||
only: %i[brotli_asset cdn_asset enter favicon service_worker_asset]
|
||||
skip_before_action :preload_json,
|
||||
only: %i[brotli_asset cdn_asset enter favicon service_worker_asset]
|
||||
skip_before_action :handle_theme,
|
||||
only: %i[brotli_asset cdn_asset enter favicon service_worker_asset]
|
||||
|
||||
before_action :apply_cdn_headers, only: [:brotli_asset, :cdn_asset, :enter, :favicon, :service_worker_asset]
|
||||
before_action :apply_cdn_headers,
|
||||
only: %i[brotli_asset cdn_asset enter favicon service_worker_asset]
|
||||
|
||||
PAGES_WITH_EMAIL_PARAM = ['login', 'password_reset', 'signup']
|
||||
MODAL_PAGES = ['password_reset', 'signup']
|
||||
PAGES_WITH_EMAIL_PARAM = %w[login password_reset signup]
|
||||
MODAL_PAGES = %w[password_reset signup]
|
||||
DEFAULT_PAGES = {
|
||||
"faq" => { redirect: "faq_url", topic_id: "guidelines_topic_id" },
|
||||
"tos" => { redirect: "tos_url", topic_id: "tos_topic_id" },
|
||||
"privacy" => { redirect: "privacy_policy_url", topic_id: "privacy_topic_id" },
|
||||
"faq" => {
|
||||
redirect: "faq_url",
|
||||
topic_id: "guidelines_topic_id",
|
||||
},
|
||||
"tos" => {
|
||||
redirect: "tos_url",
|
||||
topic_id: "tos_topic_id",
|
||||
},
|
||||
"privacy" => {
|
||||
redirect: "privacy_policy_url",
|
||||
topic_id: "privacy_topic_id",
|
||||
},
|
||||
}
|
||||
CUSTOM_PAGES = {} # Add via `#add_topic_static_page` in plugin API
|
||||
|
||||
def show
|
||||
return redirect_to(path '/') if current_user && (params[:id] == 'login' || params[:id] == 'signup')
|
||||
if current_user && (params[:id] == "login" || params[:id] == "signup")
|
||||
return redirect_to(path "/")
|
||||
end
|
||||
|
||||
if SiteSetting.login_required? && current_user.nil? && ['faq', 'guidelines'].include?(params[:id])
|
||||
return redirect_to path('/login')
|
||||
if SiteSetting.login_required? && current_user.nil? && %w[faq guidelines].include?(params[:id])
|
||||
return redirect_to path("/login")
|
||||
end
|
||||
|
||||
map = DEFAULT_PAGES.deep_merge(CUSTOM_PAGES)
|
||||
@ -34,10 +49,10 @@ class StaticController < ApplicationController
|
||||
end
|
||||
|
||||
# The /guidelines route ALWAYS shows our FAQ, ignoring the faq_url site setting.
|
||||
@page = 'faq' if @page == 'guidelines'
|
||||
@page = "faq" if @page == "guidelines"
|
||||
|
||||
# Don't allow paths like ".." or "/" or anything hacky like that
|
||||
@page = @page.gsub(/[^a-z0-9\_\-]/, '')
|
||||
@page = @page.gsub(/[^a-z0-9\_\-]/, "")
|
||||
|
||||
if map.has_key?(@page)
|
||||
topic_id = map[@page][:topic_id]
|
||||
@ -46,11 +61,12 @@ class StaticController < ApplicationController
|
||||
@topic = Topic.find_by_id(SiteSetting.get(topic_id))
|
||||
raise Discourse::NotFound unless @topic
|
||||
|
||||
title_prefix = if I18n.exists?("js.#{@page}")
|
||||
I18n.t("js.#{@page}")
|
||||
else
|
||||
@topic.title
|
||||
end
|
||||
title_prefix =
|
||||
if I18n.exists?("js.#{@page}")
|
||||
I18n.t("js.#{@page}")
|
||||
else
|
||||
@topic.title
|
||||
end
|
||||
@title = "#{title_prefix} - #{SiteSetting.title}"
|
||||
@body = @topic.posts.first.cooked
|
||||
@faq_overridden = !SiteSetting.faq_url.blank?
|
||||
@ -104,10 +120,7 @@ class StaticController < ApplicationController
|
||||
forum_uri = URI(Discourse.base_url)
|
||||
uri = URI(redirect_location)
|
||||
|
||||
if uri.path.present? &&
|
||||
(uri.host.blank? || uri.host == forum_uri.host) &&
|
||||
uri.path !~ /\./
|
||||
|
||||
if uri.path.present? && (uri.host.blank? || uri.host == forum_uri.host) && uri.path !~ /\./
|
||||
destination = "#{uri.path}#{uri.query ? "?#{uri.query}" : ""}"
|
||||
end
|
||||
rescue URI::Error
|
||||
@ -135,31 +148,33 @@ class StaticController < ApplicationController
|
||||
is_asset_path
|
||||
|
||||
hijack do
|
||||
data = DistributedMemoizer.memoize("FAVICON#{SiteIconManager.favicon_url}", 60 * 30) do
|
||||
favicon = SiteIconManager.favicon
|
||||
next "" unless favicon
|
||||
data =
|
||||
DistributedMemoizer.memoize("FAVICON#{SiteIconManager.favicon_url}", 60 * 30) do
|
||||
favicon = SiteIconManager.favicon
|
||||
next "" unless favicon
|
||||
|
||||
if Discourse.store.external?
|
||||
begin
|
||||
file = FileHelper.download(
|
||||
Discourse.store.cdn_url(favicon.url),
|
||||
max_file_size: favicon.filesize,
|
||||
tmp_file_name: FAVICON,
|
||||
follow_redirect: true
|
||||
)
|
||||
if Discourse.store.external?
|
||||
begin
|
||||
file =
|
||||
FileHelper.download(
|
||||
Discourse.store.cdn_url(favicon.url),
|
||||
max_file_size: favicon.filesize,
|
||||
tmp_file_name: FAVICON,
|
||||
follow_redirect: true,
|
||||
)
|
||||
|
||||
file&.read || ""
|
||||
rescue => e
|
||||
AdminDashboardData.add_problem_message('dashboard.bad_favicon_url', 1800)
|
||||
Rails.logger.debug("Failed to fetch favicon #{favicon.url}: #{e}\n#{e.backtrace}")
|
||||
""
|
||||
ensure
|
||||
file&.unlink
|
||||
file&.read || ""
|
||||
rescue => e
|
||||
AdminDashboardData.add_problem_message("dashboard.bad_favicon_url", 1800)
|
||||
Rails.logger.debug("Failed to fetch favicon #{favicon.url}: #{e}\n#{e.backtrace}")
|
||||
""
|
||||
ensure
|
||||
file&.unlink
|
||||
end
|
||||
else
|
||||
File.read(Rails.root.join("public", favicon.url[1..-1]))
|
||||
end
|
||||
else
|
||||
File.read(Rails.root.join("public", favicon.url[1..-1]))
|
||||
end
|
||||
end
|
||||
|
||||
if data.bytesize == 0
|
||||
@@default_favicon ||= File.read(Rails.root + "public/images/default-favicon.png")
|
||||
@ -178,9 +193,7 @@ class StaticController < ApplicationController
|
||||
def brotli_asset
|
||||
is_asset_path
|
||||
|
||||
serve_asset(".br") do
|
||||
response.headers["Content-Encoding"] = 'br'
|
||||
end
|
||||
serve_asset(".br") { response.headers["Content-Encoding"] = "br" }
|
||||
end
|
||||
|
||||
def cdn_asset
|
||||
@ -199,20 +212,22 @@ class StaticController < ApplicationController
|
||||
# However, ensure that these may be cached and served for longer on servers.
|
||||
immutable_for 1.year
|
||||
|
||||
if Rails.application.assets_manifest.assets['service-worker.js']
|
||||
path = File.expand_path(Rails.root + "public/assets/#{Rails.application.assets_manifest.assets['service-worker.js']}")
|
||||
if Rails.application.assets_manifest.assets["service-worker.js"]
|
||||
path =
|
||||
File.expand_path(
|
||||
Rails.root +
|
||||
"public/assets/#{Rails.application.assets_manifest.assets["service-worker.js"]}",
|
||||
)
|
||||
response.headers["Last-Modified"] = File.ctime(path).httpdate
|
||||
end
|
||||
content = Rails.application.assets_manifest.find_sources('service-worker.js').first
|
||||
content = Rails.application.assets_manifest.find_sources("service-worker.js").first
|
||||
|
||||
base_url = File.dirname(helpers.script_asset_path('service-worker'))
|
||||
content = content.sub(
|
||||
/^\/\/# sourceMappingURL=(service-worker-.+\.map)$/
|
||||
) { "//# sourceMappingURL=#{base_url}/#{Regexp.last_match(1)}" }
|
||||
render(
|
||||
plain: content,
|
||||
content_type: 'application/javascript'
|
||||
)
|
||||
base_url = File.dirname(helpers.script_asset_path("service-worker"))
|
||||
content =
|
||||
content.sub(%r{^//# sourceMappingURL=(service-worker-.+\.map)$}) do
|
||||
"//# sourceMappingURL=#{base_url}/#{Regexp.last_match(1)}"
|
||||
end
|
||||
render(plain: content, content_type: "application/javascript")
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -220,7 +235,6 @@ class StaticController < ApplicationController
|
||||
protected
|
||||
|
||||
def serve_asset(suffix = nil)
|
||||
|
||||
path = File.expand_path(Rails.root + "public/assets/#{params[:path]}#{suffix}")
|
||||
|
||||
# SECURITY what if path has /../
|
||||
@ -254,12 +268,10 @@ class StaticController < ApplicationController
|
||||
immutable_for 1.year
|
||||
|
||||
# disable NGINX mucking with transfer
|
||||
request.env['sendfile.type'] = ''
|
||||
request.env["sendfile.type"] = ""
|
||||
|
||||
opts = { disposition: nil }
|
||||
opts[:type] = "application/javascript" if params[:path] =~ /\.js$/
|
||||
send_file(path, opts)
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
Reference in New Issue
Block a user