diff options
author | Skyler Grey <skyler.grey@collabora.com> | 2023-08-24 14:01:22 +0000 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2023-09-23 12:44:50 +0200 |
commit | 1b3218df0466a59fd1e9a8df72d97ede6448425e (patch) | |
tree | 0bdb53f6e931034911c9df86e83e5edc04d04551 /wsd/COOLWSD.cpp | |
parent | Option to stop coolwsd when configuration files change (diff) | |
download | online-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.cpp | 56 |
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() |