ixtlan-session-timeout 0.1.1 → 0.2.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/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Kristian Meier
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -9,11 +9,12 @@ module Ixtlan
9
9
  app.config.class.class_eval do
10
10
  attr_accessor :idle_session_timeout
11
11
  end
12
- app.config.idle_session_timeout = 5 #minutes
12
+ app.config.idle_session_timeout = 15 #minutes
13
13
  end
14
14
 
15
15
  config.after_initialize do |app|
16
16
  ::ActionController::Base.send(:include, Ixtlan::Sessions::Timeout)
17
+ ::ActionController::Base.send(:before_filter, :check_session)
17
18
  end
18
19
  end
19
20
  end
@@ -23,21 +23,24 @@ module Ixtlan
23
23
  session_timeout
24
24
  return false
25
25
  end
26
-
26
+
27
+ unless respond_to? :logged_in?
28
+ def logged_in?
29
+ respond_to?(:current_user) && send(:current_user)
30
+ end
31
+ end
32
+
27
33
  protected
28
34
 
29
35
  def check_session_expiry
30
- puts "- - - -"
31
- p session[:expires_at].asctime if session[:expires_at]
32
- p DateTime.now.asctime
33
- p ( session[:expires_at] && session[:expires_at] < DateTime.now)
36
+ return true unless logged_in?
34
37
  if session[:expires_at] && session[:expires_at] < DateTime.now
35
38
  # Session has expired.
36
39
  session_log("session timeout")
37
40
  expire_session
38
41
  else
39
42
  # Assign a new expiry time
40
- session[:expires_at] = session_idle_timeout.minutes.from_now
43
+ session[:expires_at] = idle_session_timeout.minutes.from_now
41
44
  return true
42
45
  end
43
46
  end
@@ -45,6 +48,7 @@ p ( session[:expires_at] && session[:expires_at] < DateTime.now)
45
48
  # IP binding is not very useful in the wild since some ISP use
46
49
  # a different IP for each request, i.e. the session uses many IPs
47
50
  def check_session_ip_binding
51
+ return true unless logged_in?
48
52
  if !session[:session_ip].nil? && session[:session_ip] != request.headers['REMOTE_ADDR']
49
53
  # client IP has changed
50
54
  session_log("IP changed from #{session[:session_ip]} to #{request.headers['REMOTE_ADDR']}")
@@ -57,10 +61,12 @@ p ( session[:expires_at] && session[:expires_at] < DateTime.now)
57
61
  end
58
62
 
59
63
  def check_session
64
+ return true unless logged_in?
60
65
  check_session_browser_signature && check_session_expiry
61
66
  end
62
67
 
63
68
  def check_session_browser_signature
69
+ return true unless logged_in?
64
70
  if !session[:session_browser_signature].nil? and session[:session_browser_signature] != retrieve_browser_signature
65
71
  # browser signature has changed
66
72
  session_log("browser signature changed from #{session[:session_browser_signature]} to #{retrieve_browser_signature}")
@@ -90,8 +96,8 @@ p ( session[:expires_at] && session[:expires_at] < DateTime.now)
90
96
  end
91
97
  end
92
98
 
93
- def session_idle_timeout
94
- Rails.configuration.session_idle_timeout
99
+ def idle_session_timeout
100
+ Rails.configuration.idle_session_timeout
95
101
  end
96
102
  end
97
103
  end
data/spec/timeout_spec.rb CHANGED
@@ -4,6 +4,8 @@ require 'date'
4
4
 
5
5
  class Controller
6
6
 
7
+ attr_accessor :current_user
8
+
7
9
  def logger
8
10
  @logger ||= Logger.new(STDOUT)
9
11
  end
@@ -52,7 +54,7 @@ class Rails
52
54
  self
53
55
  end
54
56
 
55
- def self.session_idle_timeout(val = nil)
57
+ def self.idle_session_timeout(val = nil)
56
58
  @val = MyDate.new(val) if val
57
59
  @val
58
60
  end
@@ -84,6 +86,7 @@ describe Ixtlan::Sessions::Timeout do
84
86
 
85
87
  before :each do
86
88
  @controller.session.clear
89
+ @controller.current_user = Object.new
87
90
  end
88
91
 
89
92
  it "should keep session when staying on same remote IP" do
@@ -107,7 +110,7 @@ describe Ixtlan::Sessions::Timeout do
107
110
  end
108
111
 
109
112
  it "should keep session if idle timeout is in the future" do
110
- Rails.configuration.session_idle_timeout(1)
113
+ Rails.configuration.idle_session_timeout(1)
111
114
  @controller.session.size.should == 0
112
115
  @controller.send(:check_session_expiry).should be_true
113
116
  @controller.session.size.should == 1
@@ -116,7 +119,7 @@ describe Ixtlan::Sessions::Timeout do
116
119
  end
117
120
 
118
121
  it "should kill session if idle timeout is in the past" do
119
- Rails.configuration.session_idle_timeout(-1)
122
+ Rails.configuration.idle_session_timeout(-1)
120
123
  @controller.session.size.should == 0
121
124
  # first the session has not expiration_date so it will be set
122
125
  @controller.send(:check_session_expiry).should be_true
@@ -126,9 +129,20 @@ describe Ixtlan::Sessions::Timeout do
126
129
  @controller.session.size.should == 0
127
130
  end
128
131
 
129
- it "should use the controller session_idle_timeout if overwritten" do
132
+ it "should leave session along if there is no current_user" do
133
+ @controller.current_user = nil
134
+ @controller.session.size.should == 0
135
+ @controller.send(:check_session_expiry).should be_true
136
+ @controller.session.size.should == 0
137
+ @controller.send(:check_session_browser_signature).should be_true
138
+ @controller.session.size.should == 0
139
+ @controller.send(:check_session_ip_binding).should be_true
140
+ @controller.session.size.should == 0
141
+ end
142
+
143
+ it "should use the controller idle_session_timeout if overwritten" do
130
144
  @controller.class.class_eval do
131
- def session_idle_timeout
145
+ def idle_session_timeout
132
146
  MyDate.new(1)
133
147
  end
134
148
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 1
9
- version: 0.1.1
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - mkristian
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-03-22 00:00:00 +05:30
17
+ date: 2011-04-03 00:00:00 +05:30
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -55,6 +55,7 @@ extensions: []
55
55
  extra_rdoc_files: []
56
56
 
57
57
  files:
58
+ - MIT-LICENSE
58
59
  - lib/ixtlan-session-timeout.rb
59
60
  - lib/ixtlan/sessions/timeout.rb
60
61
  - lib/ixtlan/sessions/railtie.rb
@@ -64,9 +65,8 @@ homepage: http://github.com/mkristian/ixtlan-session-timeout
64
65
  licenses:
65
66
  - MIT-LICENSE
66
67
  post_install_message:
67
- rdoc_options:
68
- - --main
69
- - README.textile
68
+ rdoc_options: []
69
+
70
70
  require_paths:
71
71
  - lib
72
72
  required_ruby_version: !ruby/object:Gem::Requirement