#!/usr/bin/env bash set -euo pipefail source ./lib.sh log() { printf "\033[1;32m[+]\033[0m %s\n" "$*"; } ok() { printf " [\033[1;32mOK\033[0m]\n"; } fail() { printf " [\033[1;31mFAIL\033[0m]\n"; } APP_USER="${APP_USER:-mailwolt}" APP_GROUP="${APP_GROUP:-www-data}" APP_DIR="${APP_DIR:-/var/www/${APP_USER}}" UI_CERT="/etc/ssl/ui/fullchain.pem" UI_KEY="/etc/ssl/ui/privkey.pem" SCHEME="http" SERVER_PUBLIC_IPV4="$(detect_ip)" [[ -s "$UI_CERT" && -s "$UI_KEY" ]] && SCHEME="https" UI_HOST="${UI_HOST:-}" APP_URL="${APP_URL:-${SCHEME}://${SERVER_PUBLIC_IPV4}}" if [[ -n "$UI_HOST" ]]; then APP_URL="${SCHEME}://${UI_HOST}" fi MAIL_HOSTNAME="${MAIL_HOSTNAME:-${SERVER_PUBLIC_IPV4}}" echo echo "──────────────────────────────────────────────────────────────────────────────" echo "✔ MailWolt Bootstrap fertig" echo "──────────────────────────────────────────────────────────────────────────────" printf " Aufruf UI: %s\n" "${APP_URL}" printf " App Root: %s\n" "${APP_DIR}" printf " Nginx Site: %s\n" "/etc/nginx/sites-available/${APP_USER}.conf" printf " Mail-FQDN: %s\n" "${MAIL_HOSTNAME}" echo echo " Anmeldung: Keine vordefinierten Admin-Daten." echo " Bitte zuerst registrieren (Erst-User wird Admin, danach" echo " wird die Registrierung automatisch gesperrt)." echo # -------- Services ---------- printf "Services:\n" svc(){ local name="$1" printf " • %-10s … " "$name" if systemctl is-active --quiet "$name"; then ok; else fail; fi } svc nginx svc mariadb svc redis-server svc postfix svc dovecot svc "${APP_USER}-ws" || true svc "${APP_USER}-schedule" || true svc "${APP_USER}-queue" || true echo # -------- Ports / Smoke Test ---------- echo "──────────────────────────────────────────────────────────────────────────────" echo " Smoke-Test (SMTP/IMAP/POP3 mit/ohne TLS)" echo "──────────────────────────────────────────────────────────────────────────────" check_port(){ local label="$1" cmd="$2" printf "[%-3s] %-35s … " "$label" "$3" if timeout 8s bash -lc "$cmd" >/dev/null 2>&1; then ok; else fail; fi } # SMTP family check_port "25" 'printf "QUIT\r\n" | nc -w 3 127.0.0.1 25' "SMTP (EHLO)" check_port "465" 'printf "QUIT\r\n" | openssl s_client -connect 127.0.0.1:465 -quiet -ign_eof' "SMTPS (TLS + EHLO)" check_port "587" 'printf "EHLO x\r\nSTARTTLS\r\nQUIT\r\n" | openssl s_client -starttls smtp -connect 127.0.0.1:587 -quiet -ign_eof' "Submission (STARTTLS)" # POP/IMAP check_port "110" 'printf "QUIT\r\n" | nc -w 3 127.0.0.1 110' "POP3 (QUIT)" check_port "995" 'printf "QUIT\r\n" | openssl s_client -connect 127.0.0.1:995 -quiet -ign_eof' "POP3S (TLS + QUIT)" check_port "143" 'printf ". CAPABILITY\r\n. LOGOUT\r\n" | nc -w 3 127.0.0.1 143' "IMAP (CAPABILITY/LOGOUT)" check_port "993" 'printf ". CAPABILITY\r\n. LOGOUT\r\n" | openssl s_client -connect 127.0.0.1:993 -quiet -ign_eof' "IMAPS (TLS + CAPABILITY/LOGOUT)" echo