[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-2-1' - wsd/LOOLWSD.cpp wsd/LOOLWSD.hpp

Tor Lillqvist tml at collabora.com
Tue Nov 14 13:10:31 UTC 2017


 wsd/LOOLWSD.cpp |   30 ++++++++++++++++++++++++++++++
 wsd/LOOLWSD.hpp |    4 ++++
 2 files changed, 34 insertions(+)

New commits:
commit 18af0a60872e73633674db4ce07d75a5aa1ebc7a
Author: Tor Lillqvist <tml at collabora.com>
Date:   Tue Nov 7 15:12:18 2017 +0200

    Add a "plug-in" mechanism
    
    Look in the directory LOOLWSD_CONFIGDIR/conf.d (or pathname passed
    with --config-dir option) for extra .xml files containing a Poco
    configuration tree. These are not merged with the actual configuration
    but kept separate. This commit does not yet actually use them for
    anything.
    
    Change-Id: I67ff27e694d6be74a52e7bd027263b00486f60bd
    Reviewed-on: https://gerrit.libreoffice.org/44717
    Reviewed-by: Aron Budea <aron.budea at collabora.com>
    Tested-by: Aron Budea <aron.budea at collabora.com>

diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 7aed341b..37b83a29 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -48,6 +48,7 @@
 #include <thread>
 
 #include <Poco/DateTimeFormatter.h>
+#include <Poco/DirectoryIterator.h>
 #include <Poco/DOM/AutoPtr.h>
 #include <Poco/DOM/DOMParser.h>
 #include <Poco/DOM/DOMWriter.h>
@@ -78,12 +79,14 @@
 #include <Poco/TemporaryFile.h>
 #include <Poco/ThreadPool.h>
 #include <Poco/URI.h>
+#include <Poco/Util/AbstractConfiguration.h>
 #include <Poco/Util/HelpFormatter.h>
 #include <Poco/Util/MapConfiguration.h>
 #include <Poco/Util/Option.h>
 #include <Poco/Util/OptionException.h>
 #include <Poco/Util/OptionSet.h>
 #include <Poco/Util/ServerApplication.h>
+#include <Poco/Util/XMLConfiguration.h>
 
 #include "Admin.hpp"
 #include "Auth.hpp"
@@ -121,6 +124,7 @@
 
 using namespace LOOLProtocol;
 
+using Poco::DirectoryIterator;
 using Poco::Environment;
 using Poco::Exception;
 using Poco::File;
@@ -153,6 +157,7 @@ using Poco::Util::MissingOptionException;
 using Poco::Util::Option;
 using Poco::Util::OptionSet;
 using Poco::Util::ServerApplication;
+using Poco::Util::XMLConfiguration;
 using Poco::XML::AutoPtr;
 using Poco::XML::DOMParser;
 using Poco::XML::DOMWriter;
@@ -551,12 +556,14 @@ std::string LOOLWSD::ServerName;
 std::string LOOLWSD::FileServerRoot;
 std::string LOOLWSD::LOKitVersion;
 std::string LOOLWSD::ConfigFile = LOOLWSD_CONFIGDIR "/loolwsd.xml";
+std::string LOOLWSD::ConfigDir = LOOLWSD_CONFIGDIR "/conf.d";
 Util::RuntimeConstant<bool> LOOLWSD::SSLEnabled;
 Util::RuntimeConstant<bool> LOOLWSD::SSLTermination;
 std::set<std::string> LOOLWSD::EditFileExtensions;
 unsigned LOOLWSD::MaxConnections;
 unsigned LOOLWSD::MaxDocuments;
 std::string LOOLWSD::OverrideWatermark;
+std::set<const Poco::Util::AbstractConfiguration*> LOOLWSD::PluginConfigurations;
 
 static std::string UnitTestLibrary;
 
@@ -681,6 +688,22 @@ void LOOLWSD::initialize(Application& self)
         loadConfiguration(ConfigFile, PRIO_DEFAULT);
     }
 
+    // Load extra ("plug-in") configuration files, if present
+    File dir(ConfigDir);
+    if (dir.exists() && dir.isDirectory())
+    {
+        for (auto configFileIterator = DirectoryIterator(dir); configFileIterator != DirectoryIterator(); ++configFileIterator)
+        {
+            // Only accept configuration files ending in .xml
+            const std::string configFile = configFileIterator.path().getFileName();
+            if (configFile.length() > 4 && strcasecmp(configFile.substr(configFile.length() - 4).data(), ".xml") == 0)
+            {
+                const std::string fullFileName = dir.path() + "/" + configFile;
+                PluginConfigurations.insert(new XMLConfiguration(fullFileName));
+            }
+        }
+    }
+
     // Override any settings passed on the command-line.
     AutoPtr<AppConfigMap> overrideConfig(new AppConfigMap(_overrideSettings));
     conf.addWriteable(overrideConfig, PRIO_APPLICATION); // Highest priority
@@ -991,6 +1014,11 @@ void LOOLWSD::defineOptions(OptionSet& optionSet)
                         .repeatable(false)
                         .argument("path"));
 
+    optionSet.addOption(Option("config-dir", "", "Override extra configuration directory path.")
+                        .required(false)
+                        .repeatable(false)
+                        .argument("path"));
+
 #if ENABLE_DEBUG
     optionSet.addOption(Option("unitlib", "", "Unit testing library path.")
                         .required(false)
@@ -1043,6 +1071,8 @@ void LOOLWSD::handleOption(const std::string& optionName,
     }
     else if (optionName == "config-file")
         ConfigFile = value;
+    else if (optionName == "config-dir")
+        ConfigDir = value;
 #if ENABLE_DEBUG
     else if (optionName == "unitlib")
         UnitTestLibrary = value;
diff --git a/wsd/LOOLWSD.hpp b/wsd/LOOLWSD.hpp
index 80d2d9e2..ad858a4e 100644
--- a/wsd/LOOLWSD.hpp
+++ b/wsd/LOOLWSD.hpp
@@ -12,10 +12,12 @@
 
 #include <atomic>
 #include <map>
+#include <set>
 #include <string>
 
 #include <Poco/Path.h>
 #include <Poco/Process.h>
+#include <Poco/Util/AbstractConfiguration.h>
 #include <Poco/Util/OptionSet.h>
 #include <Poco/Util/ServerApplication.h>
 
@@ -46,6 +48,7 @@ public:
     static std::string FuzzFileName;
     static std::string Cache;
     static std::string ConfigFile;
+    static std::string ConfigDir;
     static std::string SysTemplate;
     static std::string LoTemplate;
     static std::string ChildRoot;
@@ -59,6 +62,7 @@ public:
     static unsigned MaxConnections;
     static unsigned MaxDocuments;
     static std::string OverrideWatermark;
+    static std::set<const Poco::Util::AbstractConfiguration*> PluginConfigurations;
 
     /// Flag to shutdown the server.
     std::atomic<bool> ShutdownFlag;


More information about the Libreoffice-commits mailing list