summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAshod Nakashian <ashod.nakashian@collabora.co.uk>2022-03-27 19:15:59 -0400
committerAndras Timar <andras.timar@collabora.com>2022-04-14 10:12:53 +0200
commit3e7166f604e4a370f7e9ab7707c29fc528b5e98f (patch)
treeb24dd23a874efc5f689f960bb7b05b3bfc13bc4a
parentenable eslint for CDarkOverlay.ts (diff)
downloadonline-3e7166f604e4a370f7e9ab7707c29fc528b5e98f.tar.gz
online-3e7166f604e4a370f7e9ab7707c29fc528b5e98f.zip
wsd: test: split out RequestDetails tests
WhiteBoxTests.cpp is by far the slowest TU to compile (taking minutes) and even gcc gives 'note: variable tracking size limit exceeded' and recompiles, which doubles the time. This extracts the RequestDetails tests into its own file to better parallelize the build. Change-Id: Ic8d54d06223a122bc1ccf73cfa216e2b3a8f32a5 Signed-off-by: Ashod Nakashian <ashod.nakashian@collabora.co.uk>
-rw-r--r--test/Makefile.am1
-rw-r--r--test/RequestDetailsTests.cpp757
-rw-r--r--test/WhiteBoxTests.cpp828
3 files changed, 758 insertions, 828 deletions
diff --git a/test/Makefile.am b/test/Makefile.am
index 2fea986694..5ff245042f 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -110,6 +110,7 @@ wsd_sources = \
test_base_source = \
TileQueueTests.cpp \
+ RequestDetailsTests.cpp \
WhiteBoxTests.cpp \
HttpWhiteBoxTests.cpp \
DeltaTests.cpp \
diff --git a/test/RequestDetailsTests.cpp b/test/RequestDetailsTests.cpp
new file mode 100644
index 0000000000..e1a41d4c7d
--- /dev/null
+++ b/test/RequestDetailsTests.cpp
@@ -0,0 +1,757 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <config.h>
+
+#include <test/lokassert.hpp>
+
+#include <Common.hpp>
+#include <RequestDetails.hpp>
+
+/// RequestDetails unit-tests.
+class RequestDetailsTests : public CPPUNIT_NS::TestFixture
+{
+ CPPUNIT_TEST_SUITE(RequestDetailsTests);
+
+ CPPUNIT_TEST(testDownloadURI);
+ CPPUNIT_TEST(testCoolURI);
+ CPPUNIT_TEST(testLocal);
+ CPPUNIT_TEST(testLocalHexified);
+ CPPUNIT_TEST(testRequestDetails);
+
+ CPPUNIT_TEST_SUITE_END();
+
+ void testDownloadURI();
+ void testCoolURI();
+ void testLocal();
+ void testLocalHexified();
+ void testRequestDetails();
+};
+
+void RequestDetailsTests::testDownloadURI()
+{
+ constexpr auto testname = __func__;
+
+ static const std::string Root = "localhost:9980";
+
+ {
+ static const std::string URI = "/browser/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(URI, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
+ LOK_ASSERT_EQUAL(std::string("browser"), details[0]);
+ LOK_ASSERT_EQUAL(std::string("browser"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "browser"));
+ LOK_ASSERT(details.equals(0, "browser"));
+ 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 = "/browser/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(URI, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(3), details.size());
+ LOK_ASSERT_EQUAL(std::string("browser"), details[0]);
+ LOK_ASSERT_EQUAL(std::string("browser"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "browser"));
+ LOK_ASSERT(details.equals(0, "browser"));
+ LOK_ASSERT_EQUAL(std::string("49c225146"), details[1]);
+ LOK_ASSERT_EQUAL(std::string("select2.css"), details[2]);
+ }
+}
+
+void RequestDetailsTests::testCoolURI()
+{
+ constexpr auto testname = __func__;
+
+ static const std::string Root = "localhost:9980";
+
+ static const std::string URI
+ = "/browser/49c225146/"
+ "cool.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, "");
+
+ const std::string wopiSrc
+ = "http://localhost/nextcloud/index.php/apps/richdocuments/wopi/files/593_ocqiesh0cngs";
+
+ LOK_ASSERT_EQUAL(wopiSrc, details.getField(RequestDetails::Field::WOPISrc));
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(4), details.size());
+ LOK_ASSERT_EQUAL(std::string("browser"), details[0]);
+ LOK_ASSERT_EQUAL(std::string("browser"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "browser"));
+ LOK_ASSERT(details.equals(0, "browser"));
+ LOK_ASSERT_EQUAL(std::string("49c225146"), details[1]);
+ LOK_ASSERT_EQUAL(std::string("cool.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 RequestDetailsTests::testLocal()
+{
+ constexpr auto testname = __func__;
+
+ 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 = "/cool/"
+ "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.getLegacyDocumentURI());
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(6), details.size());
+ LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+ 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]);
+ LOK_ASSERT_EQUAL(std::string("0"), details[5]);
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string("open"), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "open"));
+ LOK_ASSERT_EQUAL(std::string("open"), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, "open"));
+ LOK_ASSERT_EQUAL(std::string("0"), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, "0"));
+ }
+
+ {
+ // Blank entries are skipped.
+ static const std::string URI = "/cool/"
+ "file%3A%2F%2F%2Fhome%2Fash%2Fprj%2Flo%2Fonline%2Ftest%"
+ "2Fdata%2Fhello-world.odt/ws//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 = "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("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+ 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("write"), details[3]); // SessionId, since the real SessionId is blank.
+ LOK_ASSERT_EQUAL(std::string("2"), details[4]); // Command, since SessionId was blank.
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "write"));
+ LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, "2"));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
+ }
+
+ {
+ // Apparently, the initial / can be missing -- all the tests do that.
+ static const std::string URI = "cool/"
+ "file%3A%2F%2F%2Fhome%2Fash%2Fprj%2Flo%2Fonline%2Ftest%"
+ "2Fdata%2Fhello-world.odt/ws//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 = "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("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+ 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("write"), details[3]); // SessionId, since the real SessionId is blank.
+ LOK_ASSERT_EQUAL(std::string("2"), details[4]); // Command, since SessionId was blank.
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "write"));
+ LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, "2"));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
+ }
+}
+
+void RequestDetailsTests::testLocalHexified()
+{
+ constexpr auto testname = __func__;
+
+ static const std::string Root = "localhost:9980";
+
+ static const std::string ProxyPrefix
+ = "http://localhost/nextcloud/apps/richdocuments/proxy.php?req=";
+
+ static const std::string docUri = "file:///home/ash/prj/lo/online/test/data/hello-world.odt";
+ static const std::string fileUrl =
+ "file%3A%2F%2F%2Fhome%2Fash%2Fprj%2Flo%2Fonline%2Ftest%2Fdata%2Fhello-world.odt";
+
+ const std::string fileUrlHex = "0x" + Util::dataToHexString(fileUrl, 0, fileUrl.size());
+
+ {
+ const std::string URI = "/cool/" + fileUrlHex + "/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());
+
+ LOK_ASSERT_EQUAL(docUri, details.getLegacyDocumentURI());
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(6), details.size());
+ LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+ LOK_ASSERT_EQUAL(fileUrl, 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]);
+ LOK_ASSERT_EQUAL(std::string("0"), details[5]);
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string("open"), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "open"));
+ LOK_ASSERT_EQUAL(std::string("open"), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, "open"));
+ LOK_ASSERT_EQUAL(std::string("0"), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, "0"));
+ }
+
+ {
+ // Blank entries are skipped.
+ static const std::string URI = "/cool/" + fileUrlHex + "/ws//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());
+
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
+ LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+ LOK_ASSERT_EQUAL(fileUrl, details[1]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
+ LOK_ASSERT_EQUAL(std::string("write"), details[3]); // SessionId, since the real SessionId is blank.
+ LOK_ASSERT_EQUAL(std::string("2"), details[4]); // Command, since SessionId was blank.
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "write"));
+ LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, "2"));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
+ }
+
+ {
+ // Apparently, the initial / can be missing -- all the tests do that.
+ static const std::string URI = "cool/" + fileUrlHex + "/ws//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());
+
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
+ LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+ LOK_ASSERT_EQUAL(fileUrl, details[1]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
+ LOK_ASSERT_EQUAL(std::string("write"), details[3]); // SessionId, since the real SessionId is blank.
+ LOK_ASSERT_EQUAL(std::string("2"), details[4]); // Command, since SessionId was blank.
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "write"));
+ LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, "2"));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
+ }
+}
+
+void RequestDetailsTests::testRequestDetails()
+{
+ constexpr auto testname = __func__;
+
+ 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
+ = "/cool/"
+ "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());
+
+ LOK_ASSERT_EQUAL(std::string("b26112ab1b6f2ed98ce1329f0f344791"), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT_EQUAL(std::string("close"), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT_EQUAL(std::string("31"), details.getField(RequestDetails::Field::Serial));
+
+ const std::string docUri_WopiSrc
+ = "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_WopiSrc, details.getLegacyDocumentURI());
+
+ 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";
+
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ const std::string wopiSrc
+ = "http://localhost/nextcloud/index.php/apps/richdocuments/wopi/files/593_ocqiesh0cngs";
+
+ LOK_ASSERT_EQUAL(wopiSrc, details.getField(RequestDetails::Field::WOPISrc));
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(8), details.size());
+ LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT(details.equals(0, "cool"));
+ 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"),
+ details[1]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
+ LOK_ASSERT_EQUAL(
+ std::string("WOPISrc=http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%2Fapps%"
+ "2Frichdocuments%2Fwopi%2Ffiles%2F593_ocqiesh0cngs&compat="),
+ details[3]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[4]);
+ LOK_ASSERT_EQUAL(std::string("b26112ab1b6f2ed98ce1329f0f344791"), details[5]);
+ LOK_ASSERT_EQUAL(std::string("close"), details[6]);
+ LOK_ASSERT_EQUAL(std::string("31"), details[7]);
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string("b26112ab1b6f2ed98ce1329f0f344791"), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "b26112ab1b6f2ed98ce1329f0f344791"));
+ LOK_ASSERT_EQUAL(std::string("close"), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, "close"));
+ LOK_ASSERT_EQUAL(std::string("31"), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, "31"));
+ }
+
+ {
+ static const std::string URI
+ = "/cool/"
+ "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_WopiSrc
+ = "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_WopiSrc, details.getLegacyDocumentURI());
+
+ 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";
+
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ const std::string wopiSrc
+ = "http://localhost/owncloud/index.php/apps/richdocuments/wopi/files/"
+ "165_ocgdpzbkm39u";
+
+ LOK_ASSERT_EQUAL(wopiSrc, details.getField(RequestDetails::Field::WOPISrc));
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(8), details.size());
+ LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+ 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"),
+ details[1]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
+ LOK_ASSERT_EQUAL(
+ std::string("WOPISrc=http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%"
+ "2Frichdocuments%2Fwopi%2Ffiles%2F165_ocgdpzbkm39u&compat="),
+ details[3]);
+ LOK_ASSERT_EQUAL(std::string("ws"), details[4]);
+ LOK_ASSERT_EQUAL(std::string("1c99a7bcdbf3209782d7eb38512e6564"), details[5]);
+ LOK_ASSERT_EQUAL(std::string("write"), details[6]);
+ LOK_ASSERT_EQUAL(std::string("2"), details[7]);
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string("1c99a7bcdbf3209782d7eb38512e6564"), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "1c99a7bcdbf3209782d7eb38512e6564"));
+ LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, "write"));
+ LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, "2"));
+ }
+
+ {
+ static const std::string URI
+ = "/cool/%2Ftmp%2Fslideshow_b8c3225b_setclientpart.odp/Ar3M1X89mVaryYkh/"
+ "UjaCGP4cYHlU6TvUGdnFTPi8hjOS87uFym7ruWMq3F3jBr0kSPgVhbKz5CwUyV8R/slideshow.svg";
+
+ 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
+ = "/tmp/slideshow_b8c3225b_setclientpart.odp";
+
+ LOK_ASSERT_EQUAL(docUri, details.getLegacyDocumentURI());
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(std::string(), details.getField(RequestDetails::Field::WOPISrc));
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
+ LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+ LOK_ASSERT_EQUAL(std::string("%2Ftmp%2Fslideshow_b8c3225b_setclientpart.odp"), details[1]);
+ LOK_ASSERT_EQUAL(std::string("Ar3M1X89mVaryYkh"), details[2]);
+ LOK_ASSERT_EQUAL(std::string("UjaCGP4cYHlU6TvUGdnFTPi8hjOS87uFym7ruWMq3F3jBr0kSPgVhbKz5CwUyV8R"), details[3]);
+ LOK_ASSERT_EQUAL(std::string("slideshow.svg"), details[4]);
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, ""));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, ""));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
+ }
+
+ {
+ static const std::string URI = "/cool/"
+ "clipboard?WOPISrc=file%3A%2F%2F%2Ftmp%2Fcopypasteef324307_"
+ "empty.ods&ServerId=7add98ed&ViewId=0&Tag=5f7972ce4e6a37dd";
+
+ 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 = "clipboard";
+
+ LOK_ASSERT_EQUAL(docUri, details.getLegacyDocumentURI());
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(3), details.size());
+ LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+ LOK_ASSERT_EQUAL(std::string("clipboard"), details[1]);
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, ""));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, ""));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
+ }
+
+ {
+ static const std::string URI
+ = "/cool/"
+ "https%3A%2F%2Fexample.com%3A8443%2Frest%2Ffiles%2Fwopi%2Ffiles%"
+ "2F8ac75551de4d89e60002%3Faccess_header%3DAuthorization%253A%252520Bearer%"
+ "252520poiuytrewq%25250D%25250A%25250D%25250AX-Requested-"
+ "With%253A%252520XMLHttpRequest%26reuse_cookies%3Dlang%253Den-us%253A_ga_"
+ "LMX4TVJ02K%253DGS1.1%"
+ "253AToken%253DeyJhbGciOiJIUzUxMiJ9.vajknfkfajksdljfiwjek-"
+ "W90fmgVb3C-00-eSkJBDqDNSYA%253APublicToken%"
+ "253Dabc%253AZNPCQ003-32383700%253De9c71c3b%"
+ "253AJSESSIONID%253Dnode0.node0%26permission%3Dedit/"
+ "ws?WOPISrc=https://example.com:8443/rest/files/wopi/files/"
+ "8c74c1deff7dede002&compat=/ws";
+
+ 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
+ = "https://example.com:8443/rest/files/wopi/files/"
+ "8ac75551de4d89e60002?access_header=Authorization%3A%2520Bearer%2520poiuytrewq%250D%"
+ "250A%250D%250AX-Requested-With%3A%2520XMLHttpRequest&reuse_cookies=lang%3Den-us%3A_"
+ "ga_LMX4TVJ02K%3DGS1.1%3AToken%3DeyJhbGciOiJIUzUxMiJ9.vajknfkfajksdljfiwjek-"
+ "W90fmgVb3C-00-eSkJBDqDNSYA%3APublicToken%3Dabc%3AZNPCQ003-32383700%3De9c71c3b%"
+ "3AJSESSIONID%3Dnode0.node0&permission=edit";
+
+ // LOK_ASSERT_EQUAL(docUri, details.getLegacyDocumentURI()); // Broken.
+ LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
+
+ const std::map<std::string, std::string>& params = details.getDocumentURIParams();
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(3), params.size());
+ auto it = params.find("access_header");
+ const std::string access_header
+ = "Authorization: Bearer poiuytrewq\r\n\r\nX-Requested-With: XMLHttpRequest";
+ LOK_ASSERT_EQUAL(access_header, it != params.end() ? it->second : "");
+ it = params.find("reuse_cookies");
+ const std::string reuse_cookies
+ = "lang=en-us:_ga_LMX4TVJ02K=GS1.1:Token=eyJhbGciOiJIUzUxMiJ9.vajknfkfajksdljfiwjek-"
+ "W90fmgVb3C-00-eSkJBDqDNSYA:PublicToken=abc:ZNPCQ003-32383700=e9c71c3b:JSESSIONID="
+ "node0.node0";
+ LOK_ASSERT_EQUAL(reuse_cookies, it != params.end() ? it->second : "");
+ it = params.find("permission");
+ const std::string permission = "edit";
+ LOK_ASSERT_EQUAL(permission, it != params.end() ? it->second : "");
+
+ LOK_ASSERT_EQUAL(static_cast<std::size_t>(11), details.size());
+ LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
+ LOK_ASSERT(details.equals(0, "cool"));
+
+ const std::string encodedDocUri
+ = "https%3A%2F%2Fexample.com%3A8443%2Frest%2Ffiles%2Fwopi%2Ffiles%"
+ "2F8ac75551de4d89e60002%3Faccess_header%3DAuthorization%253A%252520Bearer%"
+ "252520poiuytrewq%25250D%25250A%25250D%25250AX-Requested-With%253A%"
+ "252520XMLHttpRequest%26reuse_cookies%3Dlang%253Den-us%253A_ga_LMX4TVJ02K%253DGS1.1%"
+ "253AToken%253DeyJhbGciOiJIUzUxMiJ9.vajknfkfajksdljfiwjek-W90fmgVb3C-00-eSkJBDqDNSYA%"
+ "253APublicToken%253Dabc%253AZNPCQ003-32383700%253De9c71c3b%253AJSESSIONID%253Dnode0."
+ "node0%26permission%3Dedit";
+
+ LOK_ASSERT_EQUAL(encodedDocUri, details[1]);
+
+ LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::SessionId));
+ LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, ""));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Command));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Command, ""));
+ LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
+ LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
+ }
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(RequestDetailsTests);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/test/WhiteBoxTests.cpp b/test/WhiteBoxTests.cpp
index 091d021ccf..313589d862 100644
--- a/test/WhiteBoxTests.cpp
+++ b/test/WhiteBoxTests.cpp
@@ -21,7 +21,6 @@
#include <TileDesc.hpp>
#include <Util.hpp>
#include <JsonUtil.hpp>
-#include <RequestDetails.hpp>
#include <common/Message.hpp>
#include <common/Authorization.hpp>
@@ -59,11 +58,6 @@ class WhiteBoxTests : public CPPUNIT_NS::TestFixture
CPPUNIT_TEST(testBufferClass);
CPPUNIT_TEST(testStringVector);
CPPUNIT_TEST(testHexify);
- CPPUNIT_TEST(testRequestDetails_DownloadURI);
- CPPUNIT_TEST(testRequestDetails_coolURI);
- CPPUNIT_TEST(testRequestDetails_local);
- CPPUNIT_TEST(testRequestDetails_local_hexified);
- CPPUNIT_TEST(testRequestDetails);
CPPUNIT_TEST(testUIDefaults);
CPPUNIT_TEST(testCSSVars);
CPPUNIT_TEST(testStat);
@@ -97,11 +91,6 @@ class WhiteBoxTests : public CPPUNIT_NS::TestFixture
void testBufferClass();
void testStringVector();
void testHexify();
- void testRequestDetails_DownloadURI();
- void testRequestDetails_coolURI();
- void testRequestDetails_local();
- void testRequestDetails_local_hexified();
- void testRequestDetails();
void testUIDefaults();
void testCSSVars();
void testStat();
@@ -784,103 +773,6 @@ void WhiteBoxTests::testRectanglesIntersect()
1000, 1000, 2000, 1000));
}
-void WhiteBoxTests::testAuthorization()
-{
- constexpr auto testname = __func__;
-
- Authorization auth1(Authorization::Type::Token, "abc");
- Poco::URI uri1("http://localhost");
- auth1.authorizeURI(uri1);
- LOK_ASSERT_EQUAL(std::string("http://localhost/?access_token=abc"), uri1.toString());
- Poco::Net::HTTPRequest req1;
- auth1.authorizeRequest(req1);
- LOK_ASSERT_EQUAL(std::string("Bearer abc"), req1.get("Authorization"));
-
- Authorization auth1modify(Authorization::Type::Token, "modified");
- // still the same uri1, currently "http://localhost/?access_token=abc"
- auth1modify.authorizeURI(uri1);
- LOK_ASSERT_EQUAL(std::string("http://localhost/?access_token=modified"), uri1.toString());
-
- Authorization auth2(Authorization::Type::Header, "def");
- Poco::Net::HTTPRequest req2;
- auth2.authorizeRequest(req2);
- LOK_ASSERT(!req2.has("Authorization"));
-
- Authorization auth3(Authorization::Type::Header, "Authorization: Basic huhu== ");
- Poco::URI uri2("http://localhost");
- auth3.authorizeURI(uri2);
- // nothing added with the Authorization header approach
- LOK_ASSERT_EQUAL(std::string("http://localhost"), uri2.toString());
- Poco::Net::HTTPRequest req3;
- auth3.authorizeRequest(req3);
- LOK_ASSERT_EQUAL(std::string("Basic huhu=="), req3.get("Authorization"));
-
- Authorization auth4(Authorization::Type::Header, " Authorization: Basic blah== \n\rX-Something: additional ");
- Poco::Net::HTTPRequest req4;
- auth4.authorizeRequest(req4);
- LOK_ASSERT_MESSAGE("Exected request to have Authorization header", req4.has("Authorization"));
- LOK_ASSERT_EQUAL(std::string("Basic blah=="), req4.get("Authorization"));
- LOK_ASSERT_MESSAGE("Exected request to have X-Something header", req4.has("X-Something"));
- LOK_ASSERT_EQUAL(std::string("additional"), req4.get("X-Something"));
-
- Authorization auth5(Authorization::Type::Header, " Authorization: Basic huh== \n\rX-Something-More: else \n\r");
- Poco::Net::HTTPRequest req5;
- auth5.authorizeRequest(req5);
- LOK_ASSERT_EQUAL(std::string("Basic huh=="), req5.get("Authorization"));
- LOK_ASSERT_EQUAL(std::string("else"), req5.get("X-Something-More"));
-
- Authorization auth6(Authorization::Type::None, "Authorization: basic huh==");
- Poco::Net::HTTPRequest req6;
- CPPUNIT_ASSERT_NO_THROW(auth6.authorizeRequest(req6));
-
- {
- const std::string WorkingDocumentURI
- = "https://example.com:8443/rest/files/wopi/files/"
- "8ac75551de4d89e60002?access_header=Authorization%3A%2520Bearer%25201hpoiuytrewq%"
- "250D%250A%250D%250AX-Requested-With%3A%2520XMLHttpRequest&reuse_cookies=lang%3Den-"
- "us%3A_xx_%3DGS1.1.%3APublicToken%"
- "3DeyJzdWIiOiJhZG1pbiIsImV4cCI6MTU4ODkxNzc3NCwiaWF0IjoxNTg4OTE2ODc0LCJqdGkiOiI4OGZhN2"
- "E3ZC1lMzU5LTQ2OWEtYjg3Zi02NmFhNzI0ZGFkNTcifQ%3AZNPCQ003-32383700%3De9c71c3b%"
- "3AJSESSIONID%3Dnode019djohorurnaf1eo6f57ejhg0520.node0&permission=edit";
-
- const std::string AuthorizationParam = "Bearer 1hpoiuytrewq";
-
- Authorization auth(Authorization::create(WorkingDocumentURI));
- Poco::Net::HTTPRequest req;
- auth.authorizeRequest(req);
- LOK_ASSERT_EQUAL(AuthorizationParam, req.get("Authorization"));
- LOK_ASSERT_EQUAL(std::string("XMLHttpRequest"), req.get("X-Requested-With"));
- }
-
- {
- const std::string URI
- = "https://example.com:8443/rest/files/wopi/files/"
- "24e3f0a17230cca5017230fb6861000c?access_header=Authorization%3A%20Bearer%"
- "201hpoiuytrewq%0D%0A%0D%0AX-Requested-With%3A%20XMLHttpRequest";
-
- const std::string AuthorizationParam = "Bearer 1hpoiuytrewq";
-
- Authorization auth7(Authorization::create(URI));
- Poco::Net::HTTPRequest req7;
- auth7.authorizeRequest(req7);
- LOK_ASSERT_EQUAL(AuthorizationParam, req7.get("Authorization"));
- LOK_ASSERT_EQUAL(std::string("XMLHttpRequest"), req7.get("X-Requested-With"));
- }
-
- {
- const std::string URI
- = "https://example.com:8443/rest/files/wopi/files/"
- "8ac75551de4d89e60002?reuse_cookies=lang%3Den-us%3A_xx_%3DGS1.1.%3APublicToken%"
- "3DeyJzdWIiOiJhZG1pbiIsImV4cCI6MTU4ODkxNzc3NCwiaWF0IjoxNTg4OTE2ODc0LCJqdGkiOiI4OGZhN2"
- "E3ZC1lMzU5LTQ2OWEtYjg3Zi02NmFhNzI0ZGFkNTcifQ%3AZNPCQ003-32383700%3De9c71c3b%"
- "3AJSESSIONID%3Dnode019djohorurnaf1eo6f57ejhg0520.node0&permission=edit";
-
- Authorization auth7(Authorization::create(URI));
- Poco::Net::HTTPRequest req;
- auth7.authorizeRequest(req);
- }
-}
-
void WhiteBoxTests::testJson()
{
constexpr auto testname = __func__;
@@ -1306,726 +1198,6 @@ void WhiteBoxTests::testHexify()
}
}
-void WhiteBoxTests::testRequestDetails_DownloadURI()
-{
- constexpr auto testname = __func__;
-
- static const std::string Root = "localhost:9980";
-
- {
- static const std::string URI = "/browser/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(URI, details.getDocumentURI());
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
- LOK_ASSERT_EQUAL(std::string("browser"), details[0]);
- LOK_ASSERT_EQUAL(std::string("browser"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "browser"));
- LOK_ASSERT(details.equals(0, "browser"));
- 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 = "/browser/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(URI, details.getDocumentURI());
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(3), details.size());
- LOK_ASSERT_EQUAL(std::string("browser"), details[0]);
- LOK_ASSERT_EQUAL(std::string("browser"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "browser"));
- LOK_ASSERT(details.equals(0, "browser"));
- LOK_ASSERT_EQUAL(std::string("49c225146"), details[1]);
- LOK_ASSERT_EQUAL(std::string("select2.css"), details[2]);
- }
-}
-
-void WhiteBoxTests::testRequestDetails_coolURI()
-{
- constexpr auto testname = __func__;
-
- static const std::string Root = "localhost:9980";
-
- static const std::string URI
- = "/browser/49c225146/"
- "cool.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, "");
-
- const std::string wopiSrc
- = "http://localhost/nextcloud/index.php/apps/richdocuments/wopi/files/593_ocqiesh0cngs";
-
- LOK_ASSERT_EQUAL(wopiSrc, details.getField(RequestDetails::Field::WOPISrc));
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(4), details.size());
- LOK_ASSERT_EQUAL(std::string("browser"), details[0]);
- LOK_ASSERT_EQUAL(std::string("browser"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "browser"));
- LOK_ASSERT(details.equals(0, "browser"));
- LOK_ASSERT_EQUAL(std::string("49c225146"), details[1]);
- LOK_ASSERT_EQUAL(std::string("cool.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()
-{
- constexpr auto testname = __func__;
-
- 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 = "/cool/"
- "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.getLegacyDocumentURI());
- LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(6), details.size());
- LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
- 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]);
- LOK_ASSERT_EQUAL(std::string("0"), details[5]);
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string("open"), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "open"));
- LOK_ASSERT_EQUAL(std::string("open"), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, "open"));
- LOK_ASSERT_EQUAL(std::string("0"), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, "0"));
- }
-
- {
- // Blank entries are skipped.
- static const std::string URI = "/cool/"
- "file%3A%2F%2F%2Fhome%2Fash%2Fprj%2Flo%2Fonline%2Ftest%"
- "2Fdata%2Fhello-world.odt/ws//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 = "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("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
- 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("write"), details[3]); // SessionId, since the real SessionId is blank.
- LOK_ASSERT_EQUAL(std::string("2"), details[4]); // Command, since SessionId was blank.
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "write"));
- LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, "2"));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
- }
-
- {
- // Apparently, the initial / can be missing -- all the tests do that.
- static const std::string URI = "cool/"
- "file%3A%2F%2F%2Fhome%2Fash%2Fprj%2Flo%2Fonline%2Ftest%"
- "2Fdata%2Fhello-world.odt/ws//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 = "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("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
- 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("write"), details[3]); // SessionId, since the real SessionId is blank.
- LOK_ASSERT_EQUAL(std::string("2"), details[4]); // Command, since SessionId was blank.
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "write"));
- LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, "2"));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
- }
-}
-
-void WhiteBoxTests::testRequestDetails_local_hexified()
-{
- constexpr auto testname = __func__;
-
- static const std::string Root = "localhost:9980";
-
- static const std::string ProxyPrefix
- = "http://localhost/nextcloud/apps/richdocuments/proxy.php?req=";
-
- static const std::string docUri = "file:///home/ash/prj/lo/online/test/data/hello-world.odt";
- static const std::string fileUrl =
- "file%3A%2F%2F%2Fhome%2Fash%2Fprj%2Flo%2Fonline%2Ftest%2Fdata%2Fhello-world.odt";
-
- const std::string fileUrlHex = "0x" + Util::dataToHexString(fileUrl, 0, fileUrl.size());
-
- {
- const std::string URI = "/cool/" + fileUrlHex + "/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());
-
- LOK_ASSERT_EQUAL(docUri, details.getLegacyDocumentURI());
- LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(6), details.size());
- LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
- LOK_ASSERT_EQUAL(fileUrl, 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]);
- LOK_ASSERT_EQUAL(std::string("0"), details[5]);
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string("open"), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "open"));
- LOK_ASSERT_EQUAL(std::string("open"), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, "open"));
- LOK_ASSERT_EQUAL(std::string("0"), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, "0"));
- }
-
- {
- // Blank entries are skipped.
- static const std::string URI = "/cool/" + fileUrlHex + "/ws//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());
-
- LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
- LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
- LOK_ASSERT_EQUAL(fileUrl, details[1]);
- LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
- LOK_ASSERT_EQUAL(std::string("write"), details[3]); // SessionId, since the real SessionId is blank.
- LOK_ASSERT_EQUAL(std::string("2"), details[4]); // Command, since SessionId was blank.
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "write"));
- LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, "2"));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
- }
-
- {
- // Apparently, the initial / can be missing -- all the tests do that.
- static const std::string URI = "cool/" + fileUrlHex + "/ws//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());
-
- LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
- LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
- LOK_ASSERT_EQUAL(fileUrl, details[1]);
- LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
- LOK_ASSERT_EQUAL(std::string("write"), details[3]); // SessionId, since the real SessionId is blank.
- LOK_ASSERT_EQUAL(std::string("2"), details[4]); // Command, since SessionId was blank.
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "write"));
- LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, "2"));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
- }
-}
-
-void WhiteBoxTests::testRequestDetails()
-{
- constexpr auto testname = __func__;
-
- 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
- = "/cool/"
- "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());
-
- LOK_ASSERT_EQUAL(std::string("b26112ab1b6f2ed98ce1329f0f344791"), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT_EQUAL(std::string("close"), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT_EQUAL(std::string("31"), details.getField(RequestDetails::Field::Serial));
-
- const std::string docUri_WopiSrc
- = "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_WopiSrc, details.getLegacyDocumentURI());
-
- 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";
-
- LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
-
- const std::string wopiSrc
- = "http://localhost/nextcloud/index.php/apps/richdocuments/wopi/files/593_ocqiesh0cngs";
-
- LOK_ASSERT_EQUAL(wopiSrc, details.getField(RequestDetails::Field::WOPISrc));
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(8), details.size());
- LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT(details.equals(0, "cool"));
- 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"),
- details[1]);
- LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
- LOK_ASSERT_EQUAL(
- std::string("WOPISrc=http%3A%2F%2Flocalhost%2Fnextcloud%2Findex.php%2Fapps%"
- "2Frichdocuments%2Fwopi%2Ffiles%2F593_ocqiesh0cngs&compat="),
- details[3]);
- LOK_ASSERT_EQUAL(std::string("ws"), details[4]);
- LOK_ASSERT_EQUAL(std::string("b26112ab1b6f2ed98ce1329f0f344791"), details[5]);
- LOK_ASSERT_EQUAL(std::string("close"), details[6]);
- LOK_ASSERT_EQUAL(std::string("31"), details[7]);
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string("b26112ab1b6f2ed98ce1329f0f344791"), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "b26112ab1b6f2ed98ce1329f0f344791"));
- LOK_ASSERT_EQUAL(std::string("close"), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, "close"));
- LOK_ASSERT_EQUAL(std::string("31"), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, "31"));
- }
-
- {
- static const std::string URI
- = "/cool/"
- "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_WopiSrc
- = "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_WopiSrc, details.getLegacyDocumentURI());
-
- 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";
-
- LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
-
- const std::string wopiSrc
- = "http://localhost/owncloud/index.php/apps/richdocuments/wopi/files/"
- "165_ocgdpzbkm39u";
-
- LOK_ASSERT_EQUAL(wopiSrc, details.getField(RequestDetails::Field::WOPISrc));
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(8), details.size());
- LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
- 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"),
- details[1]);
- LOK_ASSERT_EQUAL(std::string("ws"), details[2]);
- LOK_ASSERT_EQUAL(
- std::string("WOPISrc=http%3A%2F%2Flocalhost%2Fowncloud%2Findex.php%2Fapps%"
- "2Frichdocuments%2Fwopi%2Ffiles%2F165_ocgdpzbkm39u&compat="),
- details[3]);
- LOK_ASSERT_EQUAL(std::string("ws"), details[4]);
- LOK_ASSERT_EQUAL(std::string("1c99a7bcdbf3209782d7eb38512e6564"), details[5]);
- LOK_ASSERT_EQUAL(std::string("write"), details[6]);
- LOK_ASSERT_EQUAL(std::string("2"), details[7]);
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string("1c99a7bcdbf3209782d7eb38512e6564"), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, "1c99a7bcdbf3209782d7eb38512e6564"));
- LOK_ASSERT_EQUAL(std::string("write"), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, "write"));
- LOK_ASSERT_EQUAL(std::string("2"), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, "2"));
- }
-
- {
- static const std::string URI
- = "/cool/%2Ftmp%2Fslideshow_b8c3225b_setclientpart.odp/Ar3M1X89mVaryYkh/"
- "UjaCGP4cYHlU6TvUGdnFTPi8hjOS87uFym7ruWMq3F3jBr0kSPgVhbKz5CwUyV8R/slideshow.svg";
-
- 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
- = "/tmp/slideshow_b8c3225b_setclientpart.odp";
-
- LOK_ASSERT_EQUAL(docUri, details.getLegacyDocumentURI());
- LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
-
- LOK_ASSERT_EQUAL(std::string(), details.getField(RequestDetails::Field::WOPISrc));
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(5), details.size());
- LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
- LOK_ASSERT_EQUAL(std::string("%2Ftmp%2Fslideshow_b8c3225b_setclientpart.odp"), details[1]);
- LOK_ASSERT_EQUAL(std::string("Ar3M1X89mVaryYkh"), details[2]);
- LOK_ASSERT_EQUAL(std::string("UjaCGP4cYHlU6TvUGdnFTPi8hjOS87uFym7ruWMq3F3jBr0kSPgVhbKz5CwUyV8R"), details[3]);
- LOK_ASSERT_EQUAL(std::string("slideshow.svg"), details[4]);
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, ""));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, ""));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
- }
-
- {
- static const std::string URI = "/cool/"
- "clipboard?WOPISrc=file%3A%2F%2F%2Ftmp%2Fcopypasteef324307_"
- "empty.ods&ServerId=7add98ed&ViewId=0&Tag=5f7972ce4e6a37dd";
-
- 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 = "clipboard";
-
- LOK_ASSERT_EQUAL(docUri, details.getLegacyDocumentURI());
- LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(3), details.size());
- LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
- LOK_ASSERT_EQUAL(std::string("clipboard"), details[1]);
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, ""));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, ""));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
- }
-
- {
- static const std::string URI
- = "/cool/"
- "https%3A%2F%2Fexample.com%3A8443%2Frest%2Ffiles%2Fwopi%2Ffiles%"
- "2F8ac75551de4d89e60002%3Faccess_header%3DAuthorization%253A%252520Bearer%"
- "252520poiuytrewq%25250D%25250A%25250D%25250AX-Requested-"
- "With%253A%252520XMLHttpRequest%26reuse_cookies%3Dlang%253Den-us%253A_ga_"
- "LMX4TVJ02K%253DGS1.1%"
- "253AToken%253DeyJhbGciOiJIUzUxMiJ9.vajknfkfajksdljfiwjek-"
- "W90fmgVb3C-00-eSkJBDqDNSYA%253APublicToken%"
- "253Dabc%253AZNPCQ003-32383700%253De9c71c3b%"
- "253AJSESSIONID%253Dnode0.node0%26permission%3Dedit/"
- "ws?WOPISrc=https://example.com:8443/rest/files/wopi/files/"
- "8c74c1deff7dede002&compat=/ws";
-
- 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
- = "https://example.com:8443/rest/files/wopi/files/"
- "8ac75551de4d89e60002?access_header=Authorization%3A%2520Bearer%2520poiuytrewq%250D%"
- "250A%250D%250AX-Requested-With%3A%2520XMLHttpRequest&reuse_cookies=lang%3Den-us%3A_"
- "ga_LMX4TVJ02K%3DGS1.1%3AToken%3DeyJhbGciOiJIUzUxMiJ9.vajknfkfajksdljfiwjek-"
- "W90fmgVb3C-00-eSkJBDqDNSYA%3APublicToken%3Dabc%3AZNPCQ003-32383700%3De9c71c3b%"
- "3AJSESSIONID%3Dnode0.node0&permission=edit";
-
- // LOK_ASSERT_EQUAL(docUri, details.getLegacyDocumentURI()); // Broken.
- LOK_ASSERT_EQUAL(docUri, details.getDocumentURI());
-
- const std::map<std::string, std::string>& params = details.getDocumentURIParams();
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(3), params.size());
- auto it = params.find("access_header");
- const std::string access_header
- = "Authorization: Bearer poiuytrewq\r\n\r\nX-Requested-With: XMLHttpRequest";
- LOK_ASSERT_EQUAL(access_header, it != params.end() ? it->second : "");
- it = params.find("reuse_cookies");
- const std::string reuse_cookies
- = "lang=en-us:_ga_LMX4TVJ02K=GS1.1:Token=eyJhbGciOiJIUzUxMiJ9.vajknfkfajksdljfiwjek-"
- "W90fmgVb3C-00-eSkJBDqDNSYA:PublicToken=abc:ZNPCQ003-32383700=e9c71c3b:JSESSIONID="
- "node0.node0";
- LOK_ASSERT_EQUAL(reuse_cookies, it != params.end() ? it->second : "");
- it = params.find("permission");
- const std::string permission = "edit";
- LOK_ASSERT_EQUAL(permission, it != params.end() ? it->second : "");
-
- LOK_ASSERT_EQUAL(static_cast<std::size_t>(11), details.size());
- LOK_ASSERT_EQUAL(std::string("cool"), details[0]);
- LOK_ASSERT(details.equals(0, "cool"));
-
- const std::string encodedDocUri
- = "https%3A%2F%2Fexample.com%3A8443%2Frest%2Ffiles%2Fwopi%2Ffiles%"
- "2F8ac75551de4d89e60002%3Faccess_header%3DAuthorization%253A%252520Bearer%"
- "252520poiuytrewq%25250D%25250A%25250D%25250AX-Requested-With%253A%"
- "252520XMLHttpRequest%26reuse_cookies%3Dlang%253Den-us%253A_ga_LMX4TVJ02K%253DGS1.1%"
- "253AToken%253DeyJhbGciOiJIUzUxMiJ9.vajknfkfajksdljfiwjek-W90fmgVb3C-00-eSkJBDqDNSYA%"
- "253APublicToken%253Dabc%253AZNPCQ003-32383700%253De9c71c3b%253AJSESSIONID%253Dnode0."
- "node0%26permission%3Dedit";
-
- LOK_ASSERT_EQUAL(encodedDocUri, details[1]);
-
- LOK_ASSERT_EQUAL(std::string("cool"), details.getField(RequestDetails::Field::Type));
- LOK_ASSERT(details.equals(RequestDetails::Field::Type, "cool"));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::SessionId));
- LOK_ASSERT(details.equals(RequestDetails::Field::SessionId, ""));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Command));
- LOK_ASSERT(details.equals(RequestDetails::Field::Command, ""));
- LOK_ASSERT_EQUAL(std::string(""), details.getField(RequestDetails::Field::Serial));
- LOK_ASSERT(details.equals(RequestDetails::Field::Serial, ""));
- }
-}
-
void WhiteBoxTests::testUIDefaults()
{
constexpr auto testname = __func__;