mirror of
https://github.com/nextcloud/server.git
synced 2026-04-26 00:27:49 -04:00
Some (well all except sqlite) database platforms support timezone configuration. The problem is that we expect everything in UTC, but some servers might have set some different default (e.g. in database configuration or even just because of `TZ` environment variable). This causes incorrect values when expecting `NOW()` to return the current time in UTC. For PHP we already enforce UTC as timezone, this PR adds a middleware that enforces UTC also as the database connection / session timezone. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
39 lines
1.2 KiB
PHP
39 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
namespace OC\DB\Middleware;
|
|
|
|
use Doctrine\DBAL\Driver\Middleware\AbstractDriverMiddleware;
|
|
use Doctrine\DBAL\Platforms\MariaDBPlatform;
|
|
use Doctrine\DBAL\Platforms\MySQLPlatform;
|
|
use Doctrine\DBAL\Platforms\OraclePlatform;
|
|
use Doctrine\DBAL\Platforms\PostgreSQLPlatform;
|
|
|
|
/**
|
|
* Driver middleware to ensure the session timezone is set to UTC.
|
|
* This ensures consistent timezone handling, regardless of server configuration,
|
|
* similar to how we set the PHP timezone to UTC for Nextcloud.
|
|
*
|
|
* @since 34.0.0
|
|
*/
|
|
final class UtcTimezoneMiddlewareDriver extends AbstractDriverMiddleware {
|
|
|
|
#[\Override]
|
|
public function connect(array $params) {
|
|
$connection = parent::connect($params);
|
|
$platform = $this->getDatabasePlatform();
|
|
if (($platform instanceof MariaDBPlatform) || ($platform instanceof MySQLPlatform)) {
|
|
$connection->exec("SET time_zone = '+00:00'");
|
|
} elseif ($platform instanceof PostgreSQLPlatform) {
|
|
$connection->exec("SET TIME ZONE 'UTC'");
|
|
} elseif ($platform instanceof OraclePlatform) {
|
|
$connection->exec("ALTER SESSION SET TIME_ZONE='Etc/UTC'");
|
|
}
|
|
return $connection;
|
|
}
|
|
}
|