diff options
| author | erdgeist <erdgeist@erdgeist.org> | 2026-07-24 17:20:41 +0200 |
|---|---|---|
| committer | erdgeist <erdgeist@erdgeist.org> | 2026-07-24 17:20:41 +0200 |
| commit | d5883869e97244335370d54e21ef46b3f1885899 (patch) | |
| tree | 4575a24150f4c2fa98de54fdd556132f0aa0ff8c /app/controllers | |
| parent | 0d2a8e4b61f4b79507519c73f127b7ab883d853c (diff) | |
Give all sessions a uniform absolute lifetime of one week
Enforced at restore via a login-time stamp, written only at genuine
logins so the limit stays absolute rather than sliding. The cookie
name rotation logs everyone out once at deploy. Second-factor users
are deliberately not treated worse than password-only ones.
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/otp_challenges_controller.rb | 1 | ||||
| -rw-r--r-- | app/controllers/sessions_controller.rb | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/app/controllers/otp_challenges_controller.rb b/app/controllers/otp_challenges_controller.rb index 892503a8..e31c36ca 100644 --- a/app/controllers/otp_challenges_controller.rb +++ b/app/controllers/otp_challenges_controller.rb | |||
| @@ -27,6 +27,7 @@ class OtpChallengesController < ApplicationController | |||
| 27 | return_to = session[:return_to] | 27 | return_to = session[:return_to] |
| 28 | reset_session | 28 | reset_session |
| 29 | self.current_user = user | 29 | self.current_user = user |
| 30 | session[:logged_in_at] = Time.now.to_i | ||
| 30 | flash[:notice] = "Logged in successfully" | 31 | flash[:notice] = "Logged in successfully" |
| 31 | redirect_to safe_return_to(return_to, :default => admin_path) | 32 | redirect_to safe_return_to(return_to, :default => admin_path) |
| 32 | else | 33 | else |
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index f0d5cf9b..49d33810 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb | |||
| @@ -29,6 +29,8 @@ class SessionsController < ApplicationController | |||
| 29 | redirect_to new_otp_challenge_path | 29 | redirect_to new_otp_challenge_path |
| 30 | else | 30 | else |
| 31 | self.current_user = user | 31 | self.current_user = user |
| 32 | session[:logged_in_at] = Time.now.to_i | ||
| 33 | |||
| 32 | if user.otp_required? | 34 | if user.otp_required? |
| 33 | flash[:error] = "Your account requires a second factor -- set it up now." | 35 | flash[:error] = "Your account requires a second factor -- set it up now." |
| 34 | redirect_to edit_user_path(user) | 36 | redirect_to edit_user_path(user) |
