#!/usr/bin/with-contenv bash ### Set Debug Mode if [ "$DEBUG_MODE" = "TRUE" ] || [ "$DEBUG_MODE" = "true" ]; then set -x fi ### Set Defaults AUTO_SAVE=${AUTO_SAVE:-300} ENABLE_ADMIN_CONSOLE=${ENABLE_ADMIN_CONSOLE:-"TRUE"} ENABLE_TLS=${ENABLE_SSL:-"TRUE"} ENABLE_TLS_CERT_GENERATE=${ENABLE_SSL_CERT_GENERATE:-"TRUE"} ENABLE_TLS_REVERSE_PROXY=${ENABLE_SSL_REVERSE_PROXY:-"FALSE"} FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-0} IDLE_SAVE=${IDLE_SAVE:-30} IDLE_UNLOAD_TIMEOUT=${IDLE_UNLOAD_TIMEOUT:-3600} LOG_ANONYMIZE_FILES=${LOG_ANONYMIZE_FILES:-"FALSE"} LOG_ANONYMIZE_USERS=${LOG_ANONYMIZE_USERS:-"FALSE"} LOG_LEVEL=${LOG_LEVEL:-"information"} LOG_TYPE=${LOG_TYPE:-"CONSOLE"} 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} MEMORY_STACK_LIMIT=${MEMORY_STACK_LIMIT:-8000} MEMORY_USAGE_MAX=${MEMORY_USAGE_MAX:-"80.0"} PRESPAWN_CHILD_PROCESSES=${PRESPAWN_CHILD_PROCESSES:-1} SETUP_TYPE=${SETUP_TYPE:-"AUTO"} TLS_CA_FILENAME=${TLS_CA_FILENAME:-"ca-chain.cert.pem"} TLS_CERT_FILENAME=${TLS_CERT_FILENAME:-"cert.pem"} TLS_CERT_PATH=${TLS_CERT_PATH:-"/etc/loolwsd/certs"} TLS_KEY_FILENAME=${TLS_KEY_FILENAME:-"key.pem"} USER_IDLE_TIMEOUT=${USER_IDLE_TIMEOUT:-900} USER_OUT_OF_FOCUS_TIMEOUT=${USER_OUT_OF_FOCUS_TIMEOUT:-60} mkdir -p /var/log/lool touch /var/log/lool/loolwsd.log chown -R lool /var/log/lool rm /opt/lool/systemplate/etc/resolv.conf ln -s /etc/resolv.conf /opt/lool/systemplate/etc/resolv.conf ### Custom File Support if [ -d /assets/custom ] ; then echo "** [libreoffice-online] Custom Files Found, Copying over top of Master.." cp -R /assets/custom/* /opt/lool/share/ chown -R lool. /opt/lool/share/ fi if [ "$ENABLE_SSL" = "TRUE" ]; then if [ "$ENABLE_SSL_CERT_GENERATE" = "TRUE" ]; then mkdir -p $TLS_CERT_PATH # Generate new SSL certificate instead of using the default echo "** [libreoffice-online] Auto Generating Self Signed Certificates" mkdir -p /tmp/ssl/ cd /tmp/ssl/ mkdir -p certs/ca openssl genrsa -out certs/ca/root.key.pem 2048 openssl req -x509 -new -nodes -key certs/ca/root.key.pem -days 9131 -out certs/ca/root.crt.pem -subj "/C=XX/ST=XX/L=XX/O=Dummy Authority/CN=Dummy Authority" mkdir -p certs/{servers,tmp} mkdir -p "certs/servers/localhost" openssl genrsa -out "certs/servers/localhost/privkey.pem" 2048 if test "${cert_domain-set}" == set; then openssl req -key "certs/servers/localhost/privkey.pem" -new -sha256 -out "certs/tmp/localhost.csr.pem" -subj "/C=XX/ST=XX/L=XX/O=Dummy Authority/CN=localhost" else openssl req -key "certs/servers/localhost/privkey.pem" -new -sha256 -out "certs/tmp/localhost.csr.pem" -subj "/C=XX/ST=XX/L=XX/O=Dummy Authority/CN=${cert_domain}" fi openssl x509 -req -in certs/tmp/localhost.csr.pem -CA certs/ca/root.crt.pem -CAkey certs/ca/root.key.pem -CAcreateserial -out certs/servers/localhost/cert.pem -days 9131 mv certs/servers/localhost/privkey.pem ${TLS_CERT_PATH}/${TLS_KEY_FILENAME} mv certs/servers/localhost/cert.pem ${TLS_CERT_PATH}/${TLS_KEY_FILENAME} mv certs/ca/root.crt.pem ${TLS_CERT_PATH}/${TLS_CA_FILENAME} rm -rf /tmp/ssl chown -R lool ${TLS_CERT_PATH} else if [ ! -f "${TLS_CERT_PATH}/${TLS_KEY_FILENAME}" ] || [ ! -f "${TLS_CERT_PATH}/${TLS_CA_FILENAME}" ] || [ ! -f "${TLS_CERT_PATH}/${TLS_CERT_FILENAME}" ] ; then echo ** [libreoffice-online] *** ERROR *** TLS Certificates missing. Please switch to autogenerate mode, or place your certifcates in the correct location. fi fi fi if [ "$SETUP_TYPE" = "AUTO" ]; then echo '** [libreoffice-online] Autogenerating Configuration File' ### Replace Configuration directives perl -pi -e "s/.*<\/allowed_languages>/${DICTIONARIES}<\/allowed_languages>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/autosave_duration_secs>/${AUTO_SAVE}<\/autosave_duration_secs>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/ca_file_path>/${TLS_CERT_PATH}/${TLS_CA_FILENAME}<\/key_file_path>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/cert_file_path>/${TLS_CERT_PATH}/${TLS_CERT_FILENAME}<\/cert_file_path>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/idle_timeout_secs>/${IDLE_UNLOAD_TIMEOUT}<\/idle_timeout_secs>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/idle_timeout_secs>/${USER_IDLE_TIMEOUT}<\/idle_timeout_secs>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/idlesave_duration_secs>/${IDLE_SAVE}<\/idlesave_duration_secs>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/key_file_path>/${TLS_CERT_PATH}/${TLS_KEY_FILENAME}<\/key_file_path>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/level>/${LOG_LEVEL}<\/level>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/limit_data_mem_kb>/${MEMORY_DATA_LIMIT}<\/limit_data_mem_kb>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/limit_file_size_mb>/${FILE_SIZE_LIMIT}<\/limit_file_size_mb>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/limit_load_secs>/${MAX_FILE_LOAD_LIMIT}<\/limit_load_secs>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/limit_num_open_files>/${MAX_OPEN_FILES}<\/limit_num_open_files>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/limit_stack_mem_kb>/${MEMORY_STACK_LIMIT}<\/limit_stack_mem_kb>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/max_concurrency>/${MAX_THREADS_DOCUMENT}<\/max_concurrency>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/memproportion>/${MEMORY_USAGE_MAX}<\/memproportion>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/num_prespawn_children>/${PRESPAWN_CHILD_PROCESSES}<\/num_prespawn_children>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/out_of_focus_timeout_secs>/${USER_OUT_OF_FOCUS_TIMEOUT}<\/out_of_focus_timeout_secs>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/password>/${ADMIN_PASS}<\/password>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/server_name>/${HOSTNAME}<\/server_name>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/.*<\/username>/${ADMIN_USER}<\/username>/" /etc/loolwsd/loolwsd.xml perl -pi -e "s/localhost<\/host>/${ALLOWED_HOSTS}<\/host>/g" /etc/loolwsd/loolwsd.xml if [ "$ENABLE_ADMIN_CONSOLE" != "TRUE" ]; then perl -pi -e "s/.*<\/enable>/true<\/enable>/" /etc/loolwsd/loolwsd.xml fi if [ "$LOG_TYPE" = "FILE" ]; then perl -pi -e "s/.*<\/enable>/false<\/enable>/" /etc/loolwsd/loolwsd.xml fi if [ "$ENABLE_SSL_REVERSE_PROXY" != "FALSE" ]; then perl -pi -e "s/.*<\/termination>/true<\/termination>/" /etc/loolwsd/loolwsd.xml fi if [ "$LOG_ANONYMIZE_USERS" != "FALSE" ]; then perl -pi -e "s/.*<\/usernames>/true<\/usernames>/" /etc/loolwsd/loolwsd.xml fi if [ "$LOG_ANONYMIZE_FILES" != "FALSE" ]; then perl -pi -e "s/.*<\/filenames>/true<\/filenames>/" /etc/loolwsd/loolwsd.xml fi if [ "$LOG_TYPE" = "FILE" ]; then perl -pi -e "s//tmp/state/10-loolwsd-init