Skip to content

Commit 6b8e89e

Browse files
committed
fix invalid date input and add translations (#22833: Short-term admin accounts)
1 parent 627273b commit 6b8e89e

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

app/code/Magento/Security/Model/UserExpiration/Validator.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,15 @@ public function isValid($value)
5151
$expiresAt = $value;
5252
$label = 'Expiration date';
5353
if (\Zend_Validate::is($expiresAt, 'NotEmpty')) {
54-
$currentTime = $this->dateTime->gmtTimestamp();
55-
$utcExpiresAt = $this->timezone->convertConfigTimeToUtc($expiresAt);
56-
$expiresAt = $this->timezone->date($utcExpiresAt)->getTimestamp();
57-
if ($expiresAt < $currentTime) {
58-
$messages['expires_at'] = __('"%1" must be later than the current date.', $label);
54+
if (strtotime($expiresAt)) {
55+
$currentTime = $this->dateTime->gmtTimestamp();
56+
$utcExpiresAt = $this->timezone->convertConfigTimeToUtc($expiresAt);
57+
$expiresAt = $this->timezone->date($utcExpiresAt)->getTimestamp();
58+
if ($expiresAt < $currentTime) {
59+
$messages['expires_at'] = __('"%1" must be later than the current date.', $label);
60+
}
61+
} else {
62+
$messages['expires_at'] = __('"%1" is not a valid date.', $label);
5963
}
6064
}
6165
$this->_addMessages($messages);

app/code/Magento/Security/Test/Unit/Model/UserExpiration/ValidatorTest.php

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,24 @@ protected function setUp()
4646
);
4747
}
4848

49+
public function testWithInvalidDate()
50+
{
51+
$expireDate = 'invalid_date';
52+
53+
static::assertFalse($this->validator->isValid($expireDate));
54+
static::assertContains(
55+
'"Expiration date" is not a valid date.',
56+
$this->validator->getMessages()
57+
);
58+
}
59+
4960
public function testWithPastDate()
5061
{
5162
/** @var \DateTime|\PHPUnit_Framework_MockObject_MockObject $dateObject */
5263
$dateObject = $this->createMock(\DateTime::class);
5364
$this->timezoneMock->expects(static::once())
54-
->method('date')
55-
->will(static::returnValue($dateObject));
65+
->method('date')
66+
->will(static::returnValue($dateObject));
5667

5768
$currentDate = new \DateTime();
5869
$currentDate = $currentDate->getTimestamp();
@@ -74,8 +85,8 @@ public function testWithFutureDate()
7485
/** @var \DateTime|\PHPUnit_Framework_MockObject_MockObject $dateObject */
7586
$dateObject = $this->createMock(\DateTime::class);
7687
$this->timezoneMock->expects(static::once())
77-
->method('date')
78-
->will(static::returnValue($dateObject));
88+
->method('date')
89+
->will(static::returnValue($dateObject));
7990
$currentDate = new \DateTime();
8091
$currentDate = $currentDate->getTimestamp();
8192
$expireDate = new \DateTime();

app/code/Magento/Security/i18n/en_US.csv

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,5 @@ None,None
2727
"Min Time Between Password Reset Requests","Min Time Between Password Reset Requests"
2828
"Delay in minutes between password reset requests. Use 0 to disable.","Delay in minutes between password reset requests. Use 0 to disable."
2929
"""%1"" must be later than the current date.","""%1"" must be later than the current date."
30+
"User Expiration","User Expiration"
31+
"""%1"" is not a valid date.","""%1"" is not a valid date."

0 commit comments

Comments
 (0)