slimmer 18.0.0 → 18.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/slimmer/app.rb +2 -4
- data/lib/slimmer/processors/nonce_inserter.rb +21 -0
- data/lib/slimmer/skin.rb +1 -0
- data/lib/slimmer/version.rb +1 -1
- data/lib/slimmer.rb +1 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c83a7a1a6f6cc3aa308937371b5bd5ed83640dc639f3601ad13b42f85e34b9e
|
4
|
+
data.tar.gz: '0862dc4f349e0b6ec12c8151cfe6be98ab06635ec58a947ac1e3a90d16fc28d7'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f323c8d68bf3bf70e5127f1ac2ce00921b39b4f3f0ec16ca1675675b69ce2db802c75f3f5c0baa38ba6261b708579d42419f4fa5304b79e935345872c4ab42e
|
7
|
+
data.tar.gz: a56a4d1fc87d64c1d7c54f7fc18fbc235871584f43d63071e24d93620239a219bcaa057b795892e0bb71a8833b0b6e6862201cf254054db179185f224f9a466d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# 18.2.0
|
2
|
+
|
3
|
+
* Drop support for Ruby 2.7.
|
4
|
+
* Update reference to deprecated Rack::Utils::HeaderHash
|
5
|
+
|
6
|
+
# 18.1.0
|
7
|
+
|
8
|
+
* Decorate inline script elements with nonce attribute for appropriately configured Rails requests
|
9
|
+
|
1
10
|
# 18.0.0
|
2
11
|
|
3
12
|
* BREAKING: Drop support for determining Rails < 6 application names
|
data/lib/slimmer/app.rb
CHANGED
@@ -42,7 +42,7 @@ module Slimmer
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def response_can_be_rewritten?(status, headers)
|
45
|
-
Rack::
|
45
|
+
Rack::Headers.new.merge(headers)["Content-Type"] =~ /text\/html/ && ![301, 302, 304].include?(status)
|
46
46
|
end
|
47
47
|
|
48
48
|
def skip_slimmer?(env, response)
|
@@ -93,9 +93,7 @@ module Slimmer
|
|
93
93
|
end
|
94
94
|
|
95
95
|
def strip_slimmer_headers(headers)
|
96
|
-
|
97
|
-
# of extra states not copied. Can be removed once Ruby < 3.1 support is removed.
|
98
|
-
headers.to_h.reject { |k, _v| k =~ /\A#{Headers::HEADER_PREFIX}/ }
|
96
|
+
headers.reject { |k, _v| k =~ /\A#{Headers::HEADER_PREFIX}/i }
|
99
97
|
end
|
100
98
|
end
|
101
99
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Slimmer::Processors
|
2
|
+
class NonceInserter
|
3
|
+
def initialize(env)
|
4
|
+
# As Rails is an optional dependency of this gem quietly do nothing if Rails
|
5
|
+
# classes don't exist.
|
6
|
+
@nonce = if defined?(ActionDispatch::Request)
|
7
|
+
ActionDispatch::Request.new(env).content_security_policy_nonce
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def filter(_src, dest)
|
12
|
+
return unless @nonce
|
13
|
+
|
14
|
+
# Add the nonce attribute to script elements that don't have a src attribute
|
15
|
+
# we expect those with src to be on a CSP host allow list
|
16
|
+
dest.css("script:not([src])").each do |script|
|
17
|
+
script["nonce"] = @nonce
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/slimmer/skin.rb
CHANGED
@@ -104,6 +104,7 @@ module Slimmer
|
|
104
104
|
template_wrapper_id = "wrapper" # All templates in Static use `#wrapper`
|
105
105
|
|
106
106
|
processors = [
|
107
|
+
Processors::NonceInserter.new(source_request.env), # for security, this needs to be run before any application HTML is inserted
|
107
108
|
Processors::TitleInserter.new,
|
108
109
|
Processors::TagMover.new,
|
109
110
|
Processors::ConditionalCommentMover.new,
|
data/lib/slimmer/version.rb
CHANGED
data/lib/slimmer.rb
CHANGED
@@ -38,6 +38,7 @@ module Slimmer
|
|
38
38
|
autoload :ConditionalCommentMover, "slimmer/processors/conditional_comment_mover"
|
39
39
|
autoload :FeedbackURLSwapper, "slimmer/processors/feedback_url_swapper"
|
40
40
|
autoload :MetadataInserter, "slimmer/processors/metadata_inserter"
|
41
|
+
autoload :NonceInserter, "slimmer/processors/nonce_inserter"
|
41
42
|
autoload :HeaderContextInserter, "slimmer/processors/header_context_inserter"
|
42
43
|
autoload :InsideHeaderInserter, "slimmer/processors/inside_header_inserter"
|
43
44
|
autoload :SearchPathSetter, "slimmer/processors/search_path_setter"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 18.
|
4
|
+
version: 18.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -170,14 +170,14 @@ dependencies:
|
|
170
170
|
requirements:
|
171
171
|
- - '='
|
172
172
|
- !ruby/object:Gem::Version
|
173
|
-
version: 4.
|
173
|
+
version: 4.12.0
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
178
|
- - '='
|
179
179
|
- !ruby/object:Gem::Version
|
180
|
-
version: 4.
|
180
|
+
version: 4.12.0
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: webmock
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -216,6 +216,7 @@ files:
|
|
216
216
|
- lib/slimmer/processors/header_context_inserter.rb
|
217
217
|
- lib/slimmer/processors/inside_header_inserter.rb
|
218
218
|
- lib/slimmer/processors/metadata_inserter.rb
|
219
|
+
- lib/slimmer/processors/nonce_inserter.rb
|
219
220
|
- lib/slimmer/processors/search_parameter_inserter.rb
|
220
221
|
- lib/slimmer/processors/search_path_setter.rb
|
221
222
|
- lib/slimmer/processors/search_remover.rb
|
@@ -243,14 +244,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
243
244
|
requirements:
|
244
245
|
- - ">"
|
245
246
|
- !ruby/object:Gem::Version
|
246
|
-
version:
|
247
|
+
version: '3.0'
|
247
248
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
248
249
|
requirements:
|
249
250
|
- - ">="
|
250
251
|
- !ruby/object:Gem::Version
|
251
252
|
version: '0'
|
252
253
|
requirements: []
|
253
|
-
rubygems_version: 3.
|
254
|
+
rubygems_version: 3.4.21
|
254
255
|
signing_key:
|
255
256
|
specification_version: 4
|
256
257
|
summary: Thinner than the skinner
|