- if (in_array('date', $sig_block['headers'])) {
- $diff = abs(strtotime($headers['date']) - time());
- if ($diff > 300) {
- Logger::log("Header date '" . $headers['date'] . "' is with " . $diff . " seconds out of the 300 second frame. The signature is invalid.");
+ if (!empty($created)) {
+ $current = time();
+
+ // Calculate with a grace period of 60 seconds to avoid slight time differences between the servers
+ if (($created - 60) > $current) {
+ Logger::notice('Signature created in the future', ['created' => date(DateTimeFormat::MYSQL, $created), 'expired' => date(DateTimeFormat::MYSQL, $expired), 'current' => date(DateTimeFormat::MYSQL, $current)]);
+ return false;
+ }
+
+ if ($current > $expired) {
+ Logger::notice('Signature expired', ['created' => date(DateTimeFormat::MYSQL, $created), 'expired' => date(DateTimeFormat::MYSQL, $expired), 'current' => date(DateTimeFormat::MYSQL, $current)]);