From 605f3acbf454b6cfcd48a144fd10a77a309ecd6d Mon Sep 17 00:00:00 2001 From: djmaze Date: Wed, 2 Dec 2020 10:16:46 +0100 Subject: [PATCH] Replaced sTimeOffset with sTimeZone to prevent DST issues --- .../libraries/MailSo/Base/DateTimeHelper.php | 26 ------------------- .../0.0.0/app/libraries/MailSo/Log/Driver.php | 18 +++++++------ .../0.0.0/app/libraries/MailSo/Log/Logger.php | 6 ----- .../0.0.0/app/libraries/RainLoop/Actions.php | 15 +++++------ .../libraries/RainLoop/Config/Application.php | 2 +- 5 files changed, 18 insertions(+), 49 deletions(-) diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Base/DateTimeHelper.php b/snappymail/v/0.0.0/app/libraries/MailSo/Base/DateTimeHelper.php index adac213a9..826b3bd26 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Base/DateTimeHelper.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Base/DateTimeHelper.php @@ -95,30 +95,4 @@ abstract class DateTimeHelper return \MailSo\Base\DateTimeHelper::ParseDateStringType1($sDateTime); } - - public static function TimeToSec(string $sTime) : int - { - $iMod = 1; - $sTime = \trim($sTime); - if ('-' === \substr($sTime, 0, 1)) - { - $iMod = -1; - $sTime = \substr($sTime, 1); - } - - $aParts = \preg_split('/[:.,]/', (string) $sTime); - - $iResult = 0; - if (isset($aParts[0]) && \is_numeric($aParts[0])) - { - $iResult += 3600 * ((int) $aParts[0]); - } - - if (isset($aParts[1]) && \is_numeric($aParts[1])) - { - $iResult += 60 * ((int) $aParts[1]); - } - - return $iResult * $iMod; - } } diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Log/Driver.php b/snappymail/v/0.0.0/app/libraries/MailSo/Log/Driver.php index bd79b2797..dd92e5c33 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Log/Driver.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Log/Driver.php @@ -38,9 +38,9 @@ abstract class Driver protected $bGuidPrefix; /** - * @var string + * @var DateTimeZone */ - protected $sTimeOffset; + protected $oTimeZone; /** * @var bool @@ -91,7 +91,7 @@ abstract class Driver $this->bTypedPrefix = true; $this->bGuidPrefix = true; - $this->sTimeOffset = '0'; + $this->oTimeZone = new \DateTimeZone('UTC'); $this->iWriteOnTimeoutOnly = 0; $this->bWriteOnErrorOnly = false; @@ -116,9 +116,13 @@ abstract class Driver ); } - public function SetTimeOffset(string $sTimeOffset) : self + public function SetTimeZone(/*\DateTimeZone | string*/ $oTimeZone) : self { - $this->sTimeOffset = (string) $sTimeOffset; + if ($oTimeZone instanceof \DateTimeZone) { + $this->oTimeZone = $oTimeZone; + } else { + $this->oTimeZone = new \DateTimeZone($oTimeZone); + } return $this; } @@ -187,9 +191,7 @@ abstract class Driver protected function getTimeWithMicroSec() : string { - $aMicroTimeItems = \explode(' ', \microtime()); - return Logger::DateHelper($this->sDatePattern, $this->sTimeOffset, $aMicroTimeItems[1]).'.'. - \str_pad((int) ($aMicroTimeItems[0] * 1000), 3, '0', STR_PAD_LEFT); + return \substr((new \DateTime('now', $this->DateTimeZone))->format('Y-m-d H:i:s.u'), 0, -3); } protected function getTypedPrefix(int $iType, string $sName = '') : string diff --git a/snappymail/v/0.0.0/app/libraries/MailSo/Log/Logger.php b/snappymail/v/0.0.0/app/libraries/MailSo/Log/Logger.php index ce2cb155d..151177ad3 100644 --- a/snappymail/v/0.0.0/app/libraries/MailSo/Log/Logger.php +++ b/snappymail/v/0.0.0/app/libraries/MailSo/Log/Logger.php @@ -74,12 +74,6 @@ class Logger extends \MailSo\Base\Collection return $oInstance; } - public static function DateHelper(string $sFormat, string $sTimeOffset = '0', int $iTimestamp = null) : string - { - $iTimestamp = null === $iTimestamp ? \time() : (int) $iTimestamp; - return \gmdate($sFormat, $iTimestamp + \MailSo\Base\DateTimeHelper::TimeToSec((string) $sTimeOffset)); - } - public static function IsSystemEnabled() : bool { return !!(\MailSo\Config::$SystemLogger instanceof Logger); diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php index 0b4d87b49..283500e86 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Actions.php @@ -356,9 +356,9 @@ class Actions $aClear = array(); if (false !== \strpos($sLine, '{date:')) { - $sTimeOffset = (string)$this->Config()->Get('logs', 'time_offset', '0'); - $sLine = \preg_replace_callback('/\{date:([^}]+)\}/', function ($aMatch) use ($sTimeOffset, $bUrlEncode) { - return Utils::UrlEncode(\MailSo\Log\Logger::DateHelper($aMatch[1], $sTimeOffset), $bUrlEncode); + $oConfig = $this->Config(); + $sLine = \preg_replace_callback('/\{date:([^}]+)\}/', function ($aMatch) use ($oConfig, $bUrlEncode) { + return Utils::UrlEncode((new \DateTime('now', new \DateTimeZone($oConfig->Get('logs', 'time_zone', 'UTC'))))->format($aMatch[1]), $bUrlEncode); }, $sLine); $aClear['/\{date:([^}]*)\}/'] = 'date'; @@ -761,7 +761,7 @@ class Actions } } - $sTimeOffset = (string)$this->Config()->Get('logs', 'time_offset', '0'); + $sTimeZone = $this->Config()->Get('logs', 'time_zone', 'UTC'); $this->oLogger->SetShowSecter(!$this->Config()->Get('logs', 'hide_passwords', true)); @@ -785,7 +785,7 @@ class Actions ->WriteOnErrorOnly($this->Config()->Get('logs', 'write_on_error_only', false)) ->WriteOnPhpErrorOnly($this->Config()->Get('logs', 'write_on_php_error_only', false)) ->WriteOnTimeoutOnly($this->Config()->Get('logs', 'write_on_timeout_only', 0)) - ->SetTimeOffset($sTimeOffset) + ->SetTimeZone($sTimeZone) ); if (!$this->Config()->Get('debug', 'enable', false)) { @@ -796,9 +796,8 @@ class Actions $oHttp = $this->Http(); - $this->oLogger->Write('[DATE:' . \MailSo\Log\Logger::DateHelper('d.m.y', $sTimeOffset) . - (0 !== $sTimeOffset ? '][OFFSET:' . (0 < $sTimeOffset ? '+' : '-') . - \str_pad((string)\abs($sTimeOffset), 2, '0', STR_PAD_LEFT) : '') . + $this->oLogger->Write('[DATE:' . (new \DateTime('now', new \DateTimeZone($sTimeZone)))->format('Y-m-d ') . + $sTimeZone . '][RL:' . APP_VERSION . '][PHP:' . PHP_VERSION . '][IP:' . $oHttp->GetClientIp($this->Config()->Get('labs', 'http_client_ip_check_proxy', false)) . '][PID:' . (\MailSo\Base\Utils::FunctionExistsAndEnabled('getmypid') ? \getmypid() : 'unknown') . '][' . diff --git a/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php b/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php index 37650ff00..99bd69d59 100644 --- a/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php +++ b/snappymail/v/0.0.0/app/libraries/RainLoop/Config/Application.php @@ -251,7 +251,7 @@ Values: 'hide_passwords' => array(true, 'Required for development purposes only. Disabling this option is not recommended.'), - 'time_offset' => array('0'), + 'time_zone' => array('UTC'), 'session_filter' => array(''), 'filename' => array('log-{date:Y-m-d}.txt',