dfcf4cf5f1
Add method to store session ids by ip Add new specs for storing session ids Add cleaning up records after login Add retrieving anonymous sessions Add login recaptcha setting Add new setting to sessions controller Add conditions for showing captcha Add sessions controller specs Add admin settings specs for login protection Add new settings to api Add stub to devise spec Add new translation key Add cr remarks Rename class call Add cr remarks Change if-clause for consistency Add cr remarks Add code review remarks Refactor AnonymousSession class Add changelog entry Move AnonymousSession class to lib Move store unauthenticated sessions to sessions controller Move link to recaptcha info Regenerate text file Improve copy on the spam page Change action filter for storing anonymous sessions Fix rubocop offences Add code review remarks
39 lines
931 B
Ruby
39 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
|