From c60b48d65f6be787686b2a2fa23bbc8b70cc0c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Denis=20Duli=C3=A7i?= Date: Wed, 3 May 2023 00:14:25 +0300 Subject: [PATCH] added tests for too many emails sent --- .../Email/TellFirewallTooManyEmailsSent.php | 6 ++- tests/Feature/Email/TooManyEmailsSentTest.php | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 tests/Feature/Email/TooManyEmailsSentTest.php diff --git a/app/Listeners/Email/TellFirewallTooManyEmailsSent.php b/app/Listeners/Email/TellFirewallTooManyEmailsSent.php index 406d4a1ca..933923aad 100644 --- a/app/Listeners/Email/TellFirewallTooManyEmailsSent.php +++ b/app/Listeners/Email/TellFirewallTooManyEmailsSent.php @@ -30,12 +30,16 @@ class TellFirewallTooManyEmailsSent public function loadConfig(): void { + if (! empty(Config::get('firewall.middleware.' . $this->middleware))) { + return; + } + $config = array_merge_recursive( Config::get('firewall'), [ 'middleware' => [ $this->middleware => [ - 'enabled' => env('FIREWALL_MIDDLEWARE_' . strtoupper($this->middleware) . '_ENABLED', env('FIREWALL_ENABLED', true)), + 'enabled' => env('FIREWALL_MIDDLEWARE_' . strtoupper($this->middleware) . '_ENABLED', Config::get('firewall.enabled', true)), 'methods' => ['post'], diff --git a/tests/Feature/Email/TooManyEmailsSentTest.php b/tests/Feature/Email/TooManyEmailsSentTest.php new file mode 100644 index 000000000..120f81e72 --- /dev/null +++ b/tests/Feature/Email/TooManyEmailsSentTest.php @@ -0,0 +1,51 @@ +loginAs(); + + config(['firewall.enabled' => true]); + + for ($i = 0; $i < 19; $i++) { + event(new TooManyEmailsSent(user_id())); + } + + $this->assertDatabaseHas('firewall_logs', [ + 'user_id' => user_id(), + 'middleware' => 'too_many_emails_sent', + ]); + + $this->assertDatabaseCount('firewall_logs', 19); + + $this->assertDatabaseEmpty('firewall_ips'); + } + + public function testItShouldBlockIpDueToTooManyEmailsSent() + { + $this->loginAs(); + + config(['firewall.enabled' => true]); + + for ($i = 0; $i < 20; $i++) { + event(new TooManyEmailsSent(user_id())); + } + + $this->assertDatabaseHas('firewall_logs', [ + 'user_id' => user_id(), + 'middleware' => 'too_many_emails_sent', + ]); + + $this->assertDatabaseCount('firewall_logs', 20); + + $this->assertDatabaseHas('firewall_ips', [ + 'ip' => request()->ip(), + ]); + } +}