loleaflet/dist/loleaflet.html | 14 +++++++------- loolwsd.xml.in | 1 + wsd/FileServer.cpp | 1 + wsd/LOOLWSD.cpp | 16 ++++++++++++++++ wsd/LOOLWSD.hpp | 1 + 5 files changed, 26 insertions(+), 7 deletions(-)
New commits: commit 6d09c64f355152d322bf43ba4760627a1bb68f6b Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Fri Sep 7 00:25:50 2018 +0200 Commit: Michael Meeks <michael.me...@collabora.com> CommitDate: Mon Sep 10 22:59:19 2018 +0200 ServiceRoot: Allow prefixing all the URI paths with a given prefix. For instances that has to run in a deeper path like https://server/something/blah/loleaflet/HASH/loleaflet.html. Change-Id: Idacdaf9087d682fd527c3af2ea45d6b51a33908e Reviewed-on: https://gerrit.libreoffice.org/60173 Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Michael Meeks <michael.me...@collabora.com> diff --git a/loleaflet/dist/loleaflet.html b/loleaflet/dist/loleaflet.html index 3a3424c79..ce9cdcb74 100644 --- a/loleaflet/dist/loleaflet.html +++ b/loleaflet/dist/loleaflet.html @@ -19,10 +19,10 @@ window.addEventListener('message', PostMessageReadyListener, false); </script> <!--%BRANDING_CSS%--> <!-- add your logo here --> -<link rel="localizations" href="/loleaflet/%VERSION%/l10n/localizations.json" type="application/vnd.oftn.l10n+json"/> -<link rel="localizations" href="/loleaflet/%VERSION%/l10n/locore-localizations.json" type="application/vnd.oftn.l10n+json" /> -<link rel="localizations" href="/loleaflet/%VERSION%/l10n/help-localizations.json" type="application/vnd.oftn.l10n+json"/> -<link rel="localizations" href="/loleaflet/%VERSION%/l10n/uno-localizations.json" type="application/vnd.oftn.l10n+json" /> +<link rel="localizations" href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/localizations.json" type="application/vnd.oftn.l10n+json"/> +<link rel="localizations" href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/locore-localizations.json" type="application/vnd.oftn.l10n+json" /> +<link rel="localizations" href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/help-localizations.json" type="application/vnd.oftn.l10n+json"/> +<link rel="localizations" href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/uno-localizations.json" type="application/vnd.oftn.l10n+json" /> <body style="user-select: none;"> <!--The "controls" div holds map controls such as the Zoom button and it's separated from the map in order to have the controls on the top @@ -104,7 +104,7 @@ window.idleTimeoutSecs = %IDLE_TIMEOUT_SECS%; </script> <!--%BRANDING_JS%--> <!-- logo onclick handler --> - <script src="/loleaflet/%VERSION%/bundle.js"></script> - <script src="/loleaflet/%VERSION%/toolbar/w2ui-1.5.rc1.min.js"></script> - <script src="/loleaflet/%VERSION%/toolbar/toolbar.js"></script> + <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/bundle.js"></script> + <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/toolbar/w2ui-1.5.rc1.min.js"></script> + <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/toolbar/toolbar.js"></script> </body></html> diff --git a/loolwsd.xml.in b/loolwsd.xml.in index 7aae4c8d6..74414de97 100644 --- a/loolwsd.xml.in +++ b/loolwsd.xml.in @@ -68,6 +68,7 @@ <net desc="Network settings"> <proto type="string" default="all" desc="Protocol to use IPv4, IPv6 or all for both">all</proto> + <service_root type="path" default="" desc="Prefix all the pages, websockets, etc. with this path."></service_root> </net> <ssl desc="SSL settings"> diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp index d7fc0df7b..afd7f63af 100644 --- a/wsd/FileServer.cpp +++ b/wsd/FileServer.cpp @@ -614,6 +614,7 @@ void FileServerRequestHandler::preprocessFile(const HTTPRequest& request, Poco:: Poco::replaceInPlace(preprocess, std::string("%ACCESS_HEADER%"), escapedAccessHeader); 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); static const std::string linkCSS("<link rel=\"stylesheet\" href=\"/loleaflet/" LOOLWSD_VERSION_HASH "/%s.css\">"); static const std::string scriptJS("<script src=\"/loleaflet/" LOOLWSD_VERSION_HASH "/%s.js\"></script>"); diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 404597676..087abbd27 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -553,6 +553,7 @@ inline std::string getLaunchURI() std::ostringstream oss; oss << getLaunchBase(""); + oss << LOOLWSD::ServiceRoot; oss << LOOLWSD_TEST_LOLEAFLET_UI; oss << "?file_path=file://"; oss << Poco::Path(aAbsTopSrcDir).absolute().toString(); @@ -597,6 +598,7 @@ std::string LOOLWSD::LoTemplate; std::string LOOLWSD::ChildRoot; std::string LOOLWSD::ServerName; std::string LOOLWSD::FileServerRoot; +std::string LOOLWSD::ServiceRoot; std::string LOOLWSD::LOKitVersion; std::string LOOLWSD::ConfigFile = LOOLWSD_CONFIGDIR "/loolwsd.xml"; std::string LOOLWSD::ConfigDir = LOOLWSD_CONFIGDIR "/conf.d"; @@ -695,6 +697,7 @@ void LOOLWSD::initialize(Application& self) { "loleaflet_html", "loleaflet.html" }, { "loleaflet_logging", "false" }, { "net.proto", "all" }, + { "net.service_root", "" }, { "num_prespawn_children", "1" }, { "per_document.autosave_duration_secs", "300" }, { "per_document.idle_timeout_secs", "3600" }, @@ -870,6 +873,11 @@ void LOOLWSD::initialize(Application& self) LOG_WRN("Invalid protocol: " << proto); } + // Prefix for the loolwsd pages; should not end with a '/' + ServiceRoot = getPathFromConfig("net.service_root"); + while (ServiceRoot.length() > 0 && ServiceRoot[ServiceRoot.length() - 1] == '/') + ServiceRoot.pop_back(); + #if ENABLE_SSL LOOLWSD::SSLEnabled.set(getConfigValue<bool>(conf, "ssl.enable", true)); #else @@ -1802,6 +1810,13 @@ private: try { + // Check and remove the ServiceRoot from the request.getURI() + if (!Util::startsWith(request.getURI(), LOOLWSD::ServiceRoot)) + throw BadRequestException("The request does not start with prefix: " + LOOLWSD::ServiceRoot); + + std::string requestURIString(request.getURI().substr(LOOLWSD::ServiceRoot.length())); + request.setURI(requestURIString); + // Routing Poco::URI requestUri(request.getURI()); std::vector<std::string> reqPathSegs; @@ -2432,6 +2447,7 @@ private: const std::string loleafletHtml = config.getString("loleaflet_html", "loleaflet.html"); const std::string uriValue = ((LOOLWSD::isSSLEnabled() || LOOLWSD::isSSLTermination()) ? "https://" : "http://") + std::string("%SERVER_HOST%") + + LOOLWSD::ServiceRoot + "/loleaflet/" LOOLWSD_VERSION_HASH "/" + loleafletHtml + '?'; InputSource inputSrc(discoveryPath); diff --git a/wsd/LOOLWSD.hpp b/wsd/LOOLWSD.hpp index 536f8d051..b2014d4f3 100644 --- a/wsd/LOOLWSD.hpp +++ b/wsd/LOOLWSD.hpp @@ -57,6 +57,7 @@ public: static std::string ChildRoot; static std::string ServerName; 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 LogLevel; static bool AnonymizeFilenames; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits