wsd/FileServer.cpp |   46 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 42 insertions(+), 4 deletions(-)

New commits:
commit e228e4138944553b34b4afcca55ed1ff6556f2b9
Author:     Jan Holesovsky <ke...@collabora.com>
AuthorDate: Wed Apr 15 15:37:49 2020 +0200
Commit:     Jan Holesovsky <ke...@collabora.com>
CommitDate: Thu Apr 16 11:34:41 2020 +0200

    Welcome: Handle language versions of the welcome files.
    
    If eg. welcome-cs-CZ.html is not available, try welcome-cs.html and
    fallback to welcome.html (which should be the en-US version).
    
    Change-Id: I5df6a6d6da97fb3c111a709a63a54ee86248f73d
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/92274
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Jan Holesovsky <ke...@collabora.com>

diff --git a/loleaflet/welcome/welcome-en-US.html 
b/loleaflet/welcome/welcome.html
similarity index 100%
rename from loleaflet/welcome/welcome-en-US.html
rename to loleaflet/welcome/welcome.html
diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp
index e5e08e92a..027655dc9 100644
--- a/wsd/FileServer.cpp
+++ b/wsd/FileServer.cpp
@@ -56,6 +56,10 @@ using Poco::Util::Application;
 
 std::map<std::string, std::pair<std::string, std::string>> 
FileServerRequestHandler::FileHash;
 
+/// Place from where we serve the welcome-<lang>.html; defaults to
+/// welcome.html if no lang matches.
+#define WELCOME_ENDPOINT "/loleaflet/dist/welcome"
+
 namespace {
 
 int functionConversation(int /*num_msg*/, const struct pam_message** /*msg*/,
@@ -283,8 +287,11 @@ void FileServerRequestHandler::handleRequest(const 
HTTPRequest& request, Poco::M
 
         std::vector<std::string> requestSegments;
         requestUri.getPathSegments(requestSegments);
-        const std::string relPath = getRequestPathname(request);
-        const std::string endPoint = requestSegments[requestSegments.size() - 
1];
+        if (requestSegments.size() < 1)
+            throw Poco::FileNotFoundException("Invalid URI request: [" + 
requestUri.toString() + "].");
+
+        std::string relPath = getRequestPathname(request);
+        std::string endPoint = requestSegments[requestSegments.size() - 1];
         const auto& config = Application::instance().config();
 
         if (request.getMethod() == HTTPRequest::HTTP_POST && endPoint == 
"logging.html")
@@ -301,8 +308,39 @@ void FileServerRequestHandler::handleRequest(const 
HTTPRequest& request, Poco::M
             }
         }
 
+        // handling of the language in welcome-*.html - shorten the langtag as
+        // necessary, if we don't have the particular language version
+        if (Util::startsWith(relPath, WELCOME_ENDPOINT "/"))
+        {
+            bool found = true;
+            while (FileHash.find(relPath) == FileHash.end())
+            {
+                size_t dot = relPath.find_last_of('.');
+                if (dot == std::string::npos)
+                {
+                    found = false;
+                    break;
+                }
+
+                size_t dash = relPath.find_last_of("-_", dot);
+                if (dash == std::string::npos)
+                {
+                    found = false;
+                    break;
+                }
+
+                relPath = relPath.substr(0, dash) + relPath.substr(dot);
+                LOG_TRC("Shortening welcome file request to: " << relPath);
+            }
+
+            if (!found)
+                throw Poco::FileNotFoundException("Invalid URI welcome file 
request: [" + requestUri.toString() + "].");
+
+            endPoint = relPath.substr(sizeof(WELCOME_ENDPOINT));
+        }
+
         // Is this a file we read at startup - if not; its not for serving.
-        if (requestSegments.size() < 1 || FileHash.find(relPath) == 
FileHash.end())
+        if (FileHash.find(relPath) == FileHash.end())
             throw Poco::FileNotFoundException("Invalid URI request: [" + 
requestUri.toString() + "].");
 
         const std::string loleafletHtml = config.getString("loleaflet_html", 
"loleaflet.html");
@@ -562,7 +600,7 @@ void FileServerRequestHandler::initialize()
     if (!LOOLWSD::WelcomeFilesRoot.empty())
     {
         try {
-            readDirToHash(LOOLWSD::WelcomeFilesRoot, "", 
"/loleaflet/dist/welcome");
+            readDirToHash(LOOLWSD::WelcomeFilesRoot, "", WELCOME_ENDPOINT);
         } catch (...) {
             LOG_ERR("Failed to read from directory " << 
LOOLWSD::WelcomeFilesRoot);
         }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to