[Libreoffice-commits] online.git: loleaflet/dist loolwsd/FileServer.hpp loolwsd/LOOLWSD.cpp loolwsd/Makefile.am

Jan Holesovsky kendy at collabora.com
Wed Apr 20 10:58:30 UTC 2016


 loleaflet/dist/loleaflet.html |   66 +++++++++++++++++++++---------------------
 loolwsd/FileServer.hpp        |   37 ++++++++++++++++++-----
 loolwsd/LOOLWSD.cpp           |    2 -
 loolwsd/Makefile.am           |    2 -
 4 files changed, 64 insertions(+), 43 deletions(-)

New commits:
commit 97342a2817fa1313190ed48a5a5c7db4ae9c559d
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Wed Apr 20 12:50:14 2016 +0200

    bccu#1653: Make the .html's, .css's and .js's versioned.
    
    It is still possible to access them directly via loleaflet/dist/<something>,
    but such use can lead to unexpected behaviour due to various caching in the
    browsers etc.

diff --git a/loleaflet/dist/loleaflet.html b/loleaflet/dist/loleaflet.html
index a0c48d3..ee3aaf5 100644
--- a/loleaflet/dist/loleaflet.html
+++ b/loleaflet/dist/loleaflet.html
@@ -6,43 +6,43 @@
 
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
-<link rel="stylesheet" href="/loleaflet/dist/leaflet.css">
-<link rel="stylesheet" href="/loleaflet/dist/selectionMarkers.css">
-<link rel="stylesheet" href="/loleaflet/dist/loleaflet.css">
-<link rel="stylesheet" href="/loleaflet/dist/toolbar.css">
-<link rel="stylesheet" href="/loleaflet/dist/partsPreviewControl.css">
-<link rel="stylesheet" href="/loleaflet/dist/scrollBar.css">
-<link rel="stylesheet" href="/loleaflet/dist/searchControl.css">
-<link rel="stylesheet" href="/loleaflet/dist/spreadsheet.css">
-<link rel="stylesheet" href="/loleaflet/dist/branding.css"> <!-- add your logo here -->
-<link rel="stylesheet" href="/loleaflet/dist/plugins/draw-0.2.4/dist/leaflet.draw.css">
-<link rel="stylesheet" href="/loleaflet/dist/scrollbar/jquery.mCustomScrollbar.css">
-<link rel="stylesheet" href="/loleaflet/dist/contextMenu/jquery.contextMenu.css">
-<link rel="stylesheet" href="/loleaflet/dist/dialog/vex.css" />
-<link rel="stylesheet" href="/loleaflet/dist/dialog/vex-theme-plain.css" />
-<link rel="stylesheet" href="/loleaflet/dist/toolbar/w2ui.min.css" />
-<link rel="stylesheet" href="/loleaflet/dist/toolbar/select2.min.css" />
+<link rel="stylesheet" href="/loleaflet/%VERSION%/leaflet.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/selectionMarkers.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/loleaflet.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/toolbar.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/partsPreviewControl.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/scrollBar.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/searchControl.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/spreadsheet.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/branding.css"> <!-- add your logo here -->
+<link rel="stylesheet" href="/loleaflet/%VERSION%/plugins/draw-0.2.4/dist/leaflet.draw.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/scrollbar/jquery.mCustomScrollbar.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/contextMenu/jquery.contextMenu.css">
+<link rel="stylesheet" href="/loleaflet/%VERSION%/dialog/vex.css" />
+<link rel="stylesheet" href="/loleaflet/%VERSION%/dialog/vex-theme-plain.css" />
+<link rel="stylesheet" href="/loleaflet/%VERSION%/toolbar/w2ui.min.css" />
+<link rel="stylesheet" href="/loleaflet/%VERSION%/toolbar/select2.min.css" />
 <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/ui-lightness/jquery-ui.css">
-<link rel="stylesheet" href="/loleaflet/dist/toolbar/evol.colorpicker.min.css">
-<link rel="localizations" href="/loleaflet/dist/l10n/localizations.json" type="application/vnd.oftn.l10n+json"/>
-<link rel="localizations" href="/loleaflet/dist/l10n/styles-localizations.json" type="application/vnd.oftn.l10n+json" />
+<link rel="stylesheet" href="/loleaflet/%VERSION%/toolbar/evol.colorpicker.min.css">
+<link rel="localizations" href="/loleaflet/%VERSION%/l10n/localizations.json" type="application/vnd.oftn.l10n+json"/>
+<link rel="localizations" href="/loleaflet/%VERSION%/l10n/styles-localizations.json" type="application/vnd.oftn.l10n+json" />
 <style type="text/css"></style></head>
 <body>
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
-    <script src="/loleaflet/dist/l10n/json2.min.js"></script>
-    <script src="/loleaflet/dist/l10n/l10n.min.js"></script>
-    <script src="/loleaflet/dist/toolbar/w2ui.min.js"></script>
-    <script src="/loleaflet/dist/toolbar/select2.min.js"></script>
+    <script src="/loleaflet/%VERSION%/l10n/json2.min.js"></script>
+    <script src="/loleaflet/%VERSION%/l10n/l10n.min.js"></script>
+    <script src="/loleaflet/%VERSION%/toolbar/w2ui.min.js"></script>
+    <script src="/loleaflet/%VERSION%/toolbar/select2.min.js"></script>
     <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js"></script>
-    <script src="/loleaflet/dist/toolbar/evol.colorpicker.min.js"></script>
-    <script src="/loleaflet/dist/toolbar/jquery.simplemodal.1.4.4.min.js"></script>
-    <script src="/loleaflet/dist/leaflet-src.js"></script>
-    <script src="/loleaflet/dist/plugins/draw-0.2.4/dist/leaflet.draw.js"></script>
-    <script src="/loleaflet/dist/scrollbar/jquery.mCustomScrollbar.js"></script>
-    <script src="/loleaflet/dist/contextMenu/jquery.contextMenu.js"></script>
-    <script src="/loleaflet/dist/contextMenu/jquery.ui.position.min.js"></script>
-    <script src="/loleaflet/dist/dialog/vex.combined.min.js"></script>
-    <script src="/loleaflet/dist/branding.js"></script> <!-- logo onclick handler -->
+    <script src="/loleaflet/%VERSION%/toolbar/evol.colorpicker.min.js"></script>
+    <script src="/loleaflet/%VERSION%/toolbar/jquery.simplemodal.1.4.4.min.js"></script>
+    <script src="/loleaflet/%VERSION%/leaflet-src.js"></script>
+    <script src="/loleaflet/%VERSION%/plugins/draw-0.2.4/dist/leaflet.draw.js"></script>
+    <script src="/loleaflet/%VERSION%/scrollbar/jquery.mCustomScrollbar.js"></script>
+    <script src="/loleaflet/%VERSION%/contextMenu/jquery.contextMenu.js"></script>
+    <script src="/loleaflet/%VERSION%/contextMenu/jquery.ui.position.min.js"></script>
+    <script src="/loleaflet/%VERSION%/dialog/vex.combined.min.js"></script>
+    <script src="/loleaflet/%VERSION%/branding.js"></script> <!-- logo onclick handler -->
     <script>vex.defaultOptions.className = 'vex-theme-plain';</script>
     <script>var _ = function (string) {return string.toLocaleString();};</script>
 
@@ -124,5 +124,5 @@
 
     </script>
 
-    <script src="/loleaflet/dist/toolbar/toolbar.js"></script>
+    <script src="/loleaflet/%VERSION%/toolbar/toolbar.js"></script>
 </body></html>
diff --git a/loolwsd/FileServer.hpp b/loolwsd/FileServer.hpp
index d869e11..b7faf4a 100644
--- a/loolwsd/FileServer.hpp
+++ b/loolwsd/FileServer.hpp
@@ -10,6 +10,8 @@
 #ifndef INCLUDED_FILESERVER_HPP
 #define INCLUDED_FILESERVER_HPP
 
+#include "config.h"
+
 #include <string>
 #include <vector>
 
@@ -140,12 +142,12 @@ public:
                         throw Poco::Net::NotAuthenticatedException("Invalid admin login");
                 }
 
-                const auto path = Poco::Path(LOOLWSD::FileServerRoot, requestUri.getPath());
+                const auto path = Poco::Path(LOOLWSD::FileServerRoot, getRequestPathname(request));
                 const auto filepath = path.absolute().toString();
                 if (filepath.find(LOOLWSD::FileServerRoot) != 0)
                 {
                     // Accessing unauthorized path.
-                    throw Poco::FileNotFoundException("Invalid or forbidden file path: [" + filepath + "].");
+                    throw Poco::FileAccessDeniedException("Invalid or forbidden file path: [" + filepath + "].");
                 }
 
                 const std::size_t extPoint = endPoint.find_last_of(".");
@@ -175,30 +177,48 @@ public:
             response.setContentLength(0);
             response.send();
         }
+        catch (const Poco::FileAccessDeniedException& exc)
+        {
+            Log::error("FileServerRequestHandler: " + exc.displayText());
+            response.setStatusAndReason(HTTPResponse::HTTP_FORBIDDEN);
+            response.setContentLength(0); // TODO return some 403 page?
+            response.send();
+        }
         catch (const Poco::FileNotFoundException& exc)
         {
             Log::error("FileServerRequestHandler: " + exc.displayText());
             response.setStatusAndReason(HTTPResponse::HTTP_NOT_FOUND);
-            response.setContentLength(0);
+            response.setContentLength(0); // TODO return some 404 page?
             response.send();
         }
     }
 
 private:
 
+    std::string getRequestPathname(const HTTPServerRequest& request)
+    {
+        Poco::URI requestUri(request.getURI());
+        // avoid .'s and ..'s
+        requestUri.normalize();
+
+        std::string path(requestUri.getPath());
+
+        // convert version back to a real file name
+        Poco::replaceInPlace(path, std::string("/loleaflet/" LOOLWSD_VERSION "/"), std::string("/loleaflet/dist/"));
+
+        return path;
+    }
+
     void preprocessFile(HTTPServerRequest& request, HTTPServerResponse& response)
     {
         HTMLForm form(request, request.stream());
 
-        std::string preprocess;
         const auto host = (LOOLWSD::SSLEnabled? "wss://": "ws://") + request.getHost();
-
-        Poco::URI requestUri(request.getURI());
-        requestUri.normalize(); // avoid .'s and ..'s
-        const auto path = Poco::Path(LOOLWSD::FileServerRoot, requestUri.getPath());
+        const auto path = Poco::Path(LOOLWSD::FileServerRoot, getRequestPathname(request));
 
         Log::debug("Preprocessing file: " + path.toString());
 
+        std::string preprocess;
         FileInputStream file(path.toString());
         StreamCopier::copyToString(file, preprocess);
         file.close();
@@ -206,6 +226,7 @@ private:
         Poco::replaceInPlace(preprocess, std::string("%ACCESS_TOKEN%"), form.get("access_token", ""));
         Poco::replaceInPlace(preprocess, std::string("%ACCESS_TOKEN_TTL%"), form.get("access_token_ttl", ""));
         Poco::replaceInPlace(preprocess, std::string("%HOST%"), host);
+        Poco::replaceInPlace(preprocess, std::string("%VERSION%"), std::string(LOOLWSD_VERSION));
 
         response.setContentType("text/html");
         response.setContentLength(preprocess.length());
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 5248b38..e6886a4 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -657,7 +657,7 @@ private:
         const std::string urlsrc = "urlsrc";
         const std::string uriValue = (LOOLWSD::SSLEnabled ? "https://" : "http://") +
             (LOOLWSD::ServerName.empty() ? request.getHost() : LOOLWSD::ServerName) +
-            "/loleaflet/dist/loleaflet.html?";
+            "/loleaflet/" LOOLWSD_VERSION "/loleaflet.html?";
 
         InputSource inputSrc(discoveryPath);
         DOMParser parser;
diff --git a/loolwsd/Makefile.am b/loolwsd/Makefile.am
index 8e3f3eb..c7ac590 100644
--- a/loolwsd/Makefile.am
+++ b/loolwsd/Makefile.am
@@ -134,7 +134,7 @@ run: all @JAILS_PATH@ @SYSTEMPLATE_PATH@/system_stamp
 	@echo "Launching loolwsd - launch this in your browser:"
 	@cp $(abs_top_srcdir)/test/data/hello.odt $(abs_top_srcdir)/test/data/hello-world.odt
 	@PROTOCOL="http" ; if test "z at ENABLE_SSL@" != "z"; then PROTOCOL="https" ; fi ; \
-		echo "   $$PROTOCOL://localhost:9980/loleaflet/dist/loleaflet.html?file_path=file://$(abs_top_srcdir)/test/data/hello-world.odt"
+		echo "   $$PROTOCOL://localhost:9980/loleaflet/@LOOLWSD_VERSION@/loleaflet.html?file_path=file://$(abs_top_srcdir)/test/data/hello-world.odt"
 	@echo
 	./loolwsd --systemplate="@SYSTEMPLATE_PATH@" --lotemplate="@LO_PATH@" \
                   --childroot="@JAILS_PATH@" --allowlocalstorage


More information about the Libreoffice-commits mailing list