From 0e2e155cc627b7b52f4eae33de89aba4808aeeb2 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 22 Dec 2024 06:44:01 +0100 Subject: [PATCH] Expand notifications. --- app/Events/DetectedNewIPAddress.php | 4 +-- app/Handlers/Events/UserEventHandler.php | 5 ++-- app/Notifications/Admin/UserInvitation.php | 10 ++++++- app/Notifications/Admin/UserRegistration.php | 9 ++++++- .../Security/DisabledMFANotification.php | 8 +++++- .../Security/EnabledMFANotification.php | 8 +++++- .../Security/MFABackupFewLeftNotification.php | 8 +++++- .../Security/MFABackupNoLeftNotification.php | 8 +++++- .../MFAManyFailedAttemptsNotification.php | 8 +++++- .../MFAUsedBackupCodeNotification.php | 8 +++++- .../Security/NewBackupCodesNotification.php | 8 +++++- .../Security/UserFailedLoginAttempt.php | 8 +++++- app/Notifications/User/NewAccessToken.php | 9 ++++++- app/Notifications/User/UserLogin.php | 27 ++++++++++--------- app/Notifications/User/UserNewPassword.php | 9 ++++++- .../views/emails/invitation-created.blade.php | 6 +++++ resources/views/emails/new-ip.blade.php | 14 +++++----- .../emails/oauth-client-created.blade.php | 5 ++++ resources/views/emails/password.blade.php | 5 ++++ .../emails/security/disabled-mfa.blade.php | 5 ++++ .../emails/security/enabled-mfa.blade.php | 5 ++++ .../emails/security/failed-login.blade.php | 5 ++++ .../security/few-backup-codes.blade.php | 5 ++++ .../security/many-failed-attempts.blade.php | 5 ++++ .../security/new-backup-codes.blade.php | 5 ++++ .../emails/security/no-backup-codes.blade.php | 5 ++++ .../security/used-backup-code.blade.php | 5 ++++ .../views/emails/token-created.blade.php | 6 +++++ 28 files changed, 175 insertions(+), 38 deletions(-) diff --git a/app/Events/DetectedNewIPAddress.php b/app/Events/DetectedNewIPAddress.php index 6438b4c480..e473375768 100644 --- a/app/Events/DetectedNewIPAddress.php +++ b/app/Events/DetectedNewIPAddress.php @@ -34,15 +34,13 @@ class DetectedNewIPAddress extends Event { use SerializesModels; - public string $ipAddress; public User $user; /** * Create a new event instance. This event is triggered when a new user registers. */ - public function __construct(User $user, string $ipAddress) + public function __construct(User $user) { - $this->ipAddress = $ipAddress; $this->user = $user; } } diff --git a/app/Handlers/Events/UserEventHandler.php b/app/Handlers/Events/UserEventHandler.php index df7c94b7bd..43b4ae47d9 100644 --- a/app/Handlers/Events/UserEventHandler.php +++ b/app/Handlers/Events/UserEventHandler.php @@ -188,7 +188,6 @@ class UserEventHandler public function notifyNewIPAddress(DetectedNewIPAddress $event): void { $user = $event->user; - $ipAddress = $event->ipAddress; if ($user->hasRole('demo')) { return; // do not email demo user. @@ -203,7 +202,7 @@ class UserEventHandler foreach ($list as $index => $entry) { if (false === $entry['notified']) { try { - Notification::send($user, new UserLogin($ipAddress)); + Notification::send($user, new UserLogin()); } catch (\Exception $e) { // @phpstan-ignore-line $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { @@ -428,7 +427,7 @@ class UserEventHandler app('preferences')->setForUser($user, 'login_ip_history', $preference); if (false === $inArray && true === $send) { - event(new DetectedNewIPAddress($user, $ip)); + event(new DetectedNewIPAddress($user)); } } diff --git a/app/Notifications/Admin/UserInvitation.php b/app/Notifications/Admin/UserInvitation.php index 67fbc8fb33..88a51f691a 100644 --- a/app/Notifications/Admin/UserInvitation.php +++ b/app/Notifications/Admin/UserInvitation.php @@ -28,11 +28,13 @@ use FireflyIII\Models\InvitedUser; use FireflyIII\Notifications\Notifiables\OwnerNotifiable; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -66,8 +68,14 @@ class UserInvitation extends Notification */ public function toMail(OwnerNotifiable $notifiable) { + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); + + return (new MailMessage()) - ->markdown('emails.invitation-created', ['email' => $this->invitee->user->email, 'invitee' => $this->invitee->email]) + ->markdown('emails.invitation-created', ['email' => $this->invitee->user->email, 'invitee' => $this->invitee->email, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time]) ->subject((string) trans('email.invitation_created_subject')) ; } diff --git a/app/Notifications/Admin/UserRegistration.php b/app/Notifications/Admin/UserRegistration.php index 4865a0e4f5..b3410f2a29 100644 --- a/app/Notifications/Admin/UserRegistration.php +++ b/app/Notifications/Admin/UserRegistration.php @@ -27,12 +27,14 @@ namespace FireflyIII\Notifications\Admin; use FireflyIII\Notifications\Notifiables\OwnerNotifiable; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -66,8 +68,13 @@ class UserRegistration extends Notification */ public function toMail(OwnerNotifiable $notifiable) { + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); + return (new MailMessage()) - ->markdown('emails.registered-admin', ['email' => $this->user->email, 'id' => $this->user->id]) + ->markdown('emails.registered-admin', ['email' => $this->user->email, 'id' => $this->user->id, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time]) ->subject((string) trans('email.registered_subject_admin')) ; } diff --git a/app/Notifications/Security/DisabledMFANotification.php b/app/Notifications/Security/DisabledMFANotification.php index 55f2bfabc5..04c14fbdbf 100644 --- a/app/Notifications/Security/DisabledMFANotification.php +++ b/app/Notifications/Security/DisabledMFANotification.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\Security; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -60,8 +62,12 @@ class DisabledMFANotification extends Notification public function toMail(User $notifiable) { $subject = (string) trans('email.disabled_mfa_subject'); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); - return (new MailMessage())->markdown('emails.security.disabled-mfa', ['user' => $this->user])->subject($subject); + return (new MailMessage())->markdown('emails.security.disabled-mfa', ['user' => $this->user, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time])->subject($subject); } public function toNtfy(User $notifiable): Message diff --git a/app/Notifications/Security/EnabledMFANotification.php b/app/Notifications/Security/EnabledMFANotification.php index b72cf1f45c..428a1f1570 100644 --- a/app/Notifications/Security/EnabledMFANotification.php +++ b/app/Notifications/Security/EnabledMFANotification.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\Security; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -60,8 +62,12 @@ class EnabledMFANotification extends Notification public function toMail(User $notifiable) { $subject = (string) trans('email.enabled_mfa_subject'); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); - return (new MailMessage())->markdown('emails.security.enabled-mfa', ['user' => $this->user])->subject($subject); + return (new MailMessage())->markdown('emails.security.enabled-mfa', ['user' => $this->user, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time])->subject($subject); } public function toNtfy(User $notifiable): Message diff --git a/app/Notifications/Security/MFABackupFewLeftNotification.php b/app/Notifications/Security/MFABackupFewLeftNotification.php index 7f6b9a207b..f185770c14 100644 --- a/app/Notifications/Security/MFABackupFewLeftNotification.php +++ b/app/Notifications/Security/MFABackupFewLeftNotification.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\Security; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -62,8 +64,12 @@ class MFABackupFewLeftNotification extends Notification public function toMail(User $notifiable) { $subject = (string) trans('email.mfa_few_backups_left_subject', ['count' => $this->count]); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); - return (new MailMessage())->markdown('emails.security.few-backup-codes', ['user' => $this->user, 'count' => $this->count])->subject($subject); + return (new MailMessage())->markdown('emails.security.few-backup-codes', ['user' => $this->user, 'count' => $this->count, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time])->subject($subject); } /** diff --git a/app/Notifications/Security/MFABackupNoLeftNotification.php b/app/Notifications/Security/MFABackupNoLeftNotification.php index 58498206fc..24ccd134c0 100644 --- a/app/Notifications/Security/MFABackupNoLeftNotification.php +++ b/app/Notifications/Security/MFABackupNoLeftNotification.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\Security; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -60,8 +62,12 @@ class MFABackupNoLeftNotification extends Notification public function toMail(User $notifiable) { $subject = (string) trans('email.mfa_no_backups_left_subject'); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); - return (new MailMessage())->markdown('emails.security.no-backup-codes', ['user' => $this->user])->subject($subject); + return (new MailMessage())->markdown('emails.security.no-backup-codes', ['user' => $this->user, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time])->subject($subject); } /** diff --git a/app/Notifications/Security/MFAManyFailedAttemptsNotification.php b/app/Notifications/Security/MFAManyFailedAttemptsNotification.php index f5446f4519..b081ca2cbd 100644 --- a/app/Notifications/Security/MFAManyFailedAttemptsNotification.php +++ b/app/Notifications/Security/MFAManyFailedAttemptsNotification.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\Security; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -59,8 +61,12 @@ class MFAManyFailedAttemptsNotification extends Notification public function toMail(User $notifiable) { $subject = (string) trans('email.mfa_many_failed_subject', ['count' => $this->count]); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); - return (new MailMessage())->markdown('emails.security.many-failed-attempts', ['user' => $this->user, 'count' => $this->count])->subject($subject); + return (new MailMessage())->markdown('emails.security.many-failed-attempts', ['user' => $this->user, 'count' => $this->count, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time])->subject($subject); } /** diff --git a/app/Notifications/Security/MFAUsedBackupCodeNotification.php b/app/Notifications/Security/MFAUsedBackupCodeNotification.php index 56e61f9e98..6a073d8fc3 100644 --- a/app/Notifications/Security/MFAUsedBackupCodeNotification.php +++ b/app/Notifications/Security/MFAUsedBackupCodeNotification.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\Security; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -60,8 +62,12 @@ class MFAUsedBackupCodeNotification extends Notification public function toMail(User $notifiable) { $subject = (string) trans('email.used_backup_code_subject'); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); - return (new MailMessage())->markdown('emails.security.used-backup-code', ['user' => $this->user])->subject($subject); + return (new MailMessage())->markdown('emails.security.used-backup-code', ['user' => $this->user, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time])->subject($subject); } /** diff --git a/app/Notifications/Security/NewBackupCodesNotification.php b/app/Notifications/Security/NewBackupCodesNotification.php index 82719558da..e9b201f76f 100644 --- a/app/Notifications/Security/NewBackupCodesNotification.php +++ b/app/Notifications/Security/NewBackupCodesNotification.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\Security; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -60,8 +62,12 @@ class NewBackupCodesNotification extends Notification public function toMail(User $notifiable) { $subject = (string) trans('email.new_backup_codes_subject'); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); - return (new MailMessage())->markdown('emails.security.new-backup-codes', ['user' => $this->user])->subject($subject); + return (new MailMessage())->markdown('emails.security.new-backup-codes', ['user' => $this->user, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time])->subject($subject); } /** diff --git a/app/Notifications/Security/UserFailedLoginAttempt.php b/app/Notifications/Security/UserFailedLoginAttempt.php index adb6b4f99f..d44b6c674f 100644 --- a/app/Notifications/Security/UserFailedLoginAttempt.php +++ b/app/Notifications/Security/UserFailedLoginAttempt.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\Security; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -57,8 +59,12 @@ class UserFailedLoginAttempt extends Notification public function toMail(User $notifiable) { $subject = (string) trans('email.failed_login_subject'); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); - return (new MailMessage())->markdown('emails.security.failed-login', ['user' => $this->user])->subject($subject); + return (new MailMessage())->markdown('emails.security.failed-login', ['user' => $this->user, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time])->subject($subject); } /** diff --git a/app/Notifications/User/NewAccessToken.php b/app/Notifications/User/NewAccessToken.php index 4853ca760f..02624b317d 100644 --- a/app/Notifications/User/NewAccessToken.php +++ b/app/Notifications/User/NewAccessToken.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\User; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -54,8 +56,13 @@ class NewAccessToken extends Notification */ public function toMail(User $notifiable) { + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); + return (new MailMessage()) - ->markdown('emails.token-created') + ->markdown('emails.token-created', ['ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time]) ->subject((string) trans('email.access_token_created_subject')) ; } diff --git a/app/Notifications/User/UserLogin.php b/app/Notifications/User/UserLogin.php index f9e695dc87..7681b8fed8 100644 --- a/app/Notifications/User/UserLogin.php +++ b/app/Notifications/User/UserLogin.php @@ -33,6 +33,7 @@ use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -43,13 +44,6 @@ class UserLogin extends Notification { use Queueable; - private string $ip; - - public function __construct(string $ip) - { - $this->ip = $ip; - } - public function toArray(User $notifiable) { return [ @@ -61,21 +55,26 @@ class UserLogin extends Notification */ public function toMail(User $notifiable) { - $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); return (new MailMessage()) - ->markdown('emails.new-ip', ['time' => $time, 'ipAddress' => $this->ip, 'host' => Steam::getHostName($this->ip)]) + ->markdown('emails.new-ip', ['ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time]) ->subject((string) trans('email.login_from_new_ip')) ; } public function toNtfy(User $notifiable): Message { + $ip = Request::ip(); + $host = Steam::getHostName($ip); $settings = ReturnsSettings::getSettings('ntfy', 'user', $notifiable); $message = new Message(); $message->topic($settings['ntfy_topic']); $message->title((string) trans('email.login_from_new_ip')); - $message->body((string) trans('email.slack_login_from_new_ip', ['host' => Steam::getHostName($this->ip), 'ip' => $this->ip])); + $message->body((string) trans('email.slack_login_from_new_ip', ['ip' => $ip, 'host' => $host, ])); return $message; } @@ -85,7 +84,9 @@ class UserLogin extends Notification */ public function toPushover(User $notifiable): PushoverMessage { - return PushoverMessage::create((string) trans('email.slack_login_from_new_ip', ['host' => Steam::getHostName($this->ip), 'ip' => $this->ip])) + $ip = Request::ip(); + $host = Steam::getHostName($ip); + return PushoverMessage::create((string) trans('email.slack_login_from_new_ip', ['ip' => $ip, 'host' => $host, ])) ->title((string) trans('email.login_from_new_ip')) ; } @@ -95,7 +96,9 @@ class UserLogin extends Notification */ public function toSlack(User $notifiable) { - return new SlackMessage()->content((string) trans('email.slack_login_from_new_ip', ['host' => Steam::getHostName($this->ip), 'ip' => $this->ip])); + $ip = Request::ip(); + $host = Steam::getHostName($ip); + return new SlackMessage()->content((string) trans('email.slack_login_from_new_ip', ['ip' => $ip, 'host' => $host, ])); } /** diff --git a/app/Notifications/User/UserNewPassword.php b/app/Notifications/User/UserNewPassword.php index 4cb0ad7cad..8d649bae1b 100644 --- a/app/Notifications/User/UserNewPassword.php +++ b/app/Notifications/User/UserNewPassword.php @@ -26,11 +26,13 @@ namespace FireflyIII\Notifications\User; use FireflyIII\Notifications\ReturnsAvailableChannels; use FireflyIII\Notifications\ReturnsSettings; +use FireflyIII\Support\Facades\Steam; use FireflyIII\User; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Messages\SlackMessage; use Illuminate\Notifications\Notification; +use Illuminate\Support\Facades\Request; use NotificationChannels\Pushover\PushoverMessage; use Ntfy\Message; @@ -62,8 +64,13 @@ class UserNewPassword extends Notification */ public function toMail(User $notifiable) { + $ip = Request::ip(); + $host = Steam::getHostName($ip); + $userAgent = Request::userAgent(); + $time = now(config('app.timezone'))->isoFormat((string) trans('config.date_time_js')); + return (new MailMessage()) - ->markdown('emails.password', ['url' => $this->url]) + ->markdown('emails.password', ['url' => $this->url, 'ip' => $ip, 'host' => $host, 'userAgent' => $userAgent, 'time' => $time]) ->subject((string) trans('email.reset_pw_subject')) ; } diff --git a/resources/views/emails/invitation-created.blade.php b/resources/views/emails/invitation-created.blade.php index 17aff3684d..020129c6b7 100644 --- a/resources/views/emails/invitation-created.blade.php +++ b/resources/views/emails/invitation-created.blade.php @@ -1,3 +1,9 @@ @component('mail::message') {{ trans('email.invitation_created_body', ['email' => $email,'invitee' => $invitee]) }} + +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/new-ip.blade.php b/resources/views/emails/new-ip.blade.php index 446f1c7ae8..35f4454b08 100644 --- a/resources/views/emails/new-ip.blade.php +++ b/resources/views/emails/new-ip.blade.php @@ -1,13 +1,11 @@ @component('mail::message') {{ trans('email.new_ip_body') }} -{{ trans('email.ip_address') }}: {{ $ipAddress }} - -@if('' !== $host) -{{ trans('email.host_name') }}: {{ $host }} -@endif - -{{ trans('email.date_time') }}: {{ $time }} - {{ trans('email.new_ip_warning') }} + +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/oauth-client-created.blade.php b/resources/views/emails/oauth-client-created.blade.php index 4041c8495e..b83633a72d 100644 --- a/resources/views/emails/oauth-client-created.blade.php +++ b/resources/views/emails/oauth-client-created.blade.php @@ -5,4 +5,9 @@ {{ trans('email.oauth_created_undo', ['url' => route('profile.index')] ) }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/password.blade.php b/resources/views/emails/password.blade.php index 926ed49e32..1d56bb4de9 100644 --- a/resources/views/emails/password.blade.php +++ b/resources/views/emails/password.blade.php @@ -5,4 +5,9 @@ {{ $url }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/security/disabled-mfa.blade.php b/resources/views/emails/security/disabled-mfa.blade.php index 62f17f6928..28e69299f5 100644 --- a/resources/views/emails/security/disabled-mfa.blade.php +++ b/resources/views/emails/security/disabled-mfa.blade.php @@ -3,4 +3,9 @@ {{ trans('email.disabled_mfa_warning') }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/security/enabled-mfa.blade.php b/resources/views/emails/security/enabled-mfa.blade.php index a6cbb083aa..3045418c6c 100644 --- a/resources/views/emails/security/enabled-mfa.blade.php +++ b/resources/views/emails/security/enabled-mfa.blade.php @@ -3,4 +3,9 @@ {{ trans('email.enabled_mfa_warning') }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/security/failed-login.blade.php b/resources/views/emails/security/failed-login.blade.php index afe4ab48d2..122e533fa4 100644 --- a/resources/views/emails/security/failed-login.blade.php +++ b/resources/views/emails/security/failed-login.blade.php @@ -3,4 +3,9 @@ {{ trans('email.failed_login_warning') }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/security/few-backup-codes.blade.php b/resources/views/emails/security/few-backup-codes.blade.php index 84292fe07e..3596df2fb6 100644 --- a/resources/views/emails/security/few-backup-codes.blade.php +++ b/resources/views/emails/security/few-backup-codes.blade.php @@ -3,4 +3,9 @@ {{ trans('email.few_backup_codes_warning') }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/security/many-failed-attempts.blade.php b/resources/views/emails/security/many-failed-attempts.blade.php index 709fe868eb..0eeb074341 100644 --- a/resources/views/emails/security/many-failed-attempts.blade.php +++ b/resources/views/emails/security/many-failed-attempts.blade.php @@ -3,4 +3,9 @@ {{ trans('email.mfa_many_failed_attempts_warning') }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/security/new-backup-codes.blade.php b/resources/views/emails/security/new-backup-codes.blade.php index dc151a6ee4..8ef185d570 100644 --- a/resources/views/emails/security/new-backup-codes.blade.php +++ b/resources/views/emails/security/new-backup-codes.blade.php @@ -3,4 +3,9 @@ {{ trans('email.new_backup_codes_warning') }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/security/no-backup-codes.blade.php b/resources/views/emails/security/no-backup-codes.blade.php index ca785c5b3a..e8c4e3b468 100644 --- a/resources/views/emails/security/no-backup-codes.blade.php +++ b/resources/views/emails/security/no-backup-codes.blade.php @@ -3,4 +3,9 @@ {{ trans('email.no_backup_codes_warning') }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/security/used-backup-code.blade.php b/resources/views/emails/security/used-backup-code.blade.php index 9631cd3345..5367d38c49 100644 --- a/resources/views/emails/security/used-backup-code.blade.php +++ b/resources/views/emails/security/used-backup-code.blade.php @@ -3,4 +3,9 @@ {{ trans('email.used_backup_code_warning') }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent diff --git a/resources/views/emails/token-created.blade.php b/resources/views/emails/token-created.blade.php index c42ce35a4c..57561e0c10 100644 --- a/resources/views/emails/token-created.blade.php +++ b/resources/views/emails/token-created.blade.php @@ -4,4 +4,10 @@ {{ trans('email.access_token_created_explanation') }} {{ trans('email.access_token_created_revoke', ['url' => route('profile.index')]) }} + +- {{ trans('email.ip_address') }}: {{ $ip }} +- {{ trans('email.host_name') }}: {{ $host }} +- {{ trans('email.date_time') }}: {{ $time }} +- {{ trans('email.user_agent') }}: {{ $userAgent }} + @endcomponent