[Libreoffice-commits] online.git: loolwsd/Storage.cpp

Michael Meeks michael.meeks at collabora.com
Fri Oct 21 09:27:55 UTC 2016


 loolwsd/Storage.cpp |   21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

New commits:
commit c015fecb2cae413e2e9fdc008e088b0a56599779
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Fri Oct 21 09:57:17 2016 +0100

    Improve logging of WOPI protocol errors.

diff --git a/loolwsd/Storage.cpp b/loolwsd/Storage.cpp
index f12c056..a20691d 100644
--- a/loolwsd/Storage.cpp
+++ b/loolwsd/Storage.cpp
@@ -263,6 +263,14 @@ Poco::Net::HTTPClientSession* getHTTPClientSession(const Poco::URI& uri)
                        : new Poco::Net::HTTPClientSession(uri.getHost(), uri.getPort());
 }
 
+Poco::Dynamic::Var getOrWarn(const Poco::JSON::Object::Ptr &object, const char *key)
+{
+    const auto value = object->get(key);
+    if (value.isEmpty())
+        Log::error("Missing JSON property: '" + std::string(key) + "'");
+    return value;
+}
+
 } // anonymous namespace
 
 StorageBase::FileInfo WopiStorage::getFileInfo(const Poco::URI& uriPublic)
@@ -308,15 +316,18 @@ StorageBase::FileInfo WopiStorage::getFileInfo(const Poco::URI& uriPublic)
         Poco::JSON::Parser parser;
         const auto result = parser.parse(stringJSON);
         const auto& object = result.extract<Poco::JSON::Object::Ptr>();
-        filename = object->get("BaseFileName").toString();
-        size = std::stoul(object->get("Size").toString(), nullptr, 0);
-        const auto userIdVar = object->get("UserId");
+        filename = getOrWarn(object, "BaseFileName").toString();
+        const auto sizeVar = getOrWarn(object, "Size");
+        size = std::stoul(sizeVar.toString(), nullptr, 0);
+        const auto userIdVar = getOrWarn(object, "UserId");
         userId = (userIdVar.isString() ? userIdVar.toString() : "");
-        const auto userNameVar = object->get("UserFriendlyName");
+        const auto userNameVar = getOrWarn(object,"UserFriendlyName");
         userName = (userNameVar.isString() ? userNameVar.toString() : "anonymous");
-        const auto canWriteVar = object->get("UserCanWrite");
+        const auto canWriteVar = getOrWarn(object, "UserCanWrite");
         canWrite = canWriteVar.isString() ? (canWriteVar.toString() == "true") : false;
     }
+    else
+        Log::error("WOPI::CheckFileInfo is missing JSON payload");
 
     // WOPI doesn't support file last modified time.
     _fileInfo = FileInfo({filename, Poco::Timestamp(), size, userId, userName, canWrite});


More information about the Libreoffice-commits mailing list