ssl_routes 0.0.9 → 0.1.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.
- data/lib/ssl_routes/{controller.rb → rails2.rb} +0 -1
- data/lib/ssl_routes/rails3.rb +84 -0
- data/lib/ssl_routes/version.rb +1 -1
- data/lib/ssl_routes.rb +3 -2
- metadata +8 -9
@@ -38,7 +38,6 @@ module SslRoutes::Controller
|
|
38
38
|
private
|
39
39
|
|
40
40
|
def ensure_protocol
|
41
|
-
# ActionController::Routing::Routes.send :remove_recognize_optimized!
|
42
41
|
options = ActionController::Routing::Routes.recognize_path(
|
43
42
|
request.path,
|
44
43
|
ActionController::Routing::Routes.extract_request_environment(request)
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module SslRoutes
|
2
|
+
|
3
|
+
module ActionController
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.extend ClassMethods
|
7
|
+
base.send :include, InstanceMethods
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
|
12
|
+
def enforce_protocols(&block)
|
13
|
+
cattr_accessor :parameter, :secure_session, :enable_ssl
|
14
|
+
self.parameter = :protocol
|
15
|
+
self.secure_session = false
|
16
|
+
self.enable_ssl = false
|
17
|
+
yield self if block_given?
|
18
|
+
before_filter :ensure_protocol if self.enable_ssl
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
module InstanceMethods
|
24
|
+
|
25
|
+
def determine_protocols(options)
|
26
|
+
current = self.request.ssl? ? 'https' : 'http'
|
27
|
+
target = case options[self.parameter]
|
28
|
+
when String then options[self.parameter]
|
29
|
+
when TrueClass then 'https'
|
30
|
+
else 'http'
|
31
|
+
end
|
32
|
+
target = current if [:all, :both].include? options[self.parameter]
|
33
|
+
target = 'https' if self.secure_session && current_user
|
34
|
+
target = options[:protocol] if options[:protocol]
|
35
|
+
[ current, target.split(':').first ]
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def ensure_protocol
|
41
|
+
routes = Rails.application.routes
|
42
|
+
options = routes.recognize_path request.path, request.env
|
43
|
+
current, target = determine_protocols(options)
|
44
|
+
if current != target && !request.xhr? && request.get?
|
45
|
+
flash.keep
|
46
|
+
redirect_to "#{target}://#{request.host_with_port + request.fullpath}"
|
47
|
+
return false
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
module ActionDispatch
|
56
|
+
|
57
|
+
def self.included(base)
|
58
|
+
base.send :include, InstanceMethods
|
59
|
+
base.send :alias_method_chain, :url_for, :ssl_support
|
60
|
+
end
|
61
|
+
|
62
|
+
module InstanceMethods
|
63
|
+
|
64
|
+
def url_for_with_ssl_support(options)
|
65
|
+
if self.controller.enable_ssl
|
66
|
+
case options
|
67
|
+
when Hash
|
68
|
+
current, target = self.controller.determine_protocols(options)
|
69
|
+
if current != target
|
70
|
+
options.merge!({ :protocol => target, :only_path => false })
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
url_for_without_ssl_support(options)
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
ActionController::Base.send :include, SslRoutes::ActionController
|
84
|
+
ActionDispatch::Routing::UrlFor.send :include, SslRoutes::ActionDispatch
|
data/lib/ssl_routes/version.rb
CHANGED
data/lib/ssl_routes.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module SslRoutes
|
2
2
|
|
3
|
-
require 'ssl_routes/
|
4
|
-
require 'ssl_routes/
|
3
|
+
require 'ssl_routes/rails3' if ::Rails::VERSION::MAJOR == 3
|
4
|
+
require 'ssl_routes/rails2' if ::Rails::VERSION::MAJOR == 2
|
5
|
+
require 'ssl_routes/paperclip' if defined?( ::Paperclip )
|
5
6
|
|
6
7
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ssl_routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.9
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Cedric Howe
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-08-24 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: rails
|
@@ -24,7 +23,7 @@ dependencies:
|
|
24
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
27
|
-
- -
|
26
|
+
- - ">"
|
28
27
|
- !ruby/object:Gem::Version
|
29
28
|
hash: 5
|
30
29
|
segments:
|
@@ -42,12 +41,12 @@ extensions: []
|
|
42
41
|
extra_rdoc_files: []
|
43
42
|
|
44
43
|
files:
|
45
|
-
- lib/ssl_routes/controller.rb
|
46
44
|
- lib/ssl_routes/paperclip.rb
|
45
|
+
- lib/ssl_routes/rails2.rb
|
46
|
+
- lib/ssl_routes/rails3.rb
|
47
47
|
- lib/ssl_routes/version.rb
|
48
48
|
- lib/ssl_routes.rb
|
49
49
|
- test/test_helper.rb
|
50
|
-
has_rdoc: true
|
51
50
|
homepage: http://github.com/cedric/ssl_routes/
|
52
51
|
licenses: []
|
53
52
|
|
@@ -79,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
78
|
requirements: []
|
80
79
|
|
81
80
|
rubyforge_project: ssl_routes
|
82
|
-
rubygems_version: 1.
|
81
|
+
rubygems_version: 1.7.2
|
83
82
|
signing_key:
|
84
83
|
specification_version: 3
|
85
84
|
summary: Enforce SSL based on your Rails routes.
|