112 lines
3.3 KiB
Django/Jinja
112 lines
3.3 KiB
Django/Jinja
#!/bin/bash
|
|
|
|
# {{ ansible_managed }}
|
|
|
|
database='{{ mailserver_database.db }}'
|
|
user='{{ mailserver_database.admin_user.name }}'
|
|
password='{{ mailserver_database.admin_user.pwd }}'
|
|
|
|
usage() {
|
|
echo "Usage: $0 [options]"
|
|
echo " options:"
|
|
echo " add-alias Adds a new alias, needed information will be prompted."
|
|
echo " add-user Adds a new user, needed information will be prompted."
|
|
echo " list-domains List all configured virtual domains."
|
|
echo " list-aliases [user] List all aliases optionally restricting to user."
|
|
echo " list-users [domain] List all mailboxes optionally restricting to domain."
|
|
}
|
|
|
|
|
|
main() {
|
|
[ $# -eq 0 ] && usage && exit 1
|
|
[ "$1" = '-h' ] && usage && exit 1
|
|
[ "$1" = '--help' ] && usage && exit 1
|
|
[ "$1" = 'list-domains' ] && list_domains && exit 0
|
|
[ "$1" = 'list-aliases' ] && list_aliases "$2" && exit 0
|
|
[ "$1" = 'list-users' ] && list_users "$2" && exit 0
|
|
[ "$1" = 'add-alias' ] && add_alias && exit 0
|
|
[ "$1" = 'add-user' ] && add_user && exit 0
|
|
usage && exit 1 # not supposed to get here
|
|
}
|
|
|
|
add_alias() {
|
|
echo TODO
|
|
}
|
|
|
|
add_user() {
|
|
local username
|
|
local userdomain
|
|
local userpass
|
|
local userpasscheck
|
|
local userquota
|
|
|
|
read -rp "Username: " username
|
|
|
|
read -rp "Domain: " userdomain
|
|
while [ "$(list_domains | grep -c "^\s*${userdomain}$")" -eq 0 ]; do
|
|
echo "Domain '$userdomain' does not exit!"
|
|
read -rp "Domain: " userdomain
|
|
done
|
|
|
|
read -srp "Password: " userpass; echo
|
|
read -srp "Password (again): " userpasscheck; echo
|
|
while [ "$userpass" != "$userpasscheck" ]; do
|
|
echo "Passwords do not match!"
|
|
read -srp "Password: " userpass; echo
|
|
read -srp "Password (again): " userpasscheck; echo
|
|
done
|
|
|
|
echo "Quota:"
|
|
echo " 0: infinity"
|
|
echo " 42: 42 bytes"
|
|
echo " 42k: 42 kilobytes"
|
|
echo " 42m: 42 megabytes"
|
|
echo " 42g: 42 gigabytes"
|
|
read -rp "Quota: " userquota
|
|
if [[ "$userquota" = *k ]]; then
|
|
userquota="${userquota//k/}"
|
|
userquota=$(( userquota * 1024 ))
|
|
elif [[ "$userquota" = *m ]]; then
|
|
userquota="${userquota//m/}"
|
|
userquota=$(( userquota * 1024 * 1024 ))
|
|
elif [[ "$userquota" = *g ]]; then
|
|
userquota="${userquota//g/}"
|
|
userquota=$(( userquota * 1024 * 1024 * 1024 ))
|
|
fi
|
|
|
|
username="${username%@*}@${userdomain}" # clean username
|
|
userpass=$(doveadm pw -s BLF-CRYPT -p "$userpass") # hash password
|
|
|
|
echo "INSERT INTO virtual_users (domain_id, email, password, quota) VALUES (" \
|
|
"(SELECT id FROM virtual_domains WHERE name = '$userdomain')," \
|
|
"'$username'," \
|
|
"'$userpass'," \
|
|
"$userquota" \
|
|
") ON CONFLICT (email) DO UPDATE SET password = EXCLUDED.password, quota = EXCLUDED.quota;" | connect
|
|
}
|
|
|
|
list_domains() {
|
|
echo 'SELECT name FROM virtual_domains;' | connect
|
|
}
|
|
|
|
list_aliases() {
|
|
if [ -z "$1" ]; then
|
|
echo 'SELECT source, destination FROM virtual_aliases;' | connect
|
|
else
|
|
echo "SELECT source, destination FROM virtual_aliases WHERE destination='$1';" | connect
|
|
fi
|
|
}
|
|
|
|
list_users() {
|
|
if [ -z "$1" ]; then
|
|
echo 'SELECT email FROM virtual_users;' | connect
|
|
else
|
|
echo "SELECT email FROM virtual_users WHERE domain_id=(SELECT id FROM virtual_domains WHERE name='$1');" | connect
|
|
fi
|
|
}
|
|
|
|
connect() {
|
|
PGPASSWORD="$password" psql -h 127.0.0.1 -d "$database" -U "${user}" -w -t || exit 1
|
|
}
|
|
|
|
main "$@"
|