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

Michael Meeks michael.meeks at collabora.com
Thu Apr 14 19:44:41 UTC 2016


 loolwsd/LOOLTool.cpp |   79 ++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 53 insertions(+), 26 deletions(-)

New commits:
commit 444adc976d58746a238f6eacc7f8a295d6e96288
Author: Michael Meeks <michael.meeks at collabora.com>
Date:   Thu Apr 14 19:32:56 2016 +0100

    looltool cleanup add --no-check-certificate option too.

diff --git a/loolwsd/LOOLTool.cpp b/loolwsd/LOOLTool.cpp
index 975ed4c..93a090f 100644
--- a/loolwsd/LOOLTool.cpp
+++ b/loolwsd/LOOLTool.cpp
@@ -21,9 +21,13 @@
 #include <Poco/Net/HTMLForm.h>
 #include <Poco/Net/NetException.h>
 #include <Poco/Net/HTTPClientSession.h>
+#include <Poco/Net/HTTPSClientSession.h>
 #include <Poco/Net/HTTPRequest.h>
 #include <Poco/Net/HTTPResponse.h>
 #include <Poco/Net/FilePartSource.h>
+#include <Poco/Net/SSLManager.h>
+#include <Poco/Net/KeyConsoleHandler.h>
+#include <Poco/Net/AcceptCertificateHandler.h>
 #include <Poco/StreamCopier.h>
 #include <Poco/URI.h>
 #include <Poco/Process.h>
@@ -101,7 +105,13 @@ public:
         std::cerr << "convert file " << document << "\n";
 
         Poco::URI uri(_app._serverURI);
-        Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort());
+
+        Poco::Net::HTTPClientSession *session;
+        if (_app._serverURI.compare(0, 5, "https"))
+            session = new Poco::Net::HTTPSClientSession(uri.getHost(), uri.getPort());
+        else
+            session = new Poco::Net::HTTPClientSession(uri.getHost(), uri.getPort());
+
         Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, "/convert-to");
 
         try {
@@ -112,45 +122,53 @@ public:
             form.prepareSubmit(request);
 
             // If this results in a Poco::Net::ConnectionRefusedException, loolwsd is not running.
-            form.write(session.sendRequest(request));
+            form.write(session->sendRequest(request));
         }
         catch (const Poco::Exception &e)
         {
-            std::cerr << "Failed to connect: " << e.name() <<
+            std::cerr << "Failed to write data: " << e.name() <<
                   " " << e.message() << "\n";
             return;
         }
 
         Poco::Net::HTTPResponse response;
-        std::stringstream actualStream;
-
-        // receiveResponse() resulted in a Poco::Net::NoMessageException.
-        std::istream& responseStream = session.receiveResponse(response);
-        Poco::StreamCopier::copyStream(responseStream, actualStream);
-
-        // FIXME: implement destinationDir
-        Poco::Path path(document);
-
-        std::string outPath = path.getBaseName() + "." + _app._destinationFormat;
-        std::cerr << "write to " << outPath << "\n";
-        std::ifstream fileStream(outPath);
-        std::stringstream expectedStream;
-        expectedStream << fileStream.rdbuf();
-
-        // In some cases the result is prefixed with (the UTF-8 encoding of) the Unicode BOM
-        // (U+FEFF). Skip that.
-        std::string actualString = actualStream.str();
-        if (actualString.size() > 3 && actualString[0] == '\xEF' && actualString[1] == '\xBB' && actualString[2] == '\xBF')
-            actualString = actualString.substr(3);
+
+        try {
+            std::cerr << "try to get response\n";
+
+            // receiveResponse() resulted in a Poco::Net::NoMessageException.
+            std::istream& responseStream = session->receiveResponse(response);
+
+            std::cerr << "Get response\n";
+
+            // FIXME: implement destinationDir
+            Poco::Path path(document);
+            std::string outPath = path.getBaseName() + "." + _app._destinationFormat;
+            std::ofstream fileStream(outPath);
+
+            std::cerr << "write to " << outPath << "\n";
+
+            Poco::StreamCopier::copyStream(responseStream, fileStream);
+
+            std::cerr << "Copied stream\n";
+        }
+        catch (const Poco::Exception &e)
+        {
+            std::cerr << "Exception converting: " << e.name() <<
+                  " " << e.message() << "\n";
+            return;
+        }
+
+        delete session;
     }
 };
 
 Tool::Tool() :
     _numWorkers(4),
 #if ENABLE_SSL
-    _serverURI("https://localhost:" + std::to_string(DEFAULT_CLIENT_PORT_NUMBER) + "/wss"),
+    _serverURI("https://127.0.0.1:" + std::to_string(DEFAULT_CLIENT_PORT_NUMBER)),
 #else
-    _serverURI("http://localhost:" + std::to_string(DEFAULT_CLIENT_PORT_NUMBER) + "/ws"),
+    _serverURI("http://127.0.0.1:" + std::to_string(DEFAULT_CLIENT_PORT_NUMBER)),
 #endif
     _destinationFormat("txt")
 {
@@ -166,13 +184,15 @@ void Tool::defineOptions(OptionSet& optionSet)
                         .required(false).repeatable(false)
                         .argument("format"));
     optionSet.addOption(Option("outdir", "", "output directory for converted files")
-                        .required(false).repeatable(false));
+                        .required(false).repeatable(false).argument("outdir"));
     optionSet.addOption(Option("parallelism", "", "number of simultaneous threads to use")
                         .required(false) .repeatable(false)
                         .argument("threads"));
     optionSet.addOption(Option("server", "", "URI of LOOL server")
                         .required(false).repeatable(false)
                         .argument("uri"));
+    optionSet.addOption(Option("no-check-certificate", "", "Disable checking of SSL certs")
+                        .required(false).repeatable(false));
 }
 
 void Tool::handleOption(const std::string& optionName,
@@ -198,6 +218,13 @@ void Tool::handleOption(const std::string& optionName,
         _numWorkers = std::min(std::stoi(value), 1);
     else if (optionName == "uri")
         _serverURI = value;
+    else if (optionName == "no-check-certificate")
+    {
+        Poco::SharedPtr<Poco::Net::PrivateKeyPassphraseHandler> consoleClientHandler = new Poco::Net::KeyConsoleHandler(false);
+        Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> invalidClientCertHandler = new Poco::Net::AcceptCertificateHandler(false);
+        Poco::Net::Context::Ptr sslClientContext = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "");
+        Poco::Net::SSLManager::instance().initializeClient(consoleClientHandler, invalidClientCertHandler, sslClientContext);
+    }
 }
 
 int Tool::main(const std::vector<std::string>& args)


More information about the Libreoffice-commits mailing list