summaryrefslogtreecommitdiffstats
path: root/wsd/COOLWSD.cpp
diff options
context:
space:
mode:
authorSkyler Grey <skyler.grey@collabora.com>2023-08-24 14:01:22 +0000
committerAndras Timar <andras.timar@collabora.com>2023-09-23 12:44:50 +0200
commit1b3218df0466a59fd1e9a8df72d97ede6448425e (patch)
tree0bdb53f6e931034911c9df86e83e5edc04d04551 /wsd/COOLWSD.cpp
parentOption to stop coolwsd when configuration files change (diff)
downloadonline-1b3218df0466a59fd1e9a8df72d97ede6448425e.tar.gz
online-1b3218df0466a59fd1e9a8df72d97ede6448425e.zip
Add cli option to use settings from env variables
Currently [in docker it is possible to do configuration through environment variables](https://col.la/dockercodeconfigviaenv), which works using the start-collabora-online.sh start-collabora-online.pl scripts. This commit lets COOLWSD listen to the same environment variables directly Change-Id: I75762ad620132037523fa82167a3ff17075c7027 Signed-off-by: Skyler Grey <skyler.grey@collabora.com>
Diffstat (limited to 'wsd/COOLWSD.cpp')
-rw-r--r--wsd/COOLWSD.cpp56
1 files changed, 55 insertions, 1 deletions
diff --git a/wsd/COOLWSD.cpp b/wsd/COOLWSD.cpp
index 046b18fe29..6f911f4537 100644
--- a/wsd/COOLWSD.cpp
+++ b/wsd/COOLWSD.cpp
@@ -901,6 +901,7 @@ bool COOLWSD::NoSeccomp = false;
bool COOLWSD::AdminEnabled = true;
bool COOLWSD::UnattendedRun = false;
bool COOLWSD::SignalParent = false;
+bool COOLWSD::UseEnvVarOptions = false;
std::string COOLWSD::RouteToken;
#if ENABLE_DEBUG
bool COOLWSD::SingleKit = false;
@@ -2232,7 +2233,9 @@ void COOLWSD::innerInitialize(Application& self)
}
}
- // Override any settings passed on the command-line.
+ // Override any settings passed on the command-line or via environment variables
+ if (UseEnvVarOptions)
+ initializeEnvOptions();
AutoPtr<AppConfigMap> overrideConfig(new AppConfigMap(_overrideSettings));
conf.addWriteable(overrideConfig, PRIO_APPLICATION); // Highest priority
@@ -2998,6 +3001,16 @@ void COOLWSD::defineOptions(OptionSet& optionSet)
.required(false)
.repeatable(false));
+ optionSet.addOption(Option("use-env-vars", "",
+ "Use the environment variables defined on "
+ "https://sdk.collaboraonline.com/docs/installation/"
+ "CODE_Docker_image.html#setting-the-application-configuration-"
+ "dynamically-via-environment-variables to set options. "
+ "'DONT_GEN_SSL_CERT' is forcibly enabled and 'extra_params' is "
+ "ignored even when using this option.")
+ .required(false)
+ .repeatable(false));
+
#if ENABLE_DEBUG
optionSet.addOption(Option("unitlib", "", "Unit testing library path.")
.required(false)
@@ -3066,6 +3079,8 @@ void COOLWSD::handleOption(const std::string& optionName,
LoTemplate = value;
else if (optionName == "signal")
SignalParent = true;
+ else if (optionName == "use-env-vars")
+ UseEnvVarOptions = true;
#if ENABLE_DEBUG
else if (optionName == "unitlib")
@@ -3096,6 +3111,45 @@ void COOLWSD::handleOption(const std::string& optionName,
#endif
}
+void COOLWSD::initializeEnvOptions()
+{
+ int n = 0;
+ char* aliasGroup;
+ while ((aliasGroup = std::getenv(("aliasgroup" + std::to_string(n + 1)).c_str())) != nullptr)
+ {
+ bool first = true;
+ std::istringstream aliasGroupStream;
+ aliasGroupStream.str(aliasGroup);
+ for (std::string alias; std::getline(aliasGroupStream, alias, ',');)
+ {
+ if (first)
+ {
+ _overrideSettings["storage.wopi.alias_groups.group[" + std::to_string(n) +
+ "].host"] = alias;
+ first = false;
+ }
+ else
+ {
+ _overrideSettings["storage.wopi.alias_groups.group[" + std::to_string(n) +
+ "].alias"] = alias;
+ }
+ }
+
+ n++;
+ }
+ if (n >= 1)
+ {
+ _overrideSettings["alias_groups[@mode]"] = "groups";
+ }
+
+ char* optionValue;
+ if ((optionValue = std::getenv("username")) != nullptr) _overrideSettings["admin_console.username"] = optionValue;
+ if ((optionValue = std::getenv("password")) != nullptr) _overrideSettings["admin_console.password"] = optionValue;
+ if ((optionValue = std::getenv("server_name")) != nullptr) _overrideSettings["server_name"] = optionValue;
+ if ((optionValue = std::getenv("dictionaries")) != nullptr) _overrideSettings["allowed_languages"] = optionValue;
+ if ((optionValue = std::getenv("remoteconfigurl")) != nullptr) _overrideSettings["remote_config.remote_url"] = optionValue;
+}
+
#if !MOBILEAPP
void COOLWSD::displayHelp()