diff --git a/lib/private/Security/Bruteforce/Throttler.php b/lib/private/Security/Bruteforce/Throttler.php index 7b98b3d828..61e18088e9 100644 --- a/lib/private/Security/Bruteforce/Throttler.php +++ b/lib/private/Security/Bruteforce/Throttler.php @@ -227,6 +227,10 @@ class Throttler { * @return int */ public function getAttempts(string $ip, string $action = '', float $maxAgeHours = 12): int { + if ($ip === '') { + return 0; + } + $ipAddress = new IpAddress($ip); if ($this->isIPWhitelisted((string)$ipAddress)) { return 0; diff --git a/tests/lib/Security/Bruteforce/CapabilitiesTest.php b/tests/lib/Security/Bruteforce/CapabilitiesTest.php index 16c2b2caf1..cd43d94f8c 100644 --- a/tests/lib/Security/Bruteforce/CapabilitiesTest.php +++ b/tests/lib/Security/Bruteforce/CapabilitiesTest.php @@ -40,8 +40,6 @@ class CapabilitiesTest extends TestCase { parent::setUp(); $this->request = $this->createMock(IRequest::class); - $this->request->method('getRemoteAddress') - ->willReturn('10.10.10.10'); $this->throttler = $this->createMock(Throttler::class); @@ -57,6 +55,9 @@ class CapabilitiesTest extends TestCase { ->with('10.10.10.10') ->willReturn(42); + $this->request->method('getRemoteAddress') + ->willReturn('10.10.10.10'); + $expected = [ 'bruteforce' => [ 'delay' => 42 @@ -66,4 +67,23 @@ class CapabilitiesTest extends TestCase { $this->assertEquals($expected, $result); } + + public function testGetCapabilitiesOnCli() { + $this->throttler->expects($this->atLeastOnce()) + ->method('getDelay') + ->with('') + ->willReturn(0); + + $this->request->method('getRemoteAddress') + ->willReturn(''); + + $expected = [ + 'bruteforce' => [ + 'delay' => 0 + ] + ]; + $result = $this->capabilities->getCapabilities(); + + $this->assertEquals($expected, $result); + } }