fix(firewall): serialize automatic brute-force blocking
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -238,6 +238,33 @@ class FirewallStoreTest extends TestCase
|
||||
self::assertSame('event-123', $logs[0]->getEventId());
|
||||
}
|
||||
|
||||
#[TestDox('Only one worker can claim a tenant and IP brute-force response')]
|
||||
public function testBruteForceClaim(): void
|
||||
{
|
||||
self::assertTrue($this->store->claimBruteForce('tenant-a', '203.0.113.10', 3600));
|
||||
self::assertFalse($this->store->claimBruteForce('tenant-a', '203.0.113.10', 3600));
|
||||
self::assertTrue($this->store->claimBruteForce('tenant-b', '203.0.113.10', 3600));
|
||||
self::assertTrue($this->store->claimBruteForce('tenant-a', '203.0.113.11', 3600));
|
||||
}
|
||||
|
||||
#[TestDox('Expired brute-force claims can be acquired again and cleaned up')]
|
||||
public function testExpiredBruteForceClaim(): void
|
||||
{
|
||||
self::assertTrue($this->store->claimBruteForce('tenant-a', '203.0.113.10', 3600));
|
||||
$claimId = hash('sha256', "tenant-a\0"."203.0.113.10");
|
||||
$this->dataStore->selectCollection('firewall_brute_force_claims')->updateOne(
|
||||
['_id' => $claimId],
|
||||
['$set' => ['expiresAt' => (new \DateTimeImmutable('-1 minute'))->format(\DateTimeInterface::ATOM)]]
|
||||
);
|
||||
|
||||
self::assertTrue($this->store->claimBruteForce('tenant-a', '203.0.113.10', 3600));
|
||||
$this->dataStore->selectCollection('firewall_brute_force_claims')->updateOne(
|
||||
['_id' => $claimId],
|
||||
['$set' => ['expiresAt' => (new \DateTimeImmutable('-1 minute'))->format(\DateTimeInterface::ATOM)]]
|
||||
);
|
||||
self::assertSame(1, $this->store->cleanupExpiredBruteForceClaims());
|
||||
}
|
||||
|
||||
private function rule(
|
||||
string $reason,
|
||||
string $scope,
|
||||
|
||||
Reference in New Issue
Block a user