[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