Skip to content

Commit 910a3fb

Browse files
Merge branch 'main' into patch-1
2 parents b30d02d + 6dcd66f commit 910a3fb

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

lib/rails_live_reload/engine.rb

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
module RailsLiveReload
22
class Railtie < ::Rails::Engine
3-
if RailsLiveReload.enabled? && (defined?(::Rails::Server) || ENV['SERVER_PROCESS'])
4-
initializer "rails_live_reload.middleware" do |app|
3+
def enabled?
4+
RailsLiveReload.enabled? && (defined?(::Rails::Server) || ENV['SERVER_PROCESS'])
5+
end
6+
7+
initializer "rails_live_reload.middleware" do |app|
8+
if enabled?
59
if ::Rails::VERSION::MAJOR.to_i >= 5
610
app.middleware.insert_after ActionDispatch::Executor, RailsLiveReload::Middleware::Base
711
else
@@ -12,30 +16,38 @@ class Railtie < ::Rails::Engine
1216
end
1317
end
1418
end
19+
end
1520

16-
initializer "rails_live_reload.watcher" do
21+
initializer "rails_live_reload.watcher" do
22+
if enabled?
1723
RailsLiveReload::Watcher.init
1824
end
25+
end
1926

20-
initializer "rails_live_reload.configure_metrics", after: :initialize_logger do
27+
initializer "rails_live_reload.configure_metrics", after: :initialize_logger do
28+
if enabled?
2129
ActiveSupport::Notifications.subscribe(
2230
/\.action_view/,
2331
RailsLiveReload::Instrument::MetricsCollector.new
2432
)
2533
end
34+
end
2635

27-
initializer "rails_live_reload.reset_current_request", after: :initialize_logger do |app|
36+
initializer "rails_live_reload.reset_current_request", after: :initialize_logger do |app|
37+
if enabled?
2838
app.executor.to_run { CurrentRequest.cleanup }
2939
app.executor.to_complete { CurrentRequest.cleanup }
3040
end
41+
end
3142

32-
initializer "rails_live_reload.routes" do
33-
config.after_initialize do |app|
43+
initializer "rails_live_reload.routes" do
44+
config.after_initialize do |app|
45+
if enabled?
3446
app.routes.prepend do
3547
mount RailsLiveReload.server => RailsLiveReload.config.url, internal: true
3648
end
3749
end
3850
end
3951
end
4052
end
41-
end
53+
end

lib/rails_live_reload/middleware/base.rb

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ def call!(env)
1515
@app.call(env)
1616
end
1717
else
18-
request = Rack::Request.new(env)
18+
request = ActionDispatch::Request.new(env)
1919
status, headers, body = @app.call(env)
2020

2121
if html?(headers) && (status == 500 || status == 422 || (status.to_s =~ /20./ && request.get?))
22-
return inject_rails_live_reload(status, headers, body)
22+
return inject_rails_live_reload(request, status, headers, body)
2323
end
2424

2525
[status, headers, body]
@@ -28,25 +28,26 @@ def call!(env)
2828

2929
private
3030

31-
def inject_rails_live_reload(status, headers, body)
31+
def inject_rails_live_reload(request, status, headers, body)
3232
response = Rack::Response.new([], status, headers)
33-
33+
34+
nonce = request&.content_security_policy_nonce
3435
if String === body
35-
response.write make_new_response(body)
36+
response.write make_new_response(body, nonce)
3637
else
37-
body.each { |fragment| response.write make_new_response(fragment) }
38+
body.each { |fragment| response.write make_new_response(fragment, nonce) }
3839
end
3940
body.close if body.respond_to?(:close)
4041
response.finish
4142
end
4243

43-
def make_new_response(body)
44+
def make_new_response(body, nonce)
4445
index = body.rindex(/<\/body>/i) || body.rindex(/<\/html>/i)
4546
return body if index.nil?
4647

4748
body.insert(index, <<~HTML.html_safe)
4849
<script defer type="text/javascript" src="#{RailsLiveReload.config.url}/script"></script>
49-
<script id="rails-live-reload-options" type="application/json">
50+
<script id="rails-live-reload-options" type="application/json" nonce="#{nonce}">
5051
#{{
5152
files: CurrentRequest.current.data.to_a,
5253
time: Time.now.to_i,
@@ -57,7 +58,7 @@ def make_new_response(body)
5758
end
5859

5960
def html?(headers)
60-
headers["Content-Type"].to_s.include?("text/html")
61+
headers["content-type"].to_s.include?("text/html")
6162
end
6263
end
6364
end

0 commit comments

Comments
 (0)