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

Commit 22b76d2

Browse files
author
Dominik František Bučík
authored
Merge pull request #177 from dBucik/fix_aup
fix: 🐛 fix not checking for key existence in aups fix: 🐛 refactored AUPs DateTime treatment in ForceAup
2 parents 94c9243 + 5130dfc commit 22b76d2

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

lib/Auth/Process/ForceAup.php

Lines changed: 40 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;
@@ -266,16 +270,25 @@ private function fillAupsToBeApproved($requestedAups, $aups, $userApprovedAups)
266270
{
267271
$aupsToBeApproved = [];
268272
foreach ($requestedAups as $requestedAup) {
269-
$decodedAups = json_decode($aups[$requestedAup]);
273+
$aupsInJson = $aups[$requestedAup];
274+
if (empty($aupsInJson)) {
275+
continue;
276+
}
277+
$decodedAups = json_decode($aupsInJson);
270278
$latestAup = $this->getLatestAup($decodedAups);
279+
if ($latestAup === null) {
280+
continue;
281+
}
271282

272-
if (array_key_exists($requestedAup, $userApprovedAups)) {
283+
if (! empty($userApprovedAups[$requestedAup])) {
273284
$userAupsList = json_decode($userApprovedAups[$requestedAup]);
274285
$userLatestAup = $this->getLatestAup($userAupsList);
275-
$latestDate = \DateTime::createFromFormat(self::DATETIME_FORMAT, $latestAup->date);
276-
$userLatestDate = \DateTime::createFromFormat(self::DATETIME_FORMAT, $userLatestAup->date);
277-
if ($userLatestDate >= $latestDate) {
278-
continue;
286+
if ($userLatestAup !== null) {
287+
$latestDate = self::parseDateTime($latestAup->date);
288+
$userLatestDate = self::parseDateTime($userLatestAup->date);
289+
if ($userLatestDate >= $latestDate) {
290+
continue;
291+
}
279292
}
280293
}
281294
$aupsToBeApproved[$requestedAup] = $latestAup;
@@ -288,11 +301,8 @@ private function mergeAupsToBeApproved(array $perunAupsToBeApproved, array $voAu
288301
$resultAups = $perunAupsToBeApproved;
289302
foreach ($voAupsToBeApproved as $aupKey => $voAup) {
290303
if (array_key_exists($aupKey, $resultAups)) {
291-
$voLatestDate = \DateTime::createFromFormat(self::DATETIME_FORMAT, $voAup->date);
292-
$perunLatestDate = \DateTime::createFromFormat(
293-
self::DATETIME_FORMAT,
294-
$perunAupsToBeApproved[$aupKey]->date
295-
);
304+
$voLatestDate = self::parseDateTime($voAup->date);
305+
$perunLatestDate = self::parseDateTime($perunAupsToBeApproved[$aupKey]->date);
296306
if ($voLatestDate >= $perunLatestDate) {
297307
$resultAups[$aupKey] = $voLatestDate;
298308
} else {
@@ -304,4 +314,21 @@ private function mergeAupsToBeApproved(array $perunAupsToBeApproved, array $voAu
304314
}
305315
return $resultAups;
306316
}
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+
}
307334
}

0 commit comments

Comments
 (0)