ssl_routes 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -1,5 +1,5 @@
1
1
  module SslRoutes
2
2
 
3
- VERSION = '0.0.9'
3
+ VERSION = '0.1.0'
4
4
 
5
5
  end
data/lib/ssl_routes.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module SslRoutes
2
2
 
3
- require 'ssl_routes/controller'
4
- require 'ssl_routes/paperclip' if defined?( Paperclip )
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: 13
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 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-07-01 00:00:00 -04:00
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.4.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.