#!/bin/bash
# info: add dns domain
# options: USER DOMAIN IP [TEMPLATE] [NS1] [NS2] [NS3] [NS4] [RESTART]
#
# The function adds DNS zone with records defined in the template. If the exp
# argument isn't stated, the expiration date value will be set to next year.
# The soa argument is responsible for the relevant record. By default the first
# user's NS server is used. TTL is set as common for the zone and for all of
# its records with a default value of 14400 seconds.


#----------------------------------------------------------#
#                    Variable&Function                     #
#----------------------------------------------------------#

# Argument defenition
user=$1
domain=$(idn -t --quiet -u "$2" )
domain=$(echo $domain | sed -e 's/\.*$//g' -e 's/^\.*//g')
domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
ip=$3
template=$4
ns1=$5
ns2=$6
ns3=$7
ns4=$8
restart=$9

# Includes
source $VESTA/conf/vesta.conf
source $VESTA/func/main.sh
source $VESTA/func/domain.sh


#----------------------------------------------------------#
#                    Verifications                         #
#----------------------------------------------------------#

check_args '3' "$#" 'USER DOMAIN IP [TEMPLATE] [NS1] [NS2] [NS3] [NS4]'
validate_format 'user' 'domain' 'ip'
is_system_enabled "$DNS_SYSTEM"
is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user"
is_domain_new 'dns'
is_package_full 'DNS_DOMAINS'
if [ ! -z "$template" ]; then
    validate_format 'template'
    is_dns_template_valid
else
    template=$(get_user_value '$TEMPLATE')
    is_dns_template_valid
fi

if [ ! -z "$ns1" ]; then
    ns1=$(echo $5 | sed -e 's/\.*$//g' -e 's/^\.*//g')
    validate_format 'ns1'
fi
if [ ! -z "$ns2" ]; then
    ns2=$(echo $6 | sed -e 's/\.*$//g' -e 's/^\.*//g')
    validate_format 'ns2'
fi

if [ ! -z "$ns3" ]; then
    ns3=$(echo $7 | sed -e 's/\.*$//g' -e 's/^\.*//g')
    validate_format 'ns3'
fi
if [ ! -z "$ns4" ]; then
    ns4=$(echo $8 | sed -e 's/\.*$//g' -e 's/^\.*//g')
    validate_format 'ns4'
fi


#----------------------------------------------------------#
#                       Action                             #
#----------------------------------------------------------#

# Defining variables
if [ -z $ns2 ]; then
    i=1
    ns=$(get_user_value '$NS')
    for nameserver in ${ns//,/ };do
        eval ns$i=$nameserver
        (( ++i))
    done
fi
soa="$ns1"
exp=$(date +%F -d "+ 1 year")
ttl=14400


# Adding zone to dns dir
cat $DNSTPL/$template.tpl |\
    sed -e "s/%ip%/$ip/g" \
        -e "s/%domain_idn%/$domain_idn/g" \
        -e "s/%domain%/$domain/g" \
        -e "s/%ns1%/$ns1/g" \
        -e "s/%ns2%/$ns2/g" \
        -e "s/%ns3%/$ns3/g" \
        -e "s/%ns4%/$ns4/g" \
        -e "s/%time%/$TIME/g" \
        -e "s/%date%/$DATE/g" > $USER_DATA/dns/$domain.conf
chmod 660 $USER_DATA/dns/$domain.conf
records="$(wc -l $USER_DATA/dns/$domain.conf |cut -f 1 -d ' ')"

# Adding dns.conf record
dns_rec="DOMAIN='$domain' IP='$ip' TPL='$template' TTL='$ttl' EXP='$exp'"
dns_rec="$dns_rec SOA='$soa' RECORDS='$records' SUSPENDED='no' TIME='$TIME'"
dns_rec="$dns_rec DATE='$DATE'"

echo "$dns_rec" >> $USER_DATA/dns.conf
chmod 660 $USER_DATA/dns.conf

# Adding zone in named.conf
named="zone \"$domain_idn\" {type master; file"
named="$named \"$HOMEDIR/$user/conf/dns/$domain.db\";};"
echo "$named" >> /etc/named.conf

# Updating domain dns zone
update_domain_zone

chmod 640 $conf
chown root:named $conf


#----------------------------------------------------------#
#                       Vesta                              #
#----------------------------------------------------------#

# Increasing domain value
increase_user_value "$user" '$U_DNS_DOMAINS'
increase_user_value "$user" '$U_DNS_RECORDS' "$records"

# Restart named
if [ "$restart" != 'no' ]; then
    $BIN/v-restart-dns "$EVENT"
fi

# Logging
log_history "added dns domain $domain"
log_event "$OK" "$EVENT"

exit
