diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/authenticated_system.rb | 20 |
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 @@ | |||
| 1 | module AuthenticatedSystem | 1 | module 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 -- |
