From ed271fce82a4db4621c6c3cacc6191869d41f67b Mon Sep 17 00:00:00 2001 From: Matt Young Date: Wed, 7 Aug 2024 16:20:23 -0500 Subject: [PATCH] Log changes to users and sending email Work on #61 --- app/Actions/Fortify/CreateNewUser.php | 23 +++++++++--- app/Actions/Fortify/ResetUserPassword.php | 7 ++++ app/Actions/Fortify/UpdateUserPassword.php | 9 +++++ .../Fortify/UpdateUserProfileInformation.php | 24 +++++++++++++ app/Listeners/LogSendingEmail.php | 35 +++++++++++++++++++ 5 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 app/Listeners/LogSendingEmail.php diff --git a/app/Actions/Fortify/CreateNewUser.php b/app/Actions/Fortify/CreateNewUser.php index 36fa9a9..6adb624 100644 --- a/app/Actions/Fortify/CreateNewUser.php +++ b/app/Actions/Fortify/CreateNewUser.php @@ -2,15 +2,14 @@ namespace App\Actions\Fortify; -use A6digital\Image\DefaultProfileImage; +use App\Models\AuditLogEntry; use App\Models\User; use App\Rules\ValidRegistrationCode; -use App\Settings; use Illuminate\Support\Facades\Hash; -use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; use Laravel\Fortify\Contracts\CreatesNewUsers; + use function mb_substr; class CreateNewUser implements CreatesNewUsers @@ -41,9 +40,10 @@ class CreateNewUser implements CreatesNewUsers 'password' => $this->passwordRules(), ])->validate(); - $profileImageURL = 'https://ui-avatars.com/api/?name=' . mb_substr($input['first_name'],0,1) . '+' . mb_substr($input['last_name'],0,1); + $profileImageURL = 'https://ui-avatars.com/api/?name='.mb_substr($input['first_name'], 0, + 1).'+'.mb_substr($input['last_name'], 0, 1); - return User::create([ + $user = User::create([ 'first_name' => $input['first_name'], 'last_name' => $input['last_name'], 'judging_preference' => $input['judging_preference'], @@ -52,5 +52,18 @@ class CreateNewUser implements CreatesNewUsers 'profile_image_url' => $profileImageURL, 'password' => Hash::make($input['password']), ]); + + $message = 'New User Registered - '.$input['email'] + .'
Name: '.$input['first_name'].' '.$input['last_name'] + .'
Judging Pref: '.$input['judging_preference'] + .'
Cell Phone: '.$input['cell_phone']; + AuditLogEntry::create([ + 'user' => $input['email'], + 'ip_address' => request()->ip(), + 'message' => $message, + 'affected' => ['users' => $user->id], + ]); + + return $user; } } diff --git a/app/Actions/Fortify/ResetUserPassword.php b/app/Actions/Fortify/ResetUserPassword.php index 7a57c50..939cf6e 100644 --- a/app/Actions/Fortify/ResetUserPassword.php +++ b/app/Actions/Fortify/ResetUserPassword.php @@ -2,6 +2,7 @@ namespace App\Actions\Fortify; +use App\Models\AuditLogEntry; use App\Models\User; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; @@ -25,5 +26,11 @@ class ResetUserPassword implements ResetsUserPasswords $user->forceFill([ 'password' => Hash::make($input['password']), ])->save(); + AuditLogEntry::create([ + 'user' => auth()->user()->email, + 'ip_address' => request()->ip(), + 'message' => 'Reset Password', + 'affected' => ['users' => [$user->id]], + ]); } } diff --git a/app/Actions/Fortify/UpdateUserPassword.php b/app/Actions/Fortify/UpdateUserPassword.php index 8ce1488..12dd295 100644 --- a/app/Actions/Fortify/UpdateUserPassword.php +++ b/app/Actions/Fortify/UpdateUserPassword.php @@ -2,11 +2,14 @@ namespace App\Actions\Fortify; +use App\Models\AuditLogEntry; use App\Models\User; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Laravel\Fortify\Contracts\UpdatesUserPasswords; +use function auth; + class UpdateUserPassword implements UpdatesUserPasswords { use PasswordValidationRules; @@ -28,5 +31,11 @@ class UpdateUserPassword implements UpdatesUserPasswords $user->forceFill([ 'password' => Hash::make($input['password']), ])->save(); + AuditLogEntry::create([ + 'user' => auth()->user()->email, + 'ip_address' => request()->ip(), + 'message' => 'Changed Password', + 'affected' => ['users' => [$user->id]], + ]); } } diff --git a/app/Actions/Fortify/UpdateUserProfileInformation.php b/app/Actions/Fortify/UpdateUserProfileInformation.php index 5a5e1c9..2a56ab6 100644 --- a/app/Actions/Fortify/UpdateUserProfileInformation.php +++ b/app/Actions/Fortify/UpdateUserProfileInformation.php @@ -2,6 +2,7 @@ namespace App\Actions\Fortify; +use App\Models\AuditLogEntry; use App\Models\User; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Support\Facades\Validator; @@ -44,6 +45,16 @@ class UpdateUserProfileInformation implements UpdatesUserProfileInformation 'email' => $input['email'], ])->save(); } + $message = 'Updated user #'.$user->id.' - '.$user->email + .'
Name: '.$user->full_name() + .'
Judging Pref: '.$user->judging_preference + .'
Cell Phone: '.$user->cell_phone; + AuditLogEntry::create([ + 'user' => auth()->user()->email, + 'ip_address' => request()->ip(), + 'message' => $message, + 'affected' => ['users' => [$user->id]], + ]); } /** @@ -53,6 +64,7 @@ class UpdateUserProfileInformation implements UpdatesUserProfileInformation */ protected function updateVerifiedUser(User $user, array $input): void { + $oldEmail = $user->email; $user->forceFill([ 'first_name' => $input['first_name'], 'last_name' => $input['last_name'], @@ -61,6 +73,18 @@ class UpdateUserProfileInformation implements UpdatesUserProfileInformation 'email' => $input['email'], 'email_verified_at' => null, ])->save(); + $user->refresh(); + $message = 'Updated user #'.$user->id.' - '.$oldEmail + .'
Name: '.$user->full_name() + .'
Email: '.$user->email + .'
Judging Pref: '.$user->judging_preference + .'
Cell Phone: '.$user->cell_phone; + AuditLogEntry::create([ + 'user' => auth()->user()->email, + 'ip_address' => request()->ip(), + 'message' => $message, + 'affected' => ['users' => [$user->id]], + ]); $user->sendEmailVerificationNotification(); } diff --git a/app/Listeners/LogSendingEmail.php b/app/Listeners/LogSendingEmail.php new file mode 100644 index 0000000..d858f4e --- /dev/null +++ b/app/Listeners/LogSendingEmail.php @@ -0,0 +1,35 @@ +message->getTo()[0]->getAddress()); + $subject = $event->message->getSubject(); + $message = 'Sent email to '.$email_to.'
Subject: '.$subject; + AuditLogEntry::create([ + 'user' => auth()->user()->email ?? 'none', + 'ip_address' => request()->ip(), + 'message' => $message, + ]); + + } +}