Skip to content
This repository was archived by the owner on Sep 19, 2022. It is now read-only.

Commit 5130dfc

Browse files
author
Dominik Frantisek Bucik
committed
fix: 🐛 refactored AUPs DateTime treatment in ForceAup
* eliminated possibilities of comparison between Bool and DateTime
1 parent 00cf0f0 commit 5130dfc

File tree

1 file changed

+36
-13
lines changed

1 file changed

+36
-13
lines changed

lib/Auth/Process/ForceAup.php

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace SimpleSAML\Module\perun\Auth\Process;
66

7+
use DateTime;
78
use SimpleSAML\Auth\ProcessingFilter;
89
use SimpleSAML\Auth\State;
910
use SimpleSAML\Error\Exception;
@@ -197,10 +198,13 @@ public function process(&$request)
197198
*/
198199
public function getLatestAup($aups)
199200
{
201+
if (empty($aups)) {
202+
return null;
203+
}
200204
$latestAup = $aups[0];
201-
$latestDate = \DateTime::createFromFormat(self::DATETIME_FORMAT, $latestAup->date);
205+
$latestDate = self::parseDateTime($latestAup->date);
202206
foreach ($aups as $aup) {
203-
$aupDate = \DateTime::createFromFormat(self::DATETIME_FORMAT, $aup->date);
207+
$aupDate = self::parseDateTime($aup->date);
204208
if ($latestDate < $aupDate) {
205209
$latestAup = $aup;
206210
$latestDate = $aupDate;
@@ -270,16 +274,21 @@ private function fillAupsToBeApproved($requestedAups, $aups, $userApprovedAups)
270274
if (empty($aupsInJson)) {
271275
continue;
272276
}
273-
$decodedAups = json_decode($aups[$requestedAup]);
277+
$decodedAups = json_decode($aupsInJson);
274278
$latestAup = $this->getLatestAup($decodedAups);
279+
if ($latestAup === null) {
280+
continue;
281+
}
275282

276-
if (array_key_exists($requestedAup, $userApprovedAups)) {
283+
if (! empty($userApprovedAups[$requestedAup])) {
277284
$userAupsList = json_decode($userApprovedAups[$requestedAup]);
278285
$userLatestAup = $this->getLatestAup($userAupsList);
279-
$latestDate = \DateTime::createFromFormat(self::DATETIME_FORMAT, $latestAup->date);
280-
$userLatestDate = \DateTime::createFromFormat(self::DATETIME_FORMAT, $userLatestAup->date);
281-
if ($userLatestDate >= $latestDate) {
282-
continue;
286+
if ($userLatestAup !== null) {
287+
$latestDate = self::parseDateTime($latestAup->date);
288+
$userLatestDate = self::parseDateTime($userLatestAup->date);
289+
if ($userLatestDate >= $latestDate) {
290+
continue;
291+
}
283292
}
284293
}
285294
$aupsToBeApproved[$requestedAup] = $latestAup;
@@ -292,11 +301,8 @@ private function mergeAupsToBeApproved(array $perunAupsToBeApproved, array $voAu
292301
$resultAups = $perunAupsToBeApproved;
293302
foreach ($voAupsToBeApproved as $aupKey => $voAup) {
294303
if (array_key_exists($aupKey, $resultAups)) {
295-
$voLatestDate = \DateTime::createFromFormat(self::DATETIME_FORMAT, $voAup->date);
296-
$perunLatestDate = \DateTime::createFromFormat(
297-
self::DATETIME_FORMAT,
298-
$perunAupsToBeApproved[$aupKey]->date
299-
);
304+
$voLatestDate = self::parseDateTime($voAup->date);
305+
$perunLatestDate = self::parseDateTime($perunAupsToBeApproved[$aupKey]->date);
300306
if ($voLatestDate >= $perunLatestDate) {
301307
$resultAups[$aupKey] = $voLatestDate;
302308
} else {
@@ -308,4 +314,21 @@ private function mergeAupsToBeApproved(array $perunAupsToBeApproved, array $voAu
308314
}
309315
return $resultAups;
310316
}
317+
318+
/**
319+
* Parses datetime with format set in self::DATETIME_FORMAT. If parsing fails, value passed in $default will be
320+
* returned (or null if not provided)
321+
*
322+
* @param string $date to be parsed using self::DATETIME_FORMAT format
323+
* @param DateTime|null $default (optional) value to be returned in case of error
324+
* @return DateTime parsed datetime, or default value (null if not provided)
325+
*/
326+
private function parseDateTime(string $date, DateTime $default = null): DateTime
327+
{
328+
$result = DateTime::createFromFormat(self::DATETIME_FORMAT, $date);
329+
if ($result === false) {
330+
$result = $default;
331+
}
332+
return $result;
333+
}
311334
}

0 commit comments

Comments
 (0)