40 lines
931 B
Ruby
40 lines
931 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
class AnonymousSession
|
||
|
def initialize(remote_ip, session_id: nil)
|
||
|
@remote_ip = remote_ip
|
||
|
@session_id = session_id
|
||
|
end
|
||
|
|
||
|
def store_session_id_per_ip
|
||
|
Gitlab::Redis::SharedState.with do |redis|
|
||
|
redis.pipelined do
|
||
|
redis.sadd(session_lookup_name, session_id)
|
||
|
redis.expire(session_lookup_name, 24.hours)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def stored_sessions
|
||
|
Gitlab::Redis::SharedState.with do |redis|
|
||
|
redis.scard(session_lookup_name)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def cleanup_session_per_ip_entries
|
||
|
Gitlab::Redis::SharedState.with do |redis|
|
||
|
redis.srem(session_lookup_name, session_id)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
attr_reader :remote_ip, :session_id
|
||
|
|
||
|
def session_lookup_name
|
||
|
@session_lookup_name ||= "#{Gitlab::Redis::SharedState::IP_SESSIONS_LOOKUP_NAMESPACE}:#{remote_ip}"
|
||
|
end
|
||
|
end
|
||
|
end
|