#!/bin/bash

# Pastikan script dijalankan sebagai root
if [ "$(id -u)" -ne 0 ]; then
  echo "Harap jalankan script ini sebagai root atau sudo."
  exit 1
fi

DOMAIN1="smkbisa.or.id"
DOMAIN2="lks2027.net"

echo "Domain mail server disetel ke: $DOMAIN1 dan $DOMAIN2"

# Pre-seed konfigurasi postfix agar instalasi tidak memunculkan prompt interaktif
echo "postfix postfix/main_mailer_type select Internet Site" | debconf-set-selections
echo "postfix postfix/mailname string $DOMAIN1" | debconf-set-selections

echo "Memperbarui indeks paket..."
apt-get update -y

echo "Menginstal Postfix (SMTP) dan Dovecot (IMAP/POP3)..."
apt-get install postfix dovecot-core dovecot-imapd dovecot-pop3d -y

echo "Menerapkan konfigurasi Postfix..."
postconf -e "home_mailbox = Maildir/"
postconf -e "myhostname = mail.$DOMAIN1"

# Menambahkan kedua domain agar Postfix bersedia menerima email untuk smkbisa.or.id & lks2027.net
postconf -e "mydestination = \$myhostname, $DOMAIN1, $DOMAIN2, localhost.localdomain, localhost"
postconf -e "mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/16 10.0.0.0/8 172.16.0.0/12"

# Mengaktifkan SMTP Authentication
postconf -e "smtpd_sasl_type = dovecot"
postconf -e "smtpd_sasl_path = private/auth"
postconf -e "smtpd_sasl_auth_enable = yes"
postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination"

# Mengarahkan Postfix agar menggunakan LDA Dovecot untuk penerimaan lokal 
# (Sangat penting agar batasan Quota Dovecot bisa berlaku & menolak email jika penuh)
postconf -e "mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -m \"\${EXTENSION}\""

echo "Menerapkan konfigurasi Dovecot..."
# Pada Dovecot v2.4+ (Debian 13), mail_location digantikan dengan mail_driver dan mail_path
cat <<EOF > /etc/dovecot/conf.d/99-mail-location.conf
mail_driver = maildir
mail_path = ~/Maildir
EOF
# Pada Dovecot v2.4+, disable_plaintext_auth diganti dengan auth_allow_cleartext
echo "auth_allow_cleartext = yes" > /etc/dovecot/conf.d/99-plaintext-auth.conf

# Socket untuk Autentikasi SMTP (Postfix)
cat <<EOF > /etc/dovecot/conf.d/99-postfix-auth.conf
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}
EOF

echo "Mengonfigurasi Kuota Email (1 GB)..."
cat <<EOF > /etc/dovecot/conf.d/99-quota.conf
# Mengaktifkan plugin quota secara global
mail_plugins = \$mail_plugins quota

# Plugin quota untuk IMAP
protocol imap {
  mail_plugins = \$mail_plugins imap_quota
}

# Plugin quota untuk POP3
protocol pop3 {
  mail_plugins = \$mail_plugins quota
}

# Plugin quota untuk LDA (Penting agar email ditolak jika kuota penuh)
protocol lda {
  mail_plugins = \$mail_plugins quota
}

# Pada Dovecot v2.4+, pengaturan plugin diletakkan langsung tanpa blok 'plugin {}'
quota_driver = count
quota_storage_size = 1G
EOF

echo "Menyiapkan kerangka direktori user (template email)..."
TEMPLATE_DIR="/etc/template_mail"
mkdir -p "$TEMPLATE_DIR/Maildir/{cur,new,tmp}"
sed -i "s|^#*SKEL=.*|SKEL=$TEMPLATE_DIR|" /etc/default/useradd

echo "Mereset ulang layanan Postfix dan Dovecot..."
systemctl restart postfix
systemctl enable postfix
systemctl restart dovecot
systemctl enable dovecot

echo "Membuat user email 'aku' dan 'kamu'..."

# Membuat user 'aku'
id -u aku &>/dev/null || useradd -m -s /usr/sbin/nologin aku
# Mengatur password default 'rahasia'
echo "aku:rahasia" | chpasswd

# Membuat user 'kamu'
id -u kamu &>/dev/null || useradd -m -s /usr/sbin/nologin kamu
# Mengatur password default 'rahasia'
echo "kamu:rahasia" | chpasswd

echo "---------------------------------------------------"
echo "Instalasi dan Konfigurasi Mail Server Selesai!"
echo "Konfigurasi kuota 1GB telah diaktifkan menggunakan Dovecot LDA."
echo "Telah dibuat dua akun berikut:"
echo " 1. Email: aku@smkbisa.or.id | User login: aku  | Pass: rahasia"
echo " 2. Email: kamu@lks2027.net  | User login: kamu | Pass: rahasia"
echo "(Anda bisa mengganti passwordnya dengan menjalankan perintah 'passwd aku' dan 'passwd kamu')"
