Skip to content

Commit

Permalink
Set user on Laravel 4
Browse files Browse the repository at this point in the history
  • Loading branch information
estringana committed Feb 9, 2024
1 parent 238ff4f commit 91c325f
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 3 deletions.
33 changes: 32 additions & 1 deletion src/Integrations/Integrations/Laravel/LaravelIntegration.php
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ function ($This, $scope, $args) use ($integration) {
// Used by Laravel < 5.0
\DDTrace\hook_method(
'Illuminate\Auth\Guard',
'setUser',
'login',
function ($This, $scope, $args) use ($integration) {
$authClass = 'Illuminate\Auth\UserInterface';
if (
Expand All @@ -418,6 +418,7 @@ function ($This, $scope, $args) use ($integration) {
$metadata['email'] = $args[0]['email'];
}

\DDTrace\set_user($args[0]->getAuthIdentifier(), $metadata);
\datadog\appsec\track_user_login_success_event(
\method_exists($args[0], 'getAuthIdentifier') ? $args[0]->getAuthIdentifier() : '',
$metadata,
Expand All @@ -426,6 +427,35 @@ function ($This, $scope, $args) use ($integration) {
}
);

// Used by Laravel < 5.0
\DDTrace\hook_method(
'Illuminate\Auth\Guard',
'user',
null,
function ($This, $scope, $args, $user) use ($integration) {
$authClass = 'Illuminate\Auth\UserInterface';
if (
!function_exists('\datadog\appsec\track_user_login_success_event') ||
!isset($user) ||
!$user ||
!($user instanceof $authClass) ||
!\method_exists($user, 'getAuthIdentifier')
) {
return;
}

$metadata = [];
if (isset($user['name'])) {
$metadata['name'] = $user['name'];
}
if (isset($user['email'])) {
$metadata['email'] = $user['email'];
}

\DDTrace\set_user($user->getAuthIdentifier(), $metadata);
}
);

// Used by Laravel < 5.0
\DDTrace\hook_method(
'Illuminate\Auth\Guard',
Expand Down Expand Up @@ -461,6 +491,7 @@ function ($This, $scope, $args) use ($integration) {
}
);

// Used by Laravel >= 5.0
\DDTrace\hook_method(
'Illuminate\Auth\Events\Authenticated',
'__construct',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,9 @@ public function register()

return "registered";
}

public function behind_auth()
{
return "page behind auth";
}
}
4 changes: 4 additions & 0 deletions tests/Frameworks/Laravel/Version_4_2/app/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,7 @@
Route::get('/eloquent/refresh', 'EloquentTestController@refresh');
Route::get('/login/auth', 'LoginTestController@auth');
Route::get('/login/signup', 'LoginTestController@register');
Route::group(array('before' => 'auth'), function()
{
Route::get('/behind_auth', 'LoginTestController@behind_auth');
});
23 changes: 21 additions & 2 deletions tests/Integrations/Laravel/V4/LoginEventsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,20 @@ public function testUserLoginSuccessEvent()
$this->assertEquals('track_user_login_success_event', $events[0]['eventName']);
}

public function testUserLoginSuccessEvent()
public function testLoggedInCalls()
{
$id = 1234;
$name = 'someName';
$email = '[email protected]';
$this->createUser($id, $name, $email);

$this->login($email);
//First log in
$traces = $this->login($email);

$meta = $traces[0][0]['meta'];
$this->assertEquals($id, $meta['usr.id']);
$this->assertEquals($name, $meta['usr.name']);
$this->assertEquals($email, $meta['usr.email']);

$events = AppsecStatus::getInstance()->getEvents();
$this->assertEquals(1, count($events));
Expand All @@ -87,6 +93,19 @@ public function testUserLoginSuccessEvent()
$this->assertEquals($email, $events[0]['metadata']['email']);
$this->assertTrue($events[0]['automated']);
$this->assertEquals('track_user_login_success_event', $events[0]['eventName']);

//Now we are logged in lets do another call
AppsecStatus::getInstance()->setDefaults(); //Remove all events
$traces = $this->tracesFromWebRequest(function () {
$this->call(GetSpec::create('Behind auth', '/behind_auth'));
});

$events = AppsecStatus::getInstance()->getEvents();
$this->assertEquals(0, count($events)); //Auth does not generate appsec events
$meta = $traces[0][0]['meta'];
$this->assertEquals($id, $meta['usr.id']);
$this->assertEquals($name, $meta['usr.name']);
$this->assertEquals($email, $meta['usr.email']);
}

public function testUserLoginFailureEvent()
Expand Down

0 comments on commit 91c325f

Please sign in to comment.