summaryrefslogtreecommitdiff
path: root/lib/authenticated_system.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/authenticated_system.rb')
-rw-r--r--lib/authenticated_system.rb20
1 files changed, 19 insertions, 1 deletions
diff --git a/lib/authenticated_system.rb b/lib/authenticated_system.rb
index 9a351dde..04d8051f 100644
--- a/lib/authenticated_system.rb
+++ b/lib/authenticated_system.rb
@@ -1,6 +1,7 @@
1module AuthenticatedSystem 1module AuthenticatedSystem
2 SESSION_MAX_AGE = 7.days 2 SESSION_MAX_AGE = 7.days
3 ELEVATION_MAX_AGE = 30.minutes 3 ELEVATION_MAX_AGE = 30.minutes
4 MAX_ELEVATION_EXTENSIONS = 3
4 5
5 protected 6 protected
6 # Returns true or false if the user is logged in. 7 # Returns true or false if the user is logged in.
@@ -35,10 +36,26 @@ module AuthenticatedSystem
35 36
36 def elevate! 37 def elevate!
37 session[:elevated_at] = Time.now.to_i 38 session[:elevated_at] = Time.now.to_i
39 session[:elevation_extensions] = 0
40 end
41
42 def elevation_extensions_left
43 return 0 unless elevated?
44 MAX_ELEVATION_EXTENSIONS - session[:elevation_extensions].to_i
45 end
46
47 def renew_elevation!
48 return false unless elevated?
49 return false unless elevation_extensions_left > 0
50
51 session[:elevation_extensions] = session[:elevation_extensions].to_i + 1
52 session[:elevated_at] = Time.now.to_i
53 true
38 end 54 end
39 55
40 def drop_elevation! 56 def drop_elevation!
41 session.delete(:elevated_at) 57 session.delete(:elevated_at)
58 session.delete(:elevation_extensions)
42 end 59 end
43 60
44 # Check if the user is authorized 61 # Check if the user is authorized
@@ -113,7 +130,7 @@ module AuthenticatedSystem
113 # available as ActionView helper methods. 130 # available as ActionView helper methods.
114 def self.included(base) 131 def self.included(base)
115 base.send :helper_method, :current_user, :logged_in?, :authorized?, 132 base.send :helper_method, :current_user, :logged_in?, :authorized?,
116 :elevated?, :elevation_expires_at if base.respond_to? :helper_method 133 :elevated?, :elevation_expires_at, :elevation_extensions_left if base.respond_to? :helper_method
117 end 134 end
118 135
119 # 136 #
@@ -147,6 +164,7 @@ module AuthenticatedSystem
147 session[:user_id] = nil # keeps the session but kill our variable 164 session[:user_id] = nil # keeps the session but kill our variable
148 session.delete(:elevated_at) 165 session.delete(:elevated_at)
149 session.delete(:elevation_attempts) 166 session.delete(:elevation_attempts)
167 session.delete(:elevation_extensions)
150 end 168 end
151 169
152 # The session should only be reset at the tail end of a form POST -- 170 # The session should only be reset at the tail end of a form POST --