configure.ac | 2 +- loleaflet/reference.html | 16 ++++++++++++++++ loleaflet/src/core/Socket.js | 7 +++++++ wsd/Auth.cpp | 3 ++- wsd/DocumentBroker.cpp | 8 ++++---- wsd/LOOLWSD.cpp | 19 ++++++++++++++++++- wsd/Storage.cpp | 7 +++++-- 7 files changed, 53 insertions(+), 9 deletions(-)
New commits: commit 7a3b244b7234b468e5a83022c3792674d0b892da Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> AuthorDate: Wed Jul 8 10:33:17 2020 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> CommitDate: Wed Jul 8 10:33:17 2020 +0200 Release 6.2.10.0 diff --git a/configure.ac b/configure.ac index 181a707f4..4b83ca624 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.63]) -AC_INIT([loolwsd], [6.2.9.0], [libreoffice@lists.freedesktop.org]) +AC_INIT([loolwsd], [6.2.10.0], [libreoffice@lists.freedesktop.org]) LT_INIT([shared, disable-static, dlopen]) AM_INIT_AUTOMAKE([1.10 subdir-objects tar-pax -Wno-portability]) commit d97784c5e4f33725394f7e27cdc10318dc5dc207 Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> AuthorDate: Thu Jul 2 08:16:00 2020 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> CommitDate: Wed Jul 8 10:26:10 2020 +0200 Improve reporting save results Change-Id: I3f2f96f4b8f196e6e9268bed24695f739f679124 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/97699 Tested-by: Jenkins Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> (cherry picked from commit e71e37bcec84068e92434357df6172b9cf457e7e) diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp index a6e92498d..72777c6c0 100644 --- a/wsd/DocumentBroker.cpp +++ b/wsd/DocumentBroker.cpp @@ -782,8 +782,8 @@ bool DocumentBroker::saveToStorageInternal(const std::string& sessionId, { LOG_DBG("Save skipped as document [" << _docKey << "] was not modified."); _lastSaveTime = std::chrono::steady_clock::now(); - _poll->wakeup(); broadcastSaveResult(true, "unmodified"); + _poll->wakeup(); return true; } @@ -895,7 +895,7 @@ bool DocumentBroker::saveToStorageInternal(const std::string& sessionId, LOG_ERR("Cannot save docKey [" << _docKey << "] to storage URI [" << uriAnonym << "]. Invalid or expired access token. Notifying client."); it->second->sendTextFrame("error: cmd=storage kind=saveunauthorized"); - broadcastSaveResult(false, "Invalid or expired access token", storageSaveResult.getErrorMsg()); + broadcastSaveResult(false, "Invalid or expired access token"); } else if (storageSaveResult.getResult() == StorageBase::SaveResult::FAILED) { @@ -921,9 +921,9 @@ bool DocumentBroker::saveToStorageInternal(const std::string& sessionId, void DocumentBroker::broadcastSaveResult(bool success, const std::string& result, const std::string& errorMsg) { - std::string resultstr = success ? "true" : "false"; + const std::string resultstr = success ? "true" : "false"; // Some sane limit, otherwise we get problems transfering this to the client with large strings (can be a whole webpage) - std::string errorMsgFormatted = errorMsg.substr(0, 1000); + std::string errorMsgFormatted = LOOLProtocol::getAbbreviatedMessage(errorMsg); // Replace reserverd characters errorMsgFormatted = Poco::translate(errorMsgFormatted, "\"", "'"); broadcastMessage("commandresult: { \"command\": \"save\", \"success\": " + resultstr + commit 0b367e1cbcbfa9a4c89e1fa792ee4c75ce762157 Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> AuthorDate: Tue Jul 7 21:18:13 2020 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> CommitDate: Wed Jul 8 09:03:22 2020 +0200 Report back load result to integrator Integrator currently gets no message when loading the document from WOPI host fails. Similiar to Action_Save_Resp, introduce Action_Load_Resp with the result of the load action. diff --git a/loleaflet/reference.html b/loleaflet/reference.html index 5dd40dbb1..dfce3de95 100644 --- a/loleaflet/reference.html +++ b/loleaflet/reference.html @@ -2976,6 +2976,22 @@ Actions response <th>Values</th> <th>Description</th> </tr> + <tr> + <td><code><b>Action_Load_Result</b></code></td> + <td><code> + <nobr>success: <boolean></nobr> + <nobr>result: <string></nobr> + <nobr>errorMsg: <string></nobr> + </code></td> + <td>Acknowledgement when load finishes.<br/> + <code>success</code> tells if LOOL was able to load the document + successfully.<br/> + <code>result</code> contains the reason the document was not loaded.<br/> + <code>errorMsg</code> contains a detailed error message in case loading failed. + Probably it will contain the error message returned from the WOPI/Webdav host. + </td> + </tr> + <tr> <td><code><b>Action_Save_Resp</b></code></td> <td><code> diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js index 8f68b94ad..21a2cf4a3 100644 --- a/loleaflet/src/core/Socket.js +++ b/loleaflet/src/core/Socket.js @@ -323,6 +323,13 @@ L.Socket = L.Class.extend({ errorMsg: commandresult['errorMsg'] }; this._map.fire('postMessage', {msgId: 'Action_Save_Resp', args: postMessageObj}); + } else if (commandresult['command'] === 'load') { + postMessageObj = { + success: commandresult['success'], + result: commandresult['result'], + errorMsg: commandresult['errorMsg'] + }; + this._map.fire('postMessage', {msgId: 'Action_Load_Resp', args: postMessageObj}); } return; } diff --git a/wsd/Auth.cpp b/wsd/Auth.cpp index 6be7eceea..9b5e3faaf 100644 --- a/wsd/Auth.cpp +++ b/wsd/Auth.cpp @@ -91,7 +91,8 @@ void Authorization::authorizeRequest(Poco::Net::HTTPRequest& request) const break; } default: - assert(false); + return; + //assert(false); } } diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp index 5415224fa..7b217cdb5 100644 --- a/wsd/LOOLWSD.cpp +++ b/wsd/LOOLWSD.cpp @@ -624,6 +624,20 @@ public: namespace { +void sendLoadResult(std::shared_ptr<ClientSession> clientSession, bool success, + const std::string &errorMsg) +{ + const std::string result = success ? "" : "Error while loading document"; + const std::string resultstr = success ? "true" : "false"; + // Some sane limit, otherwise we get problems transfering this + // to the client with large strings (can be a whole webpage) + std::string errorMsgFormatted = LOOLProtocol::getAbbreviatedMessage(errorMsg); + // Replace reserved characters + errorMsgFormatted = Poco::translate(errorMsg, "\"", "'"); + clientSession->sendMessage("commandresult: { \"command\": \"load\", \"success\": " + resultstr + + ", \"result\": \"" + result + "\", \"errorMsg\": \"" + errorMsgFormatted + "\"}"); +} + inline std::string getLaunchBase(const std::string &credentials) { std::ostringstream oss; @@ -2564,7 +2578,6 @@ private: throw BadRequestException("Invalid or unknown request."); } #endif - void handleClientWsUpgrade(const Poco::Net::HTTPRequest& request, const std::string& url, SocketDisposition &disposition) { @@ -2662,15 +2675,18 @@ private: // Users of development versions get just an info when reaching max documents or connections checkSessionLimitsAndWarnClients(); #endif + sendLoadResult(clientSession, true, ""); } catch (const UnauthorizedRequestException& exc) { LOG_ERR("Unauthorized Request while loading session for " << docBroker->getDocKey() << ": " << exc.what()); + sendLoadResult(clientSession, false, "Unauthorized Request"); const std::string msg = "error: cmd=internal kind=unauthorized"; clientSession->sendMessage(msg); } catch (const StorageConnectionException& exc) { + sendLoadResult(clientSession, false, exc.what()); // Alert user about failed load const std::string msg = "error: cmd=storage kind=loadfailed"; clientSession->sendMessage(msg); @@ -2678,6 +2694,7 @@ private: catch (const std::exception& exc) { LOG_ERR("Error while loading : " << exc.what()); + sendLoadResult(clientSession, false, exc.what()); } }); }); diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp index 9f195cb9d..f64a725a4 100644 --- a/wsd/Storage.cpp +++ b/wsd/Storage.cpp @@ -655,8 +655,11 @@ std::string WopiStorage::loadStorageFileToLocal(const Authorization& auth) if (response.getStatus() != Poco::Net::HTTPResponse::HTTP_OK) { - LOG_ERR("WOPI::GetFile failed with " << response.getStatus() << ' ' << response.getReason()); - throw StorageConnectionException("WOPI::GetFile failed"); + std::ostringstream oss; + Poco::StreamCopier::copyStream(rs, oss); + std::string responseString = oss.str(); + LOG_ERR("WOPI::GetFile failed with " << response.getStatus() << ' ' << responseString); + throw StorageConnectionException("WOPI::GetFile failed: " + responseString); } else // Successful { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits