docker-kopano/src/kopano/entry.d/10-kopano-common

125 lines
4.9 KiB
Bash
Executable File

#!/bin/bash
#
# 10-kopano-common
#
# Kopano now installs without any cfg files, so we just write custom values
# into their target cfg file.
#
#
# Configuration
#
DOCKER_CONF_DIR1=${DOCKER_CONF_DIR1-/etc/kopano}
DOCKER_CONF_DIR2=${DOCKER_CONF_DIR2-/usr/share/z-push}
DOCKER_APPL_SSL_CERT=${DOCKER_APPL_SSL_CERT-$DOCKER_APPL_SSL_DIR/cert.pem}
DOCKER_APPL_SSL_KEY=${DOCKER_APPL_SSL_KEY-$DOCKER_APPL_SSL_DIR/priv_key.pem}
dagent_cfg_file=$DOCKER_CONF_DIR1/dagent.cfg
gateway_cfg_file=$DOCKER_CONF_DIR1/gateway.cfg
ical_cfg_file=$DOCKER_CONF_DIR1/ical.cfg
ldap_cfg_file=$DOCKER_CONF_DIR1/ldap.cfg
search_cfg_file=$DOCKER_CONF_DIR1/search.cfg
server_cfg_file=$DOCKER_CONF_DIR1/server.cfg
spamd_cfg_file=$DOCKER_CONF_DIR1/spamd.cfg
spooler_cfg_file=$DOCKER_CONF_DIR1/spooler.cfg
sqlstate_cfg_file=$DOCKER_CONF_DIR2/backend/sqlstatemachine/config.php
zpush_cfg_file=$DOCKER_CONF_DIR2/config.php
#
# Define environment variables
#
ssl_env_vars="SSL_CERTIFICATE_FILE SSL_CIPHERS SSL_CURVES SSL_PREFER_SERVER_CIPHERS SSL_PRIVATE_KEY_FILE SSL_VERIFY_CLIENT SSL_VERIFY_FILE SSL_VERIFY_PATH TLS_MIN_PROTO"
dagent_env_vars="LMTP_LISTEN LOG_LEVEL SPAM_HEADER_NAME SPAM_HEADER_VALUE"
gateway_env_vars="BYPASS_AUTH DISABLE_PLAINTEXT_AUTH HTML_SAFETY_FILTER IMAP_CAPABILITY_IDLE IMAP_EXPUNGE_ON_DELETE IMAP_IGNORE_COMMAND_IDLE IMAP_LISTEN IMAP_MAX_FAIL_COMMANDS IMAP_MAX_MESSAGESIZE IMAP_ONLY_MAILFOLDERS IMAP_PUBLIC_FOLDERS IMAPS_LISTEN POP3_LISTEN POP3S_LISTEN DISABLE_PLAINTEXT_AUTH LOG_LEVEL"
ical_env_vars="ICAL_LISTEN ICALS_LISTEN ENABLE_ICAL_GET LOG_LEVEL"
ldap_env_vars="LDAP_URI LDAP_STARTTLS LDAP_BIND_USER LDAP_BIND_PASSWD LDAP_SEARCH_BASE LDAP_USER_TYPE_ATTRIBUTE_VALUE LDAP_GROUP_TYPE_ATTRIBUTE_VALUE LDAP_USER_SEARCH_FILTER"
search_env_vars="INDEX_PROCESSES INDEX_DRAFTS INDEX_JUNK SUGGESTIONS INDEX_ATTACHMENTS INDEX_ATTACHMENT_MAX_SIZE"
server_env_vars="MYSQL_HOST MYSQL_PORT MYSQL_DATABASE MYSQL_USER MYSQL_PASSWORD DISABLED_FEATURES USER_PLUGIN LOG_LEVEL SEARCH_TIMEOUT"
spamd_env_vars="LOG_METHOD SPAM_DIR SPAM_DB HEADER_TAG LEARN_HAM HAM_DIR SA_GROUP"
spooler_env_vars="SMTP_SERVER SMTP_PORT LOG_LEVEL"
sqlstate_env_vars="STATE_SQL_ENGINE STATE_SQL_SERVER STATE_SQL_PORT STATE_SQL_DATABASE STATE_SQL_USER STATE_SQL_PASSWORD STATE_SQL_OPTIONS"
zpush_env_vars="TIMEZONE USE_CUSTOM_REMOTE_IP_HEADER USE_FULLEMAIL_FOR_LOGIN STATE_MACHINE STATE_DIR LOGBACKEND LOGLEVEL LOGAUTHFAIL LOG_SYSLOG_PROGRAM LOG_SYSLOG_FACILITY SYNC_CONFLICT_DEFAULT PING_INTERVAL FILEAS_ORDER SYNC_MAX_ITEMS UNSET_UNDEFINED_PROPERTIES ALLOW_WEBSERVICE_USERS_ACCESS USE_PARTIAL_FOLDERSYNC"
#
# Define helpers
#
_kopano_apply_envvars_gen() {
# move existing cfg files
local cfg_file=$1
shift
local env_vars=$@
if [ -e $cfg_file ]; then
mv -f $cfg_file $cfg_file.orig
fi
for env_var in $env_vars; do
if [ -n "${!env_var+x}" ]; then
dc_log 5 "Setting ${env_var,,} = ${!env_var} in $cfg_file"
echo ${env_var,,} = ${!env_var} >> $cfg_file
fi
done
}
_kopano_apply_phpenvvars_gen() {
local cfg_file=$1
shift
local env_vars=$@
if [ -e $cfg_file ]; then
for env_var in $env_vars; do
if [ -n "${!env_var}" ]; then
dc_log 5 "Setting ${env_var} = ${!env_var} in $cfg_file"
sed -ri "s/(\s*define).+${env_var}.+/\1\(\x27${env_var}\x27, \x27${!env_var}\x27\);/g" $cfg_file
fi
done
fi
}
kopano_apply_envvars() {
_kopano_apply_envvars_gen $dagent_cfg_file $dagent_env_vars
_kopano_apply_envvars_gen $gateway_cfg_file $gateway_env_vars $ssl_env_vars
_kopano_apply_envvars_gen $ical_cfg_file $ical_env_vars $ssl_env_vars
_kopano_apply_envvars_gen $ldap_cfg_file $ldap_env_vars
_kopano_apply_envvars_gen $search_cfg_file $search_env_vars
_kopano_apply_envvars_gen $server_cfg_file $server_env_vars
_kopano_apply_envvars_gen $spamd_cfg_file $spamd_env_vars
_kopano_apply_envvars_gen $spooler_cfg_file $spooler_env_vars
}
kopano_apply_phpenvvars() {
_kopano_apply_phpenvvars_gen $sqlstate_cfg_file $sqlstate_env_vars
_kopano_apply_phpenvvars_gen $zpush_cfg_file $zpush_env_vars
}
#
# Update SSL_CERTIFICATE_FILE and SSL_PRIVATE_KEY_FILE.
# Variables defined in 30-acme-common
# DOCKER_APPL_SSL_CERT
# DOCKER_APPL_SSL_KEY
#
kopano_export_tls_cert() {
if ([ -f "$DOCKER_APPL_SSL_CERT" ] && [ -f "$DOCKER_APPL_SSL_KEY" ]); then
export SSL_CERTIFICATE_FILE=${SSL_CERTIFICATE_FILE-$DOCKER_APPL_SSL_CERT}
export SSL_PRIVATE_KEY_FILE=${SSL_PRIVATE_KEY_FILE-$DOCKER_APPL_SSL_KEY}
fi
}
#
# Generate self signed certificate if any of IMAPS_LISTEN, POP3S_LISTEN or
# ICALS_LISTEN is no-empty but no certificates are given.
#
kopano_generate_tls_cert() {
for prot in IMAPS_LISTEN POP3S_LISTEN ICALS_LISTEN; do
if [ -n "${!prot}" ]; then
local secure="$prot=${!prot}"
break
fi
done
if ([ -z "$SSL_CERTIFICATE_FILE" ] && [ -n "$secure" ] && dc_is_installed openssl); then
dc_log 4 "$secure, but no certs given, so generating self-signed cert for host $HOSTNAME"
dc_tls_setup_selfsigned_cert $DOCKER_APPL_SSL_CERT $DOCKER_APPL_SSL_KEY
dc_chowncond $DOCKER_APPL_RUNAS $DOCKER_APPL_SSL_DIR
fi
}