loleaflet/js/global.js |   16 +++++++++++++---
 wsd/FileServer.cpp     |   27 +++++++++++++++++++++++++--
 wsd/LOOLWSD.cpp        |    2 +-
 3 files changed, 39 insertions(+), 6 deletions(-)

New commits:
commit 5721f5855094f3408ad7426cf477415c2263fc0b
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Tue Apr 28 15:18:24 2020 +0100
Commit:     Michael Meeks <michael.me...@collabora.com>
CommitDate: Tue Apr 28 16:37:37 2020 +0200

    Improve error handling on failure to fetch session id.
    
    Change-Id: I8314fad3566f70abab78a6592a99d70597e40706
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93078
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>

diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js
index 1e09a86e0..c3c8343ad 100644
--- a/loleaflet/js/global.js
+++ b/loleaflet/js/global.js
@@ -311,9 +311,19 @@
                        req.responseType = 'text';
                        req.addEventListener('load', function() {
                                console.debug('got session: ' + 
this.responseText);
-                               that.sessionId = this.responseText;
-                               that.readyState = 1;
-                               that.onopen();
+                               if (this.responseText.indexOf('\n') >= 0)
+                               {
+                                       console.debug('Error: failed to fetch 
session id!');
+                                       that.onerror();
+                                       that.onclose();
+                                       that.readyState = 3;
+                               }
+                               else
+                               {
+                                       that.sessionId = this.responseText;
+                                       that.readyState = 1;
+                                       that.onopen();
+                               }
                        });
                        req.send('');
                };
commit c9ed710518725872a583ea31cac3b60178daa540
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Tue Apr 28 15:17:23 2020 +0100
Commit:     Michael Meeks <michael.me...@collabora.com>
CommitDate: Tue Apr 28 16:37:29 2020 +0200

    Proxy: convert ProxyPrefix to a full URL.
    
    Thus encoding the actual proxy's http/https state.
    
    Change-Id: Ia7d5b8fb9379364b6c10a2c84d609f49e215ccb1
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93077
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>

diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp
index 8073860c2..99ac332b3 100644
--- a/wsd/FileServer.cpp
+++ b/wsd/FileServer.cpp
@@ -647,15 +647,38 @@ namespace {
         if (!request.has("ProxyPrefix"))
             return LOOLWSD::ServiceRoot;
         std::string proxyPrefix = request.get("ProxyPrefix", "");
+
+        // skip url to the root path.
+        size_t pos = proxyPrefix.find("://");
+        if (pos != std::string::npos) {
+            pos = proxyPrefix.find("/", pos + 3);
+            if (pos != std::string::npos)
+                proxyPrefix = proxyPrefix.substr(pos);
+            else
+                LOG_DBG("Unusual proxy prefix '" << proxyPrefix << "'");
+        } else
+            LOG_DBG("No http[s]:// in unusual proxy prefix '" << proxyPrefix);
         return proxyPrefix;
     }
+
+    std::string getWebSocketUrl(const HTTPRequest &request)
+    {
+        bool ssl = (LOOLWSD::isSSLEnabled() || LOOLWSD::isSSLTermination());
+        std::string proxyPrefix = request.get("ProxyPrefix", "");
+        std::string serverName = LOOLWSD::ServerName.empty() ? 
request.getHost() : LOOLWSD::ServerName;
+        if (proxyPrefix.size() > 0)
+        {
+            ssl = !strcmp(proxyPrefix.c_str(), "https://";);
+            serverName = request.getHost();
+        }
+        return (ssl ? "wss://" : "ws://") + serverName;
+    }
 }
 
 void FileServerRequestHandler::preprocessFile(const HTTPRequest& request, 
Poco::MemoryInputStream& message,
                                               const 
std::shared_ptr<StreamSocket>& socket)
 {
-    const auto host = ((LOOLWSD::isSSLEnabled() || 
LOOLWSD::isSSLTermination()) ? "wss://" : "ws://")
-                    + (LOOLWSD::ServerName.empty() ? request.getHost() : 
LOOLWSD::ServerName);
+    const auto host = getWebSocketUrl(request);
     const Poco::URI::QueryParameters params = 
Poco::URI(request.getURI()).getQueryParameters();
 
     // Is this a file we read at startup - if not; its not for serving.
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index b996c9877..329051698 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -2504,7 +2504,7 @@ private:
             + (LOOLWSD::ServerName.empty() ? request.getHost() : 
LOOLWSD::ServerName)
             + LOOLWSD::ServiceRoot;
         if (request.has("ProxyPrefix"))
-            srvUrl += request["ProxyPrefix"];
+            srvUrl = request["ProxyPrefix"];
         Poco::replaceInPlace(xml, std::string("%SRV_URI%"), srvUrl);
 
         // TODO: Refactor this to some common handler.
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to