[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-1-0' - 3 commits - loolwsd/favicon.ico loolwsd/FileServer.hpp loolwsd/LOOLWSD.cpp loolwsd/LOOLWSD.hpp loolwsd/loolwsd.spec.in loolwsd/loolwsd.xml.in loolwsd/Makefile.am loolwsd/Storage.cpp

Andras Timar andras.timar at collabora.com
Wed Sep 14 07:05:01 UTC 2016


 loolwsd/FileServer.hpp  |    2 +-
 loolwsd/LOOLWSD.cpp     |   41 +++++++++++++++++++++++++++++++++++++----
 loolwsd/LOOLWSD.hpp     |    7 +++++++
 loolwsd/Makefile.am     |    2 ++
 loolwsd/Storage.cpp     |    2 +-
 loolwsd/favicon.ico     |binary
 loolwsd/loolwsd.spec.in |    1 +
 loolwsd/loolwsd.xml.in  |    1 +
 8 files changed, 50 insertions(+), 6 deletions(-)

New commits:
commit af71a9be15953c2b0c72004243e8a04d6c7afa9a
Author: Andras Timar <andras.timar at collabora.com>
Date:   Sun Aug 28 21:41:28 2016 +0200

    loolwsd: add support of SSL termination

diff --git a/loolwsd/FileServer.hpp b/loolwsd/FileServer.hpp
index 874db99..3bcf113 100644
--- a/loolwsd/FileServer.hpp
+++ b/loolwsd/FileServer.hpp
@@ -217,7 +217,7 @@ private:
     {
         HTMLForm form(request, request.stream());
 
-        const auto host = (LOOLWSD::isSSLEnabled() ? "wss://" : "ws://") + (LOOLWSD::ServerName.empty() ? request.getHost() : LOOLWSD::ServerName);
+        const auto host = ((LOOLWSD::isSSLEnabled() || LOOLWSD::isSSLTermination()) ? "wss://" : "ws://") + (LOOLWSD::ServerName.empty() ? request.getHost() : LOOLWSD::ServerName);
         const auto path = Poco::Path(LOOLWSD::FileServerRoot, getRequestPathname(request));
 
         Log::debug("Preprocessing file: " + path.toString());
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index c14e986..e9ce1d6 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -782,7 +782,7 @@ private:
         const std::string urlsrc = "urlsrc";
         const auto& config = Application::instance().config();
         const std::string loleafletHtml = config.getString("loleaflet_html", "loleaflet.html");
-        const std::string uriValue = (LOOLWSD::isSSLEnabled() ? "https://" : "http://") +
+        const std::string uriValue = ((LOOLWSD::isSSLEnabled() || LOOLWSD::isSSLTermination()) ? "https://" : "http://") +
             (LOOLWSD::ServerName.empty() ? request.getHost() : LOOLWSD::ServerName) +
             "/loleaflet/" LOOLWSD_VERSION_HASH "/" + loleafletHtml + "?";
 
@@ -1240,7 +1240,7 @@ std::string lcl_getLaunchURI()
     aAbsTopSrcDir = Poco::Path(aAbsTopSrcDir).absolute().toString();
 
     std::string aLaunchURI("    ");
-    aLaunchURI += ((LOOLWSD::isSSLEnabled()) ? "https://" : "http://");
+    aLaunchURI += ((LOOLWSD::isSSLEnabled() || LOOLWSD::isSSLTermination()) ? "https://" : "http://");
     aLaunchURI += LOOLWSD_TEST_HOST ":";
     aLaunchURI += std::to_string(ClientPortNumber);
     aLaunchURI += LOOLWSD_TEST_LOLEAFLET_UI;
@@ -1263,6 +1263,7 @@ std::string LOOLWSD::ServerName;
 std::string LOOLWSD::FileServerRoot;
 std::string LOOLWSD::LOKitVersion;
 Util::RuntimeConstant<bool> LOOLWSD::SSLEnabled;
+Util::RuntimeConstant<bool> LOOLWSD::SSLTermination;
 
 static std::string UnitTestLibrary;
 
@@ -1322,6 +1323,7 @@ void LOOLWSD::initialize(Application& self)
         { "logging.color", "true" },
         { "logging.level", "trace" },
         { "ssl.enable", "true" },
+        { "ssl.termination", "true" },
         { "ssl.cert_file_path", LOOLWSD_CONFIGDIR "/cert.pem" },
         { "ssl.key_file_path", LOOLWSD_CONFIGDIR "/key.pem" },
         { "ssl.ca_file_path", LOOLWSD_CONFIGDIR "/ca-chain.cert.pem" },
@@ -1367,6 +1369,12 @@ void LOOLWSD::initialize(Application& self)
         Log::warn("SSL support: SSL is disabled.");
     }
 
+#if ENABLE_SSL
+    LOOLWSD::SSLTermination.set(getConfigValue<bool>(conf, "ssl.termination", true));
+#else
+    LOOLWSD::SSLTermination.set(false);
+#endif
+
     Cache = getPathFromConfig("tile_cache_path");
     SysTemplate = getPathFromConfig("sys_template_path");
     LoTemplate = getPathFromConfig("lo_template_path");
diff --git a/loolwsd/LOOLWSD.hpp b/loolwsd/LOOLWSD.hpp
index ff282d6..bfc1310 100644
--- a/loolwsd/LOOLWSD.hpp
+++ b/loolwsd/LOOLWSD.hpp
@@ -57,6 +57,12 @@ public:
     {
         return LOOLWSD::SSLEnabled.get();
     }
+    static
+    bool isSSLTermination()
+    {
+        return LOOLWSD::SSLTermination.get();
+    }
+
 
 protected:
     void initialize(Poco::Util::Application& self) override;
@@ -67,6 +73,7 @@ protected:
 
 private:
     static Util::RuntimeConstant<bool> SSLEnabled;
+    static Util::RuntimeConstant<bool> SSLTermination;
 
     void initializeSSL();
     void displayHelp();
diff --git a/loolwsd/Storage.cpp b/loolwsd/Storage.cpp
index 3fc75b7..9f1694e 100644
--- a/loolwsd/Storage.cpp
+++ b/loolwsd/Storage.cpp
@@ -241,7 +241,7 @@ namespace {
 static inline
 Poco::Net::HTTPClientSession* lcl_getHTTPClientSession(const Poco::URI& uri)
 {
-    return (LOOLWSD::isSSLEnabled()) ? new Poco::Net::HTTPSClientSession(uri.getHost(), uri.getPort(), Poco::Net::SSLManager::instance().defaultClientContext())
+    return (LOOLWSD::isSSLEnabled() || LOOLWSD::isSSLTermination()) ? new Poco::Net::HTTPSClientSession(uri.getHost(), uri.getPort(), Poco::Net::SSLManager::instance().defaultClientContext())
                        : new Poco::Net::HTTPClientSession(uri.getHost(), uri.getPort());
 }
 
diff --git a/loolwsd/loolwsd.xml.in b/loolwsd/loolwsd.xml.in
index 6366dd6..880fa5c 100644
--- a/loolwsd/loolwsd.xml.in
+++ b/loolwsd/loolwsd.xml.in
@@ -27,6 +27,7 @@
 
     <ssl desc="SSL settings">
         <enable type="bool" default="true">true</enable>
+        <termination desc="Connection via proxy where loolwsd acts as working via https, but actually uses http." type="bool" default="true">true</termination>
         <cert_file_path desc="Path to the cert file" relative="false">/etc/loolwsd/cert.pem</cert_file_path>
         <key_file_path desc="Path to the key file" relative="false">/etc/loolwsd/key.pem</key_file_path>
         <ca_file_path desc="Path to the ca file" relative="false">/etc/loolwsd/ca-chain.cert.pem</ca_file_path>
commit 5ee7380e3409824c216b87e9d5df7e6af3119178
Author: Andras Timar <andras.timar at collabora.com>
Date:   Fri Aug 26 13:40:20 2016 +0200

    loolwsd: response to HTTP GET or HEAD / (e.g. for checking if server is alive)
    
    (cherry picked from commit a5aa138774b028d2f366f24ce3ec8371d7e31e3a)
    (cherry picked from commit 274d68644d8adf20628e92c3d5e55f9687196adb)

diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 93be99b..c14e986 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -851,7 +851,21 @@ public:
         bool responded = false;
         try
         {
-            if (request.getMethod() == HTTPRequest::HTTP_GET && request.getURI() == "/favicon.ico")
+            if ((request.getMethod() == HTTPRequest::HTTP_GET || request.getMethod() == HTTPRequest::HTTP_HEAD) && request.getURI() == "/")
+            {
+                std::string mimeType = "text/plain";
+                std::string responseString = "OK";
+                response.setContentLength(responseString.length());
+                response.setContentType(mimeType);
+                response.setChunkedTransferEncoding(false);
+                std::ostream& ostr = response.send();
+                if (request.getMethod() == HTTPRequest::HTTP_GET)
+                {
+                    ostr << responseString;
+                }
+                responded = true;
+            }
+            else if (request.getMethod() == HTTPRequest::HTTP_GET && request.getURI() == "/favicon.ico")
             {
                 std::string mimeType = "image/vnd.microsoft.icon";
                 std::string faviconPath = Path(Application::instance().commandPath()).parent().toString() + "favicon.ico";
commit 11c4f821f61aa36c0d22f731e5746f22f681973c
Author: Andras Timar <andras.timar at collabora.com>
Date:   Fri Aug 26 12:57:33 2016 +0200

    loolwsd: add favicon
    
    (cherry picked from commit 619ddb4c2f06bcd22e69f4498dc4730a5e1d2eed)

diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 240064b..93be99b 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -851,7 +851,19 @@ public:
         bool responded = false;
         try
         {
-            if (request.getMethod() == HTTPRequest::HTTP_GET && request.getURI() == "/hosting/discovery")
+            if (request.getMethod() == HTTPRequest::HTTP_GET && request.getURI() == "/favicon.ico")
+            {
+                std::string mimeType = "image/vnd.microsoft.icon";
+                std::string faviconPath = Path(Application::instance().commandPath()).parent().toString() + "favicon.ico";
+                if (!File(faviconPath).exists())
+                {
+                    faviconPath = LOOLWSD_DATADIR "/favicon.ico";
+                }
+                response.setContentType(mimeType);
+                response.sendFile(faviconPath, mimeType);
+                responded = true;
+            }
+            else if (request.getMethod() == HTTPRequest::HTTP_GET && request.getURI() == "/hosting/discovery")
             {
                 // http://server/hosting/discovery
                 responded = handleGetWOPIDiscovery(request, response);
@@ -1148,7 +1160,6 @@ public:
         logger << Log::end;
 
         // Routing
-        // FIXME: Some browsers (all?) hit for /favicon.ico. Create a nice favicon and add to routes
         Poco::URI requestUri(request.getURI());
         std::vector<std::string> reqPathSegs;
         requestUri.getPathSegments(reqPathSegs);
diff --git a/loolwsd/Makefile.am b/loolwsd/Makefile.am
index 85081d1..98f1061 100644
--- a/loolwsd/Makefile.am
+++ b/loolwsd/Makefile.am
@@ -9,6 +9,7 @@ dist_bin_SCRIPTS = loolwsd-systemplate-setup
 loolwsddatadir = @LOOLWSD_DATADIR@
 
 loolwsddata_DATA = discovery.xml \
+                   favicon.ico \
                    robots.txt
 
 loolwsdconfigdir = @LOOLWSD_CONFIGDIR@
@@ -111,6 +112,7 @@ noinst_HEADERS = Admin.hpp \
                  security.h
 
 EXTRA_DIST = discovery.xml \
+             favicon.ico \
              loolwsd.xml.in \
              loolwsd.service \
              robots.txt \
diff --git a/loolwsd/favicon.ico b/loolwsd/favicon.ico
new file mode 100644
index 0000000..10c0557
Binary files /dev/null and b/loolwsd/favicon.ico differ
diff --git a/loolwsd/loolwsd.spec.in b/loolwsd/loolwsd.spec.in
index 3814682..f444cce 100644
--- a/loolwsd/loolwsd.spec.in
+++ b/loolwsd/loolwsd.spec.in
@@ -103,6 +103,7 @@ tar cf - . | (cd %{buildroot}/usr/share/loolwsd/loleaflet && tar xf -)
 /usr/bin/loolmount
 /usr/bin/looltool
 /usr/share/loolwsd/discovery.xml
+/usr/share/loolwsd/favicon.ico
 /usr/share/loolwsd/robots.txt
 /usr/share/loolwsd/loleaflet
 %{_unitdir}/loolwsd.service


More information about the Libreoffice-commits mailing list