Skip to content

Commit 70fc99b

Browse files
committed
validation exits early if token is not of correct length
1 parent dd29343 commit 70fc99b

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

src/ResetPasswordHelper.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ public function validateTokenAndFetchUser(string $fullToken): object
108108
{
109109
$this->resetPasswordCleaner->handleGarbageCollection();
110110

111+
if (40 !== \strlen($fullToken)) {
112+
throw new InvalidResetPasswordTokenException();
113+
}
114+
111115
$resetRequest = $this->findResetPasswordRequest($fullToken);
112116

113117
if (null === $resetRequest) {

tests/UnitTests/ResetPasswordHelperTest.php

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ protected function setUp(): void
6565
$this->mockTokenGenerator = $this->createMock(ResetPasswordTokenGenerator::class);
6666
$this->mockCleaner = $this->createMock(ResetPasswordCleaner::class);
6767
$this->mockResetRequest = $this->createMock(ResetPasswordRequestInterface::class);
68-
$this->randomToken = \bin2hex(\random_bytes(10));
69-
$this->mockUser = new class() {};
68+
$this->randomToken = \bin2hex(\random_bytes(20));
69+
$this->mockUser = new class {};
7070
}
7171

7272
private function getPasswordResetHelper(): ResetPasswordHelper
@@ -173,7 +173,7 @@ public function testRemoveResetRequestRetrievesTokenFromRepository(): void
173173
$this->mockRepo
174174
->expects($this->once())
175175
->method('findResetPasswordRequest')
176-
->with($this->randomToken)
176+
->with(\substr($this->randomToken, 0, 20))
177177
->willReturn($this->mockResetRequest)
178178
;
179179

@@ -198,6 +198,14 @@ public function testRemoveResetRequestCallsRepositoryToRemoveResetRequestObject(
198198
$helper->removeResetRequest('1234');
199199
}
200200

201+
public function testExceptionThrownIfTokenLengthIsNotOfCorrectSize(): void
202+
{
203+
$this->expectException(InvalidResetPasswordTokenException::class);
204+
205+
$helper = $this->getPasswordResetHelper();
206+
$helper->validateTokenAndFetchUser(\substr($this->randomToken, 0, 39));
207+
}
208+
201209
public function testExceptionIsThrownIfTokenNotFoundDuringValidation(): void
202210
{
203211
$this->mockRepo
@@ -209,7 +217,7 @@ public function testExceptionIsThrownIfTokenNotFoundDuringValidation(): void
209217
$this->expectException(InvalidResetPasswordTokenException::class);
210218

211219
$helper = $this->getPasswordResetHelper();
212-
$helper->validateTokenAndFetchUser('1234');
220+
$helper->validateTokenAndFetchUser($this->randomToken);
213221
}
214222

215223
public function testValidateTokenThrowsExceptionOnExpiredResetRequest(): void
@@ -223,7 +231,7 @@ public function testValidateTokenThrowsExceptionOnExpiredResetRequest(): void
223231
$this->mockRepo
224232
->expects($this->once())
225233
->method('findResetPasswordRequest')
226-
->with($this->randomToken)
234+
->with(\substr($this->randomToken, 0, 20))
227235
->willReturn($this->mockResetRequest)
228236
;
229237

@@ -256,7 +264,7 @@ public function testValidateTokenFetchesUserIfTokenNotExpired(): void
256264
$this->mockRepo
257265
->expects($this->once())
258266
->method('findResetPasswordRequest')
259-
->with($this->randomToken)
267+
->with(\substr($this->randomToken, 0, 20))
260268
->willReturn($this->mockResetRequest)
261269
;
262270

0 commit comments

Comments
 (0)