0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-06 13:08:40 +08:00
discourse/lib/content_security_policy.rb
David Taylor fc0d388c24
UX: Do not include upgrade-insecure-requests in report-only CSP (#41414)
This directive is not supported in report-only CSP, and causes confusing
errors to be logged to the browser console. Omit it in report-only mode.
2026-07-03 09:56:08 +01:00

29 lines
974 B
Ruby
Vendored

# frozen_string_literal: true
require "content_security_policy/builder"
require "content_security_policy/extension"
class ContentSecurityPolicy
class << self
def policy(theme_id = nil, base_url: Discourse.base_url, path_info: "/", report_only: false)
new.build(theme_id, base_url: base_url, path_info: path_info, report_only: report_only)
end
def nonce_placeholder(response_headers)
response_headers[
::Middleware::CspScriptNonceInjector::PLACEHOLDER_HEADER
] ||= "[[csp_nonce_placeholder_#{SecureRandom.hex}]]"
end
end
def build(theme_id, base_url:, path_info: "/", report_only: false)
builder = Builder.new(base_url: base_url, report_only: report_only)
Extension.theme_extensions(theme_id).each { |extension| builder << extension }
Extension.plugin_extensions.each { |extension| builder << extension }
builder << Extension.site_setting_extension
builder.build
end
end
CSP = ContentSecurityPolicy