rack-force_domain 0.2.0 → 0.3.0
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 +7 -0
- data/lib/rack/force_domain.rb +11 -19
- data/test/force_domain_test.rb +25 -8
- metadata +22 -44
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7989be2cdf424464752efd83db25bc9c4c5386ab
|
4
|
+
data.tar.gz: 8eb430c9cf27ed7bc73856ad9667dfee0d0c0586
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3b691e982e97b819356eca3c0ec21c656243895c95e239cc261ae7c3d3bd579a67602cabe9dcbb4c530b2e40393cc9597b21d8cce07976f72ae8b6a9bfcb76cc
|
7
|
+
data.tar.gz: a0f790ad36368589a9ed7bd7967a95da15af717c5bf585000ec261e076129a8ef065d7ccd6e077ef086a0c9cb5671ae6b14a2b0ad8353a086495337dc280f6e9
|
data/lib/rack/force_domain.rb
CHANGED
@@ -1,32 +1,24 @@
|
|
1
1
|
require 'rack'
|
2
2
|
|
3
3
|
class Rack::ForceDomain
|
4
|
-
def initialize(app,
|
4
|
+
def initialize(app, host, alternate_domains = [])
|
5
5
|
@app = app
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# set host from domain
|
10
|
-
domain_parts = domain.split(":")
|
11
|
-
@host = domain_parts[0]
|
6
|
+
@host = host unless host.to_s.empty?
|
7
|
+
@allowable_domains = [@host, *alternate_domains].compact
|
8
|
+
end
|
12
9
|
|
13
|
-
|
14
|
-
|
15
|
-
port = domain_parts[1].to_i
|
16
|
-
@port = port if port > 0
|
17
|
-
end
|
18
|
-
end
|
10
|
+
def ok?(domain)
|
11
|
+
@host.nil? or @allowable_domains.include?(domain)
|
19
12
|
end
|
20
13
|
|
21
14
|
def call(env)
|
22
15
|
request = Rack::Request.new(env)
|
23
|
-
|
24
|
-
|
25
|
-
if host_mismatch or port_mismatch
|
26
|
-
fake_request = Rack::Request.new(env.merge("HTTP_HOST" => @domain, "SERVER_PORT" => @port || request.port))
|
27
|
-
Rack::Response.new([], 301, "Location" => fake_request.url).finish
|
28
|
-
else
|
16
|
+
|
17
|
+
if ok? request.host
|
29
18
|
@app.call(env)
|
19
|
+
else
|
20
|
+
fake_request = Rack::Request.new(env.merge("HTTP_HOST" => @host))
|
21
|
+
Rack::Response.new([], 301, "Location" => fake_request.url).finish
|
30
22
|
end
|
31
23
|
end
|
32
24
|
end
|
data/test/force_domain_test.rb
CHANGED
@@ -21,18 +21,35 @@ class ForceDomainTest < Test::Unit::TestCase
|
|
21
21
|
assert !@called, "should not have passed through"
|
22
22
|
end
|
23
23
|
|
24
|
-
def test_should_301_if_port_is_wrong
|
25
|
-
app = Rack::ForceDomain.new(lambda{|env| @called = true; [200, [], {}] } , "foo.com:3000")
|
26
|
-
status, body, headers = app.call(Rack::MockRequest.env_for("http://foo.com/baz"))
|
27
|
-
assert_equal 301, status
|
28
|
-
assert_equal "http://foo.com:3000/baz", headers["Location"]
|
29
|
-
assert !@called, "should not have passed through"
|
30
|
-
end
|
31
|
-
|
32
24
|
def test_should_passthrough_for_correct_domain
|
33
25
|
app = Rack::ForceDomain.new(lambda{|env| @called = true; [200, [], {}] } , "foo.com")
|
34
26
|
status, body, headers = app.call(Rack::MockRequest.env_for("http://foo.com/baz"))
|
35
27
|
assert_equal 200, status
|
36
28
|
assert @called, "expected the request to be passed through"
|
37
29
|
end
|
30
|
+
|
31
|
+
def test_should_allow_domains_listed_in_alternate_domains_through
|
32
|
+
app = Rack::ForceDomain.new(lambda{|env| @called = true; [200, [], {}] } , "foo.com", ["bar.com", "baz.com"])
|
33
|
+
|
34
|
+
@called = false
|
35
|
+
status, body, headers = app.call(Rack::MockRequest.env_for("http://bar.com/baz"))
|
36
|
+
assert_equal 200, status
|
37
|
+
assert @called, "expected the request to be passed through"
|
38
|
+
|
39
|
+
@called = false
|
40
|
+
status, body, headers = app.call(Rack::MockRequest.env_for("http://baz.com/baz"))
|
41
|
+
assert_equal 200, status
|
42
|
+
assert @called, "expected the request to be passed through"
|
43
|
+
|
44
|
+
status, body, headers = app.call(Rack::MockRequest.env_for("http://other.com/baz"))
|
45
|
+
assert_equal 301, status
|
46
|
+
assert_equal "http://foo.com/baz", headers["Location"]
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_it_redirects_https_to_https
|
50
|
+
app = Rack::ForceDomain.new(lambda{|env| @called = true; [200, [], {}] } , "foo.com")
|
51
|
+
status, body, headers = app.call(Rack::MockRequest.env_for("https://bar.com/baz"))
|
52
|
+
assert_equal 301, status
|
53
|
+
assert_equal "https://foo.com/baz", headers["Location"]
|
54
|
+
end
|
38
55
|
end
|
metadata
CHANGED
@@ -1,71 +1,49 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-force_domain
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 0
|
10
|
-
version: 0.2.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Tom Lea
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2011-04-16 00:00:00 +01:00
|
19
|
-
default_executable:
|
11
|
+
date: 2014-03-12 00:00:00.000000000 Z
|
20
12
|
dependencies: []
|
21
|
-
|
22
13
|
description:
|
23
14
|
email: contrib@tomlea.co.uk
|
24
15
|
executables: []
|
25
|
-
|
26
16
|
extensions: []
|
27
|
-
|
28
|
-
extra_rdoc_files:
|
17
|
+
extra_rdoc_files:
|
29
18
|
- README.markdown
|
30
|
-
files:
|
19
|
+
files:
|
31
20
|
- README.markdown
|
32
21
|
- test/force_domain_test.rb
|
33
22
|
- lib/rack/force_domain.rb
|
34
23
|
- lib/rack-force_domain.rb
|
35
|
-
has_rdoc: true
|
36
24
|
homepage: http://tomlea.co.uk/
|
37
25
|
licenses: []
|
38
|
-
|
26
|
+
metadata: {}
|
39
27
|
post_install_message:
|
40
|
-
rdoc_options:
|
28
|
+
rdoc_options:
|
41
29
|
- --main
|
42
30
|
- README.markdown
|
43
|
-
require_paths:
|
31
|
+
require_paths:
|
44
32
|
- lib
|
45
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
none: false
|
56
|
-
requirements:
|
57
|
-
- - ">="
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
hash: 3
|
60
|
-
segments:
|
61
|
-
- 0
|
62
|
-
version: "0"
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
63
43
|
requirements: []
|
64
|
-
|
65
44
|
rubyforge_project: rack-force_domain
|
66
|
-
rubygems_version:
|
45
|
+
rubygems_version: 2.0.14
|
67
46
|
signing_key:
|
68
|
-
specification_version:
|
47
|
+
specification_version: 4
|
69
48
|
summary: Force all visitors onto a single domain.
|
70
49
|
test_files: []
|
71
|
-
|