wsd/Storage.cpp | 71 ++++++++++++++++++++++++++++---------------------------- wsd/Storage.hpp | 6 ++++ 2 files changed, 42 insertions(+), 35 deletions(-)
New commits: commit 2c73b622d75ee6fa62b7d74e1548cda877201af8 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Sun Jun 14 12:44:10 2020 -0400 Commit: Ashod Nakashian <ashnak...@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 <jenkinscollaboraoff...@gmail.com> Tested-by: Jenkins Reviewed-by: Ashod Nakashian <ashnak...@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; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits