diff options
author | schneems <richard.schneeman@gmail.com> | 2013-03-18 16:09:15 -0500 |
---|---|---|
committer | schneems <richard.schneeman@gmail.com> | 2013-03-19 12:34:49 -0500 |
commit | 334549b4a56ae753b564b6beeded88322306c7cb (patch) | |
tree | 1986dd410887e011b61b52ce94e058614e00c163 /actionpack/test | |
parent | a46cda11f02dd1225fe608ca9e38df2f52891320 (diff) | |
download | rails-334549b4a56ae753b564b6beeded88322306c7cb.tar.gz rails-334549b4a56ae753b564b6beeded88322306c7cb.tar.bz2 rails-334549b4a56ae753b564b6beeded88322306c7cb.zip |
Fix improperly configured host in generated urls
If the host in `default_url_options` is accidentally set with a protocol such as
```
host: "http://example.com"
```
then the generated url will have the protocol twice `http://http://example.com` which is not what the user intended. Likely they wanted to define a host `host: "example.com"` and a `protocol: "http://"` but did not know the convention.
This may not the most common problem, but when it happens it can go undetected for a while. I accidentally added `http://` out of habit recently only to find all the links in my emails were broken after deploying a demo site to production. Rather than allow this accident go undetected, we can fix the problem in line by properly setting the protocol and host.
I was able to find this related question on stack overflow: http://stackoverflow.com/questions/5878329/rails-3-devise-how-do-i-make-the-email-confirmation-links-use-secure-https-n where the answer was highly upvoted.
This is based off of work in #7415 cc/ @pixeltrix
ATP Action Mailer and Action Pack
Diffstat (limited to 'actionpack/test')
-rw-r--r-- | actionpack/test/dispatch/url_generation_test.rb | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/actionpack/test/dispatch/url_generation_test.rb b/actionpack/test/dispatch/url_generation_test.rb index e56e8ddc57..4123529092 100644 --- a/actionpack/test/dispatch/url_generation_test.rb +++ b/actionpack/test/dispatch/url_generation_test.rb @@ -48,6 +48,14 @@ module TestUrlGeneration https! assert_equal "http://www.example.com/foo", foo_url(:protocol => "http") end + + test "extracting protocol from host when protocol not present" do + assert_equal "httpz://www.example.com/foo", foo_url(host: "httpz://www.example.com", protocol: nil) + end + + test "formatting host when protocol is present" do + assert_equal "http://www.example.com/foo", foo_url(host: "httpz://www.example.com", protocol: "http://") + end end end |