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: &lt;boolean&gt;</nobr>
+                       <nobr>result: &lt;string&gt;</nobr>
+                       <nobr>errorMsg: &lt;string&gt;</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

Reply via email to