Skip to content

Commit cb0e9ad

Browse files
committed
Update authentication flow for devise contrib
1 parent 8cb1d5c commit cb0e9ad

File tree

5 files changed

+267
-188
lines changed

5 files changed

+267
-188
lines changed

lib/datadog/appsec/contrib/devise/patcher/authenticatable_patch.rb

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# frozen_string_literal: true
22

3+
require_relative '../configuration'
34
require_relative '../tracking'
45
require_relative '../resource'
56
require_relative '../event'
@@ -14,33 +15,27 @@ module AuthenticatablePatch
1415
# rubocop:disable Metrics/MethodLength
1516
def validate(resource, &block)
1617
result = super
17-
return result unless AppSec.enabled?
18-
return result if @_datadog_skip_track_login_event
19-
20-
track_user_events_configuration = Datadog.configuration.appsec.track_user_events
21-
22-
return result unless track_user_events_configuration.enabled
23-
24-
automated_track_user_events_mode = track_user_events_configuration.mode
2518

26-
appsec_context = Datadog::AppSec.active_context
27-
28-
return result unless appsec_context
19+
return result unless AppSec.enabled?
20+
return result if @_datadog_appsec_skip_track_login_event
21+
return result unless Configuration.auto_user_instrumentation_enabled?
22+
return result unless AppSec.active_context
2923

3024
devise_resource = resource ? Resource.new(resource) : nil
31-
32-
event_information = Event.new(devise_resource, automated_track_user_events_mode)
25+
event_information = Event.new(devise_resource, Configuration.auto_user_instrumentation_mode)
3326

3427
if result
3528
if event_information.user_id
36-
Datadog.logger.debug { 'User Login Event success' }
29+
Datadog.logger.debug { 'AppSec: User successful login event' }
3730
else
38-
Datadog.logger.debug { 'User Login Event success, but can\'t extract user ID. Tracking empty event' }
31+
Datadog.logger.debug do
32+
"AppSec: User successful login event, but can't extract user ID. Tracking empty event"
33+
end
3934
end
4035

4136
Tracking.track_login_success(
42-
appsec_context.trace,
43-
appsec_context.span,
37+
AppSec.active_context.trace,
38+
AppSec.active_context.span,
4439
user_id: event_information.user_id,
4540
**event_information.to_h
4641
)
@@ -52,15 +47,15 @@ def validate(resource, &block)
5247

5348
if resource
5449
user_exists = true
55-
Datadog.logger.debug { 'User Login Event failure users exists' }
50+
Datadog.logger.debug { 'AppSec: User failed login event, but user exists' }
5651
else
5752
user_exists = false
58-
Datadog.logger.debug { 'User Login Event failure user do not exists' }
53+
Datadog.logger.debug { 'AppSec: User failed login event and user does not exist' }
5954
end
6055

6156
Tracking.track_login_failure(
62-
appsec_context.trace,
63-
appsec_context.span,
57+
AppSec.active_context.trace,
58+
AppSec.active_context.span,
6459
user_id: event_information.user_id,
6560
user_exists: user_exists,
6661
**event_information.to_h

lib/datadog/appsec/contrib/devise/patcher/rememberable_patch.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ module Patcher
99
# Rememberable strategy as Login Success events.
1010
module RememberablePatch
1111
def validate(*args)
12-
@_datadog_skip_track_login_event = true
12+
@_datadog_appsec_skip_track_login_event = true
1313

1414
super
1515
end
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module Datadog
2+
module AppSec
3+
module Contrib
4+
module Devise
5+
module Configuration
6+
def self?.auto_user_instrumentation_enabled?: () -> bool
7+
8+
def self?.auto_user_instrumentation_mode: () -> ::String
9+
end
10+
end
11+
end
12+
end
13+
end

0 commit comments

Comments
 (0)