mirror of
https://github.com/discourse/discourse.git
synced 2024-12-14 18:53:43 +08:00
0f8e4d7acc
This lets us use all our normal JS tooling like prettier, esline and babel on the splash screen JS. At runtime the JS file is read and inlined into the HTML. This commit also switches us to use a CSP hash rather than a nonce for the splash screen.
39 lines
868 B
Ruby
39 lines
868 B
Ruby
# frozen_string_literal: true
|
|
|
|
module SplashScreenHelper
|
|
def self.inline_splash_screen_script
|
|
<<~HTML.html_safe
|
|
<script>#{raw_js}</script>
|
|
HTML
|
|
end
|
|
|
|
def self.fingerprint
|
|
if Rails.env.development?
|
|
calculate_fingerprint
|
|
else
|
|
@fingerprint ||= calculate_fingerprint
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def self.load_js
|
|
File.read("#{Rails.root}/app/assets/javascripts/discourse/dist/assets/splash-screen.js").sub("//# sourceMappingURL=splash-screen.map\n", "")
|
|
rescue Errno::ENOENT
|
|
Rails.logger.error("Unable to load splash screen JS") if Rails.env.production?
|
|
"console.log('Unable to load splash screen JS')"
|
|
end
|
|
|
|
def self.raw_js
|
|
if Rails.env.development?
|
|
load_js
|
|
else
|
|
@loaded_js ||= load_js
|
|
end
|
|
end
|
|
|
|
def self.calculate_fingerprint
|
|
"sha256-#{Digest::SHA256.base64digest(raw_js)}"
|
|
end
|
|
end
|