42 lines
1.6 KiB
Ruby
42 lines
1.6 KiB
Ruby
class LoginSessionsController < ApplicationController
|
|
before_action :require_authentication
|
|
|
|
# "Your devices": every remembered browser for the signed-in user, with
|
|
# whichever one answered THIS request called out separately so the view
|
|
# can label it "this device" instead of just another row in the list.
|
|
def index
|
|
render(:index, locals: {
|
|
current_session: current_login_session,
|
|
other_sessions: other_login_sessions.order(:created_at, :desc).to_a,
|
|
notice: flash[:notice]
|
|
})
|
|
end
|
|
|
|
# Revokes one remembered browser. revoke_login_session! already checks
|
|
# ownership (a foreign id, or one belonging to someone else, is a no-op),
|
|
# so there is nothing else to authorize here.
|
|
def destroy
|
|
flash[:notice] = if revoke_login_session!(params['id'])
|
|
t('login_sessions.revoked_notice')
|
|
else
|
|
t('login_sessions.not_found')
|
|
end
|
|
redirect url_for(:login_sessions)
|
|
end
|
|
|
|
def sign_out_others
|
|
sign_out_all_other_sessions
|
|
flash[:notice] = t('login_sessions.signed_out_others_notice')
|
|
redirect url_for(:login_sessions)
|
|
end
|
|
|
|
# "TestBrowser/1.0 from 203.0.113.7" - falls back to the generic
|
|
# "unknown browser"/"unknown address" strings for rows remembered before
|
|
# this metadata started being captured (a plain nil column, not a bug).
|
|
def device_detail_for(login_session)
|
|
t('login_sessions.device_detail',
|
|
user_agent: login_session.user_agent || t('login_sessions.unknown_user_agent'),
|
|
ip_address: login_session.ip_address || t('login_sessions.unknown_ip_address'))
|
|
end
|
|
end
|