govspeak 3.5.0 → 3.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/govspeak/html_sanitizer.rb +2 -1
- data/lib/govspeak/version.rb +1 -1
- data/lib/kramdown/parser/kramdown_with_automatic_external_links.rb +3 -3
- data/test/govspeak_test.rb +18 -3
- data/test/govspeak_test_helper.rb +8 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54b9c75ce59284172221f263176a47cc93035180
|
4
|
+
data.tar.gz: 9a6f7c98b35bc753ecc21e0e8aa25234867d2f19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17fac603e4006e23750e4c129b69650d1ec106a71d0b1568a542fa4f1f65e474edd60c56d39de6297481281c1d1e45a51fbda84c41443915a63e9a9edb59006a
|
7
|
+
data.tar.gz: e29081388c7bf5207a68bd41a7dc1c1fdf0c3d7e3d040d88ee6ce102e9d19e91931f30144d3dc4299f8f0feb3f69c4481f06e3564a3d76767cb7cbf9641f04c5
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 3.5.1
|
2
|
+
|
3
|
+
* Continue to support non-strict URIs in links on Ruby 2.2.x. See [https://github.com/alphagov/govspeak/issues/57](https://github.com/alphagov/govspeak/issues/57)
|
4
|
+
|
1
5
|
## 3.5.0
|
2
6
|
|
3
7
|
* Add `{stat-headline}*10m* big numbers{/stat-headline}` markdown for HTML publications
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'addressable/uri'
|
1
2
|
require 'sanitize'
|
2
3
|
require 'with_deep_merge'
|
3
4
|
|
@@ -13,7 +14,7 @@ class Govspeak::HtmlSanitizer
|
|
13
14
|
return unless sanitize_context[:node_name] == "img"
|
14
15
|
|
15
16
|
node = sanitize_context[:node]
|
16
|
-
image_uri = URI.parse(node['src'])
|
17
|
+
image_uri = Addressable::URI.parse(node['src'])
|
17
18
|
unless image_uri.relative? || @allowed_image_hosts.include?(image_uri.host)
|
18
19
|
node.unlink # the node isn't sanitary. Remove it from the document.
|
19
20
|
end
|
data/lib/govspeak/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "uri"
|
1
|
+
require "addressable/uri"
|
2
2
|
require "kramdown/options"
|
3
3
|
|
4
4
|
module Kramdown
|
@@ -29,11 +29,11 @@ EOF
|
|
29
29
|
def add_link(el, href, title, alt_text = nil)
|
30
30
|
if el.type == :a
|
31
31
|
begin
|
32
|
-
host = URI.parse(href).host
|
32
|
+
host = Addressable::URI.parse(href).host
|
33
33
|
unless host.nil? || (@document_domains.compact.include?(host))
|
34
34
|
el.attr['rel'] = 'external'
|
35
35
|
end
|
36
|
-
rescue URI::InvalidURIError
|
36
|
+
rescue Addressable::URI::InvalidURIError
|
37
37
|
# it's safe to ignore these very *specific* exceptions
|
38
38
|
end
|
39
39
|
end
|
data/test/govspeak_test.rb
CHANGED
@@ -257,14 +257,29 @@ Teston
|
|
257
257
|
assert html.include?("¥")
|
258
258
|
end
|
259
259
|
|
260
|
-
test "should
|
260
|
+
test "should assume a link with an invalid uri is internal" do
|
261
261
|
html = Govspeak::Document.new("[link](:invalid-uri)").to_html
|
262
262
|
refute html.include?('rel="external"')
|
263
263
|
end
|
264
264
|
|
265
|
-
test "should
|
266
|
-
html = Govspeak::Document.new("[link](mailto
|
265
|
+
test "should treat a mailto as internal" do
|
266
|
+
html = Govspeak::Document.new("[link](mailto:a@b.com)").to_html
|
267
267
|
refute html.include?('rel="external"')
|
268
|
+
assert_equal %Q{<p><a href="mailto:a@b.com">link</a></p>\n}, deobfuscate_mailto(html)
|
269
|
+
end
|
270
|
+
|
271
|
+
test "permits mailto:// URI" do
|
272
|
+
html = Govspeak::Document.new("[link](mailto://a@b.com)").to_html
|
273
|
+
assert_equal %Q{<p><a rel="external" href="mailto://a@b.com">link</a></p>\n}, deobfuscate_mailto(html)
|
274
|
+
end
|
275
|
+
|
276
|
+
test "permits dud mailto: URI" do
|
277
|
+
html = Govspeak::Document.new("[link](mailto:)").to_html
|
278
|
+
assert_equal %Q{<p><a href="mailto:">link</a></p>\n}, deobfuscate_mailto(html)
|
279
|
+
end
|
280
|
+
|
281
|
+
test "permits trailing whitespace in an URI" do
|
282
|
+
Govspeak::Document.new("[link](http://example.com/%20)").to_html
|
268
283
|
end
|
269
284
|
|
270
285
|
# Regression test - the surrounded_by helper doesn't require the closing x
|
@@ -63,6 +63,14 @@ module GovspeakTestHelper
|
|
63
63
|
asserter.instance_eval(&block)
|
64
64
|
end
|
65
65
|
|
66
|
+
def deobfuscate_mailto(html)
|
67
|
+
# Kramdown obfuscates mailto addresses as an anti-spam measure. It
|
68
|
+
# obfuscates by encoding them as HTML entities.
|
69
|
+
# https://github.com/gettalong/kramdown/blob/7a7bd675b9d2593ad40c26fc4c77bf8407b70b42/lib/kramdown/converter/html.rb#L237-L246
|
70
|
+
coder = HTMLEntities.new
|
71
|
+
coder.decode(html)
|
72
|
+
end
|
73
|
+
|
66
74
|
module ClassMethods
|
67
75
|
def test_given_govspeak(govspeak, images=[], options = {}, &block)
|
68
76
|
test "Given #{govspeak}" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govspeak
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.5.
|
4
|
+
version: 3.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Griffiths
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: kramdown
|
@@ -67,6 +67,20 @@ dependencies:
|
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '1.5'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: addressable
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.3.8
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 2.3.8
|
70
84
|
- !ruby/object:Gem::Dependency
|
71
85
|
name: rake
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|