[Libreoffice-commits] online.git: 2 commits - loolwsd/Admin.cpp loolwsd/FileServer.cpp

Pranav Kant pranavk at collabora.co.uk
Tue Jul 19 17:59:41 UTC 2016


 loolwsd/Admin.cpp      |    7 +++++--
 loolwsd/FileServer.cpp |   19 ++++++++++++-------
 2 files changed, 17 insertions(+), 9 deletions(-)

New commits:
commit dff5118d3a4ce148638845e63337a5fb907d9426
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Tue Jul 19 23:25:16 2016 +0530

    loolwsd: Better handling of JWT cookies
    
    Use Poco API instead of manually finding the cookie in request
    headers.
    
    Change-Id: I4fee64b0adfe8a3139ad4291512e94fd65f9aa9d

diff --git a/loolwsd/FileServer.cpp b/loolwsd/FileServer.cpp
index 507f512..abcba82 100644
--- a/loolwsd/FileServer.cpp
+++ b/loolwsd/FileServer.cpp
@@ -12,6 +12,7 @@
 #include <string>
 #include <vector>
 
+#include <Poco/Exception.h>
 #include <Poco/FileStream.h>
 #include <Poco/Net/HTTPCookie.h>
 #include <Poco/Net/HTTPBasicCredentials.h>
@@ -22,6 +23,7 @@
 #include <Poco/Net/HTTPServerParams.h>
 #include <Poco/Net/HTTPServerRequest.h>
 #include <Poco/Net/HTTPServerResponse.h>
+#include <Poco/Net/NameValueCollection.h>
 #include <Poco/Net/NetException.h>
 #include <Poco/Net/SecureServerSocket.h>
 #include <Poco/Net/WebSocket.h>
@@ -46,6 +48,7 @@ using Poco::Net::HTTPResponse;
 using Poco::Net::HTTPServerParams;
 using Poco::Net::HTTPServerRequest;
 using Poco::Net::HTTPServerResponse;
+using Poco::Net::NameValueCollection;
 using Poco::Net::SecureServerSocket;
 using Poco::Net::HTTPBasicCredentials;
 using Poco::StreamCopier;
@@ -56,14 +59,11 @@ bool FileServerRequestHandler::isAdminLoggedIn(HTTPServerRequest& request, HTTPS
     const auto& config = Application::instance().config();
     const auto sslKeyPath = config.getString("ssl.key_file_path", "");
 
-    if (request.find("Cookie") != request.end())
+    NameValueCollection cookies;
+    request.getCookies(cookies);
+    try
     {
-        // FIXME: Handle other cookie params like '; httponly; secure'
-        const std::size_t pos = request["Cookie"].find_first_of("=");
-        if (pos == std::string::npos)
-            throw Poco::Net::NotAuthenticatedException("Missing JWT");
-
-        const std::string jwtToken = request["Cookie"].substr(pos + 1);
+        const std::string jwtToken = cookies.get("jwt");
         Log::info("Verifying JWT token: " + jwtToken);
         JWTAuth authAgent(sslKeyPath, "admin", "admin", "admin");
         if (authAgent.verify(jwtToken))
@@ -74,7 +74,12 @@ bool FileServerRequestHandler::isAdminLoggedIn(HTTPServerRequest& request, HTTPS
 
         Log::info("Invalid JWT token, let the administrator re-login");
     }
+    catch (const Poco::Exception& exc)
+    {
+        Log::info("No existing JWT cookie found");
+    }
 
+    // If no cookie found, or is invalid, let admin re-login
     const auto user = config.getString("admin_console.username", "");
     const auto pass = config.getString("admin_console.password", "");
     if (user.empty() || pass.empty())
commit 319dd5659875d37f77dcb0c59c1fd70bb3444037
Author: Pranav Kant <pranavk at collabora.co.uk>
Date:   Tue Jul 19 23:15:10 2016 +0530

    loolwsd: Don't send an empty result in frame
    
    Change-Id: Ia4cf4c6d49be4b65d075c8380994dd7115ba2dc6

diff --git a/loolwsd/Admin.cpp b/loolwsd/Admin.cpp
index 952544b..c8405b2 100644
--- a/loolwsd/Admin.cpp
+++ b/loolwsd/Admin.cpp
@@ -67,8 +67,11 @@ bool AdminRequestHandler::adminCommandHandler(const std::vector<char>& payload)
         tokens[0] == "mem_stats" ||
         tokens[0] == "cpu_stats" )
     {
-        const std::string responseFrame = tokens[0] + " " + model.query(tokens[0]);
-        sendTextFrame(responseFrame);
+        std::string responseFrame = tokens[0] + " ";
+        const std::string result = model.query(tokens[0]);
+        responseFrame += result;
+        if (result != "")
+            sendTextFrame(responseFrame);
     }
     else if (tokens[0] == "subscribe" && tokens.count() > 1)
     {


More information about the Libreoffice-commits mailing list