Class: Gitlab::Auth::Activity

Inherits:
Object
  • Object
show all
Extended by:
Utils::StrongMemoize
Defined in:
lib/gitlab/auth/activity.rb

Overview

Metrics and logging for user authentication activity.

Constant Summary collapse

COUNTERS =
{
  user_authenticated: 'Counter of successful authentication events',
  user_unauthenticated: 'Counter of authentication failures',
  user_not_found: 'Counter of failed log-ins when user is unknown',
  user_password_invalid: 'Counter of failed log-ins with invalid password',
  user_session_override: 'Counter of manual log-ins and sessions overrides',
  user_session_destroyed: 'Counter of user sessions being destroyed',
  user_two_factor_authenticated: 'Counter of two factor authentications',
  user_sessionless_authentication: 'Counter of sessionless authentications',
  user_blocked: 'Counter of sign in attempts when user is blocked',
  user_csrf_token_invalid: 'Counter of CSRF token validation failures'
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ Activity

Returns a new instance of Activity.



24
25
26
# File 'lib/gitlab/auth/activity.rb', line 24

def initialize(opts)
  @opts = opts
end

Class Method Details

.each_counterObject



77
78
79
80
81
# File 'lib/gitlab/auth/activity.rb', line 77

def self.each_counter
  COUNTERS.each_pair do |metric, description|
    yield "#{metric}_counter", metric, description
  end
end

Instance Method Details

#user_authenticated!Object



39
40
41
42
43
44
45
46
# File 'lib/gitlab/auth/activity.rb', line 39

def user_authenticated!
  self.class.user_authenticated_counter_increment!

  case @opts[:message]
  when :two_factor_authenticated
    self.class.user_two_factor_authenticated_counter_increment!
  end
end

#user_authentication_failed!Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/gitlab/auth/activity.rb', line 28

def user_authentication_failed!
  self.class.user_unauthenticated_counter_increment!

  case @opts[:message]
  when :not_found_in_database
    self.class.user_not_found_counter_increment!
  when :invalid
    self.class.user_password_invalid_counter_increment!
  end
end

#user_blocked!Object



57
58
59
# File 'lib/gitlab/auth/activity.rb', line 57

def user_blocked!
  self.class.user_blocked_counter_increment!
end

#user_csrf_token_mismatch!Object



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/gitlab/auth/activity.rb', line 65

def user_csrf_token_mismatch!
  controller = @opts[:controller]
  controller_label = controller.class.name
  controller_label = 'other' unless controller_label == 'GraphqlController'

  session = controller.try(:request).try(:session)
  user_auth_type_label = session.try(:loaded?) ? 'session' : 'other'

  self.class.user_csrf_token_invalid_counter
    .increment(controller: controller_label, auth: user_auth_type_label)
end

#user_session_destroyed!Object



61
62
63
# File 'lib/gitlab/auth/activity.rb', line 61

def user_session_destroyed!
  self.class.user_session_destroyed_counter_increment!
end

#user_session_override!Object



48
49
50
51
52
53
54
55
# File 'lib/gitlab/auth/activity.rb', line 48

def user_session_override!
  self.class.user_session_override_counter_increment!

  case @opts[:message]
  when :sessionless_sign_in
    self.class.user_sessionless_authentication_counter_increment!
  end
end