diff --git a/web/kweb.cfg b/web/kweb.cfg index 80b191a..e51b002 100644 --- a/web/kweb.cfg +++ b/web/kweb.cfg @@ -152,6 +152,20 @@ try_duration 30s } + proxy /Autodiscover/Autodiscover.xml kopano_zpush:80 { + transparent + keepalive 0 + fail_timeout 10s + try_duration 30s + } + + proxy /autodiscover/autodiscover.xml kopano_zpush:80 { + transparent + keepalive 0 + fail_timeout 10s + try_duration 30s + } + proxy /caldav/ kopano_ical:8080 { fail_timeout 10s try_duration 30s diff --git a/webapp/start.sh b/webapp/start.sh index 3bfc7dc..89bfe58 100755 --- a/webapp/start.sh +++ b/webapp/start.sh @@ -29,7 +29,7 @@ php_cfg_gen() { cat "$cfg_file" exit 1 fi - else + else echo "Error: Config file $cfg_file not found. Plugin not installed?" local dir dir=$(dirname "$cfg_file") diff --git a/zpush/Dockerfile b/zpush/Dockerfile index 8001090..7598b9d 100644 --- a/zpush/Dockerfile +++ b/zpush/Dockerfile @@ -46,6 +46,8 @@ RUN \ z-push-kopano \ z-push-config-apache \ z-push-kopano-gabsync \ + z-push-autodiscover \ + z-push-config-apache-autodiscover \ ca-certificates \ ${ADDITIONAL_KOPANO_PACKAGES} \ && rm -rf /var/cache/apt /var/lib/apt/lists diff --git a/zpush/start.sh b/zpush/start.sh index a085b31..e5cf0bc 100755 --- a/zpush/start.sh +++ b/zpush/start.sh @@ -7,6 +7,36 @@ ADDITIONAL_KOPANO_PACKAGES=${ADDITIONAL_KOPANO_PACKAGES:-""} set -eu # unset variables are errors & non-zero return values exit the whole script +php_cfg_gen() { + local cfg_file="$1" + local cfg_setting="$2" + local cfg_value="$3" + if [ -e "$cfg_file" ]; then + if grep -q "$cfg_setting" "$cfg_file"; then + echo "Setting $cfg_setting = $cfg_value in $cfg_file" + case $cfg_value in + true|TRUE|false|FALSE) + echo boolean value + sed -ri "s#(\s*define).+${cfg_setting}.+#\tdefine(\x27${cfg_setting}\x27, ${cfg_value}\);#g" "$cfg_file" + ;; + *) + sed -ri "s#(\s*define).+${cfg_setting}.+#\tdefine(\x27${cfg_setting}\x27, \x27${cfg_value}\x27\);#g" "$cfg_file" + ;; + esac + else + echo "Error: Config option $cfg_setting not found in $cfg_file" + cat "$cfg_file" + exit 1 + fi + else + echo "Error: Config file $cfg_file not found. Plugin not installed?" + local dir + dir=$(dirname "$cfg_file") + ls -la "$dir" + exit 1 + fi +} + [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && apt update [ -n "${ADDITIONAL_KOPANO_PACKAGES// }" ] && for installpkg in $ADDITIONAL_KOPANO_PACKAGES; do # shellcheck disable=SC2016 disable=SC2086 @@ -15,33 +45,67 @@ set -eu # unset variables are errors & non-zero return values exit the whole scr fi done -echo "Ensure directories" +# Ensure directories mkdir -p /run/sessions if [ "$KCCONF_SERVERHOSTNAME" == "127.0.0.1" ]; then echo "Z-Push is using the default: connection" else echo "Z-Push is using an ip connection" - sed -e "s#define([\"']MAPI_SERVER[\"'],\s*[\"']default:[\"'])#define('MAPI_SERVER', 'https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano')#" \ - -i /etc/z-push/kopano.conf.php + php_cfg_gen /etc/z-push/kopano.conf.php MAPI_SERVER "https://${KCCONF_SERVERHOSTNAME}:${KCCONF_SERVERPORT}/kopano" fi echo "Configuring Z-Push for use behind a reverse proxy" -sed -e "s#define([\"']USE_CUSTOM_REMOTE_IP_HEADER[\"'],\s*false)#define('USE_CUSTOM_REMOTE_IP_HEADER', 'HTTP_X_FORWARDED_FOR')#" \ - -i /etc/z-push/z-push.conf.php +php_cfg_gen /etc/z-push/z-push.conf.php USE_CUSTOM_REMOTE_IP_HEADER HTTP_X_FORWARDED_FOR -sed -e "s#define([\"']USERNAME[\"'],\s*'')#define('USERNAME', 'SYSTEM')#" \ - -i /etc/z-push/gabsync.conf.php +# configuring z-push from env +for setting in $(compgen -A variable KCCONF_ZPUSH_); do + setting2=${setting#KCCONF_ZPUSH_} + php_cfg_gen /etc/z-push/z-push.conf.php "${setting2}" "${!setting}" +done + +# configuring autodiscover +for setting in $(compgen -A variable KCCONF_ZPUSHAUTODISCOVER_); do + setting2=${setting#KCCONF_ZPUSHAUTODISCOVER_} + php_cfg_gen /etc/z-push/autodiscover.conf.php "${setting2}" "${!setting}" +done + +# configuring z-push gabsync +php_cfg_gen /etc/z-push/gabsync.conf.php USERNAME SYSTEM + +for setting in $(compgen -A variable KCCONF_ZPUSHGABSYNC_); do + setting2=${setting#KCCONF_ZPUSHGAVSYNC_} + php_cfg_gen /etc/z-push/z-push.conf.php "${setting2}" "${!setting}" +done + +# configuring z-push sql state engine +for setting in $(compgen -A variable KCCONF_ZPUSHSQL_); do + setting2=${setting#KCCONF_ZPUSHSQL_} + php_cfg_gen /etc/z-push/state-sql.conf.php "${setting2}" "${!setting}" +done + +# configuring z-push memcached +for setting in $(compgen -A variable KCCONF_ZPUSHMEMCACHED_); do + setting2=${setting#KCCONF_ZPUSHMEMCACHED_} + php_cfg_gen /etc/z-push/memcached.conf.php "${setting2}" "${!setting}" +done + +# configuring z-push gab2contacts +for setting in $(compgen -A variable KCCONF_ZPUSHGA2CONTACTS_); do + setting2=${setting#KCCONF_ZPUSHSQL_} + php_cfg_gen /etc/z-push/gab2contacts.conf.php "${setting2}" "${!setting}" +done echo "Ensure config ownership" chown -R www-data:www-data /run/sessions echo "Activate z-push log rerouting" -touch /var/log/z-push/z-push.log -touch /var/log/z-push/z-push-error.log -chown www-data:www-data /var/log/z-push/z-push.log /var/log/z-push/z-push-error.log +touch /var/log/z-push/{z-push.log,z-push-error.log,autodiscover.log,autodiscover-error.log} +chown -R www-data:www-data /var/log/z-push tail --pid=$$ -F --lines=0 -q /var/log/z-push/z-push.log & tail --pid=$$ -F --lines=0 -q /var/log/z-push/z-push-error.log & +tail --pid=$$ -F --lines=0 -q /var/log/z-push/autodiscover.log & +tail --pid=$$ -F --lines=0 -q /var/log/z-push/autodiscover-error.log & echo "Starting Apache" rm -f /run/apache2/apache2.pid