Add activity logging for authentication events

This commit is contained in:
DaneEveritt 2022-05-28 17:03:58 -04:00
parent 5bb66a00d8
commit 0999ad7ff0
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
11 changed files with 179 additions and 18 deletions

View file

@ -0,0 +1,40 @@
<?php
namespace Pterodactyl\Listeners\Auth;
use Pterodactyl\Facades\Activity;
use Illuminate\Auth\Events\Login;
use Illuminate\Auth\Events\Failed;
use Illuminate\Contracts\Events\Dispatcher;
use Pterodactyl\Extensions\Illuminate\Events\Contracts\SubscribesToEvents;
class AuthenticationListener implements SubscribesToEvents
{
/**
* Handles an authentication event by logging the user and information about
* the request.
*
* @param \Illuminate\Auth\Events\Login|\Illuminate\Auth\Events\Failed $event
*/
public function handle($event): void
{
$activity = Activity::withRequestMetadata();
if ($event->user) {
$activity = $activity->subject($event->user);
}
if ($event instanceof Failed) {
foreach ($event->credentials as $key => $value) {
$activity = $activity->property($key, $value);
}
}
$activity->event($event instanceof Failed ? 'login.failed' : 'login.success')->log();
}
public function subscribe(Dispatcher $events): void
{
$events->listen(Failed::class, self::class);
$events->listen(Login::class, self::class);
}
}

View file

@ -0,0 +1,25 @@
<?php
namespace Pterodactyl\Listeners\Auth;
use Illuminate\Http\Request;
use Pterodactyl\Facades\Activity;
use Illuminate\Auth\Events\PasswordReset;
class PasswordResetListener
{
protected Request $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function handle(PasswordReset $event)
{
Activity::event('login.password-reset')
->withRequestMetadata()
->subject($event->user)
->log();
}
}

View file

@ -0,0 +1,17 @@
<?php
namespace Pterodactyl\Listeners\Auth;
use Pterodactyl\Facades\Activity;
use Pterodactyl\Events\Auth\ProvidedAuthenticationToken;
class TwoFactorListener
{
public function handle(ProvidedAuthenticationToken $event)
{
Activity::event($event->recovery ? 'login.recovery-token' : 'login.token')
->withRequestMetadata()
->subject($event->user)
->log();
}
}