74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'app/models/active_session.rb', line 74
def self.set(user, request)
Gitlab::Redis::Sessions.with do |redis|
session_private_id = request.session.id.private_id
client = Gitlab::SafeDeviceDetector.new(request.user_agent)
timestamp = Time.current
expiry = Settings.gitlab['session_expire_delay'] * 60
active_user_session = new(
ip_address: request.remote_ip,
browser: client.name,
os: client.os_name,
device_name: client.device_name,
device_type: client.device_type,
created_at: user.current_sign_in_at || timestamp,
updated_at: timestamp,
session_private_id: session_private_id,
is_impersonated: request.session[:impersonator_id].present?,
admin_mode: Gitlab::Auth::CurrentUserMode.new(user, request.session).admin_mode?,
step_up_authenticated:
Feature.enabled?(:omniauth_step_up_auth_for_admin_mode, user) &&
::Gitlab::Auth::Oidc::StepUpAuthentication.succeeded?(request.session)
)
Gitlab::Instrumentation::RedisClusterValidator.allow_cross_slot_commands do
redis.pipelined do |pipeline|
pipeline.setex(
key_name(user.id, session_private_id),
expiry,
active_user_session.dump
)
pipeline.sadd?(
lookup_key_name(user.id),
session_private_id
)
end
end
end
end
|