@@ -2,6 +2,7 @@ |
||
| 2 | 2 |
|
| 3 | 3 |
| DateOfChange | Changes | |
| 4 | 4 |
|----------------|--------------------------------------------------------------------------------------------------------------| |
| 5 |
+| Oct 17, 2016 | Normalize URL in `to_uri` and `uri_expand` liquid filters. | |
|
| 5 | 6 |
| Oct 06, 2016 | `RssAgent` is reimplemented migrating its underlying feed parser from FeedNormalizer to Feedjira. [1564](https://github.com/cantino/huginn/pull/1564) | |
| 6 | 7 |
| Oct 05, 2016 | Migrate to Rails 5. [1688](https://github.com/cantino/huginn/pull/1688) | |
| 7 | 8 |
| Oct 05, 2016 | Improve URL normalization in `WebsiteAgent`. [1719](https://github.com/cantino/huginn/pull/1719) | |
@@ -130,9 +130,9 @@ module LiquidInterpolatable |
||
| 130 | 130 |
# fragment. |
| 131 | 131 |
def to_uri(uri, base_uri = nil) |
| 132 | 132 |
if base_uri |
| 133 |
- URI(base_uri) + uri.to_s |
|
| 133 |
+ Utils.normalize_uri(base_uri) + Utils.normalize_uri(uri.to_s) |
|
| 134 | 134 |
else |
| 135 |
- URI(uri.to_s) |
|
| 135 |
+ Utils.normalize_uri(uri.to_s) |
|
| 136 | 136 |
end |
| 137 | 137 |
rescue URI::Error |
| 138 | 138 |
nil |
@@ -151,7 +151,7 @@ module LiquidInterpolatable |
||
| 151 | 151 |
else |
| 152 | 152 |
url = url.to_s |
| 153 | 153 |
begin |
| 154 |
- uri = URI(url) |
|
| 154 |
+ uri = Utils.normalize_uri(url) |
|
| 155 | 155 |
rescue URI::Error |
| 156 | 156 |
return url |
| 157 | 157 |
end |
@@ -172,7 +172,7 @@ module LiquidInterpolatable |
||
| 172 | 172 |
case response.status |
| 173 | 173 |
when 301, 302, 303, 307 |
| 174 | 174 |
if location = response['location'] |
| 175 |
- uri += location |
|
| 175 |
+ uri += Utils.normalize_uri(location) |
|
| 176 | 176 |
next |
| 177 | 177 |
end |
| 178 | 178 |
end |
@@ -106,6 +106,10 @@ describe LiquidInterpolatable::Filters do |
||
| 106 | 106 |
expect(@filter.to_uri(123, 'http://example.com/dir/1')).to eq(URI('http://example.com/dir/123'))
|
| 107 | 107 |
end |
| 108 | 108 |
|
| 109 |
+ it 'should normalize a URL' do |
|
| 110 |
+ expect(@filter.to_uri('a[]', 'http://example.com/dir/1')).to eq(URI('http://example.com/dir/a%5B%5D'))
|
|
| 111 |
+ end |
|
| 112 |
+ |
|
| 109 | 113 |
it 'should return a URI value in interpolation' do |
| 110 | 114 |
expect(@agent.interpolated['foo']).to eq('/dir/1')
|
| 111 | 115 |
end |
@@ -140,8 +144,8 @@ describe LiquidInterpolatable::Filters do |
||
| 140 | 144 |
expect(@filter.uri_expand(nil)).to eq('')
|
| 141 | 145 |
expect(@filter.uri_expand('')).to eq('')
|
| 142 | 146 |
expect(@filter.uri_expand(5)).to eq('5')
|
| 143 |
- expect(@filter.uri_expand([])).to eq('[]')
|
|
| 144 |
- expect(@filter.uri_expand({})).to eq('{}')
|
|
| 147 |
+ expect(@filter.uri_expand([])).to eq('%5B%5D')
|
|
| 148 |
+ expect(@filter.uri_expand({})).to eq('%7B%7D')
|
|
| 145 | 149 |
expect(@filter.uri_expand(URI('/'))).to eq('/')
|
| 146 | 150 |
expect(@filter.uri_expand(URI('http:google.com'))).to eq('http:google.com')
|
| 147 | 151 |
expect(@filter.uri_expand(URI('http:/google.com'))).to eq('http:/google.com')
|