From 4d405f7f6ffbcf89c1c787fdd6aebe862fa15d35 Mon Sep 17 00:00:00 2001 From: Rashesh Date: Wed, 11 Sep 2024 18:57:23 +0530 Subject: [PATCH] indirection: get timezone from coolwsd.xml - before this patch we were trying to get timezone from the os timezone file. But that is not consistent because most of the VMs would have timezone set to UTC Signed-off-by: Rashesh Change-Id: Id241ad6f57eeb3c084733f174ba5d1c4a547ced6 --- common/Util.cpp | 33 +++++---------------------------- common/Util.hpp | 5 +---- coolwsd.xml.in | 3 ++- wsd/Admin.cpp | 10 +++++++--- wsd/COOLWSD.cpp | 1 + wsd/ClientRequestDispatcher.cpp | 3 ++- wsd/ClientSession.cpp | 9 ++++++--- 7 files changed, 24 insertions(+), 40 deletions(-) diff --git a/common/Util.cpp b/common/Util.cpp index 3697e07cead65..4fdb424cfd9a2 100644 --- a/common/Util.cpp +++ b/common/Util.cpp @@ -388,7 +388,7 @@ namespace Util return id; } - std::string getVersionJSON(bool enableExperimental, bool geolocationSetup) + std::string getVersionJSON(bool enableExperimental, const std::string& timezone) { std::string version, hash; Util::getVersionInfo(version, hash); @@ -415,13 +415,10 @@ namespace Util "\"Id\": \"" + Util::getProcessIdentifier() + "\", "; - if (geolocationSetup) - json += "\"TimeZone\": \"" + getIANATimezone() + - "\", " - "\"Options\": \"" + - std::string(enableExperimental ? " (E)" : "") + "\" }"; - else - json += "\"Options\": \"" + std::string(enableExperimental ? " (E)" : "") + "\" }"; + if (!timezone.empty()) + json += "\"TimeZone\": \"" + timezone + "\", "; + + json += "\"Options\": \"" + std::string(enableExperimental ? " (E)" : "") + "\" }"; return json; } @@ -963,26 +960,6 @@ namespace Util } } - std::string getIANATimezone() - { - const char* tzfile = "/etc/localtime"; - char buf[PATH_MAX]; - - ssize_t len = readlink(tzfile, buf, sizeof(buf) - 1); - if (len != -1) - { - buf[len] = '\0'; - std::string fullPath(buf); - - std::string prefix = "../usr/share/zoneinfo/"; - if (fullPath.substr(0, prefix.size()) == prefix) - { - return fullPath.substr(prefix.size()); - } - } - return std::string(); - } - std::string Backtrace::Symbol::toString() const { std::string s; diff --git a/common/Util.hpp b/common/Util.hpp index cec20cb34515e..645c877f1eadf 100644 --- a/common/Util.hpp +++ b/common/Util.hpp @@ -332,7 +332,7 @@ namespace Util ///< A random hex string that identifies the current process. const std::string& getProcessIdentifier(); - std::string getVersionJSON(bool enableExperimental, bool geolocationSetup); + std::string getVersionJSON(bool enableExperimental, const std::string& timezone); /// Return a string that is unique across processes and calls. std::string UniqueId(); @@ -1553,9 +1553,6 @@ int main(int argc, char**argv) return oss.str(); } - /// Get IANA timezone name - std::string getIANATimezone(); - /// Asserts in the debug builds, otherwise just logs. void assertCorrectThread(std::thread::id owner, const char* fileName, int lineNo); diff --git a/coolwsd.xml.in b/coolwsd.xml.in index 9c5d59fc31eb4..5d42e398c103b 100644 --- a/coolwsd.xml.in +++ b/coolwsd.xml.in @@ -324,8 +324,9 @@ false + - + @LOCK_CONFIGURATION@ diff --git a/wsd/Admin.cpp b/wsd/Admin.cpp index c6a2586ec044c..9b7da26e8a68c 100644 --- a/wsd/Admin.cpp +++ b/wsd/Admin.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -22,6 +23,7 @@ #include "Admin.hpp" #include "AdminModel.hpp" #include "Auth.hpp" +#include "ConfigUtil.hpp" #include #include #include @@ -131,9 +133,11 @@ void AdminSocketHandler::handleMessage(const std::vector &payload) else if (tokens.equals(0, "version")) { // Send COOL version information - sendTextFrame("coolserver " + - Util::getVersionJSON(EnableExperimental, COOLWSD::IndirectionServerEnabled && - COOLWSD::GeolocationSetup)); + std::string timezoneName; + if (COOLWSD::IndirectionServerEnabled && COOLWSD::GeolocationSetup) + timezoneName = config::getString("indirection_endpoint.geolocation_setup.timezone", ""); + + sendTextFrame("coolserver " + Util::getVersionJSON(EnableExperimental, timezoneName)); // Send LOKit version information sendTextFrame("lokitversion " + COOLWSD::LOKitVersion); diff --git a/wsd/COOLWSD.cpp b/wsd/COOLWSD.cpp index c3189e757362a..efad6f83aea74 100644 --- a/wsd/COOLWSD.cpp +++ b/wsd/COOLWSD.cpp @@ -2195,6 +2195,7 @@ void COOLWSD::innerInitialize(Application& self) { "deepl.enabled", "false" }, { "zotero.enable", "true" }, { "indirection_endpoint.geolocation_setup.enable", "false" }, + { "indirection_endpoint.geolocation_setup.timezone", "" }, { "indirection_endpoint.server_name", "" }, { "indirection_endpoint.url", "" }, #if !MOBILEAPP diff --git a/wsd/ClientRequestDispatcher.cpp b/wsd/ClientRequestDispatcher.cpp index a7ee28fc35abc..7f13fff33bddb 100644 --- a/wsd/ClientRequestDispatcher.cpp +++ b/wsd/ClientRequestDispatcher.cpp @@ -2050,7 +2050,8 @@ static std::string getCapabilitiesJson(bool convertToAvailable) if (COOLWSD::IndirectionServerEnabled && COOLWSD::GeolocationSetup) { - std::string timezoneName = Util::getIANATimezone(); + std::string timezoneName = + config::getString("indirection_endpoint.geolocation_setup.timezone", ""); if (!timezoneName.empty()) capabilities->set("timezone", std::string(timezoneName)); } diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp index 2a72bec880883..2a3f38a9ce9af 100644 --- a/wsd/ClientSession.cpp +++ b/wsd/ClientSession.cpp @@ -25,6 +25,7 @@ #include #include +#include "ConfigUtil.hpp" #include "DocumentBroker.hpp" #include "COOLWSD.hpp" #include "FileServer.hpp" @@ -635,10 +636,12 @@ bool ClientSession::_handleInput(const char *buffer, int length) } } + std::string timezoneName; + if (COOLWSD::IndirectionServerEnabled && COOLWSD::GeolocationSetup) + timezoneName = config::getString("indirection_endpoint.geolocation_setup.timezone", ""); + // Send COOL version information - sendTextFrame("coolserver " + - Util::getVersionJSON(EnableExperimental, COOLWSD::IndirectionServerEnabled && - COOLWSD::GeolocationSetup)); + sendTextFrame("coolserver " + Util::getVersionJSON(EnableExperimental, timezoneName)); // Send LOKit version information sendTextFrame("lokitversion " + COOLWSD::LOKitVersion);