#!/bin/bash
# info: rebuild dns domains
# options: user
#
# The function rebuilds BIND configuration files for all dns domains.


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

# Argument defenition
user=$1

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


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

check_args '1' "$#" 'user'
validate_format 'user'
is_system_enabled "$WEB_SYSTEM"
is_object_valid 'user' 'USER' "$user"
is_object_unsuspended 'user' 'USER' "$user"


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

user_domains=0
user_ssl=0
user_aliases=0
suspended_web=0

# Clean up old config
rm -f $HOMEDIR/$user/conf/tmp_*.conf

# Defining config
conf=$USER_DATA/web.conf
fields='$DOMAIN'
nohead=1

# Starting loop
for domain in $(shell_list) ; do

    # Rebuilding directories
    mkdir -p $HOMEDIR/$user/web/$domain \
        $HOMEDIR/$user/web/$domain/public_html \
        $HOMEDIR/$user/web/$domain/public_shtml \
        $HOMEDIR/$user/web/$domain/document_errors \
        $HOMEDIR/$user/web/$domain/cgi-bin \
        $HOMEDIR/$user/web/$domain/private \
        $HOMEDIR/$user/web/$domain/stats \
        $HOMEDIR/$user/web/$domain/logs
    if [ ! -e "$HOMEDIR/$user/web/$domain/logs/$domain.log" ]; then
        ln -s /var/log/httpd/domains/$domain.error.log \
            $HOMEDIR/$user/web/$domain/logs/$domain.log
    fi
    if [ ! -e "$HOMEDIR/$user/web/$domain/logs/$domain.error.log" ]; then
        ln -s /var/log/httpd/domains/$domain.error.log \
            $HOMEDIR/$user/web/$domain/logs/$domain.error.log
    fi
    if [ -e "$WEBTPL/skel/document_errors/" ]; then
        cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
    fi
    chmod 551 $HOMEDIR/$user/web/$domain
    chmod 751 $HOMEDIR/$user/web/$domain/private
    chmod 751 $HOMEDIR/$user/web/$domain/cgi-bin
    chmod 751 $HOMEDIR/$user/web/$domain/public_html
    chmod 751 $HOMEDIR/$user/web/$domain/public_shtml
    chmod 751 $HOMEDIR/$user/web/$domain/document_errors
    chmod -f -R 775 $HOMEDIR/$user/web/$domain/document_errors/*
    chmod 551 $HOMEDIR/$user/web/$domain/stats
    chmod 551 $HOMEDIR/$user/web/$domain/logs
    chmod 640 /var/log/httpd/domains/$domain.*

    chown $user:$user $HOMEDIR/$user/web/$domain
    chown $user:$user $HOMEDIR/$user/web/$domain/private
    chown $user:$user $HOMEDIR/$user/web/$domain/cgi-bin
    chown $user:$user $HOMEDIR/$user/web/$domain/public_html
    chown $user:$user $HOMEDIR/$user/web/$domain/public_shtml
    chown -R $user:$user $HOMEDIR/$user/web/$domain/document_errors
    chown root:$user /var/log/httpd/domains/$domain.*
    chown root:apache $conf

    # Parsing domain values
    domain_idn=$(idn -t --quiet -a "$domain")
    get_domain_values 'web'

    # Preparing domain values for the template substitution
    upd_web_domain_values

    # Adding domain to the tmp_httpd.conf
    tpl_file="$WEBTPL/apache_$TPL.tpl"
    conf="$HOMEDIR/$user/conf/web/tmp_httpd.conf"
    add_web_config
    chown root:apache $conf
    chmod 640 $conf

    # Running template trigger
    if [ -x $WEBTPL/apache_$TPL.sh ]; then
        $WEBTPL/apache_$TPL.sh $user $domain $ip $HOMEDIR $docroot
    fi

    # Checking aliases
    if [ ! -z "$ALIAS" ]; then
        aliases=$(echo "$ALIAS"|tr ',' '\n'| wc -l)
        user_aliases=$((user_aliases + aliases))
    fi

    # Checking stats
    if [ ! -z "$STATS" ]; then
        cat $WEBTPL/$STATS.tpl |\
            sed -e "s/%ip%/$ip/g" \
                -e "s/%web_port%/$WEB_PORT/g" \
                -e "s/%web_ssl_port%/$WEB_SSL_PORT/g" \
                -e "s/%proxy_port%/$PROXY_PORT/g" \
                -e "s/%proxy_ssl_port%/$PROXY_SSL_PORT/g" \
                -e "s/%domain_idn%/$domain_idn/g" \
                -e "s/%domain%/$domain/g" \
                -e "s/%user%/$user/g" \
                -e "s/%home%/${HOMEDIR////\/}/g" \
                -e "s/%alias%/${aliases//,/ }/g" \
                -e "s/%alias_idn%/${aliases_idn//,/ }/g" \
                > $HOMEDIR/$user/conf/web/$STATS.$domain.conf

        stats_string="$BIN/v_update_web_domain_stat $user $domain"
        check_stats_pipe=$(grep "$stats_string" $V_QUEUE/stats.pipe)
        if [ -z "$check_stats_pipe" ]; then
            echo "$stats_string" >> $V_QUEUE/stats.pipe
        fi

        if [ ! -z "$STATS_USER" ]; then
            # Definining statistic dir
            stats_dir="$HOMEDIR/$user/web/$domain/stats"

            # Adding htaccess file
            echo "AuthUserFile $stats_dir/.htpasswd" > $stats_dir/.htaccess
            echo "AuthName \"Web Statistics\"" >> $stats_dir/.htaccess
            echo "AuthType Basic" >> $stats_dir/.htaccess
            echo "Require valid-user" >> $stats_dir/.htaccess

            # Generating htaccess user and password
            rm -f $stats_dir/.htpasswd
            htpasswd -bc $stats_dir/.htpasswd "$STATS_USER" "$STATS_CRYPT" \
                &>/dev/null
        fi
    fi

    # Checking ssl
    if [ "$SSL" = 'yes' ]; then
        # Adding domain to the shttpd.conf
        conf="$HOMEDIR/$user/conf/web/tmp_shttpd.conf"
        tpl_file="$WEBTPL/apache_$TPL.stpl"
        add_web_config
        chown root:apache $conf
        chmod 640 $conf

        cp -f $USER_DATA/ssl/$domain.crt \
            $HOMEDIR/$user/conf/web/ssl.$domain.crt
        cp -f $USER_DATA/ssl/$domain.key \
            $HOMEDIR/$user/conf/web/ssl.$domain.key
        cp -f $USER_DATA/ssl/$domain.pem \
            $HOMEDIR/$user/conf/web/ssl.$domain.pem
        if [ -e "$USER_DATA/ssl/$domain.ca" ]; then
            cp -f $USER_DATA/ssl/$domain.ca \
                $HOMEDIR/$user/conf/web/ssl.$domain.ca
        fi

        # Running template trigger
        if [ -x $WEBTPL/apache_$TPL.sh ]; then
            $WEBTPL/apache_$TPL.sh $user $domain $ip $HOMEDIR $sdocroot
        fi

        user_ssl=$((user_ssl + 1))
        ssl_change='yes'
    fi

    # Checking nginx
    if [ ! -z "$NGINX" ]; then
        tpl_file="$WEBTPL/ngingx_$NGINX.tpl"
        conf="$HOMEDIR/$user/conf/web/tmp_nginx.conf"
        add_web_config
        chown root:nginx $conf
        chmod 640 $conf

        if [ "$SSL" = 'yes' ]; then
            tpl_file="$WEBTPL/ngingx_$NGINX.stpl"
            conf="$HOMEDIR/$user/conf/web/tmp_snginx.conf"
            add_web_config
            chown root:nginx $conf
            chmod 640 $conf
        fi
	ngix_change='yes'
    fi
    if [ "$SUSPENDED" = 'yes' ]; then
        suspended_web=$((suspended_web + 1))
    fi
    user_domains=$((user_domains + 1))
done

# Renaming tmp config
tmp_conf="$HOMEDIR/$user/conf/web/tmp_httpd.conf"
conf="$HOMEDIR/$user/conf/web/httpd.conf"
if [ -e "$tmp_conf" ]; then
    mv $tmp_conf $conf
fi

# Checking include in main httpd.conf
main_conf='/etc/httpd/conf.d/vesta.conf'
main_conf_check=$(grep "$conf" $main_conf )
if [ ! -z "$domain" ] && [ -z "$main_conf_check" ]; then
    echo "Include $conf" >>$main_conf
fi

# Checking ssl 
if [ "$ssl_change" = 'yes' ]; then
    tmp_conf="$HOMEDIR/$user/conf/web/tmp_shttpd.conf"
    conf="$HOMEDIR/$user/conf/web/shttpd.conf"
    mv $tmp_conf $conf

    # Checking include in main httpd.conf
    main_conf_check=$(grep "$conf" $main_conf )
    if [ -z "$main_conf_check" ]; then
        echo "Include $conf" >>$main_conf
    fi
fi

# Checking nginx
if [ "$ngix_change" = 'yes' ]; then
    nginx_conf='/etc/nginx/conf.d/vesta_users.conf'
    tmp_conf="$HOMEDIR/$user/conf/web/tmp_nginx.conf"
    conf="$HOMEDIR/$user/conf/web/nginx.conf"
    mv $tmp_conf $conf

    nginx_conf_check=$(grep "$conf" $nginx_conf )
    if [ -z "$nginx_conf_check" ]; then
        echo "include $conf;" >>$nginx_conf
    fi

    # Checking ssl for nginx
    if [ "$ssl_change" = 'yes' ]; then
        tmp_conf="$HOMEDIR/$user/conf/web/tmp_snginx.conf"
        conf="$HOMEDIR/$user/conf/web/snginx.conf"
        mv $tmp_conf $conf
        nginx_conf_check=$(grep "$conf" $nginx_conf )
        if [ -z "$nginx_conf_check" ]; then
            echo "include $conf;" >>$nginx_conf
        fi
    fi
fi

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

# Updating counters
update_user_value "$user" '$SUSPENDED_WEB' "$suspended_web"
update_user_value "$user" '$U_WEB_DOMAINS' "$user_domains"
update_user_value "$user" '$U_WEB_SSL' "$user_ssl"
update_user_value "$user" '$U_WEB_ALIASES' "$user_aliases"

# Restart web server
$BIN/v_restart_web "$EVENT"

# Logging
log_event "$OK" "$EVENT"

exit
