Release 2.4.25 - See CHANGELOG.md

This commit is contained in:
dave@tiredofit.ca 2023-03-23 09:44:02 -07:00
parent 102f18ca26
commit 0f436a8b0e
4 changed files with 229 additions and 100 deletions

View file

@ -1,3 +1,20 @@
## 2.4.25 2023-03-23 <dave at tiredofit dot ca>
### Added
- Add DeepL Translation Support
- Add Zotero Citation Support
- Add support for Fonts Missing
- Add more options for Language Tool
- Add UI option to Group Download As items
- Add performance settings for minimum time between saves/uploads
- Add PDF Resolution DPI settings
### Reverted
- Remove MEMORY_DATA_LIMIT
- Remove LOLEAFLET_HTML
- Rework config to be better legible
## 2.4.24 2023-03-23 <dave at tiredofit dot ca>
### Added

View file

@ -45,7 +45,9 @@ This will build a Docker image for [Collabora Online](https://www.collaboraoffic
- [TLS Settings](#tls-settings)
- [Performance and Limits](#performance-and-limits)
- [Files Quarantine](#files-quarantine)
- [DeepL Translation](#deepl-translation)
- [Language Tool](#language-tool)
- [Zotero](#zotero)
- [Cleanup](#cleanup)
- [Other Settings](#other-settings)
- [Adding Custom Fonts](#adding-custom-fonts)
@ -134,6 +136,7 @@ Be sure to view the following repositories to understand all the customizable op
| `ALLOWED_HOSTS` | Set which domains which can access service Seperate Multiple with `,` - Example: `https://www.example\.org` (no wildcards) | `` |
| `EXTRA_OPTIONS` | If you want to pass additional arguments upon startup, add it here | `` |
| `INTERFACE` | Web interface type `classic` or `notebookbar` | `notebookbar` |
| `GROUP_DOWNLOAD_AS` | Group Download as Icons into dropdown in notebookbar view | `TRUE` |
| `WATERMARK_OPACITY` | Watermark Opacity | `0.2` |
| `WATERMARK_TEXT` | Text to display for watermark | `` |
| `ENABLE_MACROS` | Enable Macros | `FALSE` |
@ -242,11 +245,12 @@ The image comes with English (US, GB, Canada variants) baked into the image, how
| `FILE_SIZE_LIMIT` | The maximum file size allowed to each document process to write | `0` (unlimited) |
| `IDLE_SAVE` | The number of idle seconds after which document, if modified, should be saved | `30` |
| `IDLE_UNLOAD_TIMEOUT` | The maximum number of seconds before unloading an idle documen | `3600` |
| `MIN_TIME_BETWEEN_SAVES` | Minimum number of milliseconds between saving document on disk | `500` |
| `MIN_TIME_BETWEEN_UPLOADS` | Minimum number of milliseconds between uploading document to storage | `5000` |
| `MAX_CONVERT_LIMIT` | Maximum time in seconds to wait for a convert process to complete | `30` |
| `MAX_FILE_LOAD_LIMIT` | Maximum number of seconds to wait for a document load to succeed | `100` |
| `MAX_OPEN_FILES` | The maximum number of files allowed to each document process to open | `0` (unlimited) |
| `MAX_THREADS_DOCUMENT` | How many threads to use when opening a document | `4` |
| `MEMORY_DATA_LIMIT` | The maximum memory data segment allowed to each document process | `0` (unlimited) |
| `MEMORY_STACK_LIMIT` | The maximum stack size allowed to each document process | `0` (unlimited) |
| `MEMORY_USAGE_MAX` | Maximum percentage of system memory to be used | `80.0` |
| `MEMORY_VIRT_LIMIT` | Maximum virtual memory allowed to each document process | `0` |
@ -263,13 +267,26 @@ The image comes with English (US, GB, Canada variants) baked into the image, how
| `FILES_QUARANTINE_PATH` | Relative path for storing files | `quarantine` |
| `FILES_QUARANTINE_EXPIRY` | Files expiry in minutes | `30` |
#### DeepL Translation
| Parameter | Description | Default |
| ----------------------------- | ------------------------------------------------------------------------ | ------- |
| `ENABLE_DEEPL` | Enable DeepL Translation Support | `FALSE` |
| `DEEPL_API_URL` | DeepL API URL | `` |
| `DEEPL_AUTH_KEY` | DeepL Auth Key | `` |
#### Language Tool
| Parameter | Description | Default |
| ------------------------- | -------------------------------------------------- | ------- |
| `ENABLE_LANGUAGE_TOOL` | Enable Language Tool Grammar checking integration | `FALSE` |
| `LANGUAGE_TOOL_BASE_URL` | Base URL for Language Tool | |
| `LANGUAGE_TOOL_USER_NAME` | Language Tool User Name | |
| `LANGUAGE_TOOL_API_KEY` | Language Tool provided API Key | |
| Parameter | Description | Default |
| ----------------------------- | ------------------------------------------------------------------------ | ------- |
| `ENABLE_LANGUAGE_TOOL` | Enable Language Tool Grammar checking integration | `FALSE` |
| `LANGUAGE_TOOL_BASE_URL` | Base URL for Language Tool | |
| `LANGUAGE_TOOL_USER_NAME` | Language Tool User Name | |
| `LANGUAGE_TOOL_API_KEY` | Language Tool provided API Key | |
| `LANGUAGE_TOOL_REST_PROTOCOL` | REST protocol. blank for Language Tool `duden` for Duden Korrekturserver | |
| `LANGUAGE_TOOL_SSL_VERIFY` | SSL Verify | `TRUE` |
#### Zotero
| Parameter | Description | Default |
| ----------------------------- | ------------------------------------------------------------------------ | ------- |
| `ENABLE_ZOTERO` | Enable Zotero Citations | `TRUE` |
#### Cleanup
| Parameter | Description | Default |
@ -291,14 +308,14 @@ The image comes with English (US, GB, Canada variants) baked into the image, how
| `ENABLE_EXPERIMENTAL_FEATURES` | Enable experimental features | `FALSE` |
| `ENABLE_MOUNT_JAIL` | Enable mounting jails | `true` |
| `ENABLE_SECCOMP` | Enable Seccomp | `TRUE` |
| `ENABLE_WEBDAV` | Enable WebDav Storage | `FALSE` |
| `FILE_SERVER_ROOT_PATH` | Path to directory considered as root | `browser/../` |
| `FRAME_ANCESTORS` | Hosts where interface can be hosted in Iframe | `` |
| `HEXIFY_EMBEDDED_URLS` | Hexify Embedded URLS (useful for Azure deployments) | `FALSE` |
| `LOLEAFLET_HTML` | Name of browser.html to use | `loleafet.html` |
| `INDIRECTION_ENDPOINT` | URL endpoint to server which zervers routeToken in json format | |
| `NETWORK_PROTOCOL` | Network Protocol `ipv4` `ipv6` `all` | `ipv4` |
| `PDF_RESOLUTION_DPI` | PDF Resolution DPI when rendering PDF documents as image | `96` |
| `REDLINING_AS_COMMENTS` | Show red-lines as comments | `false` |
| `REMOTE_FONT_URL` | URL to json font lists to load | |
| `REMOTE_URL` | Remote server to send request to get remote config | |
| `SYS_TEMPLATE_PATH` | System Template Path | `systemplate` |
| `USE_INTEGRATOR_THEME` | Use the remote integrators theme | `TRUE` |
| `VERSION_SUFFIX` | Append this value onto version to break cache when developing. Generates random uuid when using value of `random` | |
@ -307,6 +324,13 @@ The image comes with English (US, GB, Canada variants) baked into the image, how
#### Adding Custom Fonts
This image comes with some highly opninionated default fonts by the LibreOffice team, and also includes the Microsoft TTF fonts from the late 90s. To add custom fonts into this image, cxport a volume and place them in `/assets/custom-fonts` and they will be inserted upon next container restart.
You can also configure this inside the container with a compatible application.
| Parameter | Description | Default |
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------- | --------------- |
| `REMOTE_FONT_URL` | URL to json font lists to load | |
| `FONTS_MISSING_ACTION` | How to handle fonts missing in a document `report` `log` `both` `ignore` | `log` |
### Networking
The following ports are exposed.

View file

@ -11,10 +11,13 @@ CLEANUP_INTERVAL=${CLEANUP_INTERVAL:-"10000"}
CLEANUP_LIMIT_CPU_PER=${CLEANUP_LIMIT_CPU_PER:-85}
CLEANUP_LIMIT_DIRTY_MEMORY=${CLEANUP_LIMIT_DIRTY_MEMORY:-3072}
CONNECTION_TIMEOUT=${CONNECTION_TIMEOUT:-30}
DEEPL_API_URL=${DEEPL_API_URL:-""}
DEEPL_AUTH_KEY=${DEEPL_AUTH_KEY:-""}
ENABLE_ADMIN_CONSOLE=${ENABLE_ADMIN_CONSOLE:-"TRUE"}
ENABLE_CAPABILITIES=${ENABLE_CAPABILITIES:-"true"}
ENABLE_CLEANUP=${ENABLE_CLEANUP:-"false"}
ENABLE_CONFIG_RELOAD=${ENABLE_CONFIG_RELOAD:-"TRUE"}
ENABLE_DEEPL=${ENABLE_DEEPL:-"FALSE"}
ENABLE_DOCUMENT_STATISTICS=${ENABLE_DOCUMENT_STATISTICS:-"FALSE"}
ENABLE_EXPERIMENTAL_FEATURES=${ENABLE_EXPERIMENTAL_FEATURES:-"false"}
ENABLE_FILES_QUARANTINE=${ENABLE_FILES_QUARANTINE:-"FALSE"}
@ -29,21 +32,26 @@ ENABLE_TLS=${ENABLE_TLS:-"FALSE"}
ENABLE_TLS_CERT_GENERATE=${ENABLE_TLS_CERT_GENERATE:-"TRUE"}
ENABLE_TLS_REVERSE_PROXY=${ENABLE_TLS_REVERSE_PROXY:-"TRUE"}
ENABLE_USER_STATISTICS=${ENABLE_USER_STATISTICS:-"FALSE"}
ENABLE_WEBDAV=${ENABLE_WEBDAV:-"FALSE"}
ENABLE_ZOTERO=${ENABLE_ZOTERO:-"TRUE"}
FILES_QUARANTINE_DIRECTORY_SIZE_LIMIT=${FILES_QUARANTINE_DIRECTORY_SIZE_LIMIT:-"250"}
FILES_QUARANTINE_EXPIRY=${FILES_QUARANTINE_EXPIRY:-"30"}
FILES_QUARANTINE_MAX_VERSIONS=${FILES_QUARANTINE_MAX_VERSIONS:-"2"}
FILES_QUARANTINE_PATH=${FILES_QUARANTINE_PATH:-"quarantine"}
FILE_SERVER_ROOT_PATH=${FILE_SERVER_ROOT_PATH:-"browser/../"}
FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-0}
FONTS_MISSING_ACTION=${FONTS_MISSING_ACTION:-"log"}
GROUP_DOWNLOAD_AS=${GROUP_DOWNLOAD_AS:-"TRUE"}
HEXIFY_EMBEDDED_URLS=${HEXIFY_EMBEDDED_URLS:-"FALSE"}
IDLE_SAVE=${IDLE_SAVE:-30}
IDLE_UNLOAD_TIMEOUT=${IDLE_UNLOAD_TIMEOUT:-3600}
INDIRECTION_ENDPOINT=${INDIRECTION_ENDPOINT:-""}
INTERFACE=${INTERFACE:-"notebookbar"}
LANGUAGE=${LANGUAGE:-'en_GB en_US'}
LANGUAGE_TOOL_API_KEY=${LANGUAGE_TOOL_API_KEY:-""}
LANGUAGE_TOOL_BASE_URL=${LANGUAGE_TOOL_BASE_URL:-""}
LANGUAGE_TOOL_USER_NAME=${LANGUAGE_TOOL_USER_NAME:-""}
LANGUAGE_TOOL_REST_PROTOCOL=${LANGUAGE_TOOL_REST_PROTOCOL:-""}
LANGUAGE_TOOL_SSL_VERIFY=${LANGUAGE_TOOL_SSL_VERIFY:-"TRUE"}
LOG_ANONYMIZE=${LOG_ANONYMIZE:-"FALSE"}
LOG_ANONYMIZE_SALT=${LOG_ANONYMIZE_SALT:-"$(date +%s%N | cut -b12-19)"}
LOG_CLIENT_CONSOLE=${LOG_CLIENT_CONSOLE:-"false"}
@ -56,18 +64,19 @@ LOG_LEVEL_CLIENT_MOST_VERBOSE=${LOG_LEVEL_CLIENT_MOST_VERBOSE:-"NOTICE"}
LOG_LIBREOFFICE=${LOG_LIBREOFFICE:-"-INFO-WARN"}
LOG_PATH=${LOG_PATH:-"/logs/"}
LOG_TYPE=${LOG_TYPE:-"CONSOLE"}
LOLEAFLET_HTML=${LOLEAFLET_HTML:-"browser.html"}
MACRO_SECURITY_LEVEL=${MACRO_SECURITY_LEVEL:-"1"}
MAX_CONVERT_LIMIT=${MAX_CONVERT_LIMIT:-100}
MAX_FILE_LOAD_LIMIT=${MAX_FILE_LOAD_LIMIT:-100}
MAX_OPEN_FILES=${MAX_OPEN_FILES:-0}
MAX_THREADS_DOCUMENT=${MAX_THREADS_DOCUMENT:-4}
MEMORY_DATA_LIMIT=${MEMORY_DATA_LIMIT:-0}
MIN_TIME_BETWEEN_SAVES=${MIN_TIME_BETWEEN_SAVES:-"500"}
MIN_TIME_BETWEEN_UPLOADS=${MIN_TIME_BETWEEN_UPLOADS:-"5000"}
MEMORY_STACK_LIMIT=${MEMORY_STACK_LIMIT:-8000}
MEMORY_USAGE_MAX=${MEMORY_USAGE_MAX:-"80.0"}
MEMORY_VIRT_LIMIT=${MEMORY_VIRT_LIMIT:-0}
NETWORK_PROTOCOL=${NETWORK_PROTOCOL:-"ipv4"}
PATH_PREFIX=${PATH_PREFIX:-"/opt/cool/"}
PDF_RESOLUTION_DPI=${PDF_RESOLUTION_DPI:-"96"}
PRESPAWN_CHILD_PROCESSES=${PRESPAWN_CHILD_PROCESSES:-1}
REDLINING_AS_COMMENTS=${REDLINING_AS_COMMENTS:-"false"}
REMOTE_FONT_URL=${REMOTE_FONT_URL:-""}

View file

@ -117,82 +117,123 @@ if [ "${SETUP_TYPE,,}" = "auto" ]; then
print_notice "Autogenerating Configuration File"
### Replace Configuration directives
sed -i -e "s|<allowed_languages \(.*\)>.*</allowed_languages>|<allowed_languages \1>${LANGUAGE}</allowed_languages>|g" /etc/coolwsd/coolwsd.xml
## Language Tool
sed -i \
-e "s|<enabled desc=\"Enable Remote Spell and Grammar Checker\"\(.*\)>.*</enabled>|<enabled desc=\"Enable Remote Spell and Grammar Checker\"\1>${ENABLE_LANGUAGE_TOOL,,}</enabled>|g" \
-e "s|<base_url desc=\"Http endpoint for the API server\(.*\)>.*<\/base_url>|<base_url desc=\"Http endpointfor the API server\1>${LANGUAGE_TOOL_BASE_URL}<\/base_url>|" \
-e "s|<user_name desc=\"Lan\(.*\)>.*<\/user_name>|<user_name desc=\"Lan\1>${LANGUAGE_TOOL_USER_NAME}<\/user_name>|" \
-e "s|<api_key desc=\"API key provided by Lan\(.*\)>.*<\/api_key>|<api_key desc=\"API key provided by Lan\1>${LANGUAGE_TOOL_API_KEY}<\/api_key>|" \
-e "s|<ssl_verification desc=\"Enable or disable SSL\(.*\)>.*<\/ssl_verification>|<ssl_verification desc=\"Enable or disable SSL\1>${LANGUAGE_TOOL_SSL_VERIFY,,}<\/ssl_verification>|" \
-e "s|<rest_protocol desc=\"REST API protocol\(.*\)>.*<\/rest_protocol>|<rest_protocol desc=\"REST API protocol\1>${LANGUAGE_TOOL_REST_PROTOCOL,,}<\/rest_protocol>|" \
/etc/coolwsd/coolwsd.xml
## DeepL
sed -i \
-e "s|<enabled desc=\"If true, shows translate option as a menu\(.*\)>.*</enabled>|<enabled desc=\"If true, shows translate option as a menu\1>${ENABLE_DEEPL,,}</enabled>|g" \
-e "s|<api_url desc=\"URL for the API\"(.*\)>.*<\/api_url>|<api_url desc=\"URL for the API\"\1>${DEEPL_API_URL}<\/api_url>|" \
-e "s|<auth_key desc=\"Auth Key generated by your account\"(.*\)>.*<\/auth_key>|<auth_key desc="Auth Key generated by your account"\1>${DEEPL_AUTH_KEY}<\/auth_key>|" \
/etc/coolwsd/coolwsd.xml
sed -i -e "s|<sys_template_path \(.*\)>.*</sys_template_path>|<sys_template_path \1>${SYS_TEMPLATE_PATH}</sys_template_path>|g" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<child_root_path \(.*\)>.*</child_root_path>|<child_root_path \1>${CHILD_ROOT_PATH}</child_root_path>|g" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<mount_jail_tree \(.*\)>.*</mount_jail_tree>|<mount_jail_tree \1>${ENABLE_MOUNT_JAIL,,}</mount_jail_tree>|g" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<server_name \(.*\)>.*</server_name>|<server_name \1>${HOSTNAME}</server_name>|g" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<file_server_root_path \(.*\)>.*</file_server_root_path>|<file_server_root_path \1>${FILE_SERVER_ROOT_PATH}</file_server_root_path>|g" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<memproportion \(.*\)>.*</memproportion>|<memproportion \1>${MEMORY_USAGE_MAX}</memproportion>|g" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<num_prespawn_children \(.*\)>.*</num_prespawn_children>|<num_prespawn_children \1>${PRESPAWN_CHILD_PROCESSES}</num_prespawn_children>|g" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<max_concurrency \(.*\)>.*<\/max_concurrency>|<max_concurrency \1>${MAX_THREADS_DOCUMENT}<\/max_concurrency>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<batch_priority \(.*\)>.*<\/batch_priority>|<batch_priority \1>${BATCH_PRIORITY}<\/batch_priority>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<document_signing_url \(.*\)>.*<\/document_signing_url>|<document_signing_url \1>${DOCUMENT_SIGNING_URL}<\/document_signing_url>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<redlining_as_comments \(.*\)>.*<\/redlining_as_comments>|<redlining_as_comments \1>${REDLINING_AS_COMMENTS}<\/redlining_as_comments>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<idle_timeout_secs \(.*\)>.*<\/idle_timeout_secs>|<idle_timeout_secs \1>${IDLE_UNLOAD_TIMEOUT}<\/idle_timeout_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<idlesave_duration_secs \(.*\)>.*<\/idlesave_duration_secs>|<idlesave_duration_secs \1>${IDLE_SAVE}<\/idlesave_duration_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<autosave_duration_secs \(.*\)>.*<\/autosave_duration_secs>|<autosave_duration_secs \1>${AUTO_SAVE}<\/autosave_duration_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<always_save_on_exit \(.*\)>.*<\/always_save_on_exit>|<always_save_on_exit \1>${ALWAYS_SAVE_ON_EXIT}<\/always_save_on_exit>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_virt_mem_mb \(.*\)>.*<\/limit_virt_mem_mb>|<limit_virt_mem_mb \1>${MEMORY_VIRT_LIMIT}<\/limit_virt_mem_mb>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_stack_mem_kb \(.*\)>.*<\/limit_stack_mem_kb>|<limit_stack_mem_kb \1>${MEMORY_STACK_LIMIT}<\/limit_stack_mem_kb>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_file_size_mb \(.*\)>.*<\/limit_file_size_mb>|<limit_file_size_mb \1>${FILE_SIZE_LIMIT}<\/limit_file_size_mb>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_num_open_files \(.*\)>.*<\/limit_num_open_files>|<limit_num_open_files \1>${MAX_OPEN_FILES}<\/limit_num_open_files>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_load_secs \(.*\)>.*<\/limit_load_secs>|<limit_load_secs \1>${MAX_FILE_LOAD_LIMIT}<\/limit_load_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_convert_secs \(.*\)>.*<\/limit_convert_secs>|<limit_convert_secs \1>${MAX_CONVERT_LIMIT}<\/limit_convert_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<cleanup desc=\(.*\)>.*>|<cleanup desc=\1>${ENABLE_CLEANUP},,>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<cleanup_interval_ms \(.*\)>.*<\/cleanup_interval_ms>|<cleanup_interval_ms \1>${CLEANUP_INTERVAL}<\/cleanup_interval_ms>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<bad_behavior_period_secs \(.*\)>.*<\/bad_behavior_period_secs>|<bad_behavior_period_secs \1>${CLEANUP_BAD_BEHAVIOUR_TIME}<\/bad_behavior_period_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<idle_time_secs \(.*\)>.*<\/<idle_time_secs>|<<idle_time_secs \1>${CLEANUP_IDLE_TIME}<\/<idle_time_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_dirty_mem_mb \(.*\)>.*<\/limit_dirty_mem_mb>|<limit_dirty_mem_mb \1>${CLEANUP_LIMIT_DIRTY_MEMORY}<\/limit_dirty_mem_mb>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_cpu_per \(.*\)>.*<\/limit_cpu_per>|<limit_cpu_per \1>${CLEANUP_LIMIT_CPU_PER}<\/limit_cpu_per>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<out_of_focus_timeout_secs \(.*\)>.*<\/out_of_focus_timeout_secs>|<out_of_focus_timeout_secs \1>${USER_OUT_OF_FOCUS_TIMEOUT}<\/out_of_focus_timeout_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<idle_timeout_secs \(.*\)>.*<\/idle_timeout_secs>|<idle_timeout_secs \1>${USER_IDLE_TIMEOUT}<\/idle_timeout_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<browser_html \(.*\)>.*<\/browser_html>|<browser_html \1>${LOLEAFLET_HTML}<\/browser_html>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<color \(.*\)>.*<\/color>|<color \1>${LOG_COLOURIZE}<\/color>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<level \(.*\)>.*<\/level>|<level \1>${LOG_LEVEL,,}<\/level>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<protocol \(.*\)>.*<\/protocol>|<protocol \1>${LOG_CLIENT_CONSOLE}<\/protocol>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<lokit_sal_log \(.*\)>.*<\/lokit_sal_log>|<lokit_sal_log \1>${LOG_LIBREOFFICE}<\/lokit_sal_log>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<browser_logging \(.*\)>.*<\/browser_logging>|<browser_logging \1>${LOG_CLIENT_CONSOLE}<\/browser_logging>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<proto \(.*\)>.*<\/proto>|<proto \1>${NETWORK_PROTOCOL}<\/proto>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<frame_ancestors \(.*\)>.*<\/frame_ancestors>|<frame_ancestors \1>${FRAME_ANCESTORS}<\/frame_ancestors>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<connection_timeout \(.*\)>.*<\/connection_timeout>|<connection_timeout \1>${CONNECTION_TIMEOUT}<\/connection_timeout>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<ca_file_path \(.*\) relative=\"false\">.*<\/ca_file_path>|<ca_file_path \1 relative=\"false\">${TLS_CERT_PATH}/${TLS_CA_FILENAME}<\/ca_file_path>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<cert_file_path \(.*\) relative=\"false\">.*<\/cert_file_path>|<cert_file_path \1 relative=\"false\">${TLS_CERT_PATH}/${TLS_CERT_FILENAME}<\/cert_file_path>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<key_file_path \(.*\) relative=\"false\">.*<\/key_file_path>|<key_file_path \1 relative=\"false\">${TLS_CERT_PATH}/${TLS_KEY_FILENAME}<\/key_file_path>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<seccomp \(.*\)>.*<\/seccomp>|<seccomp \1>${ENABLE_SECCOMP,,}<\/seccomp>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<capabilities \(.*\)>.*<\/capabilities>|<capabilities \1>${ENABLE_CAPABILITIES,,}<\/capabilities>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<jwt_expiry_secs \(.*\)>.*<\/jwt_expiry_secs>|<jwt_expiry_secs \1>${ADMIN_JWT_EXPIRY}<\/jwt_expiry_secs>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<enable_macros_execution \(.*\)>.*<\/enable_macros_execution>|<enable_macros_execution \1>${ENABLE_MACROS,,}<\/enable_macros_execution>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<macro_security_level \(.*\)>.*<\/macro_security_level>|<macro_security_level \1>${MACRO_SECURITY_LEVEL}<\/macro_security_level>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<enable_metrics_unauthenticated \(.*\)>.*<\/enable_metrics_unauthenticated>|<enable_metrics_unauthenticated \1>${ENABLE_METRICS_UNAUTHENTICATED}<\/enable_metrics_unauthenticated>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<opacity \(.*\)>.*<\/opacity>|<opacity \1>${WATERMARK_OPACITY}<\/opacity>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<text \(.*\)>.*<\/text>|<text \1>${WATERMARK_TEXT}<\/text>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<mode \(.*\)>.*<\/mode>|<mode \1>${INTERFACE}<\/mode>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<webdav desc=\(.*\) allow=\".*\">|<webdav desc=\1 allow=\"${ENABLE_WEBDAV,,}\">|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<enable desc=\(.*\)>.*<\/enable>|<enable desc=\1>${ENABLE_ADMIN_CONSOLE,,}<\/enable>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<username \(.*\)>.*<\/username>|<username \1>${ADMIN_USER}<\/username>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<password \(.*\)>.*<\/password>|<password \1>${ADMIN_PASS}<\/password>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_data_mem_kb \(.*\)>.*<\/limit_data_mem_kb>|<limit_data_mem_kb \1>${MEMORY_DATA_LIMIT}<\/limit_data_mem_kb>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<enabled desc=\"Enable Language Tool\(.*\)>.*<\/enable>|<enable desc=\"Enable Language Tool\1>${ENABLE_LANGUAGE_TOOL,,}<\/enable>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<base_url desc=\"Http endpoint\(.*\)>.*<\/base_url>|<base_url desc=\"Http endpoint\1>${LANGUAGE_TOOL_BASE_URL}<\/base_url>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<user_name desc=\"Lan\(.*\)>.*<\/user_name>|<user_name desc=\"Lan\1>${LANGUAGE_TOOL_USER_NAME}<\/user_name>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<api_key desc=\"Api\(.*\)>.*<\/api_key>|<api_key desc=\"Api\1>${LANGUAGE_TOOL_API_KEY}<\/api_key>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<hexify_embedded_urls \(.*\)>.*<\/hexify_embedded_urls>|<hexify_embedded_urls \1>${HEXIFY_EMBEDDED_URLS,,}<\/hexify_embedded_urls>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<experimental_features \(.*\)>.*<\/experimental_features>|<experimental_features \1>${ENABLE_EXPERIMENTAL_FEATURES,,}<\/experimental_features>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<experimental_features \(.*\)>.*<\/experimental_features>|<experimental_features \1>${ENABLE_EXPERIMENTAL_FEATURES,,}<\/experimental_features>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<memproportion \(.*\)>.*</memproportion>|<memproportion \1>${MEMORY_USAGE_MAX}</memproportion>|g" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<num_prespawn_children \(.*\)>.*</num_prespawn_children>|<num_prespawn_children \1>${PRESPAWN_CHILD_PROCESSES}</num_prespawn_children>|g" /etc/coolwsd/coolwsd.xml
## Per Document
sed -i \
-e "s|<max_concurrency \(.*\)>.*<\/max_concurrency>|<max_concurrency \1>${MAX_THREADS_DOCUMENT}<\/max_concurrency>|" \
-e "s|<batch_priority \(.*\)>.*<\/batch_priority>|<batch_priority \1>${BATCH_PRIORITY}<\/batch_priority>|" \
-e "s|<document_signing_url \(.*\)>.*<\/document_signing_url>|<document_signing_url \1>${DOCUMENT_SIGNING_URL}<\/document_signing_url>|" \
-e "s|<redlining_as_comments \(.*\)>.*<\/redlining_as_comments>|<redlining_as_comments \1>${REDLINING_AS_COMMENTS}<\/redlining_as_comments>|" \
-e "s|<pdf_resolution_dpi \(.*\)>.*<\/pdf_resolution_dpi>|<pdf_resolution_dpi \1>${PDF_RESOLUTION_DPI}<\/pdf_resolution_dpi>|" \
-e "s|<idle_timeout_secs \(.*\)>.*<\/idle_timeout_secs>|<idle_timeout_secs \1>${IDLE_UNLOAD_TIMEOUT}<\/idle_timeout_secs>|" \
-e "s|<idlesave_duration_secs \(.*\)>.*<\/idlesave_duration_secs>|<idlesave_duration_secs \1>${IDLE_SAVE}<\/idlesave_duration_secs>|" \
-e "s|<autosave_duration_secs \(.*\)>.*<\/autosave_duration_secs>|<autosave_duration_secs \1>${AUTO_SAVE}<\/autosave_duration_secs>|" \
-e "s|<always_save_on_exit \(.*\)>.*<\/always_save_on_exit>|<always_save_on_exit \1>${ALWAYS_SAVE_ON_EXIT}<\/always_save_on_exit>|" \
-e "s|<limit_virt_mem_mb \(.*\)>.*<\/limit_virt_mem_mb>|<limit_virt_mem_mb \1>${MEMORY_VIRT_LIMIT}<\/limit_virt_mem_mb>|" \
-e "s|<limit_stack_mem_kb \(.*\)>.*<\/limit_stack_mem_kb>|<limit_stack_mem_kb \1>${MEMORY_STACK_LIMIT}<\/limit_stack_mem_kb>|" \
-e "s|<limit_file_size_mb \(.*\)>.*<\/limit_file_size_mb>|<limit_file_size_mb \1>${FILE_SIZE_LIMIT}<\/limit_file_size_mb>|" \
-e "s|<limit_num_open_files \(.*\)>.*<\/limit_num_open_files>|<limit_num_open_files \1>${MAX_OPEN_FILES}<\/limit_num_open_files>|" \
-e "s|<limit_load_secs \(.*\)>.*<\/limit_load_secs>|<limit_load_secs \1>${MAX_FILE_LOAD_LIMIT}<\/limit_load_secs>|" \
-e "s|<limit_convert_secs \(.*\)>.*<\/limit_convert_secs>|<limit_convert_secs \1>${MAX_CONVERT_LIMIT}<\/limit_convert_secs>|" \
-e "s|<min_time_between_saves_ms \(.*\)>.*<\/min_time_between_saves_ms>|<min_time_between_saves_ms \1>${MIN_TIME_BETWEEN_SAVES}<\/min_time_between_saves_ms>|" \
-e "s|<min_time_between_uploads_ms \(.*\)>.*<\/min_time_between_uploads_ms>|<min_time_between_uplods_ms \1>${MIN_TIME_BETWEEN_UPLOADS}<\/min_time_between_uploads_ms>|" \
/etc/coolwsd/coolwsd.xml
## Cleanup
sed -i \
-e "s|<cleanup desc=\(.*\)>.*>|<cleanup desc=\1>${ENABLE_CLEANUP},,>|" \
-e "s|<cleanup_interval_ms \(.*\)>.*<\/cleanup_interval_ms>|<cleanup_interval_ms \1>${CLEANUP_INTERVAL}<\/cleanup_interval_ms>|" \
-e "s|<bad_behavior_period_secs \(.*\)>.*<\/bad_behavior_period_secs>|<bad_behavior_period_secs \1>${CLEANUP_BAD_BEHAVIOUR_TIME}<\/bad_behavior_period_secs>|" \
-e "s|<idle_time_secs \(.*\)>.*<\/<idle_time_secs>|<<idle_time_secs \1>${CLEANUP_IDLE_TIME}<\/<idle_time_secs>|" \
-e "s|<limit_dirty_mem_mb \(.*\)>.*<\/limit_dirty_mem_mb>|<limit_dirty_mem_mb \1>${CLEANUP_LIMIT_DIRTY_MEMORY}<\/limit_dirty_mem_mb>|" \
-e "s|<limit_cpu_per \(.*\)>.*<\/limit_cpu_per>|<limit_cpu_per \1>${CLEANUP_LIMIT_CPU_PER}<\/limit_cpu_per>|" \
/etc/coolwsd/coolwsd.xml
## Per View Settings
sed -i \
-e "s|<group_download_as \(.*\)>.*<\/group_download_as>|<group_download_as \1>${GROUP_DOWNLOAD_AS}<\/group_download_as>|" \
-e "s|<out_of_focus_timeout_secs \(.*\)>.*<\/out_of_focus_timeout_secs>|<out_of_focus_timeout_secs \1>${USER_OUT_OF_FOCUS_TIMEOUT}<\/out_of_focus_timeout_secs>|" \
-e "s|<idle_timeout_secs \(.*\)>.*<\/idle_timeout_secs>|<idle_timeout_secs \1>${USER_IDLE_TIMEOUT}<\/idle_timeout_secs>|" \
/etc/coolwsd/coolwsd.xml
sed -i -e "s|<ver_suffix \(.*\)>.*<\/ver_suffix>|<ver_suffix \1>${VERSION_SUFFIX}<\/ver_suffix>|" /etc/coolwsd/coolwsd.xml
## Logging
sed -i \
-e "s|<color \(.*\)>.*<\/color>|<color \1>${LOG_COLOURIZE}<\/color>|" \
-e "s|<level \(.*\)>.*<\/level>|<level \1>${LOG_LEVEL,,}<\/level>|" \
-e "s|<protocol \(.*\)>.*<\/protocol>|<protocol \1>${LOG_CLIENT_CONSOLE}<\/protocol>|" \
-e "s|<lokit_sal_log \(.*\)>.*<\/lokit_sal_log>|<lokit_sal_log \1>${LOG_LIBREOFFICE}<\/lokit_sal_log>|" \
-e "s|<browser_logging \(.*\)>.*<\/browser_logging>|<browser_logging \1>${LOG_CLIENT_CONSOLE}<\/browser_logging>|" \
-e "s|<protocol \(.*\)>.*<\/protocol>|<protocol \1>${NETWORK_PROTOCOL}<\/protocol>|" \
-e "s|<most_verbose_level_settable_from_client \(.*\)>.*<\/most_verbose_level_settable_from_client>|<most_verbose_level_settable_from_client \1>${LOG_LEVEL_CLIENT_MOST_VERBOSE}<\/most_verbose_level_settable_from_client>|" \
-e "s|<least_verbose_level_settable_from_client \(.*\)>.*<\/least_verbose_level_settable_from_client>|<least_verbose_level_settable_from_client \1>${LOG_LEVEL_CLIENT_LEAST_VERBOSE}<\/least_verbose_level_settable_from_client>|" \
/etc/coolwsd/coolwsd.xml
if [ "${LOG_TYPE,,}" = "file" ]; then
sed -i \
-e "s|<file enable=\"false\"|<file enable=\"true\"|" \
-e "s|<property name=\"path\"\(.*\)>.*<\/property>|<property name=\"path\" \1>${LOG_PATH}/${LOG_FILE}<\/property>|" \
-e "s|<property name=\"flush\"\(.*\)>.*<\/property>|<property name=\"flush\" \1>${LOG_FILE_FLUSH}<\/property>|" \
-e "s|<property name=\"rotateOnOpen\"\(.*\)>.*<\/property>|<property name=\"rotateOnOpen\" \1>false<\/property>|" \
/etc/coolwsd/coolwsd.xml
create_logrotate cool "${LOG_PATH}"/"${LOG_FILE}" none cool cool
else
print_debug "Log: Console"
fi
if var_true "${LOG_ANONYMIZE}"; then
sed -i \
-e "s|<anonymize_user_data \(.*\)>.*<\/anonymize_user_data>|<anonymize_user_data \1>${LOG_ANONYMIZE}<\/anonymize_user_data>|" \
-e "s|<anonymization_salt \(.*\)>.*<\/anonymization_salt>|<anonymization_salt \1>${LOG_ANONYMIZE_SALT}<\/anonymization_salt>|" \
/etc/coolwsd/coolwsd.xml
fi
sed -i -e "s|<docstats \(.*\)>.*<\/docstats>|<docstats \1>${ENABLE_DOCUMENT_STATISTICS,,}<\/docstats>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<userstats \(.*\)>.*<\/userstats>|<userstats \1>${ENABLE_USER_STATISTICS,,}<\/userstats>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<most_verbose_level_settable_from_client \(.*\)>.*<\/most_verbose_level_settable_from_client>|<most_verbose_level_settable_from_client \1>${LOG_LEVEL_CLIENT_MOST_VERBOSE}<\/most_verbose_level_settable_from_client>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<least_verbose_level_settable_from_client \(.*\)>.*<\/least_verbose_level_settable_from_client>|<least_verbose_level_settable_from_client \1>${LOG_LEVEL_CLIENT_LEAST_VERBOSE}<\/least_verbose_level_settable_from_client>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<use_integration_theme \(.*\)>.*<\/use_integration_theme>|<use_integration_theme \1>${USE_INTEGRATOR_THEME,,}<\/use_integration_theme>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<url desc=\"URL of optional JSON\(.*\)>.*<\/url>|<url desc=\"URL of optional JSON\1>${REMOTE_FONT_URL}<\/url>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<tile_cache_persistent \(.*\)>.*<\/tile_cache_persistent>|<tile_cache_persistent \1>${ENABLE_TILES_CACHE,,}<\/tile_cache_persistent>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<quarantine_files \(.*\) enable\".*\">|<quarantine_files \1> enable=\"${ENABLE_FILES_QUARANTINE,,}\">|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_dir_size_mb \(.*\)>.*<\/limit_dir_size_mb>|<limit_dir_size_mb \1>${FILES_QUARANTINE_DIRECTORY_SIZE_LIMIT}<\/limit_dir_size_mb>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<max_versions_to_maintain \(.*\)>.*<\/max_versions_to_maintain>|<max_versions_to_maintain \1>${FILES_QUARANTINE_MAX_VERSIONS}<\/max_versions_to_maintain>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<expiry_min \(.*\)>.*<\/expiry_min>|<expiry_min \1>${FILES_QUARANTINE_EXPIRY}<\/expiry_min>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<path desc=\"Path to directory\(.*\)>.*<\/path>|<path desc=\"Path to directory\1>${FILES_QUARANTINE_PATH}<\/path>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<ver_suffix \(.*\)>.*<\/ver_suffix>|<ver_suffix \1>${VERSION_SUFFIX}<\/ver_suffix>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<enable desc=\"Enable more configuration options for home users\(.*\)>.*<\/enable>|<enable desc=\"Enable more configuration options for home users\1>${ENABLE_HOME_MODE}<\/enable>|g" /etc/coolwsd/coolwsd.xml
## Network
### Allowed Hosts
sed -i -e 's|<alias_groups \(.*\) mode=.*>|<alias_groups \1 mode="groups">|' /etc/coolwsd/coolwsd.xml
allowed_hosts=$(echo "${ALLOWED_HOSTS}" | tr "," "\n")
for host in $allowed_hosts; do
print_info "Adding Allowed Host: ${host}"
sed -i "/<alias_groups .*>/a \ <group><host desc=\"hostname to allow or deny.\" allow=\"true\">${host}</host></group>" /etc/coolwsd/coolwsd.xml
done
sed -i \
-e "s|<frame_ancestors \(.*\)>.*<\/frame_ancestors>|<frame_ancestors \1>${FRAME_ANCESTORS}<\/frame_ancestors>|" \
-e "s|<connection_timeout \(.*\)>.*<\/connection_timeout>|<connection_timeout \1>${CONNECTION_TIMEOUT}<\/connection_timeout>|" \
/etc/coolwsd/coolwsd.xml
## SSL
if var_false "${ENABLE_TLS}" ; then
sed -i -E "s|<enable type=\"bool\" desc=\"Controls(.*)>.*<\/enable>|<enable type=\"bool\" desc=\"Controls\1>false<\/enable>|" /etc/coolwsd/coolwsd.xml
fi
@ -203,28 +244,66 @@ if [ "${SETUP_TYPE,,}" = "auto" ]; then
sed -i -e "s|<termination \(.*\)>.*<\/termination>|<termination \1>false<\/termination>|" /etc/coolwsd/coolwsd.xml
fi
if var_true "${LOG_ANONYMIZE}"; then
sed -i -e "s|<anonymize_user_data \(.*\)>.*<\/anonymize_user_data>|<anonymize_user_data \1>${LOG_ANONYMIZE}<\/anonymize_user_data>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<anonymization_salt \(.*\)>.*<\/anonymization_salt>|<anonymization_salt \1>${LOG_ANONYMIZE_SALT}<\/anonymization_salt>|" /etc/coolwsd/coolwsd.xml
fi
sed -i \
-e "s|<ca_file_path \(.*\) relative=\"false\">.*<\/ca_file_path>|<ca_file_path \1 relative=\"false\">${TLS_CERT_PATH}/${TLS_CA_FILENAME}<\/ca_file_path>|" \
-e "s|<cert_file_path \(.*\) relative=\"false\">.*<\/cert_file_path>|<cert_file_path \1 relative=\"false\">${TLS_CERT_PATH}/${TLS_CERT_FILENAME}<\/cert_file_path>|" \
-e "s|<key_file_path \(.*\) relative=\"false\">.*<\/key_file_path>|<key_file_path \1 relative=\"false\">${TLS_CERT_PATH}/${TLS_KEY_FILENAME}<\/key_file_path>|" \
/etc/coolwsd/coolwsd.xml
if [ "${LOG_TYPE,,}" = "file" ]; then
sed -i -e "s|<file enable=\"false\"|<file enable=\"true\"|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<property name=\"path\"\(.*\)>.*<\/property>|<property name=\"path\" \1>${LOG_PATH}/${LOG_FILE}<\/property>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<property name=\"flush\"\(.*\)>.*<\/property>|<property name=\"flush\" \1>${LOG_FILE_FLUSH}<\/property>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<property name=\"rotateOnOpen\"\(.*\)>.*<\/property>|<property name=\"rotateOnOpen\" \1>false<\/property>|" /etc/coolwsd/coolwsd.xml
create_logrotate cool "${LOG_PATH}"/"${LOG_FILE}" none cool cool
else
print_debug "Log: Console"
fi
## Security
sed -i \
-e "s|<seccomp \(.*\)>.*<\/seccomp>|<seccomp \1>${ENABLE_SECCOMP,,}<\/seccomp>|" \
-e "s|<capabilities \(.*\)>.*<\/capabilities>|<capabilities \1>${ENABLE_CAPABILITIES,,}<\/capabilities>|" \
-e "s|<jwt_expiry_secs \(.*\)>.*<\/jwt_expiry_secs>|<jwt_expiry_secs \1>${ADMIN_JWT_EXPIRY}<\/jwt_expiry_secs>|" \
-e "s|<enable_macros_execution \(.*\)>.*<\/enable_macros_execution>|<enable_macros_execution \1>${ENABLE_MACROS,,}<\/enable_macros_execution>|" \
-e "s|<macro_security_level \(.*\)>.*<\/macro_security_level>|<macro_security_level \1>${MACRO_SECURITY_LEVEL}<\/macro_security_level>|" \
-e "s|<enable_metrics_unauthenticated \(.*\)>.*<\/enable_metrics_unauthenticated>|<enable_metrics_unauthenticated \1>${ENABLE_METRICS_UNAUTHENTICATED}<\/enable_metrics_unauthenticated>|" \
/etc/coolwsd/coolwsd.xml
### Allowed Hosts
sed -i -e 's|<alias_groups \(.*\) mode=.*>|<alias_groups \1 mode="groups">|' /etc/coolwsd/coolwsd.xml
allowed_hosts=$(echo "${ALLOWED_HOSTS}" | tr "," "\n")
for host in $allowed_hosts; do
print_info "Adding Allowed Host: ${host}"
sed -i "/<alias_groups .*>/a \ <group><host desc=\"hostname to allow or deny.\" allow=\"true\">${host}</host></group>" /etc/coolwsd/coolwsd.xml
done
## Watermark
sed -i \
-e "s|<opacity \(.*\)>.*<\/opacity>|<opacity \1>${WATERMARK_OPACITY}<\/opacity>|" \
-e "s|<text \(.*\)>.*<\/text>|<text \1>${WATERMARK_TEXT}<\/text>|" \
## User Interface
sed -i \
-e "s|<mode \(.*\)>.*<\/mode>|<mode \1>${INTERFACE}<\/mode>|" \
-e "s|<use_integration_theme \(.*\)>.*<\/use_integration_theme>|<use_integration_theme \1>${USE_INTEGRATOR_THEME,,}<\/use_integration_theme>|" \
/etc/coolwsd/coolwsd.xml
sed -i -e "s|<tile_cache_persistent \(.*\)>.*<\/tile_cache_persistent>|<tile_cache_persistent \1>${ENABLE_TILES_CACHE,,}<\/tile_cache_persistent>|" /etc/coolwsd/coolwsd.xml
## Admin Console
sed -i \
-e "s|<enable desc=\(.*\)>.*<\/enable>|<enable desc=\1>${ENABLE_ADMIN_CONSOLE,,}<\/enable>|" \
-e "s|<username \(.*\)>.*<\/username>|<username \1>${ADMIN_USER}<\/username>|" \
-e "s|<password \(.*\)>.*<\/password>|<password \1>${ADMIN_PASS}<\/password>|" \
/etc/coolwsd/coolwsd.xml
## Quarantine Files
sed -i -e "s|<quarantine_files \(.*\) enable\".*\">|<quarantine_files \1> enable=\"${ENABLE_FILES_QUARANTINE,,}\">|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<limit_dir_size_mb \(.*\)>.*<\/limit_dir_size_mb>|<limit_dir_size_mb \1>${FILES_QUARANTINE_DIRECTORY_SIZE_LIMIT}<\/limit_dir_size_mb>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<path desc=\"Path to directory\(.*\)>.*<\/path>|<path desc=\"Path to directory\1>${FILES_QUARANTINE_PATH}<\/path>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<max_versions_to_maintain \(.*\)>.*<\/max_versions_to_maintain>|<max_versions_to_maintain \1>${FILES_QUARANTINE_MAX_VERSIONS}<\/max_versions_to_maintain>|" /etc/coolwsd/coolwsd.xml
sed -i -e "s|<expiry_min \(.*\)>.*<\/expiry_min>|<expiry_min \1>${FILES_QUARANTINE_EXPIRY}<\/expiry_min>|" /etc/coolwsd/coolwsd.xml
## Remote Config
sed -i -e "s|<remote_url desc=\(.*\)>.*<\/remote_url>|<remote_url desc=\1>${REMOTE_URL}<\/remote_url>|" /etc/coolwsd/coolwsd.xml
## Remote Fonts
sed -i -e "s|<url desc=\"URL of optional JSON\(.*\)>.*<\/url>|<url desc=\"URL of optional JSON\1>${REMOTE_FONT_URL}<\/url>|" /etc/coolwsd/coolwsd.xml
## Home Mode
sed -i -e "s|<enable desc=\"Enable more configuration options for home users\(.*\)>.*<\/enable>|<enable desc=\"Enable more configuration options for home users\1>${ENABLE_HOME_MODE}<\/enable>|g" /etc/coolwsd/coolwsd.xml
## Fonts Missing
sed -i -e "s|<handling desc=\(.*\)>.*<\/handling>|<handling desc=\1>${FONTS_MISSING_ACTION}<\/handling>|" /etc/coolwsd/coolwsd.xml
## Indirection Endpoint
sed -i -e "s|<url desc=\"URL endpoint to server which servers routeToken in\(.*\)>.*<\/url>|<url desc=\"URL endpoint to server which servers routeToken in\1>${INDIRECTION_ENDPOINT}<\/url>|" /etc/coolwsd/coolwsd.xml
## Zotero
sed -i -e "s|<enable .*=\"Enable Zotero Plugin\(.*\)>.*<\/url>|<enable desc=\"Enable Zotero Plugin\1>${ENABLE_ZOTERO}<\/enable>|" /etc/coolwsd/coolwsd.xml
fi
# Generate WOPI proof key