govspeak 3.5.0 → 3.5.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|