44
55namespace SimpleSAML \Module \perun \Auth \Process ;
66
7+ use DateTime ;
78use SimpleSAML \Auth \ProcessingFilter ;
89use SimpleSAML \Auth \State ;
910use 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