diff --git a/src/Illuminate/Validation/NotPwnedVerifier.php b/src/Illuminate/Validation/NotPwnedVerifier.php index a178f8c14010..b7912359729d 100644 --- a/src/Illuminate/Validation/NotPwnedVerifier.php +++ b/src/Illuminate/Validation/NotPwnedVerifier.php @@ -15,15 +15,24 @@ class NotPwnedVerifier implements UncompromisedVerifier */ protected $factory; + /** + * The number of seconds the request can run before timing out. + * + * @var int + */ + public $timeout; + /** * Create a new uncompromised verifier. * * @param \Illuminate\Http\Client\Factory $factory + * @param int|null $timeout * @return void */ - public function __construct($factory) + public function __construct($factory, $timeout = null) { $this->factory = $factory; + $this->timeout = $timeout ?? 15; } /** @@ -77,7 +86,7 @@ protected function search($hashPrefix) try { $response = $this->factory->withHeaders([ 'Add-Padding' => true, - ])->get( + ])->timeout($this->timeout)->get( 'https://api.pwnedpasswords.com/range/'.$hashPrefix ); } catch (Exception $e) { diff --git a/tests/Validation/ValidationNotPwnedVerifierTest.php b/tests/Validation/ValidationNotPwnedVerifierTest.php index fb50b61a81fa..daec31bb9feb 100644 --- a/tests/Validation/ValidationNotPwnedVerifierTest.php +++ b/tests/Validation/ValidationNotPwnedVerifierTest.php @@ -46,6 +46,12 @@ public function testApiResponseGoesWrong() ->with(['Add-Padding' => true]) ->andReturn($httpFactory); + $httpFactory + ->shouldReceive('timeout') + ->once() + ->with(15) + ->andReturn($httpFactory); + $httpFactory->shouldReceive('get') ->once() ->andReturn($response); @@ -77,6 +83,12 @@ public function testApiGoesDown() ->with(['Add-Padding' => true]) ->andReturn($httpFactory); + $httpFactory + ->shouldReceive('timeout') + ->once() + ->with(15) + ->andReturn($httpFactory); + $httpFactory->shouldReceive('get') ->once() ->andReturn($response); @@ -112,6 +124,12 @@ public function testDnsDown() ->with(['Add-Padding' => true]) ->andReturn($httpFactory); + $httpFactory + ->shouldReceive('timeout') + ->once() + ->with(15) + ->andReturn($httpFactory); + $httpFactory ->shouldReceive('get') ->once()