test/lib/autodiscover.sh

123 lines
5.0 KiB
Bash

#!/bin/bash
#
# Autodiscover service for mail
PATH=$HOME/.docker/cli-plugins:/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
config_autodiscover() {
echo -ne "\n* Configuring /federated/apps/autodiscover container.."
if [ ! -d "/federated/apps/autodiscover" ]; then
mkdir -p /federated/apps/autodiscover
fi
TRAEFIK_HTTPAUTH_STRING_AUTODISCOVER=$(echo `htpasswd -nb admin@$DOMAIN $ADMINPASS` | sed -e s/\\$/\\$\\$/g)
if [ "$(uname -m)" = "aarch64" ]; then
# The federatedcomputer/autodiscover-email-settings container is built
# from the same sources as monogramm/autodiscover-email-settings
# without modifications.
# The only "change" is an aarch64 port.
CONTAINER=federatedcomputer/autodiscover-email-settings
else
CONTAINER=monogramm/autodiscover-email-settings
fi
cat > /federated/apps/autodiscover/docker-compose.yml <<EOF
services:
autodiscover:
image: ${CONTAINER}:\${IMAGE_VERSION}
container_name: autodiscover
hostname: autodiscover.$DOMAIN
restart: always
networks:
core:
ipv4_address: 192.168.0.32
env_file:
- ./.env
labels:
- "traefik.enable=true"
- "traefik.http.routers.autodiscover.rule=Host(\`autoconfig.$DOMAIN\`) || Host(\`autodiscover.$DOMAIN\`)"
- "traefik.http.routers.autodiscover.service=autodiscover"
- "traefik.http.routers.autodiscover.entrypoints=websecure"
- "traefik.http.routers.autodiscover.tls.certresolver=letsencrypt"
- "traefik.http.services.autodiscover.loadbalancer.server.port=8000"
- "traefik.http.routers.autodiscover.middlewares=autodiscover-auth"
- "traefik.http.middlewares.autodiscover-auth.basicauth.users=$TRAEFIK_HTTPAUTH_STRING_AUTODISCOVER"
- "traefik.http.routers.autodiscovernew.rule=(Host(\`autoconfig.$DOMAIN\`) || Host(\`autodiscover.$DOMAIN\`)) && PathPrefix(\`/mail\`)"
- "traefik.http.routers.autodiscovernew.entrypoints=websecure"
- "traefik.http.routers.autodiscovernew.tls.certresolver=letsencrypt"
- "traefik.http.routers.autodiscovernew.service=autodiscovernew"
- "traefik.http.services.autodiscovernew.loadbalancer.server.port=8000"
networks:
core:
external: true
EOF
cat > /federated/apps/autodiscover/.env <<EOF
IMAGE_VERSION="$(current_version autodiscover)"
COMPANY_NAME=$COMPANY
SUPPORT_URL=https://autodiscover.$DOMAIN
DOMAIN=$DOMAIN
# IMAP configuration (host mandatory to enable)
IMAP_HOST=mail.$DOMAIN
IMAP_PORT=993
IMAP_SOCKET=SSL
# POP configuration (host mandatory to enable)
POP_HOST=mail.$DOMAIN
POP_PORT=995
POP_SOCKET=SSL
# SMTP configuration (host mandatory to enable)
SMTP_HOST=mail.$DOMAIN
SMTP_PORT=587
SMTP_SOCKET=STARTTLS
# MobileSync/ActiveSync configuration (url mandatory to enable)
# - MOBILESYNC_URL=https://sync.example.com
#- MOBILESYNC_NAME=sync.example.com
# LDAP configuration (host mandatory to enable)
#LDAP_HOST=ldap.$DOMAIN
#LDAP_PORT=636
#LDAP_SOCKET=SSL
#LDAP_BASE=dc=federatedcomputer,dc=cloud
#LDAP_USER_FIELD=mail
#LDAP_USER_BASE=ou=people,dc=federatedcomputer,dc=cloud
#LDAP_SEARCH=(|(objectClass=PostfixBookMailAccount))
# Apple mobile config identifiers (identifier mandatory to enable)
PROFILE_IDENTIFIER=cloud.federatedcomputer.autodiscover
PROFILE_UUID=92943D26-CAB3-4086-897D-DC6C0D8B1E86
MAIL_UUID=7A981A9E-D5D0-4EF8-87FE-39FD6A506FAC
LDAP_UUID=6ECB6BA9-2208-4ABF-9E60-4E9F4CD7309E
EOF
chmod 600 /federated/apps/autodiscover/.env
# Add DNS records for auto discovery
docker exec pdns pdnsutil add-record $DOMAIN autoconfig A 86400 $EXTERNALIP
[ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery"
docker exec pdns pdnsutil add-record $DOMAIN autodiscover A 86400 $EXTERNALIP
[ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery"
docker exec pdns pdnsutil add-record $DOMAIN @ TXT 86400 "\"mailconf=https://autoconfig.$DOMAIN/mail/config-v1.1.xml\""
[ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery"
docker exec pdns pdnsutil add-record $DOMAIN _imaps._tcp SRV 86400 "0 0 993 mail.$DOMAIN"
[ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery"
docker exec pdns pdnsutil add-record $DOMAIN _pop3s._tcp SRV 86400 "0 0 995 mail.$DOMAIN"
[ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery"
docker exec pdns pdnsutil add-record $DOMAIN _imaps._tcp SRV 86400 "0 0 993 mail.$DOMAIN"
[ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery"
docker exec pdns pdnsutil add-record $DOMAIN _submission._tcp SRV 86400 "0 0 587 $DOMAIN"
[ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery"
docker exec pdns pdnsutil add-record $DOMAIN _autodiscover._tcp SRV 86400 "0 0 443 autodiscover.$DOMAIN"
[ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery"
docker exec pdns pdnsutil add-record $DOMAIN _ldap._tcp SRV 86400 "0 0 636 ldap.$DOMAIN"
[ $? -ne 0 ] && fail "Couldn't add dns record for auto discovery"
echo -ne "done."
}
start_autodiscover() {
# Start service with command to make sure it's up before proceeding
start_service "autodiscover" "nc -z 192.168.0.32 8000 &> /dev/null" "8"
echo -ne "done."
}