[Libreoffice-commits] online.git: wsd/Storage.cpp wsd/Storage.hpp
Ashod Nakashian (via logerrit)
logerrit at kemper.freedesktop.org
Sat Jun 20 14:33:39 UTC 2020
wsd/Storage.cpp | 71 ++++++++++++++++++++++++++++----------------------------
wsd/Storage.hpp | 6 ++++
2 files changed, 42 insertions(+), 35 deletions(-)
New commits:
commit 2c73b622d75ee6fa62b7d74e1548cda877201af8
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Sun Jun 14 12:44:10 2020 -0400
Commit: Ashod Nakashian <ashnakash at gmail.com>
CommitDate: Sat Jun 20 16:33:20 2020 +0200
wsd: extract WOPI HTTP request construction
This hoists the common parts of the HTTPRequest
for all WOPI requests to avoid errors when changing them.
Change-Id: Ia02ef657a43b7a7d2fc13be3da012836fa0d7650
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/96372
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Tested-by: Jenkins
Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>
diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index 1da4eaf74..61823d67e 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -529,6 +529,23 @@ void LockContext::dumpState(std::ostream& os) const
#if !MOBILEAPP
+void WopiStorage::initHttpRequest(Poco::Net::HTTPRequest& request, const Poco::URI& uri,
+ const Authorization& auth, const std::string& cookies) const
+{
+ request.set("User-Agent", WOPI_AGENT_STRING);
+
+ auth.authorizeRequest(request);
+
+ addStorageDebugCookie(request);
+
+ // TODO: Avoid repeated parsing.
+ std::map<std::string, std::string> params = GetQueryParams(uri);
+ addWopiProof(request, uri, params["access_token"]);
+
+ if (_reuseCookies)
+ addStorageReuseCookie(request, cookies);
+}
+
std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Authorization& auth,
const std::string& cookies,
LockContext& lockCtx)
@@ -537,7 +554,6 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
Poco::URI uriObject(getUri());
auth.authorizeURI(uriObject);
const std::string uriAnonym = LOOLWSD::anonymizeUrl(uriObject.toString());
- std::map<std::string, std::string> params = GetQueryParams(uriObject);
LOG_DBG("Getting info for wopi uri [" << uriAnonym << "].");
@@ -545,13 +561,11 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
std::chrono::duration<double> callDuration(0);
try
{
- Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, uriObject.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
- request.set("User-Agent", WOPI_AGENT_STRING);
- auth.authorizeRequest(request);
- addStorageDebugCookie(request);
- if (_reuseCookies)
- addStorageReuseCookie(request, cookies);
- addWopiProof(request, uriObject, params["access_token"]);
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET,
+ uriObject.getPathAndQuery(),
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ initHttpRequest(request, uriObject, auth, cookies);
+
const auto startTime = std::chrono::steady_clock::now();
std::unique_ptr<Poco::Net::HTTPClientSession> psession(getHTTPClientSession(uriObject));
@@ -760,8 +774,6 @@ bool WopiStorage::updateLockState(const Authorization& auth, const std::string&
Poco::URI uriObject(getUri());
auth.authorizeURI(uriObject);
- std::map<std::string, std::string> params = GetQueryParams(uriObject);
-
Poco::URI uriObjectAnonym(getUri());
uriObjectAnonym.setPath(LOOLWSD::anonymizeUrl(uriObjectAnonym.getPath()));
const std::string uriAnonym = uriObjectAnonym.toString();
@@ -773,18 +785,15 @@ bool WopiStorage::updateLockState(const Authorization& auth, const std::string&
{
std::unique_ptr<Poco::Net::HTTPClientSession> psession(getHTTPClientSession(uriObject));
- Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, uriObject.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
- request.set("User-Agent", WOPI_AGENT_STRING);
- auth.authorizeRequest(request);
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST,
+ uriObject.getPathAndQuery(),
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ initHttpRequest(request, uriObject, auth, cookies);
request.set("X-WOPI-Override", lock ? "LOCK" : "UNLOCK");
request.set("X-WOPI-Lock", lockCtx._lockToken);
if (!getExtendedData().empty())
request.set("X-LOOL-WOPI-ExtendedData", getExtendedData());
- addStorageDebugCookie(request);
- if (_reuseCookies)
- addStorageReuseCookie(request, cookies);
- addWopiProof(request, uriObject, params["access_token"]);
psession->sendRequest(request);
Poco::Net::HTTPResponse response;
@@ -833,8 +842,6 @@ std::string WopiStorage::loadStorageFileToLocal(const Authorization& auth,
uriObject.setPath(uriObject.getPath() + "/contents");
auth.authorizeURI(uriObject);
- std::map<std::string, std::string> params = GetQueryParams(uriObject);
-
Poco::URI uriObjectAnonym(getUri());
uriObjectAnonym.setPath(LOOLWSD::anonymizeUrl(uriObjectAnonym.getPath()) + "/contents");
const std::string uriAnonym = uriObjectAnonym.toString();
@@ -857,13 +864,11 @@ std::string WopiStorage::loadStorageFileToLocal(const Authorization& auth,
{
std::unique_ptr<Poco::Net::HTTPClientSession> psession(getHTTPClientSession(uriObject));
- Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, uriObject.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
- request.set("User-Agent", WOPI_AGENT_STRING);
- auth.authorizeRequest(request);
- addStorageDebugCookie(request);
- if (_reuseCookies)
- addStorageReuseCookie(request, cookies);
- addWopiProof(request, uriObject, params["access_token"]);
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET,
+ uriObject.getPathAndQuery(),
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ initHttpRequest(request, uriObject, auth, cookies);
+
psession->sendRequest(request);
Poco::Net::HTTPResponse response;
@@ -939,8 +944,6 @@ WopiStorage::saveLocalFileToStorage(const Authorization& auth, const std::string
uriObject.setPath(isSaveAs || isRename? uriObject.getPath(): uriObject.getPath() + "/contents");
auth.authorizeURI(uriObject);
- std::map<std::string, std::string> params = GetQueryParams(uriObject);
-
const std::string uriAnonym = LOOLWSD::anonymizeUrl(uriObject.toString());
LOG_INF("Uploading URI via WOPI [" << uriAnonym << "] from [" << filePathAnonym + "].");
@@ -951,9 +954,10 @@ WopiStorage::saveLocalFileToStorage(const Authorization& auth, const std::string
{
std::unique_ptr<Poco::Net::HTTPClientSession> psession(getHTTPClientSession(uriObject));
- Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, uriObject.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
- request.set("User-Agent", WOPI_AGENT_STRING);
- auth.authorizeRequest(request);
+ Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST,
+ uriObject.getPathAndQuery(),
+ Poco::Net::HTTPMessage::HTTP_1_1);
+ initHttpRequest(request, uriObject, auth, cookies);
if (!isSaveAs && !isRename)
{
@@ -1022,10 +1026,7 @@ WopiStorage::saveLocalFileToStorage(const Authorization& auth, const std::string
request.setContentType("application/octet-stream");
request.setContentLength(size);
- addStorageDebugCookie(request);
- if (_reuseCookies)
- addStorageReuseCookie(request, cookies);
- addWopiProof(request, uriObject, params["access_token"]);
+
std::ostream& os = psession->sendRequest(request);
std::ifstream ifs(filePath);
diff --git a/wsd/Storage.hpp b/wsd/Storage.hpp
index b426d44bd..d7f6d70f9 100644
--- a/wsd/Storage.hpp
+++ b/wsd/Storage.hpp
@@ -504,6 +504,12 @@ public:
std::chrono::duration<double> getWopiLoadDuration() const { return _wopiLoadDuration; }
std::chrono::duration<double> getWopiSaveDuration() const { return _wopiSaveDuration; }
+private:
+ /// Initialize an HTTPRequest instance with the common settings and headers.
+ /// Older Poco versions don't support copying HTTPRequest objects, so we can't generate them.
+ void initHttpRequest(Poco::Net::HTTPRequest& request, const Poco::URI& uri,
+ const Authorization& auth, const std::string& cookies) const;
+
private:
// Time spend in loading the file from storage
std::chrono::duration<double> _wopiLoadDuration;
More information about the Libreoffice-commits
mailing list