rack-ssl-enforcer 0.1.6 → 0.1.8

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.
data/README.rdoc CHANGED
@@ -4,17 +4,18 @@ Rack::SslEnforcer is a simple Rack middleware to enforce ssl connections
4
4
 
5
5
  == Installation
6
6
 
7
- sudo gem install rack-ssl-enforcer -s http://gemcutter.org
7
+ gem install rack-ssl-enforcer
8
8
 
9
9
  == Usage
10
10
 
11
11
  require 'rack-ssl-enforcer'
12
12
  use Rack::SslEnforcer
13
13
 
14
- This will redirect all plain-text requests to SSL. Rack::SslEnforcer accepts two params, :redirect_to and :message.
14
+ This will redirect all requests to SSL. Rack::SslEnforcer accepts params:
15
+
15
16
  You might need the :redirect_to option if the requested URL can't be determined (e.g. if using a proxy).
16
17
 
17
- use Rack::SslEnforcer, :redirect_to => 'https://example.org', :message => 'R-R-R-Redirecting...'
18
+ use Rack::SslEnforcer, :redirect_to => 'https://example.org'
18
19
 
19
20
  You can also define specifics regex pattern or path to redirect.
20
21
 
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class SslEnforcer
3
- VERSION = "0.1.6"
3
+ VERSION = "0.1.8"
4
4
  end
5
5
  end
@@ -0,0 +1,47 @@
1
+ module Rack
2
+ class SslEnforcer
3
+
4
+ def initialize(app, options = {})
5
+ @app, @options = app, options
6
+ end
7
+
8
+ def call(env)
9
+ @req = Rack::Request.new(env)
10
+ if enforce_ssl?(env)
11
+ scheme = 'https' unless ssl_request?(env)
12
+ elsif ssl_request?(env) && @options[:strict]
13
+ scheme = 'http'
14
+ end
15
+
16
+ if scheme
17
+ location = @options[:redirect_to] || @req.url.gsub(/^https?/, scheme)
18
+ body = "<html><body>You are being <a href=\"#{location}\">redirected</a>.</body></html>"
19
+ [301, { 'Content-Type' => 'text/html', 'Location' => location }, [body]]
20
+ else
21
+ @app.call(env)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def ssl_request?(env)
28
+ (env['HTTP_X_FORWARDED_PROTO'] || @req.scheme) == 'https'
29
+ end
30
+
31
+ def enforce_ssl?(env)
32
+ if @options[:only]
33
+ rules = [@options[:only]].flatten
34
+ rules.any? do |pattern|
35
+ if pattern.is_a?(Regexp)
36
+ @req.path =~ pattern
37
+ else
38
+ @req.path[0,pattern.length] == pattern
39
+ end
40
+ end
41
+ else
42
+ true
43
+ end
44
+ end
45
+
46
+ end
47
+ end
@@ -1,48 +1 @@
1
- module Rack
2
- class SslEnforcer
3
-
4
- def initialize(app, options = {})
5
- @app, @options = app, options
6
- end
7
-
8
- def call(env)
9
- if enforce_ssl?(env)
10
- scheme = 'https' unless ssl_request?(env)
11
- elsif ssl_request?(env) && @options[:strict]
12
- scheme = 'http'
13
- end
14
-
15
- if scheme
16
- @options[:redirect_to] ||= Rack::Request.new(env).url
17
- @options[:redirect_to].gsub!(/^#{scheme == "https" ? 'http' : 'https'}:/, "#{scheme}:")
18
- @options[:message] ||= "You are being redirected to #{@options[:redirect_to]}."
19
- [301, { 'Location' => @options[:redirect_to] }, [@options[:message]].flatten]
20
- else
21
- @app.call(env)
22
- end
23
- end
24
-
25
- private
26
-
27
- def ssl_request?(env)
28
- (env['HTTP_X_FORWARDED_PROTO'] || env['rack.url_scheme']) == 'https'
29
- end
30
-
31
- def enforce_ssl?(env)
32
- path = env['PATH_INFO']
33
- if @options[:only]
34
- rules = [@options[:only]].flatten
35
- rules.any? do |pattern|
36
- if pattern.is_a?(Regexp)
37
- path =~ pattern
38
- else
39
- path[0,pattern.length] == pattern
40
- end
41
- end
42
- else
43
- true
44
- end
45
- end
46
-
47
- end
48
- end
1
+ require 'rack/ssl-enforcer'
metadata CHANGED
@@ -1,21 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-ssl-enforcer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 6
10
- version: 0.1.6
9
+ - 8
10
+ version: 0.1.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Matthies
14
+ - Thibaud Guillaume-Gentil
14
15
  autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-09-01 00:00:00 +02:00
19
+ date: 2010-09-10 00:00:00 +02:00
19
20
  default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
@@ -24,7 +25,7 @@ dependencies:
24
25
  requirement: &id001 !ruby/object:Gem::Requirement
25
26
  none: false
26
27
  requirements:
27
- - - ">="
28
+ - - ~>
28
29
  - !ruby/object:Gem::Version
29
30
  hash: 23
30
31
  segments:
@@ -66,9 +67,26 @@ dependencies:
66
67
  version: 1.2.0
67
68
  type: :development
68
69
  version_requirements: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ name: rack-test
72
+ prerelease: false
73
+ requirement: &id004 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 0
81
+ - 5
82
+ - 4
83
+ version: 0.5.4
84
+ type: :development
85
+ version_requirements: *id004
69
86
  description: Rack::SslEnforcer is a simple Rack middleware to enforce ssl connections
70
87
  email:
71
88
  - tm@mit2m.de
89
+ - thibaud@thibaud.me
72
90
  executables: []
73
91
 
74
92
  extensions: []
@@ -76,7 +94,8 @@ extensions: []
76
94
  extra_rdoc_files: []
77
95
 
78
96
  files:
79
- - lib/rack-ssl-enforcer/version.rb
97
+ - lib/rack/ssl-enforcer/version.rb
98
+ - lib/rack/ssl-enforcer.rb
80
99
  - lib/rack-ssl-enforcer.rb
81
100
  - LICENSE
82
101
  - README.rdoc