[Libreoffice-commits] online.git: fuzzer/ClientSession.cpp test/Makefile.am test/WhiteBoxTests.cpp wsd/LOOLWSD.cpp wsd/RequestDetails.cpp wsd/RequestDetails.hpp
Ashod Nakashian (via logerrit)
logerrit at kemper.freedesktop.org
Tue Jun 2 15:28:59 UTC 2020
fuzzer/ClientSession.cpp | 2
test/Makefile.am | 1
test/WhiteBoxTests.cpp | 310 +++++++++++++++++++++++++++++++++++++++++++++++
wsd/LOOLWSD.cpp | 2
wsd/RequestDetails.cpp | 13 +
wsd/RequestDetails.hpp | 9 +
6 files changed, 327 insertions(+), 10 deletions(-)
New commits:
commit 44f4e59b6bafa3c7b892a5eae5da904c6543685c
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Sun May 24 09:21:18 2020 -0400
Commit: Ashod Nakashian <ashnakash at gmail.com>
CommitDate: Tue Jun 2 17:28:40 2020 +0200
wsd: RequestDetails takes the service root as argument
This avoids depending on LOOLWSD's statics, which
makes adding unit-tests much more difficult due to
the high number of dependencies LOOLWSD pulls.
Adds a number of unit-tests for RequestDetails.
Change-Id: I9f1d56f80a633505c7ff548ec0e33ffe61f59f53
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/95290
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Tested-by: Jenkins
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/fuzzer/ClientSession.cpp b/fuzzer/ClientSession.cpp
index e24647315..06048e28d 100644
--- a/fuzzer/ClientSession.cpp
+++ b/fuzzer/ClientSession.cpp
@@ -22,7 +22,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
std::shared_ptr<ProtocolHandlerInterface> ws;
std::string id;
bool isReadOnly = false;
- const RequestDetails requestDetails("fuzzer");
+ const RequestDetails requestDetails("fuzzer", LOOLWSD::ServiceRoot);
auto session
= std::make_shared<ClientSession>(ws, id, docBroker, uriPublic, isReadOnly, requestDetails);
diff --git a/test/Makefile.am b/test/Makefile.am
index c3614c1d5..275a214c2 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -64,6 +64,7 @@ wsd_sources = \
../common/Authorization.cpp \
../kit/Kit.cpp \
../kit/TestStubs.cpp \
+ ../wsd/RequestDetails.cpp \
../wsd/TileCache.cpp \
../wsd/ProofKey.cpp
diff --git a/test/WhiteBoxTests.cpp b/test/WhiteBoxTests.cpp
index a4be56bb9..45b846987 100644
--- a/test/WhiteBoxTests.cpp
+++ b/test/WhiteBoxTests.cpp
@@ -20,6 +20,7 @@
#include <TileDesc.hpp>
#include <Util.hpp>
#include <JsonUtil.hpp>
+#include <RequestDetails.hpp>
#include <common/Authorization.hpp>
@@ -42,6 +43,10 @@ class WhiteBoxTests : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST(testAnonymization);
CPPUNIT_TEST(testTime);
CPPUNIT_TEST(testStringVector);
+ CPPUNIT_TEST(testRequestDetails_DownloadURI);
+ CPPUNIT_TEST(testRequestDetails_loleafletURI);
+ CPPUNIT_TEST(testRequestDetails_local);
+ CPPUNIT_TEST(testRequestDetails);
CPPUNIT_TEST_SUITE_END();
@@ -59,6 +64,10 @@ class WhiteBoxTests : public CPPUNIT_NS::TestFixture
void testAnonymization();
void testTime();
void testStringVector();
+ void testRequestDetails_DownloadURI();
+ void testRequestDetails_loleafletURI();
+ void testRequestDetails_local();
+ void testRequestDetails();
};
void WhiteBoxTests::testLOOLProtocolFunctions()
@@ -380,6 +389,22 @@ void WhiteBoxTests::testTokenizer()
LOK_ASSERT_EQUAL(std::string("DEF"), tokens[1]);
LOK_ASSERT_EQUAL(std::string("XYZ"), tokens[2]);
+ static const std::string URI
+ = "/lool/"
+ "http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%"
+ "2F593_ocqiesh0cngs%3Faccess_token%3DMN0KXXDv9GJ1wCCLnQcjVQT2T7WrfYpA%26access_token_ttl%"
+ "3D0%26reuse_cookies%3Doc_sessionPassphrase%"
+ "253D8nFRqycbs7bP97yxCuJviBbVKdCXmuiXp6ZYH0DfUoy5UZDCTQgLwluvbgRbKrdKodJteG3uNE19KNUAoE5t"
+ "ypf4oBGwJdFY%25252F5W9RNST8wEHWkUVIjZy7vmY0ZX38PlS%253Anc_sameSiteCookielax%253Dtrue%"
+ "253Anc_sameSiteCookiestrict%253Dtrue%253Aocqiesh0cngs%253Dr5ujg4tpvgu9paaf5bguiokgjl%"
+ "253AXCookieName%253DXCookieValue%253ASuperCookieName%253DBAZINGA/"
+ "ws?WOPISrc=http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%"
+ "2Ffiles%2F593_ocqiesh0cngs&compat=/ws/b26112ab1b6f2ed98ce1329f0f344791/close/31";
+
+ tokens = Util::tokenize(URI, '/');
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(7), tokens.size());
+ LOK_ASSERT_EQUAL(std::string("31"), tokens[6]);
+
// Integer lists.
std::vector<int> ints;
@@ -841,6 +866,291 @@ void WhiteBoxTests::testStringVector()
CPPUNIT_ASSERT(!vector.equals(0, vector2, 1));
}
+void WhiteBoxTests::testRequestDetails_DownloadURI()
+{
+ static const std::string Root = "localhost:9980";
+
+ {
+ static const std::string URI = "/loleaflet/49c225146/src/map/Clipboard.js";
+
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, URI,
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ request.setHost(Root);
+
+ RequestDetails details(request, "");
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
+ LOK_ASSERT_EQUAL(std::string("loleaflet"), details[0]);
+ LOK_ASSERT(details.equals(0, "loleaflet"));
+ LOK_ASSERT_EQUAL(std::string("49c225146"), details[1]);
+ LOK_ASSERT_EQUAL(std::string("src"), details[2]);
+ LOK_ASSERT_EQUAL(std::string("map"), details[3]);
+ LOK_ASSERT_EQUAL(std::string("Clipboard.js"), details[4]);
+ }
+
+ {
+ static const std::string URI = "/loleaflet/49c225146/select2.css";
+
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, URI,
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ request.setHost(Root);
+
+ RequestDetails details(request, "");
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(3), details.size());
+ LOK_ASSERT_EQUAL(std::string("loleaflet"), details[0]);
+ LOK_ASSERT(details.equals(0, "loleaflet"));
+ LOK_ASSERT_EQUAL(std::string("49c225146"), details[1]);
+ LOK_ASSERT_EQUAL(std::string("select2.css"), details[2]);
+ }
+}
+
+void WhiteBoxTests::testRequestDetails_loleafletURI()
+{
+ static const std::string Root = "localhost:9980";
+
+ static const std::string URI
+ = "/loleaflet/49c225146/"
+ "loleaflet.html?WOPISrc=http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%2Fapps%"
+ "2Frichdocuments%2Fwopi%2Ffiles%2F593_ocqiesh0cngs&title=empty.odt&lang=en-us&"
+ "closebutton=1&revisionhistory=1";
+
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, URI,
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ request.setHost(Root);
+
+ RequestDetails details(request, "");
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(4), details.size());
+ LOK_ASSERT_EQUAL(std::string("loleaflet"), details[0]);
+ LOK_ASSERT(details.equals(0, "loleaflet"));
+ LOK_ASSERT_EQUAL(std::string("49c225146"), details[1]);
+ LOK_ASSERT_EQUAL(std::string("loleaflet.html"), details[2]);
+ LOK_ASSERT_EQUAL(std::string("WOPISrc=http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%"
+ "2Fapps%2Frichdocuments%2Fwopi%2Ffiles%2F593_ocqiesh0cngs&"
+ "title=empty.odt&lang=en-us&closebutton=1&revisionhistory=1"),
+ details[3]);
+}
+
+void WhiteBoxTests::testRequestDetails_local()
+{
+ static const std::string Root = "localhost:9980";
+
+ static const std::string ProxyPrefix
+ = "http://localhost/nextcloud/apps/richdocuments/proxy.php?req=";
+
+ {
+ static const std::string URI = "/lool/file%3A%2F%2F%2Fhome%2Fash%2Fprj%2Flo%2Fonline%2Ftest%2Fdata%2Fhello-world.odt/ws/open/open/0";
+
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, URI,
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ request.setHost(Root);
+ request.set("User-Agent", WOPI_AGENT_STRING);
+ request.set("ProxyPrefix", ProxyPrefix);
+
+ RequestDetails details(request, "");
+ LOK_ASSERT_EQUAL(true, details.isProxy());
+ LOK_ASSERT_EQUAL(ProxyPrefix, details.getProxyPrefix());
+
+ LOK_ASSERT_EQUAL(Root, details.getHostUntrusted());
+ LOK_ASSERT_EQUAL(false, details.isWebSocket());
+ LOK_ASSERT_EQUAL(true, details.isGet());
+
+ const std::string docUri = "file:///home/ash/prj/lo/online/test/data/hello-world.odt";
+
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
+ LOK_ASSERT_EQUAL(std::string("lool"), details[0]);
+ LOK_ASSERT(details.equals(0, "lool"));
+ LOK_ASSERT_EQUAL(
+ std::string(
+ "file%3A%2F%2F%2Fhome%2Fash%2Fprj%2Flo%2Fonline%2Ftest%2Fdata%2Fhello-world.odt"),
+ details[1]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
+ LOK_ASSERT_EQUAL(std::string("open"), details[3]);
+ LOK_ASSERT_EQUAL(std::string("open"), details[4]);
+ }
+
+ {
+ static const std::string URI
+ = "/lool/"
+ "http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%"
+ "2F165_ocgdpzbkm39u%3Faccess_token%3DODhIXdJdbsVYQoKKCuaYofyzrovxD3MQ%26access_token_"
+ "ttl%"
+ "3D0%26reuse_cookies%3DXCookieName%253DXCookieValue%253ASuperCookieName%253DBAZINGA/"
+ "ws?WOPISrc=http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%2Frichdocuments%"
+ "2Fwopi%"
+ "2Ffiles%2F165_ocgdpzbkm39u&compat=/ws/1c99a7bcdbf3209782d7eb38512e6564/write/2";
+
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, URI,
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ request.setHost(Root);
+ request.set("User-Agent", WOPI_AGENT_STRING);
+ request.set("ProxyPrefix", ProxyPrefix);
+
+ RequestDetails details(request, "");
+ LOK_ASSERT_EQUAL(true, details.isProxy());
+ LOK_ASSERT_EQUAL(ProxyPrefix, details.getProxyPrefix());
+
+ LOK_ASSERT_EQUAL(Root, details.getHostUntrusted());
+ LOK_ASSERT_EQUAL(false, details.isWebSocket());
+ LOK_ASSERT_EQUAL(true, details.isGet());
+
+ const std::string docUri
+ = "http://localhost/owncloud/index.php/apps/richdocuments/wopi/files/"
+ "165_ocgdpzbkm39u?access_token=ODhIXdJdbsVYQoKKCuaYofyzrovxD3MQ&access_token_ttl=0&"
+ "reuse_cookies=XCookieName%3DXCookieValue%3ASuperCookieName%3DBAZINGA/"
+ "ws?WOPISrc=http://localhost/owncloud/index.php/apps/richdocuments/wopi/files/"
+ "165_ocgdpzbkm39u&compat=";
+
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
+ LOK_ASSERT_EQUAL(std::string("lool"), details[0]);
+ LOK_ASSERT(details.equals(0, "lool"));
+ LOK_ASSERT_EQUAL(
+ std::string("http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%2Frichdocuments%"
+ "2Fwopi%2Ffiles%2F165_ocgdpzbkm39u%3Faccess_token%"
+ "3DODhIXdJdbsVYQoKKCuaYofyzrovxD3MQ%26access_token_ttl%3D0%26reuse_cookies%"
+ "3DXCookieName%253DXCookieValue%253ASuperCookieName%253DBAZINGA/"
+ "ws?WOPISrc=http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%"
+ "2Frichdocuments%2Fwopi%2Ffiles%2F165_ocgdpzbkm39u&compat="),
+ details[1]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
+ LOK_ASSERT_EQUAL(std::string("1c99a7bcdbf3209782d7eb38512e6564"), details[3]);
+ LOK_ASSERT_EQUAL(std::string("write"), details[4]);
+ }
+}
+
+void WhiteBoxTests::testRequestDetails()
+{
+ static const std::string Root = "localhost:9980";
+
+ static const std::string ProxyPrefix
+ = "http://localhost/nextcloud/apps/richdocuments/proxy.php?req=";
+
+ {
+ static const std::string URI
+ = "/lool/"
+ "http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%"
+ "2Ffiles%"
+ "2F593_ocqiesh0cngs%3Faccess_token%3DMN0KXXDv9GJ1wCCLnQcjVQT2T7WrfYpA%26access_token_"
+ "ttl%"
+ "3D0%26reuse_cookies%3Doc_sessionPassphrase%"
+ "253D8nFRqycbs7bP97yxCuJviBbVKdCXmuiXp6ZYH0DfUoy5UZDCTQgLwluvbgRbKrdKodJteG3uNE19KNUA"
+ "oE5t"
+ "ypf4oBGwJdFY%25252F5W9RNST8wEHWkUVIjZy7vmY0ZX38PlS%253Anc_sameSiteCookielax%"
+ "253Dtrue%"
+ "253Anc_sameSiteCookiestrict%253Dtrue%253Aocqiesh0cngs%"
+ "253Dr5ujg4tpvgu9paaf5bguiokgjl%"
+ "253AXCookieName%253DXCookieValue%253ASuperCookieName%253DBAZINGA/"
+ "ws?WOPISrc=http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%"
+ "2Fwopi%"
+ "2Ffiles%2F593_ocqiesh0cngs&compat=/ws/b26112ab1b6f2ed98ce1329f0f344791/close/31";
+
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, URI,
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ request.setHost(Root);
+ request.set("User-Agent", WOPI_AGENT_STRING);
+ request.set("ProxyPrefix", ProxyPrefix);
+
+ RequestDetails details(request, "");
+ LOK_ASSERT_EQUAL(true, details.isProxy());
+ LOK_ASSERT_EQUAL(ProxyPrefix, details.getProxyPrefix());
+
+ LOK_ASSERT_EQUAL(Root, details.getHostUntrusted());
+ LOK_ASSERT_EQUAL(false, details.isWebSocket());
+ LOK_ASSERT_EQUAL(true, details.isGet());
+
+ const std::string docUri
+ = "http://localhost/nextcloud/index.php/apps/richdocuments/wopi/files/"
+ "593_ocqiesh0cngs?access_token=MN0KXXDv9GJ1wCCLnQcjVQT2T7WrfYpA&access_token_ttl=0&"
+ "reuse_"
+ "cookies=oc_sessionPassphrase%"
+ "3D8nFRqycbs7bP97yxCuJviBbVKdCXmuiXp6ZYH0DfUoy5UZDCTQgLwluvbgRbKrdKodJteG3uNE19KNUAoE"
+ "5typ"
+ "f4oBGwJdFY%252F5W9RNST8wEHWkUVIjZy7vmY0ZX38PlS%3Anc_sameSiteCookielax%3Dtrue%3Anc_"
+ "sameSiteCookiestrict%3Dtrue%3Aocqiesh0cngs%3Dr5ujg4tpvgu9paaf5bguiokgjl%"
+ "3AXCookieName%"
+ "3DXCookieValue%3ASuperCookieName%3DBAZINGA/ws?WOPISrc=http://localhost/nextcloud/"
+ "index.php/apps/richdocuments/wopi/files/593_ocqiesh0cngs&compat=";
+
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(6), details.size());
+ LOK_ASSERT_EQUAL(std::string("lool"), details[0]);
+ LOK_ASSERT(details.equals(0, "lool"));
+ LOK_ASSERT_EQUAL(
+ std::string(
+ "http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%"
+ "2Ffiles%2F593_ocqiesh0cngs%3Faccess_token%3DMN0KXXDv9GJ1wCCLnQcjVQT2T7WrfYpA%"
+ "26access_token_ttl%3D0%26reuse_cookies%3Doc_sessionPassphrase%"
+ "253D8nFRqycbs7bP97yxCuJviBbVKdCXmuiXp6ZYH0DfUoy5UZDCTQgLwluvbgRbKrdKodJteG3uNE"
+ "19KNUAoE5typf4oBGwJdFY%25252F5W9RNST8wEHWkUVIjZy7vmY0ZX38PlS%253Anc_"
+ "sameSiteCookielax%253Dtrue%253Anc_sameSiteCookiestrict%253Dtrue%"
+ "253Aocqiesh0cngs%253Dr5ujg4tpvgu9paaf5bguiokgjl%253AXCookieName%"
+ "253DXCookieValue%253ASuperCookieName%253DBAZINGA/"
+ "ws?WOPISrc=http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%2Fapps%"
+ "2Frichdocuments%2Fwopi%2Ffiles%2F593_ocqiesh0cngs&compat="),
+ details[1]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
+ LOK_ASSERT_EQUAL(std::string("b26112ab1b6f2ed98ce1329f0f344791"), details[3]);
+ LOK_ASSERT_EQUAL(std::string("close"), details[4]);
+ LOK_ASSERT_EQUAL(std::string("31"), details[5]);
+ }
+
+ {
+ static const std::string URI
+ = "/lool/"
+ "http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%2Frichdocuments%2Fwopi%2Ffiles%"
+ "2F165_ocgdpzbkm39u%3Faccess_token%3DODhIXdJdbsVYQoKKCuaYofyzrovxD3MQ%26access_token_"
+ "ttl%"
+ "3D0%26reuse_cookies%3DXCookieName%253DXCookieValue%253ASuperCookieName%253DBAZINGA/"
+ "ws?WOPISrc=http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%2Frichdocuments%"
+ "2Fwopi%"
+ "2Ffiles%2F165_ocgdpzbkm39u&compat=/ws/1c99a7bcdbf3209782d7eb38512e6564/write/2";
+
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, URI,
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ request.setHost(Root);
+ request.set("User-Agent", WOPI_AGENT_STRING);
+ request.set("ProxyPrefix", ProxyPrefix);
+
+ RequestDetails details(request, "");
+ LOK_ASSERT_EQUAL(true, details.isProxy());
+ LOK_ASSERT_EQUAL(ProxyPrefix, details.getProxyPrefix());
+
+ LOK_ASSERT_EQUAL(Root, details.getHostUntrusted());
+ LOK_ASSERT_EQUAL(false, details.isWebSocket());
+ LOK_ASSERT_EQUAL(true, details.isGet());
+
+ const std::string docUri
+ = "http://localhost/owncloud/index.php/apps/richdocuments/wopi/files/"
+ "165_ocgdpzbkm39u?access_token=ODhIXdJdbsVYQoKKCuaYofyzrovxD3MQ&access_token_ttl=0&"
+ "reuse_cookies=XCookieName%3DXCookieValue%3ASuperCookieName%3DBAZINGA/"
+ "ws?WOPISrc=http://localhost/owncloud/index.php/apps/richdocuments/wopi/files/"
+ "165_ocgdpzbkm39u&compat=";
+
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
+ LOK_ASSERT_EQUAL(std::string("lool"), details[0]);
+ LOK_ASSERT(details.equals(0, "lool"));
+ LOK_ASSERT_EQUAL(
+ std::string("http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%2Frichdocuments%"
+ "2Fwopi%2Ffiles%2F165_ocgdpzbkm39u%3Faccess_token%"
+ "3DODhIXdJdbsVYQoKKCuaYofyzrovxD3MQ%26access_token_ttl%3D0%26reuse_cookies%"
+ "3DXCookieName%253DXCookieValue%253ASuperCookieName%253DBAZINGA/"
+ "ws?WOPISrc=http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%"
+ "2Frichdocuments%2Fwopi%2Ffiles%2F165_ocgdpzbkm39u&compat="),
+ details[1]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
+ LOK_ASSERT_EQUAL(std::string("1c99a7bcdbf3209782d7eb38512e6564"), details[3]);
+ LOK_ASSERT_EQUAL(std::string("write"), details[4]);
+ }
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(WhiteBoxTests);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 6802a1c28..3c293457d 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -2276,7 +2276,7 @@ private:
message.seekg(startmessage.tellg(), std::ios::beg);
// re-write ServiceRoot and cache.
- RequestDetails requestDetails(request);
+ RequestDetails requestDetails(request, LOOLWSD::ServiceRoot);
// LOG_TRC("Request details " << requestDetails.toString());
// Config & security ...
diff --git a/wsd/RequestDetails.cpp b/wsd/RequestDetails.cpp
index 5249b8470..046eabe7f 100644
--- a/wsd/RequestDetails.cpp
+++ b/wsd/RequestDetails.cpp
@@ -8,20 +8,21 @@
*/
#include <config.h>
+
+#include "RequestDetails.hpp"
+
#include <Poco/URI.h>
-#include "LOOLWSD.hpp"
#include "Exceptions.hpp"
-#include "RequestDetails.hpp"
-RequestDetails::RequestDetails(Poco::Net::HTTPRequest &request)
+RequestDetails::RequestDetails(Poco::Net::HTTPRequest &request, const std::string& serviceRoot)
: _isMobile(false)
{
// 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);
+ if (!Util::startsWith(request.getURI(), serviceRoot))
+ throw BadRequestException("The request does not start with prefix: " + serviceRoot);
// re-writes ServiceRoot out of request
- _uriString = request.getURI().substr(LOOLWSD::ServiceRoot.length());
+ _uriString = request.getURI().substr(serviceRoot.length());
request.setURI(_uriString);
const std::string &method = request.getMethod();
_isGet = method == "GET";
diff --git a/wsd/RequestDetails.hpp b/wsd/RequestDetails.hpp
index 89c36654e..b931b98f8 100644
--- a/wsd/RequestDetails.hpp
+++ b/wsd/RequestDetails.hpp
@@ -11,11 +11,15 @@
#include <Poco/Net/HTTPRequest.h>
+#include <common/StringVector.hpp>
+#include <common/Util.hpp>
+
/**
* A class to encapsulate various useful pieces from the request.
* as well as path parsing goodness.
*/
-class RequestDetails {
+class RequestDetails
+{
bool _isGet : 1;
bool _isHead : 1;
bool _isProxy : 1;
@@ -27,7 +31,7 @@ class RequestDetails {
std::string _documentURI;
StringVector _pathSegs;
public:
- RequestDetails(Poco::Net::HTTPRequest &request);
+ RequestDetails(Poco::Net::HTTPRequest &request, const std::string& serviceRoot);
RequestDetails(const std::string &mobileURI);
// matches the WOPISrc if used. For load balancing
// must be 2nd element in the path after /lool/<here>
@@ -86,6 +90,7 @@ public:
oss << _uriString << ' ' << (_isGet?"G":"")
<< (_isHead?"H":"") << (_isProxy?"Proxy":"")
<< (_isWebSocket?"WebSocket":"");
+ oss << " host: " << _hostUntrusted;
oss << " path: " << _pathSegs.size();
for (size_t i = 0; i < _pathSegs.size(); ++i)
oss << " '" << _pathSegs[i] << "'";
More information about the Libreoffice-commits
mailing list