#!/bin/bash
# info: add system user
# options: user password email [package] [fname] [lname]
#
# The function creates new user account.


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

# Argument defenition
user=$1
password=$2
email=$3
package=${4-default}
fname=$5
lname=$6

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

# Hiding password
A2='******'
EVENT="DATE='$DATE' TIME='$TIME' CMD='$SCRIPT' A1='$A1' A2='$A2' A3='$A3'"
EVENT="$EVENT A4='$A4' A5='$A5' A6='$A6' A7='$A7' A8='$A8' A9='$A9'"

is_user_free() {
    check_sysuser=$(cut -f 1 -d : /etc/passwd | grep -w "$user" )
    if [ ! -z "$check_sysuser" ] || [ -e "$USER_DATA" ]; then
        echo "Error: user $user exist"
        log_event "$E_EXISTS" "$EVENT"
        exit $E_EXISTS
    fi
}


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

check_args '3' "$#" 'user password email [package] [fname] [lname]'
validate_format 'user' 'password' 'email' 'package'
if [ ! -z "$fname" ]; then
    validate_format 'fname' 'lname'
fi

is_user_free "$user"
is_package_valid


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

# Parsing package data
pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |grep -v DATE)

# Checking shell
shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
shell=$(/usr/bin/chsh --list-shells | grep -w "$shell_conf" |head -n1)

# Adding user
/usr/sbin/adduser "$user" -s "$shell" -c "$email" -m -d "$HOMEDIR/$user"

# Adding password
echo "$password" | /usr/bin/passwd "$user" --stdin &>/dev/null

# Building directory tree
mkdir $HOMEDIR/$user/conf

if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
    mkdir $HOMEDIR/$user/conf/web
    mkdir $HOMEDIR/$user/web
    mkdir $HOMEDIR/$user/tmp
    chmod 751 $HOMEDIR/$user/conf/web
    chmod 751 $HOMEDIR/$user/web
    chmod 777 $HOMEDIR/$user/tmp
    chown $user:$user $HOMEDIR/$user/web
fi

if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
    mkdir $HOMEDIR/$user/conf/mail
    mkdir $HOMEDIR/$user/mail
    chmod 751 $HOMEDIR/$user/mail
    chmod 751 $HOMEDIR/$user/conf/mail
fi

if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
    mkdir $HOMEDIR/$user/conf/dns
    chmod 751 $HOMEDIR/$user/conf/dns
fi 


# Set permissions
chmod -R a+x $HOMEDIR/$user

# Checking quota
if [ ! -z "$DISK_QUOTA" ] && [ "$DISK_QUOTA" != 'no' ]; then
    DISK_QUOTA=$(echo "$pkg_data" | grep 'DISK_QUOTA' | cut -f 2 -d \')
    #$BIN/v_add_user_quota "$user" "$DISK_QUOTA"
fi


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

# Adding user dir
mkdir $USER_DATA
chmod 770 $USER_DATA

# Creating configuration files and pipes
touch $USER_DATA/backup.conf
chmod 660 $USER_DATA/backup.conf
touch $USER_DATA/history.log
chmod 660 $USER_DATA/history.log
touch $USER_DATA/stats.log
chmod 660 $USER_DATA/stats.log

echo "v_update_user_disk $user" >> $VESTA/data/queue/disk.pipe

if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
    mkdir $USER_DATA/ssl
    chmod 770 $USER_DATA/ssl
    touch $USER_DATA/web.conf
    chmod 660 $USER_DATA/web.conf
    echo "$BIN/v_update_web_domains_traff $user" \
        >> $VESTA/data/queue/traffic.pipe
    echo "v_update_web_domains_disk $user" >> $VESTA/data/queue/disk.pipe
fi

if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
    mkdir $USER_DATA/dns
    chmod 770 $USER_DATA/dns
    touch $USER_DATA/dns.conf
    chmod 660 $USER_DATA/dns.conf
fi

if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
    mkdir $USER_DATA/mail
    chmod 770 $USER_DATA/mail
    touch $USER_DATA/mail.conf
    chmod 660 $USER_DATA/mail.conf
    echo "v_update_mail_domains_disk $user" >> $VESTA/data/queue/disk.pipe
fi

if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
    touch $USER_DATA/db.conf
    chmod 660 $USER_DATA/db.conf
    echo "v_update_databases_disk $user" >> $VESTA/data/queue/disk.pipe
fi

if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
    touch $USER_DATA/cron.conf
    chmod 660 $USER_DATA/cron.conf
fi

# Filling user config
if [ "$user" != 'admin' ]; then
    ip_avail=$($BIN/v_list_user_ips admin plain |grep -w shared|wc -l)
    u_users=0
else
    ip_avail=0
    u_users=1
fi

echo "FNAME='$fname'
LNAME='$lname'
PACKAGE='$package'
$pkg_data
CONTACT='$email'
CRON_REPORTS='yes'
MD5='$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow)'
RKEY='$(gen_password)'
SUSPENDED='no'
SUSPENDED_USERS='0'
SUSPENDED_WEB='0'
SUSPENDED_DNS='0'
SUSPENDED_MAIL='0'
SUSPENDED_DB='0'
SUSPENDED_CRON='0'
IP_AVAIL='$ip_avail'
IP_OWNED='0'
U_USERS='$u_users'
U_DISK='0'
U_DISK_DIRS='0'
U_DISK_WEB='0'
U_DISK_MAIL='0'
U_DISK_DB='0'
U_BANDWIDTH='0'
U_WEB_DOMAINS='0'
U_WEB_SSL='0'
U_WEB_ALIASES='0'
U_DNS_DOMAINS='0'
U_DNS_RECORDS='0'
U_MAIL_DOMAINS='0'
U_MAIL_DKIM='0'
U_MAIL_ACCOUNTS='0'
U_DATABASES='0'
U_CRON_JOBS='0'
U_BACKUPS='0'
TIME='$TIME'
DATE='$DATE'" > $USER_DATA/user.conf
chmod 660 $USER_DATA/user.conf

# Updating admin counter
if [ "$user" != 'admin' ]; then
    increase_user_value 'admin' '$U_USERS'
fi

# Logging
log_event "$OK" "$EVENT"

exit
