#!/bin/bash
# info: add dns domain
# options: user domain ip [template] [exp] [soa] [ttl]
#
# 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 | tr '[:upper:]' '[:lower:]')
domain_idn=$(idn -t --quiet -a "$domain")
ip=$3
template=${4-default}
next_year=$(date +%F -d "+ 1 year")
exp=${5-$next_year}
soa=$6
ttl=${7-14400}

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


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

check_args '3' "$#" 'user domain ip [template] [exp] [soa] [ttl]'
validate_format 'user' 'domain' 'ip' 'template' 'exp' 'ttl'
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'
is_dns_template_valid


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

# Defining variables
i=1
ns=$(get_user_value '$NS')
for nameserver in ${ns//,/ };do
    eval ns$i=$nameserver
    (( ++i))
done

# Define soa
if [ -z "$soa" ]; then
    soa="$ns1"
fi

# 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/%ns5%/$ns5/g" \
        -e "s/%ns6%/$ns6/g" \
        -e "s/%ns7%/$ns7/g" \
        -e "s/%ns8%/$ns8/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
$BIN/v_restart_web "$EVENT"

# Logging
log_history "$EVENT"
log_event "$OK" "$EVENT"

exit
