loleaflet/admin/admin.html | 8 loleaflet/admin/adminAnalytics.html | 8 loleaflet/admin/adminHistory.html | 8 loleaflet/admin/adminSettings.html | 8 loleaflet/debug/document/admin.html | 2 loleaflet/debug/document/adminAnalytics.html | 2 loleaflet/debug/document/adminSettings.html | 2 loleaflet/html/loleaflet.html.m4 | 18 + loleaflet/js/main.js | 3 loleaflet/l10n/admin-localizations.json | 236 +++++++++++++------------- loleaflet/src/core/Socket.js | 2 loleaflet/src/layer/tile/TileLayer.js | 2 loleaflet/src/map/handler/Map.FileInserter.js | 2 loleaflet/src/map/handler/Map.SlideShow.js | 2 loolwsd.xml.in | 1 wsd/FileServer.cpp | 21 +- wsd/LOOLWSD.cpp | 17 + wsd/LOOLWSD.hpp | 1 18 files changed, 184 insertions(+), 159 deletions(-)
New commits: commit 5ae112d563a89a94b852edc03a21efdb19fc0cbd Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Sat Sep 8 00:10:50 2018 +0200 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Sat Sep 8 00:12:20 2018 +0200 ServiceRoot: Fix the admin console (the jwt token generation). Change-Id: Ic1772692471d29c99d7d68834cddb6b304e721d2 diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp index 517477b2e..e0b475595 100644 --- a/wsd/FileServer.cpp +++ b/wsd/FileServer.cpp @@ -252,7 +252,7 @@ bool FileServerRequestHandler::isAdminLoggedIn(const HTTPRequest& request, Poco::Net::HTTPCookie cookie("jwt", jwtToken); // bundlify appears to add an extra /dist -> dist/dist/admin - cookie.setPath("/loleaflet/dist/"); + cookie.setPath(LOOLWSD::ServiceRoot + "/loleaflet/dist/"); cookie.setSecure(LOOLWSD::isSSLEnabled() || LOOLWSD::isSSLTermination()); response.addCookie(cookie); commit 7152a8a55c365c94a9756b1fa504ab2836b142d2 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Fri Sep 7 23:34:09 2018 +0200 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Sat Sep 8 00:12:20 2018 +0200 ServiceRoot: Fix the branding and update the admin console debug URL. Change-Id: Id10d7a4d99ea993a398467e528e2018cc12d503b diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp index a508c4f15..517477b2e 100644 --- a/wsd/FileServer.cpp +++ b/wsd/FileServer.cpp @@ -619,11 +619,11 @@ void FileServerRequestHandler::preprocessFile(const HTTPRequest& request, Poco:: 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>"); + static const std::string linkCSS("<link rel=\"stylesheet\" href=\"%s/loleaflet/" LOOLWSD_VERSION_HASH "/%s.css\">"); + static const std::string scriptJS("<script src=\"%s/loleaflet/" LOOLWSD_VERSION_HASH "/%s.js\"></script>"); - std::string brandCSS(Poco::format(linkCSS, std::string(BRANDING))); - std::string brandJS(Poco::format(scriptJS, std::string(BRANDING))); + std::string brandCSS(Poco::format(linkCSS, LOOLWSD::ServiceRoot, std::string(BRANDING))); + std::string brandJS(Poco::format(scriptJS, LOOLWSD::ServiceRoot, std::string(BRANDING))); const auto& config = Application::instance().config(); #if ENABLE_SUPPORT_KEY @@ -631,8 +631,8 @@ void FileServerRequestHandler::preprocessFile(const HTTPRequest& request, Poco:: SupportKey key(keyString); if (!key.verify() || key.validDaysRemaining() <= 0) { - brandCSS = Poco::format(linkCSS, std::string(BRANDING_UNSUPPORTED)); - brandJS = Poco::format(scriptJS, std::string(BRANDING_UNSUPPORTED)); + brandCSS = Poco::format(linkCSS, LOOLWSD::ServiceRoot, std::string(BRANDING_UNSUPPORTED)); + brandJS = Poco::format(scriptJS, LOOLWSD::ServiceRoot, std::string(BRANDING_UNSUPPORTED)); } #endif @@ -792,13 +792,13 @@ void FileServerRequestHandler::preprocessAdminFile(const HTTPRequest& request,co if (!FileServerRequestHandler::isAdminLoggedIn(request, response)) throw Poco::Net::NotAuthenticatedException("Invalid admin login"); - static const std::string scriptJS("<script src=\"/loleaflet/dist/%s.js\"></script>"); + static const std::string scriptJS("<script src=\"%s/loleaflet/" LOOLWSD_VERSION_HASH "/%s.js\"></script>"); static const std::string footerPage("<div class=\"footer navbar-fixed-bottom text-info text-center\"><strong>Key:</strong> %s <strong>Expiry Date:</strong> %s</div>"); const std::string relPath = getRequestPathname(request); LOG_DBG("Preprocessing file: " << relPath); std::string adminFile = *getUncompressedFile(relPath); - std::string brandJS(Poco::format(scriptJS, std::string(BRANDING))); + std::string brandJS(Poco::format(scriptJS, LOOLWSD::ServiceRoot, std::string(BRANDING))); std::string brandFooter; #if ENABLE_SUPPORT_KEY diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 7723adb5a..8248d28d8 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -568,6 +568,7 @@ inline std::string getAdminURI(const Poco::Util::LayeredConfiguration &config) std::ostringstream oss; oss << getLaunchBase(user + ":" + passwd + "@"); + oss << LOOLWSD::ServiceRoot; oss << LOOLWSD_TEST_ADMIN_CONSOLE; return oss.str(); commit 8928cb0d89408d9fe3995eb188e2adef443e2b90 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Fri Sep 7 23:03:01 2018 +0200 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Sat Sep 8 00:12:20 2018 +0200 ServiceRoot: Admin console localization. Change-Id: I6f9a19df8f15a00a816fbb904f23d3911d03b3ed diff --git a/loleaflet/l10n/admin-localizations.json b/loleaflet/l10n/admin-localizations.json index bbd78611f..0ad504c88 100644 --- a/loleaflet/l10n/admin-localizations.json +++ b/loleaflet/l10n/admin-localizations.json @@ -1,121 +1,121 @@ { "en": false, - "ab": "/loleaflet/dist/l10n/ui-ab.json", - "af": "/loleaflet/dist/l10n/ui-af.json", - "am": "/loleaflet/dist/l10n/ui-am.json", - "an": "/loleaflet/dist/l10n/ui-an.json", - "ar": "/loleaflet/dist/l10n/ui-ar.json", - "as": "/loleaflet/dist/l10n/ui-as.json", - "ast": "/loleaflet/dist/l10n/ui-ast.json", - "az": "/loleaflet/dist/l10n/ui-az.json", - "be": "/loleaflet/dist/l10n/ui-be.json", - "bg": "/loleaflet/dist/l10n/ui-bg.json", - "bn-in": "/loleaflet/dist/l10n/ui-bn_IN.json", - "bn": "/loleaflet/dist/l10n/ui-bn.json", - "bo": "/loleaflet/dist/l10n/ui-bo.json", - "br": "/loleaflet/dist/l10n/ui-br.json", - "brx": "/loleaflet/dist/l10n/ui-brx.json", - "bs": "/loleaflet/dist/l10n/ui-bs.json", - "ca": "/loleaflet/dist/l10n/ui-ca.json", - "cs": "/loleaflet/dist/l10n/ui-cs.json", - "cy": "/loleaflet/dist/l10n/ui-cy.json", - "da": "/loleaflet/dist/l10n/ui-da.json", - "de": "/loleaflet/dist/l10n/ui-de.json", - "dgo": "/loleaflet/dist/l10n/ui-dgo.json", - "dsb": "/loleaflet/dist/l10n/ui-dsb.json", - "dz": "/loleaflet/dist/l10n/ui-dz.json", - "el": "/loleaflet/dist/l10n/ui-el.json", - "en-gb": "/loleaflet/dist/l10n/ui-en_GB.json", - "en-za": "/loleaflet/dist/l10n/ui-en_ZA.json", - "eo": "/loleaflet/dist/l10n/ui-eo.json", - "es": "/loleaflet/dist/l10n/ui-es.json", - "et": "/loleaflet/dist/l10n/ui-et.json", - "eu": "/loleaflet/dist/l10n/ui-eu.json", - "fa": "/loleaflet/dist/l10n/ui-fa.json", - "fi": "/loleaflet/dist/l10n/ui-fi.json", - "fr": "/loleaflet/dist/l10n/ui-fr.json", - "ga": "/loleaflet/dist/l10n/ui-ga.json", - "gd": "/loleaflet/dist/l10n/ui-gd.json", - "gl": "/loleaflet/dist/l10n/ui-gl.json", - "gn": "/loleaflet/dist/l10n/ui-gug.json", - "gu": "/loleaflet/dist/l10n/ui-gu.json", - "he": "/loleaflet/dist/l10n/ui-he.json", - "hi": "/loleaflet/dist/l10n/ui-hi.json", - "hr": "/loleaflet/dist/l10n/ui-hr.json", - "hsb": "/loleaflet/dist/l10n/ui-hsb.json", - "hu": "/loleaflet/dist/l10n/ui-hu.json", - "id": "/loleaflet/dist/l10n/ui-id.json", - "is": "/loleaflet/dist/l10n/ui-is.json", - "it": "/loleaflet/dist/l10n/ui-it.json", - "ja": "/loleaflet/dist/l10n/ui-ja.json", - "jv": "/loleaflet/dist/l10n/ui-jv.json", - "ka": "/loleaflet/dist/l10n/ui-ka.json", - "kk": "/loleaflet/dist/l10n/ui-kk.json", - "kl": "/loleaflet/dist/l10n/ui-kl.json", - "km": "/loleaflet/dist/l10n/ui-km.json", - "kn": "/loleaflet/dist/l10n/ui-kn.json", - "kok": "/loleaflet/dist/l10n/ui-kok.json", - "ko": "/loleaflet/dist/l10n/ui-ko.json", - "ks": "/loleaflet/dist/l10n/ui-ks.json", - "ky": "/loleaflet/dist/l10n/ui-ky.json", - "lb": "/loleaflet/dist/l10n/ui-lb.json", - "lo": "/loleaflet/dist/l10n/ui-lo.json", - "lt": "/loleaflet/dist/l10n/ui-lt.json", - "lv": "/loleaflet/dist/l10n/ui-lv.json", - "mai": "/loleaflet/dist/l10n/ui-mai.json", - "mk": "/loleaflet/dist/l10n/ui-mk.json", - "ml": "/loleaflet/dist/l10n/ui-ml.json", - "mni": "/loleaflet/dist/l10n/ui-mni.json", - "mn": "/loleaflet/dist/l10n/ui-mn.json", - "mr": "/loleaflet/dist/l10n/ui-mr.json", - "my": "/loleaflet/dist/l10n/ui-my.json", - "nb": "/loleaflet/dist/l10n/ui-nb.json", - "ne": "/loleaflet/dist/l10n/ui-ne.json", - "nl": "/loleaflet/dist/l10n/ui-nl.json", - "nn": "/loleaflet/dist/l10n/ui-nn.json", - "nr": "/loleaflet/dist/l10n/ui-nr.json", - "nso": "/loleaflet/dist/l10n/ui-nso.json", - "oc": "/loleaflet/dist/l10n/ui-oc.json", - "om": "/loleaflet/dist/l10n/ui-om.json", - "or": "/loleaflet/dist/l10n/ui-or.json", - "pa-in": "/loleaflet/dist/l10n/ui-pa_IN.json", - "pl": "/loleaflet/dist/l10n/ui-pl.json", - "pt-br": "/loleaflet/dist/l10n/ui-pt_BR.json", - "pt": "/loleaflet/dist/l10n/ui-pt.json", - "ro": "/loleaflet/dist/l10n/ui-ro.json", - "ru": "/loleaflet/dist/l10n/ui-ru.json", - "rw": "/loleaflet/dist/l10n/ui-rw.json", - "sah": "/loleaflet/dist/l10n/ui-sah.json", - "sa": "/loleaflet/dist/l10n/ui-sa_IN.json", - "sat": "/loleaflet/dist/l10n/ui-sat.json", - "sd": "/loleaflet/dist/l10n/ui-sd.json", - "sid": "/loleaflet/dist/l10n/ui-sid.json", - "si": "/loleaflet/dist/l10n/ui-si.json", - "sk": "/loleaflet/dist/l10n/ui-sk.json", - "sl": "/loleaflet/dist/l10n/ui-sl.json", - "sq": "/loleaflet/dist/l10n/ui-sq.json", - "sr": "/loleaflet/dist/l10n/ui-sr.json", - "ss": "/loleaflet/dist/l10n/ui-ss.json", - "st": "/loleaflet/dist/l10n/ui-st.json", - "sv": "/loleaflet/dist/l10n/ui-sv.json", - "sw": "/loleaflet/dist/l10n/ui-sw_TZ.json", - "ta": "/loleaflet/dist/l10n/ui-ta.json", - "te": "/loleaflet/dist/l10n/ui-te.json", - "tg": "/loleaflet/dist/l10n/ui-tg.json", - "th": "/loleaflet/dist/l10n/ui-th.json", - "ti": "/loleaflet/dist/l10n/ui-ti.json", - "tn": "/loleaflet/dist/l10n/ui-tn.json", - "tr": "/loleaflet/dist/l10n/ui-tr.json", - "ts": "/loleaflet/dist/l10n/ui-ts.json", - "tt": "/loleaflet/dist/l10n/ui-tt.json", - "ug": "/loleaflet/dist/l10n/ui-ug.json", - "uk": "/loleaflet/dist/l10n/ui-uk.json", - "ur": "/loleaflet/dist/l10n/ui-ur.json", - "uz": "/loleaflet/dist/l10n/ui-uz.json", - "ve": "/loleaflet/dist/l10n/ui-ve.json", - "vi": "/loleaflet/dist/l10n/ui-vi.json", - "xh": "/loleaflet/dist/l10n/ui-xh.json", - "zh-cn": "/loleaflet/dist/l10n/ui-zh_CN.json", - "zh-tw": "/loleaflet/dist/l10n/ui-zh_TW.json", - "zu": "/loleaflet/dist/l10n/ui-zu.json" + "ab": "../l10n/ui-ab.json", + "af": "../l10n/ui-af.json", + "am": "../l10n/ui-am.json", + "an": "../l10n/ui-an.json", + "ar": "../l10n/ui-ar.json", + "as": "../l10n/ui-as.json", + "ast": "../l10n/ui-ast.json", + "az": "../l10n/ui-az.json", + "be": "../l10n/ui-be.json", + "bg": "../l10n/ui-bg.json", + "bn-in": "../l10n/ui-bn_IN.json", + "bn": "../l10n/ui-bn.json", + "bo": "../l10n/ui-bo.json", + "br": "../l10n/ui-br.json", + "brx": "../l10n/ui-brx.json", + "bs": "../l10n/ui-bs.json", + "ca": "../l10n/ui-ca.json", + "cs": "../l10n/ui-cs.json", + "cy": "../l10n/ui-cy.json", + "da": "../l10n/ui-da.json", + "de": "../l10n/ui-de.json", + "dgo": "../l10n/ui-dgo.json", + "dsb": "../l10n/ui-dsb.json", + "dz": "../l10n/ui-dz.json", + "el": "../l10n/ui-el.json", + "en-gb": "../l10n/ui-en_GB.json", + "en-za": "../l10n/ui-en_ZA.json", + "eo": "../l10n/ui-eo.json", + "es": "../l10n/ui-es.json", + "et": "../l10n/ui-et.json", + "eu": "../l10n/ui-eu.json", + "fa": "../l10n/ui-fa.json", + "fi": "../l10n/ui-fi.json", + "fr": "../l10n/ui-fr.json", + "ga": "../l10n/ui-ga.json", + "gd": "../l10n/ui-gd.json", + "gl": "../l10n/ui-gl.json", + "gn": "../l10n/ui-gug.json", + "gu": "../l10n/ui-gu.json", + "he": "../l10n/ui-he.json", + "hi": "../l10n/ui-hi.json", + "hr": "../l10n/ui-hr.json", + "hsb": "../l10n/ui-hsb.json", + "hu": "../l10n/ui-hu.json", + "id": "../l10n/ui-id.json", + "is": "../l10n/ui-is.json", + "it": "../l10n/ui-it.json", + "ja": "../l10n/ui-ja.json", + "jv": "../l10n/ui-jv.json", + "ka": "../l10n/ui-ka.json", + "kk": "../l10n/ui-kk.json", + "kl": "../l10n/ui-kl.json", + "km": "../l10n/ui-km.json", + "kn": "../l10n/ui-kn.json", + "kok": "../l10n/ui-kok.json", + "ko": "../l10n/ui-ko.json", + "ks": "../l10n/ui-ks.json", + "ky": "../l10n/ui-ky.json", + "lb": "../l10n/ui-lb.json", + "lo": "../l10n/ui-lo.json", + "lt": "../l10n/ui-lt.json", + "lv": "../l10n/ui-lv.json", + "mai": "../l10n/ui-mai.json", + "mk": "../l10n/ui-mk.json", + "ml": "../l10n/ui-ml.json", + "mni": "../l10n/ui-mni.json", + "mn": "../l10n/ui-mn.json", + "mr": "../l10n/ui-mr.json", + "my": "../l10n/ui-my.json", + "nb": "../l10n/ui-nb.json", + "ne": "../l10n/ui-ne.json", + "nl": "../l10n/ui-nl.json", + "nn": "../l10n/ui-nn.json", + "nr": "../l10n/ui-nr.json", + "nso": "../l10n/ui-nso.json", + "oc": "../l10n/ui-oc.json", + "om": "../l10n/ui-om.json", + "or": "../l10n/ui-or.json", + "pa-in": "../l10n/ui-pa_IN.json", + "pl": "../l10n/ui-pl.json", + "pt-br": "../l10n/ui-pt_BR.json", + "pt": "../l10n/ui-pt.json", + "ro": "../l10n/ui-ro.json", + "ru": "../l10n/ui-ru.json", + "rw": "../l10n/ui-rw.json", + "sah": "../l10n/ui-sah.json", + "sa": "../l10n/ui-sa_IN.json", + "sat": "../l10n/ui-sat.json", + "sd": "../l10n/ui-sd.json", + "sid": "../l10n/ui-sid.json", + "si": "../l10n/ui-si.json", + "sk": "../l10n/ui-sk.json", + "sl": "../l10n/ui-sl.json", + "sq": "../l10n/ui-sq.json", + "sr": "../l10n/ui-sr.json", + "ss": "../l10n/ui-ss.json", + "st": "../l10n/ui-st.json", + "sv": "../l10n/ui-sv.json", + "sw": "../l10n/ui-sw_TZ.json", + "ta": "../l10n/ui-ta.json", + "te": "../l10n/ui-te.json", + "tg": "../l10n/ui-tg.json", + "th": "../l10n/ui-th.json", + "ti": "../l10n/ui-ti.json", + "tn": "../l10n/ui-tn.json", + "tr": "../l10n/ui-tr.json", + "ts": "../l10n/ui-ts.json", + "tt": "../l10n/ui-tt.json", + "ug": "../l10n/ui-ug.json", + "uk": "../l10n/ui-uk.json", + "ur": "../l10n/ui-ur.json", + "uz": "../l10n/ui-uz.json", + "ve": "../l10n/ui-ve.json", + "vi": "../l10n/ui-vi.json", + "xh": "../l10n/ui-xh.json", + "zh-cn": "../l10n/ui-zh_CN.json", + "zh-tw": "../l10n/ui-zh_TW.json", + "zu": "../l10n/ui-zu.json" } commit c5259eb7b642a945d61266d61c0e9420d0f71748 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Fri Sep 7 22:56:09 2018 +0200 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Sat Sep 8 00:12:20 2018 +0200 ServiceRoot: Add the serviceRoot to various html and js files. Change-Id: Ibd9093afa3d1f014c70328446ee42189dd0c2117 diff --git a/loleaflet/admin/admin.html b/loleaflet/admin/admin.html index f23d510ca..a076a1749 100644 --- a/loleaflet/admin/admin.html +++ b/loleaflet/admin/admin.html @@ -15,19 +15,19 @@ <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> - <link rel="localizations" href="/loleaflet/dist/l10n/admin-localizations.json" type="application/vnd.oftn.l10n+json"/> + <link rel="localizations" href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" type="application/vnd.oftn.l10n+json"/> </head> <body> - <script src="/loleaflet/dist/admin-bundle.js"></script> + <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script> <!--%BRANDING_JS%--> <script>if (typeof brandProductName !== 'undefined') {l10nstrings.strProductName = brandProductName}</script> <script>document.title = l10nstrings.strProductName + ' - ' + l10nstrings.strAdminConsole</script> <script> if (window.location.protocol == "https:") { - var host = 'wss://' + window.location.host + '/lool/adminws/'; + var host = 'wss://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/'; } else { - host = 'ws://' + window.location.host + '/lool/adminws/'; + host = 'ws://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/'; } Admin.Overview(host); diff --git a/loleaflet/admin/adminAnalytics.html b/loleaflet/admin/adminAnalytics.html index 1e801fcb1..7f52c080f 100644 --- a/loleaflet/admin/adminAnalytics.html +++ b/loleaflet/admin/adminAnalytics.html @@ -15,19 +15,19 @@ <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> - <link rel="localizations" href="/loleaflet/dist/l10n/admin-localizations.json" type="application/vnd.oftn.l10n+json"/> + <link rel="localizations" href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" type="application/vnd.oftn.l10n+json"/> </head> <body> - <script src="/loleaflet/dist/admin-bundle.js"></script> + <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script> <!--%BRANDING_JS%--> <script>if (typeof brandProductName !== 'undefined') {l10nstrings.strProductName = brandProductName}</script> <script>document.title = l10nstrings.strProductName + ' - ' + l10nstrings.strAdminConsole</script> <script> if (window.location.protocol == "https:") { - host = 'wss://' + window.location.host + '/lool/adminws/' + host = 'wss://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/' } else { - host = 'ws://' + window.location.host + '/lool/adminws/' + host = 'ws://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/' } Admin.Analytics(host) diff --git a/loleaflet/admin/adminHistory.html b/loleaflet/admin/adminHistory.html index 4752f8a07..60ad593d3 100644 --- a/loleaflet/admin/adminHistory.html +++ b/loleaflet/admin/adminHistory.html @@ -15,20 +15,20 @@ <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> - <link rel="localizations" href="/loleaflet/dist/l10n/admin-localizations.json" type="application/vnd.oftn.l10n+json"/> + <link rel="localizations" href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" type="application/vnd.oftn.l10n+json"/> </head> <body> - <script src="/loleaflet/dist/admin-bundle.js"></script> + <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script> <!--%BRANDING_JS%--> <script>if (typeof brandProductName !== 'undefined') {l10nstrings.strProductName = brandProductName}</script> <script>document.title = l10nstrings.strProductName + ' - ' + l10nstrings.strAdminConsole</script> <script> if (window.location.protocol == "https:") { - host = 'wss://' + window.location.host + '/lool/adminws/' + host = 'wss://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/' } else { - host = 'ws://' + window.location.host + '/lool/adminws/' + host = 'ws://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/' } Admin.History(host) diff --git a/loleaflet/admin/adminSettings.html b/loleaflet/admin/adminSettings.html index c7b21879d..8cf1e33c5 100644 --- a/loleaflet/admin/adminSettings.html +++ b/loleaflet/admin/adminSettings.html @@ -15,19 +15,19 @@ <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> - <link rel="localizations" href="/loleaflet/dist/l10n/admin-localizations.json" type="application/vnd.oftn.l10n+json"/> + <link rel="localizations" href="%SERVICE_ROOT%/loleaflet/%VERSION%/l10n/admin-localizations.json" type="application/vnd.oftn.l10n+json"/> </head> <body> - <script src="/loleaflet/dist/admin-bundle.js"></script> + <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/admin-bundle.js"></script> <!--%BRANDING_JS%--> <script>if (typeof brandProductName !== 'undefined') {l10nstrings.strProductName = brandProductName}</script> <script>document.title = l10nstrings.strProductName + ' - ' + l10nstrings.strAdminConsole</script> <script> if (window.location.protocol == "https:") { - host = 'wss://' + window.location.host + '/lool/adminws/' + host = 'wss://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/' } else { - host = 'ws://' + window.location.host + '/lool/adminws/' + host = 'ws://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/' } Admin.Settings(host); diff --git a/loleaflet/debug/document/admin.html b/loleaflet/debug/document/admin.html index 947fdc40b..0102aec9b 100644 --- a/loleaflet/debug/document/admin.html +++ b/loleaflet/debug/document/admin.html @@ -37,7 +37,7 @@ <script>vex.defaultOptions.className = 'vex-theme-plain';</script> <script> - var host = 'wss://' + window.location.host + '/lool/adminws/'; + var host = 'wss://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/'; new AdminSocketOverview(host); </script> diff --git a/loleaflet/debug/document/adminAnalytics.html b/loleaflet/debug/document/adminAnalytics.html index c6d9babf7..0dbb2bf7d 100644 --- a/loleaflet/debug/document/adminAnalytics.html +++ b/loleaflet/debug/document/adminAnalytics.html @@ -38,7 +38,7 @@ <script src="../../dist/admin/admin-src.js"></script> <script> - host = 'wss://' + window.location.host + '/lool/adminws/'; + host = 'wss://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/'; new AdminSocketAnalytics(host); </script> diff --git a/loleaflet/debug/document/adminSettings.html b/loleaflet/debug/document/adminSettings.html index 6c985da19..3983efc7f 100644 --- a/loleaflet/debug/document/adminSettings.html +++ b/loleaflet/debug/document/adminSettings.html @@ -37,7 +37,7 @@ <script src="../../dist/admin/admin-src.js"></script> <script> - host = 'wss://' + window.location.host + '/lool/adminws/'; + host = 'wss://' + window.location.host + '%SERVICE_ROOT%/lool/adminws/'; new AdminSocketSettings(host); </script> diff --git a/loleaflet/html/loleaflet.html.m4 b/loleaflet/html/loleaflet.html.m4 index fc5424f74..dc1ec0c1a 100644 --- a/loleaflet/html/loleaflet.html.m4 +++ b/loleaflet/html/loleaflet.html.m4 @@ -123,6 +123,7 @@ ifelse(IOSAPP,[true], <script> ifelse(IOSAPP,[true], [window.host = ''; + window.serviceRoot = ''; window.accessToken = ''; window.accessTokenTTL = ''; window.accessHeader = ''; @@ -130,6 +131,7 @@ ifelse(IOSAPP,[true], window.outOfFocusTimeoutSecs = 1000000; window.idleTimeoutSecs = 1000000;], [window.host = '%HOST%'; + window.serviceRoot = '%SERVICE_ROOT%'; window.accessToken = '%ACCESS_TOKEN%'; window.accessTokenTTL = '%ACCESS_TOKEN_TTL%'; window.accessHeader = '%ACCESS_HEADER%'; diff --git a/loleaflet/js/main.js b/loleaflet/js/main.js index 4f14a26bd..3ff8edf5d 100644 --- a/loleaflet/js/main.js +++ b/loleaflet/js/main.js @@ -1,6 +1,6 @@ /* -*- js-indent-level: 8 -*- */ /* global errorMessages getParameterByName accessToken accessTokenTTL accessHeader vex host */ -/* global idleTimeoutSecs outOfFocusTimeoutSecs setupToolbar*/ +/* global serviceRoot idleTimeoutSecs outOfFocusTimeoutSecs setupToolbar*/ /*eslint indent: [error, "tab", { "outerIIFEBody": 0 }]*/ (function (global) { @@ -52,6 +52,7 @@ var notWopiButIframe = getParameterByName('NotWOPIButIframe') != ''; var map = L.map('map', { server: host, doc: docURL, + serviceRoot: serviceRoot, docParams: docParams, permission: permission, timestamp: timestamp, diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js index cd6744f08..23be707b2 100644 --- a/loleaflet/src/core/Socket.js +++ b/loleaflet/src/core/Socket.js @@ -68,7 +68,7 @@ L.Socket = L.Class.extend({ } try { - var websocketURI = map.options.server + '/lool/' + encodeURIComponent(map.options.doc + '?' + $.param(map.options.docParams)) + '/ws' + wopiSrc; + var websocketURI = map.options.server + map.options.serviceRoot + '/lool/' + encodeURIComponent(map.options.doc + '?' + $.param(map.options.docParams)) + '/ws' + wopiSrc; this.socket = new WebSocket(websocketURI); } catch (e) { // On IE 11 there is a limitation on the number of WebSockets open to a single domain (6 by default and can go to 128). diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index 37e2467bf..116a316c4 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -557,7 +557,7 @@ L.TileLayer = L.GridLayer.extend({ if (this._map.options.wopiSrc != '') { wopiSrc = '?WOPISrc=' + this._map.options.wopiSrc; } - var url = this._map.options.webserver + '/' + this._map.options.urlPrefix + '/' + + var url = this._map.options.webserver + this._map.options.serviceRoot + '/' + this._map.options.urlPrefix + '/' + encodeURIComponent(this._map.options.doc) + '/' + command.jail + '/' + command.dir + '/' + command.name + wopiSrc; this._map.hideBusy(); diff --git a/loleaflet/src/map/handler/Map.FileInserter.js b/loleaflet/src/map/handler/Map.FileInserter.js index 9ffd81aca..028ea4649 100644 --- a/loleaflet/src/map/handler/Map.FileInserter.js +++ b/loleaflet/src/map/handler/Map.FileInserter.js @@ -21,7 +21,7 @@ L.Map.FileInserter = L.Handler.extend({ if (map.options.wopiSrc != '') { wopiSrc = '?WOPISrc=' + map.options.wopiSrc; } - this._url = map.options.webserver + '/' + map.options.urlPrefix + + this._url = map.options.webserver + map.options.serviceRoot + '/' + map.options.urlPrefix + '/' + encodeURIComponent(map.options.doc) + '/insertfile' + wopiSrc; }, diff --git a/loleaflet/src/map/handler/Map.SlideShow.js b/loleaflet/src/map/handler/Map.SlideShow.js index adfed287e..9390299ec 100644 --- a/loleaflet/src/map/handler/Map.SlideShow.js +++ b/loleaflet/src/map/handler/Map.SlideShow.js @@ -25,7 +25,7 @@ L.Map.SlideShow = L.Handler.extend({ _onFullScreen: function () { this._slideShow = L.DomUtil.create('iframe', 'leaflet-slideshow', this._map._container); - this._slideShow.src = this._map.options.webserver + '/loleaflet/dist/loading.html'; + this._slideShow.src = this._map.options.webserver + this._map.options.serviceRoot + '/loleaflet/dist/loading.html'; if (this._slideShow.requestFullscreen) { this._slideShow.requestFullscreen(); } diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp index 131ed8f46..a508c4f15 100644 --- a/wsd/FileServer.cpp +++ b/wsd/FileServer.cpp @@ -815,6 +815,8 @@ void FileServerRequestHandler::preprocessAdminFile(const HTTPRequest& request,co Poco::replaceInPlace(adminFile, std::string("<!--%BRANDING_JS%-->"), brandJS); Poco::replaceInPlace(adminFile, std::string("<!--%FOOTER%-->"), brandFooter); + Poco::replaceInPlace(adminFile, std::string("%VERSION%"), std::string(LOOLWSD_VERSION_HASH)); + Poco::replaceInPlace(adminFile, std::string("%SERVICE_ROOT%"), LOOLWSD::ServiceRoot); // Ask UAs to block if they detect any XSS attempt response.add("X-XSS-Protection", "1; mode=block"); commit 9d07230f8af61712dc5bb7ff11ea2d4877556767 Author: Jan Holesovsky <ke...@collabora.com> AuthorDate: Fri Sep 7 00:25:50 2018 +0200 Commit: Jan Holesovsky <ke...@collabora.com> CommitDate: Sat Sep 8 00:12:15 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 diff --git a/loleaflet/html/loleaflet.html.m4 b/loleaflet/html/loleaflet.html.m4 index 2ae7c4a49..fc5424f74 100644 --- a/loleaflet/html/loleaflet.html.m4 +++ b/loleaflet/html/loleaflet.html.m4 @@ -35,9 +35,9 @@ ifelse(IOSAPP,[true], [<link rel="stylesheet" href="bundle.css" /> ]), ifelse(DEBUG,[true], - foreachq([fileCSS],[LOLEAFLET_CSS],[<link rel="stylesheet" href="/loleaflet/%VERSION%/fileCSS" /> + foreachq([fileCSS],[LOLEAFLET_CSS],[<link rel="stylesheet" href="%SERVICE_ROOT%/loleaflet/%VERSION%/fileCSS" /> ]), - [<link rel="stylesheet" href="/loleaflet/%VERSION%/bundle.css" /> + [<link rel="stylesheet" href="%SERVICE_ROOT%/loleaflet/%VERSION%/bundle.css" /> ])dnl )dnl <!--%BRANDING_CSS%--> <!-- add your logo here --> @@ -46,10 +46,10 @@ ifelse(IOSAPP,[true], <link rel="localizations" href="l10n/locore-localizations.json" type="application/vnd.oftn.l10n+json"/> <link rel="localizations" href="l10n/help-localizations.json" type="application/vnd.oftn.l10n+json"/> <link rel="localizations" href="l10n/uno-localizations.json" type="application/vnd.oftn.l10n+json"/>], - [<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"/>] )dnl </head> @@ -151,9 +151,9 @@ ifelse(IOSAPP,[true], [ <script src="bundle.js"></script> ]), ifelse(DEBUG,[true],foreachq([fileJS],[LOLEAFLET_JS], - [ <script src="/loleaflet/%VERSION%/fileJS"></script> + [ <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/fileJS"></script> ]), - [ <script src="/loleaflet/%VERSION%/bundle.js"></script> + [ <script src="%SERVICE_ROOT%/loleaflet/%VERSION%/bundle.js"></script> ]) )dnl <!--%BRANDING_JS%--> <!-- logo onclick handler --> diff --git a/loolwsd.xml.in b/loolwsd.xml.in index 1c0268999..e626b98f1 100644 --- a/loolwsd.xml.in +++ b/loolwsd.xml.in @@ -64,6 +64,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> <post_allow desc="Allow/deny client IP address for POST(REST)." allow="true"> <host desc="The IPv4 private 192.168 block as plain IPv4 dotted decimal addresses.">192\.168\.[0-9]{1,3}\.[0-9]{1,3}</host> <host desc="Ditto, but as IPv4-mapped IPv6 addresses">::ffff:192\.168\.[0-9]{1,3}\.[0-9]{1,3}</host> diff --git a/wsd/FileServer.cpp b/wsd/FileServer.cpp index 2abc2c0f8..131ed8f46 100644 --- a/wsd/FileServer.cpp +++ b/wsd/FileServer.cpp @@ -617,6 +617,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 7d1436897..7723adb5a 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -548,6 +548,7 @@ inline std::string getLaunchURI(const std::string &document) std::ostringstream oss; oss << getLaunchBase(""); + oss << LOOLWSD::ServiceRoot; oss << LOOLWSD_TEST_LOLEAFLET_UI; oss << "?file_path=file://"; oss << DEBUG_ABSSRCDIR "/"; @@ -592,6 +593,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"; @@ -690,6 +692,7 @@ void LOOLWSD::initialize(Application& self) { "logging.level", "trace" }, { "loleaflet_logging", "false" }, { "net.proto", "all" }, + { "net.service_root", "" }, { "ssl.enable", "true" }, { "ssl.termination", "true" }, { "ssl.cert_file_path", LOOLWSD_CONFIGDIR "/cert.pem" }, @@ -822,6 +825,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 @@ -1791,6 +1799,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; @@ -2424,6 +2439,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 3ec79c867..90cc932e5 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 std::atomic<unsigned> NumConnections; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits