Module: SessionsHelper
- Includes:
- Gitlab::Utils::StrongMemoize
- Included in:
- ApplicationController, Gitlab::BaseDoorkeeperController
- Defined in:
- app/helpers/sessions_helper.rb
Instance Method Summary collapse
- #ensure_authenticated_session_time ⇒ Object
-
#limit_session_time ⇒ Object
By default, all sessions are given the same expiration time configured in the session store (e.g. 1 week).
- #obfuscated_email(email) ⇒ Object
- #recently_confirmed_com? ⇒ Boolean
- #remember_me_enabled? ⇒ Boolean
- #set_session_time(expiry_s) ⇒ Object
- #unconfirmed_email? ⇒ Boolean
- #unconfirmed_verification_email?(user) ⇒ Boolean
- #verification_data(user) ⇒ Object
- #verification_email(user) ⇒ Object
Instance Method Details
#ensure_authenticated_session_time ⇒ Object
28 29 30 |
# File 'app/helpers/sessions_helper.rb', line 28 def ensure_authenticated_session_time set_session_time(nil) end |
#limit_session_time ⇒ Object
By default, all sessions are given the same expiration time configured in the session store (e.g. 1 week). However, unauthenticated users can generate a lot of sessions, primarily for CSRF verification. It makes sense to reduce the TTL for unauthenticated to something much lower than the default (e.g. 1 hour) to limit Redis memory. In addition, Rails creates a new session after login, so the short TTL doesn’t even need to be extended.
24 25 26 |
# File 'app/helpers/sessions_helper.rb', line 24 def limit_session_time set_session_time(Settings.gitlab['unauthenticated_session_expire_delay']) end |
#obfuscated_email(email) ⇒ Object
43 44 45 46 |
# File 'app/helpers/sessions_helper.rb', line 43 def (email) # Moved to Gitlab::Utils::Email in 15.9 Gitlab::Utils::Email.(email) end |
#recently_confirmed_com? ⇒ Boolean
6 7 8 9 10 11 |
# File 'app/helpers/sessions_helper.rb', line 6 def recently_confirmed_com? strong_memoize(:recently_confirmed_com) do ::Gitlab.com? && !!flash[:notice]&.include?(t(:confirmed, scope: [:devise, :confirmations])) end end |
#remember_me_enabled? ⇒ Boolean
48 49 50 |
# File 'app/helpers/sessions_helper.rb', line 48 def remember_me_enabled? Gitlab::CurrentSettings.remember_me_enabled? end |
#set_session_time(expiry_s) ⇒ Object
32 33 34 35 36 37 38 39 40 41 |
# File 'app/helpers/sessions_helper.rb', line 32 def set_session_time(expiry_s) # Rack sets this header, but not all tests may have it: https://github.com/rack/rack/blob/fdcd03a3c5a1c51d1f96fc97f9dfa1a9deac0c77/lib/rack/session/abstract/id.rb#L251-L259 return unless request.env['rack.session.options'] # This works because Rack uses these options every time a request is handled, and redis-store # uses the Rack setting first: # 1. https://github.com/rack/rack/blob/fdcd03a3c5a1c51d1f96fc97f9dfa1a9deac0c77/lib/rack/session/abstract/id.rb#L342 # 2. https://github.com/redis-store/redis-store/blob/3acfa95f4eb6260c714fdb00a3d84be8eedc13b2/lib/redis/store/ttl.rb#L32 request.env['rack.session.options'][:expire_after] = expiry_s end |
#unconfirmed_email? ⇒ Boolean
13 14 15 |
# File 'app/helpers/sessions_helper.rb', line 13 def unconfirmed_email? flash[:alert] == t(:unconfirmed, scope: [:devise, :failure]) end |
#unconfirmed_verification_email?(user) ⇒ Boolean
52 53 54 55 |
# File 'app/helpers/sessions_helper.rb', line 52 def unconfirmed_verification_email?(user) token_valid_from = ::Users::EmailVerification::ValidateTokenService::TOKEN_VALID_FOR_MINUTES.minutes.ago user.email_reset_offered_at.nil? && user.pending_reconfirmation? && user.confirmation_sent_at >= token_valid_from end |
#verification_data(user) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'app/helpers/sessions_helper.rb', line 61 def verification_data(user) { obfuscated_email: (verification_email(user)), verify_path: session_path(:user), resend_path: users_resend_verification_code_path, offer_email_reset: user.email_reset_offered_at.nil?.to_s, update_email_path: users_update_email_path } end |
#verification_email(user) ⇒ Object
57 58 59 |
# File 'app/helpers/sessions_helper.rb', line 57 def verification_email(user) unconfirmed_verification_email?(user) ? user.unconfirmed_email : user.email end |