common/Util.cpp | 24 ++++++++++++++++++++++++ common/Util.hpp | 28 +++++++++++++++++++++++++++- loleaflet/html/loleaflet.html.m4 | 1 + wsd/FileServer.cpp | 1 + wsd/LOOLWSD.cpp | 22 ++++++++++++++++++++++ wsd/LOOLWSD.hpp | 4 ++++ 6 files changed, 79 insertions(+), 1 deletion(-)
New commits: commit a486bad79be3838d115e09ccbb55ec47ea36274a Author: gokaysatir <gokaysa...@gmail.com> AuthorDate: Mon Mar 30 02:31:23 2020 +0300 Commit: Michael Meeks <michael.me...@collabora.com> CommitDate: Wed Apr 1 20:45:32 2020 +0100 tdf#130568 - Add server os pretty name to help->about Change-Id: Id6de533dfb8e34a05d348f8ae701bf3c524c9b95 diff --git a/common/Util.cpp b/common/Util.cpp index 137ec3897..2abbd4d11 100644 --- a/common/Util.cpp +++ b/common/Util.cpp @@ -929,6 +929,30 @@ namespace Util return false; #endif } + + std::map<std::string, std::string> stringVectorToMap(std::vector<std::string> sVector, const char delimiter) + { + std::map<std::string, std::string> result; + + for (std::vector<std::string>::iterator it = sVector.begin(); it != sVector.end(); it++) + { + size_t delimiterPosition = 0; + delimiterPosition = (*it).find(delimiter, 0); + if (delimiterPosition != std::string::npos) + { + std::string key = (*it).substr(0, delimiterPosition); + delimiterPosition++; + std::string value = (*it).substr(delimiterPosition); + result[key] = value; + } + else + { + LOG_WRN("Util::stringVectorToMap => record is misformed: " << (*it)); + } + } + + return result; + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/common/Util.hpp b/common/Util.hpp index 52043692f..fd1589cfe 100644 --- a/common/Util.hpp +++ b/common/Util.hpp @@ -72,7 +72,7 @@ namespace Util /// to send data to the child. int spawnProcess(const std::string &cmd, const StringVector &args, const std::vector<int>* fdsToKeep = nullptr, int *stdInput = nullptr); - + #endif /// Hex to unsigned char @@ -972,6 +972,32 @@ int main(int argc, char**argv) * test tool targets (typically fuzzing) where start-up speed is critical. */ bool isFuzzing(); + + /** + * Splits string into vector<string>. Does not accept referenced variables for easy + * usage like (splitString("test", ..)) or (splitString(getStringOnTheFly(), ..)) + */ + inline std::vector<std::string> splitStringToVector(std::string const str, const char delim) + { + size_t start; + size_t end = 0; + + std::vector<std::string> result; + + while ((start = str.find_first_not_of(delim, end)) != std::string::npos) + { + end = str.find(delim, start); + result.push_back(str.substr(start, end - start)); + } + return result; + } + + /** + * Converts vector of strings to map. Strings should have formed like this: key + delimiter + value. + * In case of a misformed string or zero length vector, returns an empty map. + */ + std::map<std::string, std::string> stringVectorToMap(std::vector<std::string> sVector, const char delimiter); + } // end namespace Util #endif diff --git a/loleaflet/html/loleaflet.html.m4 b/loleaflet/html/loleaflet.html.m4 index 1bb0c44c9..a2c1a45cf 100644 --- a/loleaflet/html/loleaflet.html.m4 +++ b/loleaflet/html/loleaflet.html.m4 @@ -220,6 +220,7 @@ m4_ifelse(MOBILEAPP,[true], <div id="loolwsd-id"></div> <h3>LOKit</h3> <div id="lokit-version"></div> + <div id="os-name" style="text-align:center"><label>%OS_INFO%</label></div> <p>Copyright © _YEAR_, VENDOR.</p> </div> diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp index ce9e12756..9d833c510 100644 --- a/wsd/FileServer.cpp +++ b/wsd/FileServer.cpp @@ -649,6 +649,7 @@ void FileServerRequestHandler::preprocessFile(const HTTPRequest& request, Poco:: Poco::replaceInPlace(preprocess, std::string("%HOST%"), host); Poco::replaceInPlace(preprocess, std::string("%VERSION%"), std::string(LOOLWSD_VERSION_HASH)); Poco::replaceInPlace(preprocess, std::string("%SERVICE_ROOT%"), LOOLWSD::ServiceRoot); + Poco::replaceInPlace(preprocess, std::string("%OS_INFO%"), LOOLWSD::OSInfo); std::string protocolDebug = "false"; if (config.getBool("logging.protocol")) diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 9c040a8fd..54ba8e2b9 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -726,6 +726,7 @@ std::string LOOLWSD::ServerName; std::string LOOLWSD::FileServerRoot; std::string LOOLWSD::ServiceRoot; std::string LOOLWSD::LOKitVersion; +std::string LOOLWSD::OSInfo; std::string LOOLWSD::HostIdentifier; std::string LOOLWSD::ConfigFile = LOOLWSD_CONFIGDIR "/loolwsd.xml"; std::string LOOLWSD::ConfigDir = LOOLWSD_CONFIGDIR "/conf.d"; @@ -749,6 +750,25 @@ std::unique_ptr<TraceFileWriter> LOOLWSD::TraceDumper; std::unique_ptr<ClipboardCache> LOOLWSD::SavedClipboards; #endif +void LOOLWSD::getOSInfo(){ + #if !MOBILEAPP + // It might be neither mobile nor linux (in the future). That is not handled. If it is not mobile, it is Linux. + + // Read operating system info. We can read "os-release" file, located in /etc. + std::ifstream ifs("/etc/os-release"); + std::string str(std::istreambuf_iterator<char>{ifs}, {}); + std::vector<std::string> infoList = Util::splitStringToVector(str, '\n'); + std::map<std::string, std::string> releaseInfo = Util::stringVectorToMap(infoList, '='); + LOOLWSD::OSInfo = "unknown"; + + if (releaseInfo.find("PRETTY_NAME") != releaseInfo.end()) { + LOOLWSD::OSInfo = releaseInfo["PRETTY_NAME"]; + } + #else + // Some more cases might be added in the future. + #endif +} + /// This thread polls basic web serving, and handling of /// websockets before upgrade: when upgraded they go to the /// relevant DocumentBroker poll instead. @@ -886,6 +906,8 @@ void LOOLWSD::initialize(Application& self) AutoPtr<AppConfigMap> defConfig(new AppConfigMap(DefAppConfig)); conf.addWriteable(defConfig, PRIO_SYSTEM); // Lowest priority + LOOLWSD::getOSInfo(); + #if !MOBILEAPP // Load default configuration files, if present. diff --git a/wsd/LOOLWSD.hpp b/wsd/LOOLWSD.hpp index 383263314..469d26bec 100644 --- a/wsd/LOOLWSD.hpp +++ b/wsd/LOOLWSD.hpp @@ -70,6 +70,7 @@ public: static std::string FileServerRoot; static std::string ServiceRoot; ///< There are installations that need prefixing every page with some path. static std::string LOKitVersion; + static std::string OSInfo; static std::string HostIdentifier; ///< A unique random hash that identifies this server static std::string LogLevel; static bool AnonymizeUserData; @@ -219,6 +220,9 @@ public: static std::string getVersionJSON(); + /// Reads OS information, puts them into LOOLWSD::OSInfo variable + static void getOSInfo(); + int innerMain(); protected: _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits